fix(session): let the person answer the cli and choose the working directory - #21
Merged
Conversation
…rectory 窓は開き部屋ソケットも立ったが、セッションが CLI の信頼確認プロンプトで 止まり先へ進めなかった。原因は二つ。 一つ目、セッションへ入力する経路が無かった。write_pty は Rust 側に存在し invoke_handler にも登録されていたが、フロントエンドはどれも呼んでおらず、 PTY は出力専用の一方通行だった。Claude Code はフォルダごとに初回の信頼確認を 出すため、この経路が無い限りどの作業ディレクトリでもセッションは起動せず、 部屋が立ち上がること自体が構造的に不可能だった。 診断面にセッションへの入力欄と Enter / ↑ / ↓ / Esc / Ctrl+C を追加した。 セッション起動時に診断面を自動で開く。最初に出るのが質問である以上、答えを 運ぶ面が一緒に開いていないと意味がないため。 信頼確認をアプリ側で自動的に答えることはしない。セキュリティ上の確認であり 判断は人間が行う。アプリが負うのは人間が答えられる経路を用意することであって、 代わりに答えることではない。 二つ目、作業ディレクトリがアプリ自身のプロセス cwd になっていた。tab.cwd が None のとき std::env::current_dir() へフォールバックしており、tauri dev では それが src-tauri/ になる。セッションは src-tauri/ で起動し .mcp.json もそこへ 書かれた。作業ディレクトリはユーザーの選択であって、アプリのプロセスがたまたま 居た場所ではない。 暗黙のフォールバックを削除し、未設定ならエラーで止めるようにした。あわせて 画面に入力欄を出し、初回はホームディレクトリを prefill する。prefill であって 既定値ではない。画面に出ていないディレクトリでセッションを起動しない。値は 起動成功時にタブ設定として保存する。 実行で生成される .mcp.json を .gitignore へ追加した。 #20
smileygames
commented
Aug 21, 2026
smileygames
left a comment
Member
Author
There was a problem hiding this comment.
AI self-review (execution_mode = auto)
受け入れ条件の照合(issue #20 完了条件)
| 条件 | 結果 | 根拠 |
|---|---|---|
| 診断面からセッションへ文字と主要キーを送れる | 実装済 / 実機未確認 | write_pty を呼ぶ入力欄と Enter / ↑ / ↓ / Esc / Ctrl+C。制御シーケンスは String.fromCharCode で構成 |
| 信頼確認に人間が答えてセッションを先へ進められる | 実装済 / 実機未確認 | 上記の経路。起動時に診断面を自動で開く |
| 作業ディレクトリが表示・変更・保持される | 実装済 / 実機未確認 | #launcher の入力欄、起動成功時に save_config |
| アプリのプロセス cwd が暗黙に使われない | pass | std::env::current_dir() フォールバックを削除し、未設定はエラー |
制約の照合
- 会話面にターミナルエミュレータを置かない: pass。入力路は診断面側。会話面は
room-messageのみ。 - 信頼確認をアプリが自動で答えない: pass。自動応答の実装は無く、人間が答える経路のみ。
- 新しい依存を増やさない: pass。ディレクトリ選択はテキスト入力で、ダイアログプラグインを追加していない。
- 作業ディレクトリは prefill であって既定値ではない: pass。
home_dirは UI の prefill にのみ使い、Rust 側は未設定を受け付けない。
検証
- CI 全ステップ pass(
npm run build/sidecar:check/sidecar:test/cargo check/cargo test8 pass) - 制御シーケンスをエスケープ表記で書かなかったのは、この経路で一度バックスラッシュを落とした実績があるため(#19 の自己レビュー参照)。
String.fromCharCodeは転送で壊れない。
未検証として残るもの
診断面からの入力が実際に CLI へ届くこと、信頼確認を通過してセッションが常駐すること、その先の往復(#14)。本 PR の変更はいずれも実機でしか確かめられない層にある。
scope deviation
なし。#20 は原因二つを一つの issue として立てており、両方を本 PR で扱っている。
次の期待
execution_mode = auto のため人間レビューゲートなし。CI green(CI pass / check pass 1m43s)。self-review pass により squash merge へ進む。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #20
#18 の修正で窓は開き、部屋ソケットも
127.0.0.1:53792で待受、.mcp.jsonの登録も成功した。詰まったのはその次。原因 1: セッションへ入力する経路が無い
write_ptyは Rust 側に存在しinvoke_handlerにも登録されていたが、フロントエンドはどれも呼んでおらず、PTY は出力専用の一方通行だった。Claude Code はフォルダごとに初回の信頼確認を出すため、この経路が無い限りどの作業ディレクトリでもセッションは起動しない。部屋が立ち上がること自体が構造的に不可能な状態だった。
診断面にセッションへの入力欄と Enter / ↑ / ↓ / Esc / Ctrl+C を追加。セッション起動時に診断面を自動で開くようにした(最初に出るのが質問である以上、答えを運ぶ面が一緒に開いていないと意味がない)。
信頼確認をアプリ側で自動的に答えることはしない。 セキュリティ上の確認であり、判断は人間が行う。アプリが負うのは人間が答えられる経路を用意することであって、代わりに答えることではない。
原因 2: 作業ディレクトリがアプリ自身の cwd になる
tab.cwdがNoneのときstd::env::current_dir()へフォールバックしていた。tauri devではそれがsrc-tauri/になるため、セッションはsrc-tauri/で起動し.mcp.jsonもそこへ書かれた。暗黙のフォールバックを削除し、未設定ならエラーで止める。画面に作業ディレクトリの入力欄を出し、初回はホームディレクトリを prefill する。prefill であって既定値ではない——画面に出ていないディレクトリでセッションを起動しない。値は起動成功時にタブ設定として保存する。
検証
npm run build/npm run sidecar:check/npm run sidecar:testcargo check --target x86_64-pc-windows-gnuString.fromCharCodeで組み立てている。エスケープ表記を書かないのは、この経路で一度バックスラッシュを落とした実績があるため。実機での往復(#14)は引き続き未確認。本 PR は信頼確認に答えられるようにするところまで。
release type
patch — 起動不能の修正。仕様上の機能追加ではない。