Skip to content

タスク指示書: CLI provider の長い prompt を opt-in 一時ファイル参照方式で渡せるようにする #783

@nrslib

Description

@nrslib

タスク指示書: CLI provider の長い prompt を opt-in 一時ファイル参照方式で渡せるようにする

背景

Windows の一部ターミナル環境で、Cursor provider などの CLI provider が長い prompt を command line argument として渡すことで、コマンドライン文字数制限に当たり起動に失敗する可能性がある。

現状確認済みの事実として、少なくとも Cursor provider は systemPrompt + prompt を結合した長い文字列を cursor-agent の argv に直接渡している。これを、ユーザーが明示的に有効化した場合のみ、一時ファイルに書き出して短い参照指示だけを argv に渡す方式へ切り替えられるようにする。

ゴール

長い prompt を argv に直接載せる CLI provider について、opt-in 設定で一時ファイル参照方式を使えるように実装する。特に Cursor provider で動作することを必須とする。

明示要件

  • 一時ファイル方式を実装する。
  • 一時ファイル方式はデフォルト有効にしない。
  • Windows の一部ターミナルだけの問題なので、オプショナルな opt-in として提供する。
  • 一時ファイル方式では、長い prompt 本文をファイルへ書き、CLI に渡す argv には「そのファイルを参照せよ」という短い指示を渡す。
  • 実装後、該当 provider のテストを追加・更新する。

参照資料

Planner は最初に以下を実際に開いて確認すること。

  • src/infra/cursor/client.ts
  • src/__tests__/cursor-client.test.ts
  • src/shared/utils/spawn.ts
  • src/infra/claude-headless/client.ts
  • src/infra/kiro/client.ts
  • src/infra/copilot/client.ts
  • provider 設定型・設定読み込み・provider options の定義箇所
  • 既存の一時ファイル作成・cleanup パターンがあればその実装箇所

作業項目

優先度: 高

src/infra/cursor/client.ts

  • Cursor provider に opt-in の一時ファイル参照方式を実装する。
  • 既存の通常モードでは、現行どおり prompt 本文を argv に渡す挙動を維持する。
  • opt-in が有効な場合のみ、以下の挙動に切り替える。
    • systemPromptprompt を結合した完全な prompt 本文を一時ファイルに書く。
    • cursor-agent の argv には prompt 本文を直接渡さず、ファイルを読むよう指示する短い prompt を渡す。
    • 例: Read the full task instruction from this file and follow it exactly: <path>
    • 実行完了後、作成した一時ファイルを削除する。
    • provider 実行が失敗した場合も、一時ファイル cleanup を行う。
  • 一時ファイルの配置場所は、Cursor が確実に読める場所をコード調査で判断して決めること。--workspace 指定との関係を確認する。
  • 一時ファイル名は衝突しにくく、実行ごとに分離される形にする。

provider 設定型・設定読み込み

  • Cursor provider の設定または provider options に、一時ファイル参照方式を opt-in できる設定項目を追加する。
  • 設定名は既存の provider option 命名規約に合わせる。
  • デフォルト値は無効にする。
  • 設定が CLI entrypoint、workflow config、provider factory などを経由して Cursor provider まで伝搬する場合は、必要な配線をすべて実装する。
  • 設定スキーマ、型定義、バリデーション、ドキュメント生成対象がある場合は整合させる。

src/__tests__/cursor-client.test.ts

  • 既存の「prompt が argv に渡される」テストを、通常モードの契約として維持・更新する。
  • opt-in 有効時のテストを追加する。
    • argv に完全な長い prompt 本文が含まれないこと。
    • argv には一時ファイルを読む短い指示が含まれること。
    • 一時ファイルに完全な prompt 本文が書かれること。
    • provider 実行後に一時ファイルが削除されること。
    • provider 実行が失敗しても cleanup されること。
  • ファイルシステム操作を伴うため、既存テストの mock パターンを確認し、同じ流儀で実装する。

優先度: 中

src/infra/claude-headless/client.ts

  • 長い prompt を argv に直接渡しているかを確認する。
  • Cursor と同じ opt-in 設定方式を適用できる場合は、一時ファイル参照方式を実装する。
  • CLI のファイル参照指示で成立しない技術的理由がある場合は、Cursor のみ実装対象とし、その理由を計画レポートに明記する。

src/infra/kiro/client.ts

  • 長い prompt を argv に直接渡しているかを確認する。
  • Cursor と同じ opt-in 設定方式を適用できる場合は、一時ファイル参照方式を実装する。
  • 適用しない場合は、技術的理由を計画レポートに明記する。

src/infra/copilot/client.ts

  • 長い prompt を argv に直接渡しているかを確認する。
  • Cursor と同じ opt-in 設定方式を適用できる場合は、一時ファイル参照方式を実装する。
  • 適用しない場合は、技術的理由を計画レポートに明記する。

関連テスト

  • Cursor 以外にも実装した provider がある場合、それぞれ通常モードと opt-in 有効時のテストを追加・更新する。
  • 新しい provider option が呼び出しチェーンを通る場合、必要に応じて統合テストを追加する。

優先度: 低

ドキュメント・設定例

  • 既存の provider options 設定ドキュメントがある場合のみ、追加した opt-in 設定を追記する。
  • Windows の一部ターミナルで command line length 制限に当たる場合に使う設定であることを簡潔に記載する。

実装上の注意

  • 一時ファイル方式は opt-in にする。デフォルト挙動を変えない。
  • prompt 本文の内容は一時ファイル方式でも欠落・改変しない。
  • ファイル参照用の短い argv prompt は、元 prompt の代替ではなく、元 prompt 全文を読むための指示に限定する。
  • 一時ファイル cleanup は成功・失敗の両方で行う。
  • 新しい設定項目を追加する場合、型・バリデーション・設定読み込み・provider への受け渡しを漏らさない。
  • 既存の provider 実行エラー処理を不必要に変更しない。

確認方法

  • npm test -- cursor-client
  • 関連 provider を実装した場合は、それぞれの provider test を実行する。
  • npm test
  • npm run lint
  • npm run build

再現・検証観点

  • 通常モードでは、従来どおり prompt 本文が argv に渡される。
  • opt-in 有効時は、長い prompt 本文が argv に含まれない。
  • opt-in 有効時は、一時ファイルに完全な prompt 本文が保存される。
  • opt-in 有効時は、CLI に渡される prompt が一時ファイル参照指示になっている。
  • provider 実行後、一時ファイルが残らない。
  • provider 実行失敗時も、一時ファイルが残らない。

Open Questions

  • 追加する opt-in 設定項目を置くべき正確な設定階層と命名は、既存の provider option 実装を確認して決定すること。
  • Cursor 以外の CLI provider がファイル参照指示で実用可能かは、各 provider の既存実装と実行前提を確認して判断すること。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions