Skip to content

検索結果の軽量出力フォーマット (--format compact) #120

@Kewton

Description

@Kewton

概要

全文検索結果をLLMプロンプト向けに最適化した軽量フォーマット --format compact を追加する。

背景・課題

search "fullscreen" はuseFullscreen.tsやMarkdownEditor.tsx等、Issue #301に必要なファイルを正しく発見している。検索機能自体は有効。

しかし --format json の出力が16KBに達し、LLMプロンプトに渡すと逆効果(P6で変更0件の主因)。

現在の出力(1件あたり)

{
  "body": "/**\n * useFullscreen Hook\n *\n * Provides fullscreen functionality with Fullscreen API support\n * and CSS fallback for browsers without API support (e.g., iOS Safari).\n * ...(数百行)",
  "heading": null,
  "kind": "code",
  "metadata": {"language": "typescript", "symbols": [...]},
  "path": "src/hooks/useFullscreen.ts",
  "score": 42.5,
  "section_range": {"end": 328, "start": 1},
  "snippet": "..."
}

問題:

  • body にファイル全文が含まれる(数百行)
  • metadata, section_range, score 等のメタデータがLLMには不要
  • 5件でも16KB、20件なら82KBに膨張

既存フォーマットとの比較

フォーマット 内容 LLM向け適性
--format json 全メタデータ+全文 冗長すぎる
--format path ファイルパスのみ 情報不足(中身がない)
--format human 人間向け表示 構造化されていない
--format compact パス:行番号 + 該当行 LLMに最適

提案

commandindexdev search "fullscreen" --format compact --limit 5

期待される出力:

src/hooks/useFullscreen.ts:185  export function useFullscreen(options: UseFullscreenOptions)
src/components/worktree/MarkdownEditor.tsx:42  const { isFullscreen, toggleFullscreen } = useFullscreen({
src/config/z-index.ts:18  MAXIMIZED_EDITOR: 55,
src/hooks/useSwipeGesture.ts:95  export function useSwipeGesture(options: UseSwipeGestureOptions)
tests/unit/hooks/useFullscreen.test.ts:12  import { useFullscreen } from '@/hooks/useFullscreen';

設計方針

  • 1行1結果: パス:行番号\tマッチ行の内容
  • grepライクなシンプル出力
  • JSONメタデータなし
  • snippet-linesオプションで前後N行を表示可能
  • 推定サイズ: 5件で500バイト程度(jsonの1/30以下)

期待効果

  • 検索結果のプロンプトサイズを16KB → 数百バイトに削減
  • searchの有用性(正しいファイル発見力)を維持しつつ、LLMコンテキストの圧迫を回避
  • --format path(パスのみ)と --format json(全情報)の中間を提供

優先度

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

関連

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