Files
OmniRoute/open-sse/services/claudeCodeCompatible.ts
Diego Rodrigues de Sa e Souza b2efa35982 fix(sse): CC bridge loses OpenAI-format image input (OpenCode/Kilo/Cline → AgentRouter) (#7888)
* fix(sse): convert OpenAI media parts to Claude blocks in the CC bridge

OpenAI-format clients (OpenCode/Kilo/Cline) reach the Claude-Code-compatible
bridge untranslated: chatCore skips the OpenAI->Claude translator when
sourceFormat is OPENAI, so image_url / AI-SDK image / file parts either went
upstream in OpenAI shape (silently ignored) or were dropped by the text-only
extraction, and media-only user turns were removed by hasValidContent().

- claudeCodeCompatible: convertOpenAiMediaBlock() converts image_url
  (base64 + remote), AI-SDK string image and file parts (pdf->document,
  image mime->image) to Claude blocks in both bridge paths; Claude-native
  blocks pass through unchanged and the text-only wire image is preserved.
- claudeHelper: hasValidContent() now counts image/document blocks so
  media-only user turns are not silently deleted.

Reported-by: beingshafin
Refs #7777

* refactor(sse): extract CC media-block conversion to ccOpenAiMediaBlocks.ts

claudeCodeCompatible.ts is frozen at 1202 lines by check:file-size; the #7777
helpers pushed it to 1291. Move them to a dedicated module, no behavior change.

* test(quality): register cc-bridge-openai-image-7777 test in stryker tap.testFiles
2026-07-20 15:56:40 -03:00

38 KiB