Skip to content

context コマンドにファイル内容を含むオプション (--include-content) #119

@Kewton

Description

@Kewton

概要

context コマンドの出力にファイル内容(コード本体)を含めるオプションを追加する。

背景・課題

現在の context コマンドは依存関係のメタデータ(パス、シンボル名、スコア)のみを出力し、ファイルの中身は含まれない

現在の出力(推定トークン119)

{
  "target_files": ["src/components/worktree/TerminalDisplay.tsx"],
  "context": [
    {"path": "@/hooks/useTerminalScroll", "relation": "import_dependency", "score": 0.9, "symbols": ["useTerminalScroll"]}
  ],
  "summary": {"estimated_tokens": 119}
}

問題

  • メタデータだけでは「useFullscreenをどう使うか」「MarkdownEditorがフルスクリーンをどう実装しているか」がわからない
  • LLMは結局 file.read で全てのファイルを読みに行く必要がある
  • contextがfile.readの代替にならないため、ツール呼び出し回数の削減効果がない

検証データ

8パターンのテストで、CommandIndex contextを提供したP2でもfile.readが13回発行された。contextが提供したメタデータ119トークンではfile.readの代替にならず、LLMは全ファイルを自分で読みに行った。

提案

commandindexdev context src/hooks/useFullscreen.ts --include-content --max-tokens 4000

期待される出力:

{
  "target_files": ["src/hooks/useFullscreen.ts"],
  "content": "export function useFullscreen({ elementRef, onEnter, onExit }) {\n  const [isFullscreen, setIsFullscreen] = useState(false);\n  ...\n}",
  "context": [
    {
      "path": "src/components/worktree/MarkdownEditor.tsx",
      "relation": "importer",
      "content_snippet": "const { isFullscreen, toggleFullscreen } = useFullscreen({ elementRef: editorRef, ... });"
    }
  ],
  "summary": {"estimated_tokens": 3200}
}

ポイント

  • ターゲットファイルのコード本体を含む
  • 関連ファイル(importerを含む)の該当箇所のスニペットを含む
  • --max-tokens でトークン量を制御(関連度順に切り詰め)
  • これにより、LLMが file.read を発行する必要が大幅に減る

期待効果

  • LLMの file.read 回数を実質的に削減(現在は代替にならない)
  • LLMプロンプトにコード本体を含めることで、file.editのold_string精度が向上
  • 「contextを使う意味」が初めて生まれる

優先度

高(実装難度: 中、期待効果: 高)

関連

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