Skip to content

fix(session): let the person answer the cli and choose the working directory - #21

Merged
smileygames merged 1 commit into
mainfrom
issue-20-session-input
Aug 21, 2026
Merged

fix(session): let the person answer the cli and choose the working directory#21
smileygames merged 1 commit into
mainfrom
issue-20-session-input

Conversation

@smileygames

Copy link
Copy Markdown
Member

Closes #20

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

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

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

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

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

診断面にセッションへの入力欄と Enter / ↑ / ↓ / Esc / Ctrl+C を追加。セッション起動時に診断面を自動で開くようにした(最初に出るのが質問である以上、答えを運ぶ面が一緒に開いていないと意味がない)。

信頼確認をアプリ側で自動的に答えることはしない。 セキュリティ上の確認であり、判断は人間が行う。アプリが負うのは人間が答えられる経路を用意することであって、代わりに答えることではない。

原因 2: 作業ディレクトリがアプリ自身の cwd になる

tab.cwdNone のとき std::env::current_dir() へフォールバックしていた。tauri dev ではそれが src-tauri/ になるため、セッションは src-tauri/ で起動し .mcp.json もそこへ書かれた。

暗黙のフォールバックを削除し、未設定ならエラーで止める。画面に作業ディレクトリの入力欄を出し、初回はホームディレクトリを prefill する。prefill であって既定値ではない——画面に出ていないディレクトリでセッションを起動しない。値は起動成功時にタブ設定として保存する。

検証

  • npm run build / npm run sidecar:check / npm run sidecar:test
  • cargo check --target x86_64-pc-windows-gnu
  • 制御シーケンス(Enter / 矢印 / Esc / Ctrl+C)は String.fromCharCode で組み立てている。エスケープ表記を書かないのは、この経路で一度バックスラッシュを落とした実績があるため。

実機での往復(#14)は引き続き未確認。本 PR は信頼確認に答えられるようにするところまで。

release type

patch — 起動不能の修正。仕様上の機能追加ではない。

…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 smileygames left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 test 8 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 へ進む。

@smileygames
smileygames merged commit 03b7306 into main Aug 21, 2026
2 checks passed
@smileygames
smileygames deleted the issue-20-session-input branch August 21, 2026 03:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

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

1 participant