Repository navigation
Fix: tmux に手元から attach し直した端末を SSH と誤判定して VS Code を開かない - #447
Conversation
SSH から立てた tmux サーバーのセッションへ手元の Mac の端末から attach し直すと、 ペインのシェルには作成時の SSH_CONNECTION と死んだ VSCODE_IPC_HOOK_CLI が残る。 editor open はペインの変数だけで SSH と判定し、print_command に落ちていた。 - tmux 内では、attach のたびに更新されるセッション環境の SSH_CONNECTION で判定する (-SSH_CONNECTION なら SSH でない。分からなければ従来どおりペインの変数) - _tmux_show_env を足し、値・消されている・分からないの 3 通りを返す - 接続できない VSCODE_IPC_HOOK_CLI は起動する code に渡さない (PATH に remote-cli が残る端末で code がそちらへ委譲して失敗するため) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0132TF57VoNwcda3qwVBmKYN
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | codex | REQUEST_CHANGES
SSH 判定と採用する IPC 接続先を整合させる修正が必要です。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | kiro | APPROVE
tmux 内で SSH 判定をセッション環境に切り替える修正と、死んだ VSCODE_IPC_HOOK_CLI を code に渡さない修正。実装・ドキュメント・テストが一致し、_detect_ssh のフォールバック(tmux 外・tmux 失敗時はペインのシェル変数)も従来挙動を保つ。基盤となる事実(tmux の既定 update-environment に SSH_CONNECTION が含まれる)も確認でき、critical/major の指摘は無し。
Remote-SSH の VS Code を開いたまま tmux を detach し、手元の端末から attach し直すと、 ペインの VSCODE_IPC_HOOK_CLI は以前のリモートクライアントへ繋がって生きている。 SSH 判定だけがローカルになり、ネスト authority の無い URI がそのクライアントへ 送られてホスト上のコンテナを開けなかった。 - SSH 判定と IPC の採用元を、同じセッション環境の SSH_CONNECTION の読みで決める - ペインに SSH_* が残るのにセッション環境が -SSH_CONNECTION なら、ペインの IPC は 採らず、セッション環境の値だけを試す。採れなければ code に渡さない Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0132TF57VoNwcda3qwVBmKYN
🔧 /ndf:fix サマリ | round 1 | commit ae96ee9対応件数: critical=0 / major=1 / minor=0(合計 1 件) |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | claude | REQUEST_CHANGES
手元から attach し直したペインで VSCODE_IPC_HOOK_CLI を外しても、PATH に残る Remote-SSH の remote-cli の code が選ばれるため、VS Code は開かず無言で終わります。起動するコマンドの解決まで含めて直してください。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | kiro | APPROVE
round 1 の major(SSH 判定と IPC 採用元の不整合)に対する ae96ee9 の修正を確認。detect_context が SSH_CONNECTION のセッション環境読み (tmux_ssh) を 1 回だけ取り、_detect_ssh と _pane_ipc_is_foreign の両方へ同じ値を渡すことで判定と IPC 採用元が整合する。foreign+ローカル再 attach 時は trust_current=False で以前の Remote-SSH の IPC を採らず、ipc_foreign で code にも渡さない。is_ssh=False のため _build_open_uri はネスト authority を組まずフラット URI を出す経路になり、launch へ落ちる。死んだソケットを code に渡さない挙動変更は CHANGELOG と docs に記載があり、print_command への誤 degrade も起きない。実装・ドキュメント・テスト(session-removed=local、session-value=ssh、tmux 失敗時のシェル fallback、live-remote IPC 無視、session IPC 採用)が一致。critical / major の指摘は無し。
手元から attach し直したペインや死んだソケットで VSCODE_IPC_HOOK_CLI を外すと、 PATH の先頭に残る Remote-SSH の remote-cli の code が選ばれ、IPC 無しでは何も 開かずに終わっていた。IPC を外すときは PATH から remote-cli を除いて手元の code を 探し、起動する code の env にも同じ PATH を渡す。見つからなければスキップする。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0132TF57VoNwcda3qwVBmKYN
🔧 /ndf:fix サマリ | round 2 | commit 5d2bda6対応件数: critical=0 / major=1 / minor=0(合計 1 件) |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 3 | claude | APPROVE
round 2 の major(IPC を外したときに PATH に残る remote-cli の code が選ばれる)への 5d2bda6 の修正を確認しました。IPC を外したときは remote-cli を除いた PATH で code を探し、起動する env にも同じ PATH を渡します(subprocess は env の PATH で実行ファイルを探します)。見つからなければ skip へ落ちます。死んだソケットの分岐も同じ扱いです。実装・CHANGELOG・environment-variables.md・テストは一致しています。critical / major の指摘はありません。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 3 | codex | REQUEST_CHANGES
ローカルから SSH へ再 attach する場合も、SSH 判定と採用する IPC 接続先を整合させてください。
いまのクライアントの SSH 状態(tmux のセッション環境の SSH_CONNECTION)が ペインのシェルの SSH 状態(SSH_* の有無)と食い違うときは、向きによらず、 ペインの VSCODE_IPC_HOOK_CLI はペインを作った以前のクライアントのものとして使わない。 セッション環境の IPC が生きていればそれを使い、無ければ IPC 無し(SSH なら コマンドの提示、手元なら remote-cli を除いた PATH で手元の code を起動)。 foreign の判定をこの対称な 1 つの判定(_client_changed)に置き換えた。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0132TF57VoNwcda3qwVBmKYN
🔧 /ndf:fix サマリ | round 3 | commit 0880c15対応件数: critical=0 / major=1 / minor=0(合計 1 件) |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 4 | codex | APPROVE
新規の critical / major 指摘はありません(判断根拠: Mission・Vision。通常の起動経路と再 attach 時の接続先の整合性を確認)。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 4 | kiro | APPROVE
round 3 の major(ローカル→SSH 再 attach でも SSH 判定と採用 IPC を整合させる)への 0880c15 の修正を確認。_client_changed は向きを問わず(current_is_ssh != pane_is_ssh)判定し、detect_context が tmux セッション環境の SSH_CONNECTION を 1 回だけ読んで _detect_ssh と trust_current の両方へ渡すため、SSH 判定と IPC 採用元が同じ読みで揃う。ローカル→SSH の両経路(セッション IPC があれば採用し launch、無ければ ipc_from_previous_client で IPC を外し is_ssh=True のまま print_command)が実装・テストと一致。tmux 外・tmux 失敗時は changed=False で従来挙動を保ち、生きたローカル IPC の誤 drop は起きない。変更範囲は opener.py / tests / CHANGELOG / environment-variables.md に限られ、余分な仕様変更は無い。critical / major の指摘は無し。
🔧 /ndf:fix サマリ | commit (なし)対応件数: critical=0 / major=0 / minor=0(合計 0 件) |
概要
macOS で
devbase editor openを実行すると、VS Code が開かずに次の表示で終わる場合がありました。原因
SSH(Remote-SSH)から立てた tmux サーバーのセッションに、手元の Mac の VS Code の端末から attach し直した状態で起きていました。
SSH_CONNECTION・SSH_CLIENT、接続を拒否するVSCODE_IPC_HOOK_CLI、PATHに Remote-SSH のremote-cli-SSH_CONNECTION・-VSCODE_IPC_HOOK_CLIdetect_contextは SSH かどうかをペインのシェルの変数だけで判定していたため、手元の端末なのに SSH と判定していました。変更
SSH_CONNECTIONを使う。SSH_CONNECTIONは tmux のupdate-environmentに既定で入っていて、attach のたびに更新される-SSH_CONNECTIONなら SSH ではないSSH_CONNECTION/SSH_CLIENT/SSH_TTYで判定する_tmux_show_envを足し、「値がある」「消されている」「分からない」の 3 通りを返す。_tmux_envはその上に載せ、振る舞いは変えないVSCODE_IPC_HOOK_CLIは、起動するcodeの環境から外す。デスクトップ版のcodeスクリプトは、この変数がありPATHにremote-cliがあるとそちらへ委譲するため、死んだソケットへ繋ぎに行って失敗するCHANGELOG.mdを更新テスト計画
env -u DEVBASE_ROOT uv run --locked pytest tests/ -q— 4119 passed, 20 skippeduvx ruff check --select=E9,F63,F7,F82 lib— All checks passedpython3 .github/scripts/proper_term_check.py— 語の一覧が無いため飛ばした(固有の語は差分を目で確認。テストの IP は文書用の192.0.2.x)detect_contextを呼び、is_ssh=False・decide_actionがlaunchになることを確認devbase editor openを実行し、VS Code が開くことを確かめる(マージ後に実機で)🤖 Generated with Claude Code
https://claude.ai/code/session_0132TF57VoNwcda3qwVBmKYN