Skip to content

fix(session): a launched cli cannot be answered and runs in the app's own directory #20

Description

@smileygames

観測(2026-08-21、#18 の修正後)

窓は開き、部屋ソケットは 127.0.0.1:53792 で待受、.mcp.json の登録も成功した。詰まったのはその次。

診断面に出た CLI の出力:

Accessing workspace: C:\Users\smile\Code\liplus-chat\src-tauri
Quick safety check: Is this a project you created or one you trust?
> 1. Yes, I trust this folder
  2. No, exit
Enter to confirm · Esc to cancel

セッションはこのプロンプトで停止し、先へ進めない。

根本原因 1: セッションへ入力する経路が無い

write_pty / resize_pty / kill_pty は Rust 側に存在し invoke_handler にも登録されているが、フロントエンドはどれも呼んでいない。PTY は出力専用の一方通行になっている。

Claude Code はフォルダごとに初回の信頼確認を出すため、この経路が無い限りどの作業ディレクトリでもセッションは起動しない。部屋が立ち上がることが構造的に不可能な状態。

信頼確認をアプリ側で自動的に答えてはならない。セキュリティ上の確認であり、判断は人間が行う。必要なのは自動応答ではなく、人間が答えられる経路。

根本原因 2: セッションの作業ディレクトリがアプリ自身の cwd になる

既定タブの cwdNone であり、start_session はその場合 std::env::current_dir() を使う。npm run tauri dev ではアプリのプロセス cwd が src-tauri/ になるため、セッションは src-tauri/ で起動し、.mcp.json もそこへ書かれた。

作業ディレクトリはユーザーの選択であって、アプリのプロセスがたまたま居た場所ではない。既定値として暗黙に使われると、上の観測のように「なぜ src-tauri なのか」が画面から読めない。

制約

  • 会話面にターミナルエミュレータを置かない。入力経路は診断面側に持たせる。表示は既に診断面にある。
  • 信頼確認・権限確認の類をアプリが自動で答えない。
  • 作業ディレクトリは画面から見え、変更でき、保存される。
  • 新しい依存の追加は最小限に留める。ディレクトリ選択ダイアログのためだけにプラグインを増やさない。

対象ファイル

  • src/main.ts, index.html, src/styles.css
  • src-tauri/src/config.rs — 作業ディレクトリの既定値
  • src-tauri/src/session.rs — cwd 未設定時の扱い
  • .gitignore — 実行で生成された .mcp.json
  • docs/0-requirements.md, README.md

完了条件

  • 診断面からセッションへ文字と主要キー(Enter / ↑ / ↓ / Esc / Ctrl+C)を送れる。
  • 信頼確認に人間が答えてセッションを先へ進められる。
  • 作業ディレクトリが画面に表示され、変更でき、次回起動時も保持される。
  • 未設定のままアプリのプロセス cwd が暗黙に使われることがない。

Metadata

Metadata

Assignees

No one assigned

    Labels

    bug動いていない、壊れているready本文が実装開始できる形まで収束している状態。ただし更新は継続可能

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions