Skip to content

fix(sidecar): spawn the sidecar without resolving tsx from the session directory #22

Description

@smileygames

観測(2026-08-21)

.mcp.json へ書き込む起動コマンドが cmd /c npx tsx <entry> になっている。npx はカレントディレクトリから tsx を解決するが、セッションの作業ディレクトリはユーザーのプロジェクトであり、そこに tsx は入っていない。

実測(作業ディレクトリ = C:\Users\smile\ClaudeCode):

$ npx --no-install tsx --version
npm error npx canceled due to missing packages and no YES option: ["tsx@4.23.12"]

tsx はグローバルにも入っていない。したがって npx はレジストリからの取得を試みる。サイドカーは CLI が非対話で spawn するプロセスであり、npx のインストール確認に答える経路が無いため、停止するか失敗する。どちらでもサイドカーは起動せず、部屋には誰も入らない。

tsx は liplus-chat 自身の node_modules には存在する(node_modules/tsx/dist/cli.mjs)。問題は在処ではなく、解決の起点がセッションの作業ディレクトリになっていること。

直し方

.mcp.json に書く起動コマンドを、解決を伴わない絶対パス指定にする。

  • command = node
  • args = [<liplus-chat>/node_modules/tsx/dist/cli.mjs, <sidecar entry>]

npx の解決も cmd /c によるシェル経由の PATHEXT 解決も不要になる。node.exe であり直接 spawn できるため、Windows 分岐そのものが消える。

sidecar/test/round-trip.test.mjs は既にこの形でサイドカーを spawn しており、CI で通っている。実装側だけが別の経路を使っていた。

制約

  • 解決の起点をセッションの作業ディレクトリに置かない。
  • runner の場所は環境変数で上書きできるようにする(LIPLUS_SIDECAR_ENTRY と同じ理由)。
  • 生成されるコマンドの形をテストで固定する。npx が再び現れたら落ちること。

対象ファイル

  • crates/mcp-config/src/lib.rs
  • src-tauri/src/session.rs

完了条件

  • .mcp.jsonliplus-chat-room エントリが node と絶対パスだけで構成される。
  • 生成コマンドの形がテストで固定されている。
  • セッションの作業ディレクトリに tsx が無くてもサイドカーが起動できる。

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