CommandCodeAI / CommandCodeAI/command-code
vision input fails
まだ誰も着手していません。
- 主要言語
- 言語のデータがありません
- スター
- 4k
- フォーク
- 350
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
Summary
Vision input currently works only through interactive TUI clipboard-paste and drag-drop (detectDroppedImageFile / detectClipboardImage → Jimp → base64 → {type:"image"}).
Environment
- cmd v0.38.2
- Installed via npm i -g command-code (mise)
- macOS (darwin)
- Model: Claude Sonnet 4 (claude-4-sonnet-20250514) — confirmed inputModalities: ["text","image"]
Reproduce
1. Put any JPEG or PNG in the working directory
2. Run:
cmd -p "Describe what you see in test.jpg"
Result: Model responds that it cannot visually inspect the image. Same result for PNG, GIF, WEBP.
Root cause (from inspecting dist/index.mjs)
- read_file returns text-only output for all binary files
src/tools/read-file/read-file.ts → formatOutput:
function formatOutput(e) {
if ("binary" === e.contentType)
return [...,Binary file: ${e.fileType}].join("\n");
// Model only ever sees: "Binary file: image/jpeg"
...
}
No {type: "image"} content block is ever created from a file read. The raw bytes are read into a Buffer but discarded. - @filepath references silently skip binary files
src/utils/file-references.ts → processFileReferences:
if ("binary" === i.contentType) continue; // images vanish entirely - AVIF and other modern formats fall through to the text path
getFileType uses a hardcoded extension map (Ib) with no .avif entry:
Ib = { ".png":"image/png", ".jpg":"image/jpeg", ".jpeg":"image/jpeg",
".gif":"image/gif", ".webp":"image/webp", ".svg":"image/svg+xml",
".bmp":"image/bmp", ".ico":"image/x-icon", ... }
// No .avif, .heic, .heif, .tiff
Since getFileType(".avif") returns "unknown", and isBinaryFile("unknown") returns false (it only matches known MIME values), AVIF files are read as UTF-8 text — producing garbled output rather than being flagged as binary. - Vision content blocks only exist in the TUI paste/drag-drop path
src/utils/clipboard-image.ts → detectDroppedImageFile → Jimp resize → base64 → {type:"image"}. This path is a React/Ink interactive handler and is not reachable in headless mode.
Expected Behavior
..
Actual Behavior
..
Steps to reproduce the issue
..
Command Code Version
latest
Operating System
macOS
Terminal/IDE
No response
Shell
No response
Additional context
No response
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
src/tools/read-file/read-file.ts と src/utils/file-references.ts から始め、次にそれらのバイナリ処理を src/utils/clipboard-image.ts と比較する。ローカル画像に対して cmd -p で再現し、ファイルがどのようにモデルに到達するかを追跡する。完了条件は、issue で名前が挙げられている形式を含むサポート対象の画像ファイルが、headless mode でテキストのみになったりスキップされたりせず、vision content を生成することである。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- typescript
- 領域
- ai, cli
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 静か
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 48/100