@codeproxy/core 0.1.13 → 0.1.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/translate/anthropic/index.ts","../src/utils/id.ts","../src/translate/anthropic/translateRequest.ts","../src/utils/json.ts","../src/translate/anthropic/translateResponse.ts","../src/utils/sse.ts","../src/translate/anthropic/translateStream.ts","../src/translate/openai/index.ts","../src/translate/openai/translateRequest.ts","../src/translate/openai/translateResponse.ts","../src/translate/openai/translateStream.ts","../src/tool-name-sanitizer.ts","../src/fetch.ts","../src/translate/index.ts"],"names":["data","SHELL_TOOL_NAMES","item","translateRequest","translateResponse","translateStream","mapTools","mapToolChoice","buildShortNameToNamespace","StreamTranslator","getThoughtSignature"],"mappings":"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","file":"index.cjs","sourcesContent":["export {\n translateRequest,\n type TranslateRequestOptions,\n type TranslateRequestResult,\n} from './translateRequest.js';\nexport {\n translateResponse,\n mapOutputItems,\n type TranslateResponseOptions,\n} from './translateResponse.js';\nexport {\n translateStream,\n translateAnthropicEvents,\n type TranslateStreamOptions,\n type ResponsesStreamMetadata,\n} from './translateStream.js';\n","/** Monotonic-ish id generator that works in both browser and Node. */\nlet counter = 0;\n\nexport function nowMs(): number {\n return Date.now();\n}\n\nexport function nextSeq(): number {\n counter = (counter + 1) & 0x7fffffff;\n return counter;\n}\n\nexport function makeId(prefix: string): string {\n return `${prefix}_${Date.now()}_${nextSeq()}`;\n}\n","/* eslint-disable max-lines */\n// ==============================================================================\n// Block Conversion\n// ==============================================================================\n\nimport type {\n ResponsesRequest,\n ResponsesInputItem,\n ResponsesTool,\n ResponsesToolChoice,\n ResponsesContentPart,\n} from '../../types/responses.js';\nimport type {\n AnthropicContentBlock,\n AnthropicMessage,\n AnthropicRequest,\n AnthropicTextBlock,\n AnthropicTool,\n AnthropicToolChoice,\n AnthropicThinkingConfig,\n AnthropicToolUseBlock,\n AnthropicToolResultBlock,\n} from '../../types/anthropic.js';\nimport { makeId } from '../../utils/id.js';\n\nconst ANTHROPIC_BUILTIN_TOOL_TYPES = new Set([\n 'web_search_20250305',\n 'computer_use_20250124',\n 'text_editor_20250124',\n 'bash_20250124',\n]);\n\n// ==============================================================================\n// Main Translation\n// ==============================================================================\n\nexport interface TranslateRequestOptions {\n /** Default max tokens when not provided (Anthropic requires `max_tokens`). */\n defaultMaxTokens?: number;\n /** Thinking budget overrides, keyed by effort. */\n reasoningBudgets?: Partial<Record<'minimal' | 'low' | 'medium' | 'high' | 'xhigh', number>>;\n}\n\nexport interface TranslateRequestResult {\n request: AnthropicRequest;\n hasPromptCache: boolean;\n}\n\nconst DEFAULT_REASONING_BUDGETS: Record<string, number> = {\n minimal: 1024,\n low: 4096,\n medium: 16384,\n high: 32768,\n xhigh: 65536,\n};\n\n/** Convert a Responses API request into an Anthropic Messages API request. */\nexport function translateRequest(\n data: ResponsesRequest,\n options: TranslateRequestOptions = {},\n): TranslateRequestResult {\n const model = data.model;\n const maxTokens =\n (typeof data.max_output_tokens === 'number' && data.max_output_tokens) ||\n (typeof data.max_tokens === 'number' && data.max_tokens) ||\n options.defaultMaxTokens ||\n 8192;\n\n let systemBlocks: AnthropicTextBlock[] = extractSystemBlocks(data.instructions);\n\n const built = buildMessages(data, systemBlocks);\n let messages = built.messages;\n let hasPromptCache = built.hasPromptCache;\n\n if (data.prompt_cache_key) {\n hasPromptCache = true;\n systemBlocks = markBlocksForCache(systemBlocks);\n messages = markCacheBreakpoint(messages);\n }\n\n messages = repairToolAdjacency(messages);\n messages = sanitizeMessages(messages);\n messages = ensureEndsWithUser(messages);\n\n if (data.prompt_cache_key) {\n messages = markCacheBreakpoint(messages);\n }\n\n const request: AnthropicRequest = {\n model,\n messages,\n max_tokens: maxTokens,\n };\n\n if (systemBlocks.length) {\n request.system = systemBlocks;\n }\n if (typeof data.temperature === 'number') {\n request.temperature = data.temperature;\n }\n if (typeof data.top_p === 'number') {\n request.top_p = data.top_p;\n }\n\n const tools = mapTools(data.tools || []);\n if (tools.length) {\n request.tools = tools;\n const toolChoice = mapToolChoice(data.tool_choice);\n if (toolChoice) {\n request.tool_choice = toolChoice;\n }\n }\n\n if (data.metadata && typeof data.metadata === 'object') {\n request.metadata = data.metadata;\n }\n\n const thinking = mapThinking(data, maxTokens, options.reasoningBudgets);\n if (thinking) {\n request.thinking = thinking;\n }\n\n return { request, hasPromptCache };\n}\n\nfunction extractSystemBlocks(instructions: ResponsesRequest['instructions']): AnthropicTextBlock[] {\n if (!instructions) {\n return [];\n }\n if (typeof instructions === 'string') {\n return [{ type: 'text', text: instructions }];\n }\n if (!Array.isArray(instructions)) {\n return [];\n }\n const blocks: AnthropicTextBlock[] = [];\n for (const item of instructions) {\n if (typeof item === 'string') {\n blocks.push({ type: 'text', text: item });\n } else if (item && typeof item === 'object') {\n const block: AnthropicTextBlock = {\n type: 'text',\n text: String(item.text ?? ''),\n };\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const cacheItem = item as { cache_control?: Record<string, unknown> };\n const cache = cacheItem.cache_control;\n if (cache) {\n block.cache_control = cache;\n }\n blocks.push(block);\n }\n }\n return blocks;\n}\n\ninterface BuildResult {\n messages: AnthropicMessage[];\n hasPromptCache: boolean;\n}\n\nfunction buildMessages(data: ResponsesRequest, systemBlocks: AnthropicTextBlock[]): BuildResult {\n const messages: AnthropicMessage[] = [];\n let hasPromptCache = false;\n\n let pendingToolUses: AnthropicToolUseBlock[] = [];\n let pendingToolResults: AnthropicToolResultBlock[] = [];\n\n const flushToolUses = () => {\n if (pendingToolUses.length) {\n messages.push({ role: 'assistant', content: pendingToolUses });\n pendingToolUses = [];\n }\n };\n const flushToolResults = () => {\n if (pendingToolResults.length) {\n messages.push({ role: 'user', content: pendingToolResults });\n pendingToolResults = [];\n }\n };\n const flushPending = () => {\n flushToolUses();\n flushToolResults();\n };\n\n const rawInput = data.input;\n const inputItems: ResponsesInputItem[] =\n typeof rawInput === 'string' ? [rawInput] : Array.isArray(rawInput) ? rawInput : [];\n\n for (const raw of inputItems) {\n if (typeof raw === 'string') {\n flushPending();\n messages.push({ role: 'user', content: [{ type: 'text', text: raw }] });\n continue;\n }\n if (!raw || typeof raw !== 'object') {\n continue;\n }\n const item: Record<string, unknown> = raw;\n const itemType: string = String(item.type || 'message');\n\n if (\n itemType === 'function_call_output' ||\n itemType === 'commandExecutionOutput' ||\n itemType === 'fileChangeOutput' ||\n itemType === 'custom_tool_call_output'\n ) {\n flushToolUses();\n const callId: string = String(item.call_id || item.id || makeId('call'));\n pendingToolResults.push({\n type: 'tool_result',\n tool_use_id: callId,\n content: extractToolOutputText(item),\n });\n continue;\n }\n\n if (\n itemType === 'function_call' ||\n itemType === 'commandExecution' ||\n itemType === 'local_shell_call' ||\n itemType === 'fileChange' ||\n itemType === 'custom_tool_call' ||\n itemType === 'web_search_call'\n ) {\n flushToolResults();\n const block = mapInputToolCall(item);\n if (block) {\n pendingToolUses.push(block);\n }\n continue;\n }\n\n if (itemType === 'reasoning') {\n flushPending();\n continue;\n }\n\n if (itemType === 'message' || itemType === 'agentMessage') {\n flushPending();\n let role: string = String(item.role || 'user');\n if (role === 'developer') {\n role = 'system';\n }\n\n if (role === 'system') {\n const text = extractMessageText(item);\n if (text) {\n systemBlocks.push({ type: 'text', text });\n }\n continue;\n }\n\n const contentBlocks: AnthropicContentBlock[] = [];\n const rawContent = item.content;\n if (typeof rawContent === 'string') {\n contentBlocks.push({ type: 'text', text: rawContent });\n } else if (Array.isArray(rawContent)) {\n for (const part of rawContent) {\n if (typeof part === 'string') {\n contentBlocks.push({ type: 'text', text: part });\n } else if (part && typeof part === 'object') {\n const contentPart: ResponsesContentPart = part;\n if (\n contentPart.type === 'input_text' ||\n contentPart.type === 'text' ||\n contentPart.type === 'output_text'\n ) {\n const textBlock: AnthropicContentBlock = {\n type: 'text',\n text: String(contentPart.text ?? ''),\n };\n // eslint-disable-next-line no-restricted-syntax -- ResponsesContentPart union doesn't expose cache_control\n const cc = (contentPart as { cache_control?: Record<string, unknown> }).cache_control;\n if (cc) {\n textBlock.cache_control = cc;\n }\n contentBlocks.push(textBlock);\n } else if (\n contentPart.type === 'input_image' ||\n contentPart.type === 'image' ||\n contentPart.type === 'image_url'\n ) {\n const imgUrlPart: { image_url?: string | { url: string } } = contentPart;\n const imgUrl = imgUrlPart.image_url;\n const urlStr =\n typeof imgUrl === 'string'\n ? imgUrl\n : imgUrl && typeof imgUrl === 'object'\n ? imgUrl.url\n : '';\n if (urlStr.startsWith('data:')) {\n const match = /^data:([^;,]+);base64,(.*)$/.exec(urlStr);\n if (match) {\n contentBlocks.push({\n type: 'image',\n source: { type: 'base64', media_type: match[1], data: match[2] },\n });\n }\n } else if (urlStr) {\n const imgSource = { type: 'url', url: urlStr };\n contentBlocks.push({\n type: 'image',\n source: imgSource,\n });\n } else {\n const data = String(contentPart.data ?? contentPart.base64 ?? '');\n if (data) {\n contentBlocks.push({\n type: 'image',\n source: {\n type: 'base64',\n media_type: contentPart.mime_type || contentPart.media_type || 'image/png',\n data,\n },\n });\n }\n // ==============================================================================\n // Tool Adjacency\n // ==============================================================================\n }\n } else if (contentPart.type === 'input_file') {\n contentBlocks.push({\n type: 'document',\n source: {\n type: 'base64',\n media_type: contentPart.mime_type || 'application/pdf',\n data: String(contentPart.data ?? ''),\n },\n });\n }\n }\n }\n }\n\n if (role === 'assistant' || role === 'model') {\n if (contentBlocks.length) {\n messages.push({ role: 'assistant', content: contentBlocks });\n }\n } else {\n if (contentBlocks.length) {\n messages.push({ role: 'user', content: contentBlocks });\n }\n }\n continue;\n }\n }\n\n flushPending();\n\n for (const block of systemBlocks) {\n if (block.cache_control) {\n hasPromptCache = true;\n }\n }\n\n return { messages, hasPromptCache };\n}\n\nfunction extractMessageText(item: Record<string, unknown>): string {\n const rawContent = item.content;\n if (typeof rawContent === 'string') {\n return rawContent;\n }\n if (Array.isArray(rawContent)) {\n let out = '';\n for (const part of rawContent) {\n if (typeof part === 'string') {\n out += part;\n } else if (part && typeof part === 'object') {\n out += String(part.text ?? '');\n }\n }\n return out;\n }\n return '';\n}\n\nfunction extractToolOutputText(item: Record<string, unknown>): string {\n const raw = item.output ?? item.content ?? item.stdout ?? '';\n if (typeof raw === 'string') {\n return raw;\n }\n if (Array.isArray(raw)) {\n let out = '';\n for (const part of raw) {\n if (typeof part === 'string') {\n out += part;\n } else if (part && typeof part === 'object') {\n out += String(part.text ?? '');\n }\n }\n return out;\n }\n\n if (raw && typeof raw === 'object') {\n // eslint-disable-next-line no-restricted-syntax -- type narrowing for unknown type\n return String((raw as Record<string, unknown>).content ?? '');\n }\n return '';\n}\n\nfunction mapInputToolCall(item: Record<string, unknown>): AnthropicToolUseBlock | undefined {\n const callId: string = String(item.call_id || item.id || makeId('call'));\n let name = typeof item.name === 'string' ? item.name : undefined;\n const itemType = typeof item.type === 'string' ? item.type : undefined;\n\n if (!name) {\n if (itemType === 'commandExecution') {\n name = 'run_shell_command';\n } else if (itemType === 'local_shell_call') {\n name = 'local_shell_command';\n } else if (itemType === 'fileChange') {\n name = 'write_file';\n } else if (itemType === 'web_search_call') {\n name = 'web_search';\n }\n }\n\n if (!name) {\n return undefined;\n }\n\n const args: Record<string, unknown> =\n typeof item.arguments === 'object' && item.arguments !== null\n ? // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n (item.arguments as Record<string, unknown>)\n : {};\n const input: Record<string, unknown> = args;\n\n const block: AnthropicToolUseBlock = {\n type: 'tool_use',\n id: callId,\n name,\n input: input,\n };\n\n const cacheItem: { cache_control?: Record<string, unknown> } = item;\n const cache = cacheItem.cache_control;\n if (cache) {\n block.cache_control = cache;\n }\n\n return block;\n}\n\n// ==============================================================================\n// Utility Functions\n// ==============================================================================\n\nfunction mapTools(tools: ResponsesTool[]): (AnthropicTool | Record<string, unknown>)[] {\n const out: (AnthropicTool | Record<string, unknown>)[] = [];\n for (const tool of tools) {\n if (!tool || typeof tool !== 'object') {\n continue;\n }\n const tt = tool.type || '';\n if (ANTHROPIC_BUILTIN_TOOL_TYPES.has(tt)) {\n out.push(tool);\n continue;\n }\n if (tt !== 'function') {\n continue;\n }\n const fn = tool.function;\n const name = fn?.name ?? tool.name;\n if (!name) {\n continue;\n }\n const toolInputSchema: Record<string, unknown> = fn?.parameters ??\n tool.parameters ?? { type: 'object' };\n out.push({\n name,\n description: fn?.description ?? tool.description ?? '',\n input_schema: toolInputSchema,\n });\n }\n return out;\n}\n\nfunction mapToolChoice(choice: ResponsesToolChoice): AnthropicToolChoice | undefined {\n if (choice == null || choice === 'auto') {\n return { type: 'auto' };\n }\n if (choice === 'required') {\n return { type: 'any' };\n }\n if (choice === 'none') {\n return undefined;\n }\n if (typeof choice === 'object') {\n if (choice.type === 'function' && 'function' in choice && choice.function?.name) {\n return { type: 'tool', name: choice.function.name };\n }\n if (choice.type === 'auto' || choice.type === 'any') {\n return { type: choice.type };\n }\n }\n return { type: 'auto' };\n}\n\nfunction mapThinking(\n data: ResponsesRequest,\n maxTokens: number,\n overrides?: Partial<Record<'minimal' | 'low' | 'medium' | 'high' | 'xhigh', number>>,\n): AnthropicThinkingConfig | undefined {\n const reasoning = data.reasoning;\n if (!reasoning) {\n return undefined;\n }\n const effort = reasoning.effort;\n if (!effort || effort === 'minimal') {\n return undefined;\n }\n const budgets = { ...DEFAULT_REASONING_BUDGETS, ...overrides };\n const budget = budgets[effort] ?? DEFAULT_REASONING_BUDGETS.medium;\n const clamped = Math.max(1024, Math.min(budget, Math.max(1024, maxTokens - 1024)));\n return { type: 'enabled', budget_tokens: clamped };\n}\n\nfunction repairToolAdjacency(messages: AnthropicMessage[]): AnthropicMessage[] {\n const repaired: AnthropicMessage[] = [];\n const working = messages.map((msg) => ({\n ...msg,\n content: Array.isArray(msg.content) ? [...msg.content] : msg.content,\n }));\n\n for (let i = 0; i < working.length; i++) {\n const msg = working[i];\n repaired.push(msg);\n const content = msg.content;\n if (msg.role !== 'assistant' || !Array.isArray(content)) {\n continue;\n }\n\n const toolUseIds = content\n .filter((block): block is AnthropicToolUseBlock => !!block && block.type === 'tool_use')\n .map((block) => block.id);\n if (!toolUseIds.length) {\n continue;\n }\n\n const next = working[i + 1];\n const nextUserContent =\n next && next.role === 'user' && Array.isArray(next.content) ? next.content : [];\n\n const foundById = new Map<string, AnthropicToolResultBlock>();\n const consumedInNext = new Set<string>();\n for (const block of nextUserContent) {\n if (block && block.type === 'tool_result') {\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const tr = block as AnthropicToolResultBlock;\n if (toolUseIds.includes(tr.tool_use_id) && !foundById.has(tr.tool_use_id)) {\n foundById.set(tr.tool_use_id, tr);\n consumedInNext.add(tr.tool_use_id);\n }\n }\n }\n\n const missing = toolUseIds.filter((id) => !foundById.has(id));\n if (missing.length) {\n const missingSet = new Set(missing);\n for (let j = i + 2; j < working.length && missingSet.size; j++) {\n const later = working[j];\n if (later.role !== 'user' || !Array.isArray(later.content)) {\n continue;\n }\n const keep: AnthropicContentBlock[] = [];\n for (const block of later.content) {\n if (block && block.type === 'tool_result') {\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const tr = block as AnthropicToolResultBlock;\n if (missingSet.has(tr.tool_use_id)) {\n foundById.set(tr.tool_use_id, tr);\n missingSet.delete(tr.tool_use_id);\n continue;\n }\n }\n keep.push(block);\n }\n later.content = keep;\n }\n }\n\n const ordered: AnthropicToolResultBlock[] = toolUseIds.map(\n (id) =>\n foundById.get(id) ?? {\n type: 'tool_result',\n tool_use_id: id,\n content: '',\n },\n );\n repaired.push({ role: 'user', content: ordered });\n\n if (nextUserContent.length) {\n const remaining = nextUserContent.filter((block) => {\n if (block && block.type === 'tool_result') {\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const tr = block as AnthropicToolResultBlock;\n if (consumedInNext.has(tr.tool_use_id)) {\n consumedInNext.delete(tr.tool_use_id);\n return false;\n }\n }\n return true;\n });\n if (remaining.length) {\n repaired.push({ role: 'user', content: remaining });\n }\n i += 1;\n }\n }\n\n return repaired;\n}\n\nfunction sanitizeMessages(messages: AnthropicMessage[]): AnthropicMessage[] {\n const out: AnthropicMessage[] = [];\n for (const msg of messages) {\n if (!msg || (msg.role !== 'user' && msg.role !== 'assistant')) {\n continue;\n }\n if (Array.isArray(msg.content)) {\n const blocks = msg.content.filter((block) => {\n if (!block || typeof block !== 'object') {\n return false;\n }\n if (block.type === 'text' && !block.text) {\n return false;\n }\n return true;\n });\n if (!blocks.length) {\n continue;\n }\n out.push({ role: msg.role, content: blocks });\n } else if (typeof msg.content === 'string' && msg.content) {\n out.push({ role: msg.role, content: [{ type: 'text', text: msg.content }] });\n }\n }\n return out;\n}\n\nfunction ensureEndsWithUser(messages: AnthropicMessage[]): AnthropicMessage[] {\n if (!messages.length) {\n return [{ role: 'user', content: [{ type: 'text', text: '...' }] }];\n }\n const last = messages[messages.length - 1];\n if (last.role === 'user') {\n return messages;\n }\n return [...messages, { role: 'user', content: [{ type: 'text', text: 'Continue.' }] }];\n}\n\n// ── prompt_cache_key → cache_control helpers ──\n\nfunction markBlocksForCache(blocks: AnthropicTextBlock[]): AnthropicTextBlock[] {\n // Anthropic allows at most 4 cache_control breakpoints total.\n // Reserve 1 for the conversation breakpoint, leaving 3 for system blocks.\n let count = 0;\n for (const block of blocks) {\n if (!block.cache_control) {\n block.cache_control = { type: 'ephemeral' };\n count++;\n if (count >= 3) {\n break;\n }\n }\n }\n return blocks;\n}\n\n/**\n * Mark a stable cache breakpoint on the last assistant message's last text block.\n * Falls back to the first user message if there's no assistant message (first turn).\n *\n * The last assistant message won't change across turns, so the cache key stays\n * stable and can be reused for subsequent requests (unlike the last user message\n * which contains the new input each time).\n */\nfunction markCacheBreakpoint(messages: AnthropicMessage[]): AnthropicMessage[] {\n // First assistant is at a fixed position from turn 2 onwards\n for (const msg of messages) {\n if (msg.role === 'assistant' && Array.isArray(msg.content)) {\n for (let j = msg.content.length - 1; j >= 0; j--) {\n const block = msg.content[j];\n if (block.type === 'text') {\n if (!block.cache_control) {\n block.cache_control = { type: 'ephemeral' };\n }\n return messages;\n }\n }\n }\n }\n\n // First turn: no assistant yet, mark the first user message's last text block\n for (const msg of messages) {\n if (msg.role === 'user' && Array.isArray(msg.content)) {\n for (let j = msg.content.length - 1; j >= 0; j--) {\n const block = msg.content[j];\n if (block.type === 'text') {\n if (!block.cache_control) {\n block.cache_control = { type: 'ephemeral' };\n }\n return messages;\n }\n }\n }\n }\n\n return messages;\n}\n","/** Safe JSON helpers used by translators. */\n\nexport function safeJsonParse<T = unknown>(text: string): T | undefined {\n // eslint-disable-next-line no-restricted-syntax -- try/catch needed for server-side HTTP error handling\n try {\n const parsed: T = JSON.parse(text);\n return parsed;\n } catch {\n return undefined;\n }\n}\n\nexport function jsonStringifySafe(value: unknown): string {\n // eslint-disable-next-line no-restricted-syntax -- try/catch needed for server-side HTTP error handling\n try {\n return JSON.stringify(value);\n } catch {\n return '';\n }\n}\n","import type {\n AnthropicResponse,\n AnthropicContentBlock,\n AnthropicTextBlock,\n AnthropicToolUseBlock,\n AnthropicThinkingBlock,\n} from '../../types/anthropic.js';\nimport type {\n ResponsesOutputItem,\n ResponsesOutputFunctionCall,\n ResponsesOutputMessage,\n ResponsesOutputReasoning,\n ResponsesResponse,\n} from '../../types/responses.js';\nimport { jsonStringifySafe } from '../../utils/json.js';\nimport { makeId } from '../../utils/id.js';\n\nexport interface TranslateResponseOptions {\n responseId?: string;\n createdAt?: number;\n model?: string;\n}\n\n/** Convert a non-streaming Anthropic response into a Responses-API response. */\nexport function translateResponse(\n body: AnthropicResponse,\n options: TranslateResponseOptions = {},\n): ResponsesResponse {\n const createdAt = options.createdAt ?? Math.floor(Date.now() / 1000);\n const id = options.responseId ?? body.id ?? makeId('resp');\n const model = options.model ?? body.model ?? '';\n\n const output = mapOutputItems(body.content ?? []);\n const usage = body.usage ?? { input_tokens: 0, output_tokens: 0 };\n\n return {\n id,\n object: 'response',\n created_at: createdAt,\n model,\n status: 'completed',\n output,\n usage: {\n input_tokens: usage.input_tokens ?? 0,\n output_tokens: usage.output_tokens ?? 0,\n total_tokens: (usage.input_tokens ?? 0) + (usage.output_tokens ?? 0),\n input_tokens_details: {\n cached_tokens: usage.cache_read_input_tokens ?? 0,\n cache_creation_tokens: usage.cache_creation_input_tokens ?? 0,\n },\n },\n };\n}\n\nconst SHELL_TOOL_NAMES = new Set(['shell', 'container.exec', 'shell_command']);\n\nexport function mapOutputItems(content: AnthropicContentBlock[]): ResponsesOutputItem[] {\n const out: ResponsesOutputItem[] = [];\n const textChunks: string[] = [];\n\n for (const block of content) {\n if (!block || typeof block !== 'object') {\n continue;\n }\n const btype: string = block.type;\n if (btype === 'text') {\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n textChunks.push(String((block as AnthropicTextBlock).text ?? ''));\n } else if (btype === 'tool_use') {\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const args = jsonStringifySafe((block as AnthropicToolUseBlock).input ?? {});\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const callId = (block as AnthropicToolUseBlock).id ?? makeId('call');\n const item: ResponsesOutputFunctionCall = {\n id: callId,\n type: 'function_call',\n status: 'completed',\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n name: (block as AnthropicToolUseBlock).name ?? 'tool',\n arguments: args,\n call_id: callId,\n };\n if (\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n (block as AnthropicToolUseBlock).name &&\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n SHELL_TOOL_NAMES.has((block as AnthropicToolUseBlock).name)\n ) {\n item.type = 'local_shell_call';\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const input_: Record<string, unknown> = (block as AnthropicToolUseBlock).input ?? {};\n const command: string[] = Array.isArray(input_.command) ? input_.command : [];\n item.action = { type: 'exec', command: command };\n }\n out.push(item);\n } else if (btype === 'thinking') {\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const text = String((block as AnthropicThinkingBlock).thinking ?? '');\n const reasoning: ResponsesOutputReasoning = {\n id: makeId('rs'),\n type: 'reasoning',\n summary: [],\n content: [{ type: 'reasoning_text', text }],\n status: 'completed',\n };\n out.push(reasoning);\n }\n }\n\n if (textChunks.length) {\n const message: ResponsesOutputMessage = {\n id: makeId('msg'),\n type: 'message',\n role: 'assistant',\n status: 'completed',\n content: [{ type: 'output_text', text: textChunks.join('') }],\n };\n out.push(message);\n }\n\n return out;\n}\n","/**\n * SSE helpers.\n *\n * - `parseSseStream`: Consume a ReadableStream of bytes and yield parsed\n * `{ event, data }` pairs. Works in both browser (fetch body) and Node 18+.\n * - `encodeSseEvent`: Serialize a `{ event, data }` pair to the SSE wire format.\n */\n\nexport interface SseMessage {\n event?: string;\n data: string;\n}\n\nexport async function* parseSseStream(\n stream: ReadableStream<Uint8Array>,\n): AsyncGenerator<SseMessage, void, void> {\n const reader = stream.getReader();\n const decoder = new TextDecoder('utf-8');\n let buffer = '';\n\n // eslint-disable-next-line no-restricted-syntax -- try/catch needed for server-side HTTP error handling\n try {\n while (true) {\n const { value, done } = await reader.read();\n if (done) {\n break;\n }\n if (value) {\n buffer += decoder.decode(value, { stream: true });\n }\n\n // Events are separated by blank lines.\n let idx: number;\n while ((idx = buffer.search(/\\r?\\n\\r?\\n/)) !== -1) {\n const raw = buffer.slice(0, idx);\n buffer = buffer.slice(idx + (buffer[idx] === '\\r' ? 4 : 2));\n const msg = parseSseBlock(raw);\n if (msg) {\n yield msg;\n }\n }\n }\n buffer += decoder.decode();\n if (buffer.trim().length > 0) {\n const msg = parseSseBlock(buffer);\n if (msg) {\n yield msg;\n }\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nfunction parseSseBlock(block: string): SseMessage | undefined {\n let event: string | undefined;\n const dataLines: string[] = [];\n for (const line of block.split(/\\r?\\n/)) {\n if (!line || line.startsWith(':')) {\n continue;\n }\n const colon = line.indexOf(':');\n const field = colon === -1 ? line : line.slice(0, colon);\n let value = colon === -1 ? '' : line.slice(colon + 1);\n if (value.startsWith(' ')) {\n value = value.slice(1);\n }\n if (field === 'event') {\n event = value;\n } else if (field === 'data') {\n dataLines.push(value);\n }\n }\n if (dataLines.length === 0) {\n return undefined;\n }\n return { event, data: dataLines.join('\\n') };\n}\n\nexport function encodeSseEvent(event: string, data: unknown): string {\n const payload = typeof data === 'string' ? data : JSON.stringify(data);\n return `event: ${event}\\ndata: ${payload}\\n\\n`;\n}\n","// ==============================================================================\n// Stream Translator\n// ==============================================================================\n\nimport type { AnthropicStreamEvent, AnthropicContentBlock } from '../../types/anthropic.js';\nimport type {\n ResponsesOutputItem,\n ResponsesOutputFunctionCall,\n ResponsesOutputMessage,\n ResponsesOutputReasoning,\n ResponsesResponse,\n ResponsesStreamEvent,\n} from '../../types/responses.js';\nimport { parseSseStream, type SseMessage } from '../../utils/sse.js';\nimport { safeJsonParse, jsonStringifySafe } from '../../utils/json.js';\nimport { makeId } from '../../utils/id.js';\n\nexport interface TranslateStreamOptions {\n model?: string;\n responseId?: string;\n // ==============================================================================\n // Event Handlers\n // ==============================================================================\n\n createdAt?: number;\n requestMetadata?: ResponsesStreamMetadata;\n}\n\nexport interface ResponsesStreamMetadata {\n temperature?: number;\n top_p?: number;\n tools?: unknown[];\n tool_choice?: unknown;\n store?: boolean;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Consume an Anthropic SSE stream and yield Responses-API SSE events.\n */\nexport async function* translateStream(\n stream: ReadableStream<Uint8Array>,\n options: TranslateStreamOptions = {},\n): AsyncGenerator<ResponsesStreamEvent, void, void> {\n const translator = new StreamTranslator(options);\n yield translator.createInitialEvent();\n for await (const msg of parseSseStream(stream)) {\n const event = parseAnthropicEvent(msg);\n if (!event) {\n continue;\n }\n yield* translator.handleEvent(event);\n }\n yield* translator.finalize();\n}\n\n/**\n * Consume an async iterable of parsed Anthropic events and yield Responses events.\n */\nexport async function* translateAnthropicEvents(\n events: AsyncIterable<AnthropicStreamEvent> | Iterable<AnthropicStreamEvent>,\n options: TranslateStreamOptions = {},\n): AsyncGenerator<ResponsesStreamEvent, void, void> {\n const translator = new StreamTranslator(options);\n yield translator.createInitialEvent();\n for await (const event of events) {\n yield* translator.handleEvent(event);\n }\n yield* translator.finalize();\n}\n\nfunction parseAnthropicEvent(msg: SseMessage): AnthropicStreamEvent | undefined {\n const parsed = safeJsonParse<AnthropicStreamEvent>(msg.data);\n if (!parsed) {\n return undefined;\n }\n return parsed;\n}\n\ninterface BlockState {\n type: 'text' | 'tool_use' | 'thinking' | string;\n outputIndex: number;\n item?: ResponsesOutputItem;\n buffer: string;\n}\n\nconst SHELL_TOOL_NAMES = new Set(['shell', 'container.exec', 'shell_command']);\n\nclass StreamTranslator {\n private readonly model: string;\n private readonly responseId: string;\n private readonly createdAt: number;\n private readonly metadata: ResponsesStreamMetadata;\n private seq = 0;\n private outputCounter = 0;\n private readonly blocks = new Map<number, BlockState>();\n\n private inputTokens = 0;\n private outputTokens = 0;\n private cacheCreationTokens = 0;\n private cacheReadTokens = 0;\n\n private textItem?: ResponsesOutputMessage;\n private textItemIndex = -1;\n private textBuffer = '';\n\n private stopReason: string | undefined;\n\n constructor(options: TranslateStreamOptions) {\n this.model = options.model ?? '';\n this.responseId = options.responseId ?? makeId('resp');\n this.createdAt = options.createdAt ?? Math.floor(Date.now() / 1000);\n this.metadata = options.requestMetadata ?? {};\n }\n\n createInitialEvent(): ResponsesStreamEvent {\n const response: Partial<ResponsesResponse> = {\n id: this.responseId,\n object: 'response',\n created_at: this.createdAt,\n model: this.model,\n status: 'in_progress',\n temperature: this.metadata.temperature,\n top_p: this.metadata.top_p,\n tool_choice: this.metadata.tool_choice,\n tools: this.metadata.tools ?? [],\n parallel_tool_calls: true,\n store: this.metadata.store ?? true,\n metadata: this.metadata.metadata ?? {},\n output: [],\n };\n return this.makeEvent('response.created', { response });\n }\n\n *handleEvent(event: AnthropicStreamEvent): Generator<ResponsesStreamEvent, void, void> {\n switch (event.type) {\n case 'message_start': {\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const msgStartEvt = event as Extract<AnthropicStreamEvent, { type: 'message_start' }>;\n this.onMessageStart(msgStartEvt);\n return;\n }\n case 'content_block_start':\n {\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const cbsEvt = event as Extract<AnthropicStreamEvent, { type: 'content_block_start' }>;\n yield* this.onContentBlockStart(cbsEvt);\n }\n return;\n case 'content_block_delta':\n {\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const cbdEvt = event as Extract<AnthropicStreamEvent, { type: 'content_block_delta' }>;\n yield* this.onContentBlockDelta(cbdEvt);\n }\n return;\n case 'content_block_stop':\n return;\n case 'message_delta':\n {\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const msgDeltaEvt = event as Extract<AnthropicStreamEvent, { type: 'message_delta' }>;\n this.onMessageDelta(msgDeltaEvt);\n }\n return;\n case 'message_stop':\n case 'ping':\n return;\n default:\n return;\n }\n }\n\n *finalize(): Generator<ResponsesStreamEvent, void, void> {\n const items: { index: number; item: ResponsesOutputItem }[] = [];\n\n if (this.textItem) {\n this.textItem.status = 'completed';\n this.textItem.content[0].text = this.textBuffer;\n items.push({ index: this.textItemIndex, item: this.textItem });\n }\n\n for (const block of this.blocks.values()) {\n if (!block.item) {\n continue;\n }\n if (items.find((item) => item.index === block.outputIndex)) {\n continue;\n }\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const item: Record<string, unknown> = block.item as Record<string, unknown>;\n item.status = 'completed';\n if (block.type === 'tool_use') {\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const call = block.item as ResponsesOutputFunctionCall;\n if (call.name && SHELL_TOOL_NAMES.has(call.name)) {\n call.type = 'local_shell_call';\n const parsed = safeJsonParse<{ command?: string[] }>(call.arguments ?? '');\n call.action = { type: 'exec', command: parsed?.command ?? [] };\n }\n }\n items.push({ index: block.outputIndex, item: block.item });\n }\n\n items.sort((alpha, beta) => alpha.index - beta.index);\n\n for (const { index, item } of items) {\n yield this.makeEvent('response.output_item.done', {\n response_id: this.responseId,\n output_index: index,\n item,\n });\n }\n\n const output = items.map((item) => item.item);\n const total = this.inputTokens + this.outputTokens;\n\n const response: Partial<ResponsesResponse> = {\n id: this.responseId,\n object: 'response',\n created_at: this.createdAt,\n completed_at: Math.floor(Date.now() / 1000),\n model: this.model,\n status: 'completed',\n temperature: this.metadata.temperature,\n top_p: this.metadata.top_p,\n tool_choice: this.metadata.tool_choice,\n tools: this.metadata.tools ?? [],\n parallel_tool_calls: true,\n store: this.metadata.store ?? true,\n metadata: this.metadata.metadata ?? {},\n output,\n usage: {\n input_tokens: this.inputTokens,\n output_tokens: this.outputTokens,\n total_tokens: total,\n input_tokens_details: {\n cached_tokens: this.cacheReadTokens,\n cache_creation_tokens: this.cacheCreationTokens,\n },\n },\n };\n\n yield this.makeEvent('response.completed', { response });\n }\n\n private onMessageStart(event: Extract<AnthropicStreamEvent, { type: 'message_start' }>): void {\n const usage = event.message?.usage;\n if (usage) {\n this.inputTokens = usage.input_tokens ?? 0;\n this.cacheCreationTokens = usage.cache_creation_input_tokens ?? 0;\n this.cacheReadTokens = usage.cache_read_input_tokens ?? 0;\n }\n return;\n }\n\n private *onContentBlockStart(\n event: Extract<AnthropicStreamEvent, { type: 'content_block_start' }>,\n ): Generator<ResponsesStreamEvent, void, void> {\n const index = event.index;\n const block: AnthropicContentBlock & { id?: string; name?: string } = event.content_block;\n const btype = block.type;\n\n if (btype === 'thinking') {\n const outputIndex = this.outputCounter++;\n const item: ResponsesOutputReasoning = {\n id: makeId('rs'),\n type: 'reasoning',\n summary: [],\n content: [{ type: 'reasoning_text', text: '' }],\n status: 'in_progress',\n };\n this.blocks.set(index, { type: 'thinking', outputIndex, item, buffer: '' });\n yield this.makeEvent('response.output_item.added', {\n response_id: this.responseId,\n output_index: outputIndex,\n item,\n });\n return;\n }\n\n if (btype === 'text') {\n if (!this.textItem) {\n const outputIndex = this.outputCounter++;\n this.textItemIndex = outputIndex;\n this.textItem = {\n id: makeId('msg'),\n type: 'message',\n role: 'assistant',\n status: 'in_progress',\n content: [{ type: 'output_text', text: '' }],\n };\n yield this.makeEvent('response.output_item.added', {\n response_id: this.responseId,\n output_index: outputIndex,\n item: this.textItem,\n });\n }\n this.blocks.set(index, { type: 'text', outputIndex: this.textItemIndex, buffer: '' });\n return;\n }\n\n if (btype === 'tool_use') {\n const outputIndex = this.outputCounter++;\n const callId = block.id ?? makeId('call');\n // Some proxies return the full input directly in content_block_start\n const initialInput =\n typeof block.input === 'object' && block.input !== null\n ? jsonStringifySafe(block.input)\n : '';\n const hasInitialInput = initialInput !== '' && initialInput !== '{}';\n const item: ResponsesOutputFunctionCall = {\n id: callId,\n type: 'function_call',\n status: 'in_progress',\n name: block.name ?? '',\n arguments: hasInitialInput ? initialInput : '',\n call_id: callId,\n };\n this.blocks.set(index, {\n type: 'tool_use',\n outputIndex,\n item,\n buffer: hasInitialInput ? initialInput : '',\n });\n yield this.makeEvent('response.output_item.added', {\n response_id: this.responseId,\n output_index: outputIndex,\n item,\n });\n return;\n }\n\n this.blocks.set(index, { type: btype, outputIndex: -1, buffer: '' });\n }\n\n private *onContentBlockDelta(\n event: Extract<AnthropicStreamEvent, { type: 'content_block_delta' }>,\n ): Generator<ResponsesStreamEvent, void, void> {\n const block = this.blocks.get(event.index);\n if (!block) {\n return;\n }\n const delta: Record<string, unknown> = event.delta;\n const dtype: string = typeof delta.type === 'string' ? delta.type : '';\n\n if (dtype === 'text_delta') {\n const text = String(delta.text ?? '');\n if (!text) {\n return;\n }\n this.textBuffer += text;\n // text content available via this.textItem.content[0]\n yield this.makeEvent('response.output_text.delta', {\n response_id: this.responseId,\n item_id: this.textItem?.id ?? '',\n output_index: this.textItemIndex,\n content_index: 0,\n delta: text,\n });\n return;\n }\n\n if (dtype === 'thinking_delta') {\n const thinking = String(delta.thinking ?? '');\n if (!thinking) {\n return;\n }\n block.buffer += thinking;\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const item = block.item as ResponsesOutputReasoning | undefined;\n if (item) {\n item.content[0].text = block.buffer;\n }\n yield this.makeEvent('response.reasoning_text.delta', {\n response_id: this.responseId,\n item_id: item?.id ?? '',\n output_index: block.outputIndex,\n content_index: 0,\n delta: thinking,\n });\n return;\n }\n\n if (dtype === 'input_json_delta') {\n const partial = String(delta.partial_json ?? '');\n if (!partial) {\n return;\n }\n block.buffer += partial;\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const item = block.item as ResponsesOutputFunctionCall | undefined;\n if (item) {\n item.arguments = block.buffer;\n }\n yield this.makeEvent('response.function_call_arguments.delta', {\n response_id: this.responseId,\n item_id: item?.id ?? '',\n output_index: block.outputIndex,\n delta: partial,\n });\n return;\n }\n }\n\n private onMessageDelta(event: Extract<AnthropicStreamEvent, { type: 'message_delta' }>): void {\n if (event.usage?.output_tokens != null) {\n this.outputTokens = event.usage.output_tokens;\n }\n const eventDelta: { stop_reason?: string } | undefined = event.delta;\n const stopReason = eventDelta?.stop_reason;\n if (stopReason) {\n this.stopReason = stopReason;\n }\n return;\n }\n\n private makeEvent(type: string, data: Record<string, unknown>): ResponsesStreamEvent {\n this.seq += 1;\n return {\n id: makeId('evt'),\n object: 'response.event',\n type,\n created_at: Math.floor(Date.now() / 1000),\n sequence_number: this.seq,\n ...data,\n };\n }\n}\n\n// Suppress unused export warning\nexport type __AnthropicContentBlockAlias = AnthropicContentBlock;\n","export {\n translateRequest,\n type TranslateRequestOptions,\n type TranslateRequestResult,\n} from './translateRequest.js';\nexport { translateResponse, type TranslateResponseOptions } from './translateResponse.js';\nexport {\n translateStream,\n type TranslateStreamOptions,\n type ResponsesStreamMetadata,\n} from './translateStream.js';\n","// ==============================================================================\n// Main Translation\n// ==============================================================================\n\nimport type {\n ResponsesRequest,\n ResponsesInputItem,\n ResponsesTool,\n ResponsesToolChoice,\n ResponsesContentPart,\n} from '../../types/responses.js';\nimport type {\n OpenAiChatMessage,\n OpenAiChatRequest,\n OpenAiChatTool,\n OpenAiChatToolCall,\n OpenAiChatToolChoice,\n} from '../../types/openai_chat.js';\nimport { makeId } from '../../utils/id.js';\nimport { jsonStringifySafe } from '../../utils/json.js';\n\nexport interface TranslateRequestOptions {\n /** Default max tokens when not provided. */\n defaultMaxTokens?: number;\n /** If true, backfill reasoning_content on assistant tool-call messages. */\n backfillReasoning?: boolean;\n /** Placeholder string for backfilled reasoning_content. Defaults to '.'. */\n reasoningPlaceholder?: string;\n /** If true, strip `strict` from function tools (some upstreams reject it). */\n /** If true, drop image/file parts from user messages (e.g. DeepSeek text-only models). */\n dropImages?: boolean;\n /** Fallback signature for Gemini OpenAI histories that lack returned signatures. */\n fallbackThoughtSignature?: string;\n}\n\nexport interface TranslateRequestResult {\n request: OpenAiChatRequest;\n}\n\n/** Convert a Responses API request into an OpenAI Chat API request. */\nexport function translateRequest(\n data: ResponsesRequest,\n options: TranslateRequestOptions = {},\n): TranslateRequestResult {\n const messages: OpenAiChatMessage[] = [];\n\n const systemContent = buildSystemContent(data.instructions);\n if (systemContent) {\n messages.push({ role: 'system', content: systemContent });\n }\n\n const inputItems: ResponsesInputItem[] =\n typeof data.input === 'string' ? [data.input] : Array.isArray(data.input) ? data.input : [];\n\n for (const raw of inputItems) {\n if (typeof raw === 'string') {\n messages.push({ role: 'user', content: raw });\n continue;\n }\n if (!raw || typeof raw !== 'object') {\n continue;\n }\n const rawItem: Record<string, unknown> = raw;\n processInputItem(rawItem, messages, options);\n }\n\n const request: OpenAiChatRequest = {\n model: data.model,\n messages,\n };\n\n if (typeof data.temperature === 'number') {\n request.temperature = data.temperature;\n }\n if (typeof data.top_p === 'number') {\n request.top_p = data.top_p;\n }\n const effort = typeof data.reasoning?.effort === 'string' ? data.reasoning.effort : undefined;\n if (effort) {\n const req: Record<string, unknown> = request;\n req.reasoning_effort = effort;\n }\n\n const maxTokens =\n (typeof data.max_output_tokens === 'number' && data.max_output_tokens) ||\n (typeof data.max_tokens === 'number' && data.max_tokens) ||\n options.defaultMaxTokens;\n if (typeof maxTokens === 'number') {\n request.max_tokens = maxTokens;\n }\n\n const tools = mapTools(data.tools ?? []);\n if (tools.length) {\n request.tools = tools;\n const toolChoice = mapToolChoice(data.tool_choice);\n if (toolChoice !== undefined) {\n request.tool_choice = toolChoice;\n }\n }\n\n // Some upstreams (e.g. GLM thinking mode) require reasoning_content on every\n // assistant turn when thinking is enabled — not just ones that make tool calls.\n const placeholder = options.reasoningPlaceholder ?? '.';\n if (options.backfillReasoning !== false && placeholder) {\n for (const m of messages) {\n if (m.role === 'assistant' && m.reasoning_content == null) {\n m.reasoning_content = placeholder;\n }\n }\n }\n\n // Reorder messages to ensure tool outputs immediately follow their tool calls.\n // Some upstreams (e.g. GLM) require tool messages to come right after the assistant\n // message that emitted the tool_calls, with no other message in between.\n repairToolMessageOrder(messages);\n\n return { request };\n}\n\nfunction buildSystemContent(instructions: ResponsesRequest['instructions']): string {\n if (!instructions) {\n return '';\n }\n if (typeof instructions === 'string') {\n return instructions;\n }\n if (!Array.isArray(instructions)) {\n return '';\n }\n let out = '';\n for (const block of instructions) {\n if (typeof block === 'string') {\n out += block;\n } else if (block && typeof block === 'object') {\n // eslint-disable-next-line no-restricted-syntax -- Record extraction from unknown union\n out += String((block as { text?: string }).text ?? '');\n }\n }\n return out;\n}\n\n// ==============================================================================\n// Input Processing\n// ==============================================================================\n\nfunction processInputItem(\n item: Record<string, unknown>,\n messages: OpenAiChatMessage[],\n options: TranslateRequestOptions,\n): void {\n const itemType: string = String(item.type) || 'message';\n\n const getLastAssistant = (): OpenAiChatMessage => {\n const last = messages[messages.length - 1];\n if (last && last.role === 'assistant') {\n return last;\n }\n const msg: OpenAiChatMessage = { role: 'assistant', content: null };\n messages.push(msg);\n return msg;\n };\n\n if (itemType === 'message' || itemType === 'agentMessage') {\n // ==============================================================================\n // Helpers\n // ==============================================================================\n\n let role: string = String(item.role) || 'user';\n if (role === 'developer') {\n role = 'system';\n }\n\n let reasoningContent: string = String(item.reasoning_content ?? '');\n const rawContent = item.content;\n\n if (role === 'assistant' || role === 'model') {\n let content = '';\n if (typeof rawContent === 'string') {\n content = rawContent;\n } else if (Array.isArray(rawContent)) {\n for (const part of rawContent) {\n if (typeof part === 'string') {\n content += part;\n } else if (part && typeof part === 'object') {\n const contentPart: ResponsesContentPart = part;\n if (\n contentPart.type === 'input_text' ||\n contentPart.type === 'text' ||\n contentPart.type === 'output_text'\n ) {\n content += String(contentPart.text ?? '');\n } else if (contentPart.type === 'reasoning_text') {\n reasoningContent += String(contentPart.text ?? '');\n }\n }\n }\n }\n const amsg = getLastAssistant();\n if (content) {\n amsg.content = (amsg.content ?? '') + content;\n }\n if (reasoningContent) {\n amsg.reasoning_content = (amsg.reasoning_content ?? '') + reasoningContent;\n }\n const sig = item.thought_signature;\n if (typeof sig === 'string' && sig) {\n amsg.thought_signature = sig;\n }\n } else {\n if (typeof rawContent === 'string') {\n messages.push({ role, content: rawContent });\n } else if (Array.isArray(rawContent)) {\n const contentBlocks: Array<{ type: string; [k: string]: unknown }> = [];\n for (const part of rawContent) {\n if (typeof part === 'string') {\n contentBlocks.push({ type: 'text', text: part });\n } else if (part && typeof part === 'object') {\n const contentPart: ResponsesContentPart = part;\n if (\n contentPart.type === 'input_text' ||\n contentPart.type === 'text' ||\n contentPart.type === 'output_text'\n ) {\n contentBlocks.push({ type: 'text', text: String(contentPart.text ?? '') });\n } else if (contentPart.type === 'reasoning_text') {\n reasoningContent += String(contentPart.text ?? '');\n } else if (isImagePart(contentPart)) {\n if (options.dropImages) {\n continue;\n }\n const url = imagePartToUrl(part);\n if (url) {\n contentBlocks.push({ type: 'image_url', image_url: { url } });\n }\n } else if (part.type === 'input_file' || part.type === 'file') {\n const partFile: {\n file_data?: string;\n data?: string;\n mime_type?: string;\n media_type?: string;\n } = part;\n const fileData = String(partFile.file_data ?? partFile.data ?? '');\n const mimeType = String(\n partFile.mime_type ?? partFile.media_type ?? 'application/pdf',\n );\n if (fileData) {\n const url = fileData.startsWith('data:')\n ? fileData\n : `data:${mimeType};base64,${fileData}`;\n contentBlocks.push({ type: 'image_url', image_url: { url } });\n }\n }\n }\n }\n const msg: OpenAiChatMessage = { role, content: contentBlocks };\n if (reasoningContent) {\n msg.reasoning_content = reasoningContent;\n }\n const sig = item.thought_signature;\n if (typeof sig === 'string' && sig) {\n msg.thought_signature = sig;\n }\n messages.push(msg);\n } else {\n messages.push({ role, content: '' });\n }\n }\n return;\n }\n\n if (itemType === 'reasoning') {\n const rawList = item.content;\n let content = '';\n if (Array.isArray(rawList)) {\n for (const cp of rawList) {\n if (typeof cp === 'string') {\n content += cp;\n } else if (cp && typeof cp === 'object') {\n // eslint-disable-next-line no-restricted-syntax -- Record extraction from unknown union\n content += String((cp as { text?: string }).text ?? '');\n }\n }\n } else if (typeof rawList === 'string') {\n content += rawList;\n }\n const amsg = getLastAssistant();\n amsg.reasoning_content = (amsg.reasoning_content ?? '') + content;\n const sig = item.thought_signature;\n if (typeof sig === 'string' && sig) {\n amsg.thought_signature = sig;\n }\n return;\n }\n\n if (\n itemType === 'function_call' ||\n itemType === 'commandExecution' ||\n itemType === 'local_shell_call' ||\n itemType === 'fileChange' ||\n itemType === 'custom_tool_call' ||\n itemType === 'web_search_call'\n ) {\n processToolCall(item, messages, getLastAssistant, options.fallbackThoughtSignature);\n return;\n }\n\n if (\n itemType === 'function_call_output' ||\n itemType === 'commandExecutionOutput' ||\n itemType === 'fileChangeOutput' ||\n itemType === 'custom_tool_call_output'\n ) {\n processToolOutput(item, messages, options);\n return;\n }\n}\n\nfunction processToolCall(\n item: Record<string, unknown>,\n messages: OpenAiChatMessage[],\n getLastAssistant: () => OpenAiChatMessage,\n fallbackThoughtSignature?: string,\n): void {\n const callId: string = String(item.call_id ?? '') || String(item.id ?? '') || makeId('call');\n let name: string | undefined = item.name === undefined ? undefined : String(item.name);\n const itemType: string | undefined = item.type === undefined ? undefined : String(item.type);\n\n if (!name) {\n if (itemType === 'commandExecution') {\n name = 'run_shell_command';\n } else if (itemType === 'local_shell_call') {\n name = 'local_shell_command';\n } else if (itemType === 'fileChange') {\n name = 'write_file';\n } else if (itemType === 'web_search_call') {\n name = 'web_search';\n }\n }\n\n let args: unknown =\n item.arguments ?? item.input ?? (isEmpty(item.arguments) && isEmpty(item.input) ? {} : {});\n if (isEmpty(args) && itemType === 'web_search_call') {\n args = item.action ?? {};\n }\n if (isEmpty(args)) {\n if (itemType === 'commandExecution') {\n args = {\n command: item.command ?? '',\n dir_path: item.cwd ?? '.',\n };\n } else if (itemType === 'local_shell_call') {\n // eslint-disable-next-line no-restricted-syntax -- Narrow unknown to Record\n const action = (item.action === undefined ? {} : item.action) as Record<string, unknown>;\n // eslint-disable-next-line no-restricted-syntax -- Narrow unknown to Record\n const execChild = (action.exec === undefined ? {} : action.exec) as Record<string, unknown>;\n args = {\n command: execChild.command ?? [],\n working_directory: execChild.working_directory,\n };\n } else if (itemType === 'fileChange') {\n const changes: Array<Record<string, unknown>> = Array.isArray(item.changes)\n ? item.changes\n : [];\n const path = changes[0]?.path ?? 'unknown';\n args = { file_path: path };\n }\n }\n\n const argsStr = typeof args === 'string' ? args : jsonStringifySafe(args ?? {});\n\n if (!name) {\n return;\n }\n\n const amsg = getLastAssistant();\n if (!amsg.tool_calls) {\n amsg.tool_calls = [];\n }\n const toolCall: OpenAiChatToolCall = {\n id: callId,\n type: 'function',\n function: { name, arguments: argsStr },\n };\n\n const sig = item.thought_signature ?? fallbackThoughtSignature;\n const thought = item.thought;\n if (typeof sig === 'string' && sig) {\n toolCall.extra_content = { google: { thought_signature: sig } };\n amsg.thought_signature = sig;\n }\n amsg.tool_calls.push(toolCall);\n if (typeof thought === 'string' && thought) {\n amsg.reasoning_content = (amsg.reasoning_content ?? '') + thought;\n }\n void messages;\n}\n\nfunction isImagePart(part: { type?: string }): boolean {\n return part.type === 'input_image' || part.type === 'image' || part.type === 'image_url';\n}\n\n// Extract a chat `image_url` value (http(s) URL or data: URI) from a Responses\n// image part. Shared by user-message and tool-output handling so both translate\n// images identically.\nfunction imagePartToUrl(part: {\n image_url?: string | { url?: string };\n data?: string;\n base64?: string;\n mime_type?: string;\n media_type?: string;\n}): string {\n const imgUrl = part.image_url;\n if (typeof imgUrl === 'string') {\n return imgUrl;\n }\n if (imgUrl && typeof imgUrl === 'object' && imgUrl.url) {\n return imgUrl.url;\n }\n const imgData = String(part.data ?? part.base64 ?? '');\n if (imgData) {\n const mimeType = String(part.mime_type ?? part.media_type ?? 'image/png');\n return imgData.startsWith('data:') ? imgData : `data:${mimeType};base64,${imgData}`;\n }\n return '';\n}\n\nfunction processToolOutput(\n item: Record<string, unknown>,\n messages: OpenAiChatMessage[],\n options: TranslateRequestOptions,\n): void {\n const callId: string | undefined = item.call_id === undefined ? undefined : String(item.call_id);\n const outputRaw = item.output ?? item.content ?? item.stdout ?? '';\n\n let content = '';\n const imageBlocks: Array<{ type: 'image_url'; image_url: { url: string } }> = [];\n if (typeof outputRaw === 'string') {\n content = outputRaw;\n } else if (Array.isArray(outputRaw)) {\n for (const part of outputRaw) {\n if (typeof part === 'string') {\n content += part;\n } else if (part && typeof part === 'object') {\n const partItem: { type?: string; text?: string } = part;\n if (partItem.type === 'input_text' || partItem.type === 'text') {\n content += String(partItem.text ?? '');\n } else if (!options.dropImages && isImagePart(partItem)) {\n const url = imagePartToUrl(part);\n if (url) {\n imageBlocks.push({ type: 'image_url', image_url: { url } });\n }\n }\n }\n }\n } else if (outputRaw && typeof outputRaw === 'object') {\n // eslint-disable-next-line no-restricted-syntax -- Narrow object to Record\n const obj = outputRaw as Record<string, unknown>;\n content = String(obj.content ?? '');\n if (!content && obj.success === false) {\n content = 'Error: Tool execution failed';\n }\n }\n\n if (!content && typeof item.stderr === 'string' && item.stderr) {\n content = `Error: ${item.stderr}`;\n }\n\n messages.push({\n role: 'tool',\n tool_call_id: callId,\n content,\n });\n\n // A chat `tool` message cannot carry images, so image parts in a tool output\n // (e.g. codex `view_image` screenshots) would be dropped on translation. Lift\n // them into a following `user` message — user messages DO map to chat\n // `image_url` content, so the upstream model can still see them.\n if (imageBlocks.length > 0) {\n messages.push({\n role: 'user',\n content: [\n { type: 'text', text: '[Image output returned by the preceding tool call]' },\n ...imageBlocks,\n ],\n });\n }\n}\n\n// ==============================================================================\n// Tool Mapping\n// ==============================================================================\nfunction mapTools(tools: ResponsesTool[]): OpenAiChatTool[] {\n /** If true, drop image/file parts from user messages (e.g. DeepSeek text-only models). */\n const out: OpenAiChatTool[] = [];\n for (const tool of tools) {\n if (!tool || typeof tool !== 'object') {\n continue;\n }\n const tt = tool.type;\n if (tt === 'function') {\n const fn = tool.function;\n const name = fn?.name ?? tool.name;\n if (!name) {\n continue;\n }\n const params = fn?.parameters ?? tool.parameters ?? { type: 'object' };\n out.push({\n type: 'function',\n function: {\n name,\n description: fn?.description ?? tool.description ?? '',\n parameters: params,\n },\n });\n continue;\n }\n if (tt === 'namespace') {\n // Flatten namespace sub-tools as \"{namespace}.{tool}\" function tools so\n // Chat Completions upstreams (e.g. DeepSeek) can call them. Codex\n // dispatches tool calls by full dotted name, so the prefix is required.\n const ns = tool.name;\n // eslint-disable-next-line no-restricted-syntax -- ResponsesTool[] extraction from unknown index signature\n const nested = tool.tools as ResponsesTool[] | undefined;\n if (ns && Array.isArray(nested)) {\n for (const sub of nested) {\n if (!sub || typeof sub !== 'object' || sub.type !== 'function') {\n continue;\n }\n const subName = sub.name;\n if (!subName) {\n continue;\n }\n const params = sub.parameters ?? { type: 'object' };\n out.push({\n type: 'function',\n function: {\n name: `${ns}.${subName}`,\n description: sub.description ?? '',\n // eslint-disable-next-line no-restricted-syntax -- schema is Record<string,unknown> by OpenAPI convention\n parameters: params as Record<string, unknown>,\n },\n });\n }\n }\n continue;\n }\n }\n return out;\n}\n\nfunction mapToolChoice(choice: ResponsesToolChoice): OpenAiChatToolChoice | undefined {\n if (choice == null) {\n return undefined;\n }\n if (choice === 'auto' || choice === 'required' || choice === 'none') {\n return choice;\n }\n if (typeof choice === 'object') {\n if (choice.type === 'function' && 'function' in choice && choice.function?.name) {\n return { type: 'function', function: { name: choice.function.name } };\n }\n return choice;\n }\n return undefined;\n}\n\nfunction isEmpty(value: unknown): boolean {\n if (value == null) {\n return true;\n }\n if (typeof value === 'string') {\n return value.length === 0;\n }\n if (Array.isArray(value)) {\n return value.length === 0;\n }\n if (typeof value === 'object' && value !== null) {\n return Object.keys(value).length === 0;\n }\n return false;\n}\n\n/**\n * Reorder messages so that every `role: 'tool'` message immediately follows\n * the `role: 'assistant'` message that contains its matching `tool_call_id`.\n *\n * Codex Desktop sometimes injects a user message (e.g. a warning) between a\n * `function_call` and the corresponding `function_call_output`. OpenAI Chat\n * format requires strict alternating: assistant (with tool_calls) → tool →\n * assistant → tool → … This function repairs that ordering.\n */\nfunction repairToolMessageOrder(messages: OpenAiChatMessage[]): void {\n if (messages.length === 0) {\n return;\n }\n\n // Phase 1: group messages by assistant \"block\". A block starts at an\n // assistant message (possibly with tool_calls) and contains any subsequent\n // non-assistant messages until the next assistant message.\n interface Block {\n assistant: OpenAiChatMessage;\n trailing: OpenAiChatMessage[]; // user / tool / system messages after assistant\n }\n\n const blocks: Block[] = [];\n let currentBlock: Block | null = null;\n\n for (const msg of messages) {\n if (msg.role === 'assistant') {\n currentBlock = { assistant: msg, trailing: [] };\n blocks.push(currentBlock);\n } else if (currentBlock) {\n currentBlock.trailing.push(msg);\n } else {\n // Message before any assistant (e.g. system) – keep as a standalone pseudo-block\n blocks.push({ assistant: { role: 'assistant', content: null }, trailing: [msg] });\n }\n }\n\n // Phase 2: for each block, sort trailing messages so that tool messages\n // whose tool_call_id matches one of the assistant's tool_calls come first.\n for (const block of blocks) {\n const toolCallIds = new Set(\n (block.assistant.tool_calls ?? []).map((tc) => tc.id).filter(Boolean),\n );\n if (toolCallIds.size === 0) {\n continue;\n }\n\n const tools: OpenAiChatMessage[] = [];\n const others: OpenAiChatMessage[] = [];\n for (const m of block.trailing) {\n if (\n m.role === 'tool' &&\n m.tool_call_id !== undefined &&\n toolCallIds.has(String(m.tool_call_id))\n ) {\n tools.push(m);\n } else {\n others.push(m);\n }\n }\n block.trailing = [...tools, ...others];\n }\n\n // Phase 3: flatten back into messages array\n messages.length = 0;\n for (const block of blocks) {\n if (block.assistant.tool_calls || block.assistant.content != null) {\n messages.push(block.assistant);\n }\n messages.push(...block.trailing);\n }\n}\n","import type { OpenAiChatResponse, OpenAiChatToolCall } from '../../types/openai_chat.js';\nimport type {\n ResponsesOutputFunctionCall,\n ResponsesOutputItem,\n ResponsesResponse,\n} from '../../types/responses.js';\nimport { makeId } from '../../utils/id.js';\nimport { safeJsonParse, jsonStringifySafe } from '../../utils/json.js';\n\nexport interface TranslateResponseOptions {\n responseId?: string;\n createdAt?: number;\n model?: string;\n /** Chat Completions tool list from the translated request — used to recover\n * namespace when the upstream omits the \"namespace.\" prefix in a tool call. */\n requestTools?: unknown[];\n}\n\nconst SHELL_TOOL_NAMES = new Set(['shell', 'container.exec', 'shell_command']);\n\n// ==============================================================================\n// Namespace Tool Helpers\n// ==============================================================================\n\n/** Build shortName → namespace map — handles both flattened Chat Completions\n * tools (\"ns.tool\") and original Responses API namespace tools. */\nfunction buildShortNameToNamespace(tools: unknown[]): Map<string, string> {\n const map = new Map<string, string>();\n for (const tool of tools) {\n if (!tool || typeof tool !== 'object') {\n continue;\n }\n // eslint-disable-next-line no-restricted-syntax -- Record extraction from unknown union\n const entry = tool as Record<string, unknown>;\n // eslint-disable-next-line no-restricted-syntax -- nested Record extraction\n const fn = entry.function as Record<string, unknown> | undefined;\n const flatName =\n typeof fn?.name === 'string' ? fn.name : typeof entry.name === 'string' ? entry.name : '';\n const dotIdx = flatName.indexOf('.');\n if (dotIdx !== -1) {\n map.set(flatName.slice(dotIdx + 1), flatName.slice(0, dotIdx));\n continue;\n }\n if (\n entry.type === 'namespace' &&\n typeof entry.name === 'string' &&\n Array.isArray(entry.tools)\n ) {\n const ns = entry.name;\n // eslint-disable-next-line no-restricted-syntax -- unknown[] iteration over nested tools\n for (const sub of entry.tools as unknown[]) {\n if (!sub || typeof sub !== 'object') {\n continue;\n }\n // eslint-disable-next-line no-restricted-syntax -- Record extraction from unknown\n const subEntry = sub as Record<string, unknown>;\n const subName = typeof subEntry.name === 'string' ? subEntry.name : '';\n if (subName) {\n map.set(subName, ns);\n }\n }\n }\n }\n return map;\n}\n\n/** Convert an OpenAI Chat response into a Responses-API response. */\nexport function translateResponse(\n body: OpenAiChatResponse,\n options: TranslateResponseOptions = {},\n): ResponsesResponse {\n const createdAt = options.createdAt ?? body.created ?? Math.floor(Date.now() / 1000);\n const id = options.responseId ?? body.id ?? makeId('resp');\n const model = options.model ?? body.model ?? '';\n\n const choice = body.choices?.[0];\n const message = choice?.message;\n const output: ResponsesOutputItem[] = [];\n\n const shortNameToNs = buildShortNameToNamespace(options.requestTools ?? []);\n if (message?.tool_calls?.length) {\n for (const tc of message.tool_calls) {\n const item = mapToolCallToOutput(tc, shortNameToNs);\n if (item) {\n output.push(item);\n }\n }\n }\n\n if (typeof message?.content === 'string' && message.content) {\n output.push({\n id: makeId('msg'),\n type: 'message',\n role: 'assistant',\n status: 'completed',\n content: [{ type: 'output_text', text: message.content }],\n });\n }\n\n const usage = body.usage ?? {};\n const input = usage.prompt_tokens ?? 0;\n const completion = usage.completion_tokens ?? 0;\n const total = usage.total_tokens ?? input + completion;\n const cached = usage.prompt_tokens_details?.cached_tokens ?? 0;\n\n return {\n id,\n object: 'response',\n created_at: createdAt,\n model,\n status: 'completed',\n output,\n usage: {\n input_tokens: input,\n output_tokens: completion,\n total_tokens: total,\n input_tokens_details: {\n cached_tokens: cached,\n },\n },\n };\n}\n\nfunction mapToolCallToOutput(\n tc: OpenAiChatToolCall,\n shortNameToNs?: Map<string, string>,\n): ResponsesOutputFunctionCall | undefined {\n const name = tc.function?.name;\n if (!name) {\n return undefined;\n }\n const callId = tc.id ?? makeId('call');\n let args = tc.function?.arguments ?? '';\n if (typeof args !== 'string') {\n args = jsonStringifySafe(args ?? {});\n }\n\n // Restore namespace so codex can route the call to the correct handler.\n // Skip splitting if the full name is already a known shell tool (e.g. \"container.exec\").\n // Case 1: upstream preserved the prefix → split on first dot.\n // Case 2: upstream stripped the prefix → look up the reverse map.\n let resolvedName = name;\n let resolvedNamespace: string | undefined;\n if (!SHELL_TOOL_NAMES.has(name)) {\n const dotIdx = name.indexOf('.');\n if (dotIdx !== -1) {\n resolvedNamespace = name.slice(0, dotIdx);\n resolvedName = name.slice(dotIdx + 1);\n } else {\n resolvedNamespace = shortNameToNs?.get(name);\n }\n }\n\n const item: ResponsesOutputFunctionCall = {\n id: callId,\n type: 'function_call',\n status: 'completed',\n name: resolvedName,\n ...(resolvedNamespace ? { namespace: resolvedNamespace } : {}),\n arguments: args,\n call_id: callId,\n };\n const thoughtSignature = getThoughtSignature(tc);\n if (thoughtSignature) {\n item.thought_signature = thoughtSignature;\n }\n\n if (SHELL_TOOL_NAMES.has(resolvedName)) {\n item.type = 'local_shell_call';\n const parsed = safeJsonParse<{ command?: string[] }>(args);\n item.action = { type: 'exec', command: parsed?.command ?? [] };\n }\n\n return item;\n}\n\nfunction getThoughtSignature(tc: OpenAiChatToolCall): string | undefined {\n const sig = tc.extra_content?.google?.thought_signature ?? tc.thought_signature;\n return typeof sig === 'string' && sig ? sig : undefined;\n}\n","// ==============================================================================\n// Stream Translator\n// ==============================================================================\n\nimport type {\n OpenAiChatStreamChunk,\n OpenAiChatStreamDelta,\n OpenAiChatStreamDeltaToolCall,\n} from '../../types/openai_chat.js';\nimport type {\n ResponsesOutputFunctionCall,\n ResponsesOutputItem,\n ResponsesOutputMessage,\n ResponsesResponse,\n ResponsesStreamEvent,\n} from '../../types/responses.js';\nimport { parseSseStream, type SseMessage } from '../../utils/sse.js';\nimport { makeId } from '../../utils/id.js';\nimport { safeJsonParse, jsonStringifySafe } from '../../utils/json.js';\n\nexport interface ResponsesStreamMetadata {\n temperature?: number;\n top_p?: number;\n tools?: unknown[];\n tool_choice?: unknown;\n store?: boolean;\n metadata?: Record<string, unknown>;\n}\n\nexport interface TranslateStreamOptions {\n model?: string;\n responseId?: string;\n createdAt?: number;\n requestMetadata?: ResponsesStreamMetadata;\n}\n\nconst SHELL_TOOL_NAMES = new Set(['shell', 'container.exec', 'shell_command']);\n\n/** Build a shortName → namespace map so we can restore the namespace when an\n * upstream (e.g. DeepSeek) omits the \"namespace.\" prefix in a tool-call.\n *\n * Handles two formats that may appear in the tools list:\n * 1. Flattened Chat Completions tools: { function: { name: \"ns.tool\" } }\n * 2. Original Responses API namespace tools: { type: \"namespace\", name: \"ns\", tools: [...] }\n */\nfunction buildShortNameToNamespace(tools: unknown[]): Map<string, string> {\n const map = new Map<string, string>();\n for (const tool of tools) {\n if (!tool || typeof tool !== 'object') {\n continue;\n }\n // eslint-disable-next-line no-restricted-syntax -- Record extraction from unknown union\n const entry = tool as Record<string, unknown>;\n\n // Format 1: flattened Chat Completions tool with \"namespace.name\"\n // eslint-disable-next-line no-restricted-syntax -- nested Record extraction\n const fn = entry.function as Record<string, unknown> | undefined;\n const flatName =\n typeof fn?.name === 'string' ? fn.name : typeof entry.name === 'string' ? entry.name : '';\n const dotIdx = flatName.indexOf('.');\n if (dotIdx !== -1) {\n map.set(flatName.slice(dotIdx + 1), flatName.slice(0, dotIdx));\n continue;\n }\n\n // Format 2: Responses API namespace tool with nested sub-tools\n if (\n entry.type === 'namespace' &&\n typeof entry.name === 'string' &&\n Array.isArray(entry.tools)\n ) {\n const ns = entry.name;\n // eslint-disable-next-line no-restricted-syntax -- unknown[] iteration over nested tools\n for (const sub of entry.tools as unknown[]) {\n if (!sub || typeof sub !== 'object') {\n continue;\n }\n // eslint-disable-next-line no-restricted-syntax -- Record extraction from unknown\n const subEntry = sub as Record<string, unknown>;\n const subName = typeof subEntry.name === 'string' ? subEntry.name : '';\n if (subName) {\n map.set(subName, ns);\n }\n }\n }\n }\n return map;\n}\n\n/**\n * Consume an OpenAI-chat-style SSE stream and yield Responses-API SSE events.\n */\nexport async function* translateStream(\n stream: ReadableStream<Uint8Array>,\n options: TranslateStreamOptions = {},\n): AsyncGenerator<ResponsesStreamEvent, void, void> {\n const translator = new StreamTranslator(options);\n yield translator.createInitialEvent();\n\n for await (const msg of parseSseStream(stream)) {\n if (isDoneMessage(msg)) {\n break;\n }\n const chunk = safeJsonParse<OpenAiChatStreamChunk>(msg.data);\n if (!chunk) {\n continue;\n }\n yield* translator.handleChunk(chunk);\n }\n\n yield* translator.finalize();\n}\n\nfunction isDoneMessage(msg: SseMessage): boolean {\n return msg.data.trim() === '[DONE]';\n}\n\ninterface ToolCallState {\n outputIndex: number;\n item: ResponsesOutputFunctionCall;\n}\n\nfunction getToolCallKey(tc: OpenAiChatStreamDeltaToolCall, ordinal: number): string {\n if (typeof tc.index === 'number') {\n return `index:${tc.index}`;\n }\n if (tc.id) {\n return `id:${tc.id}`;\n }\n return `ordinal:${ordinal}`;\n}\n\n// ==============================================================================\n// Stateful Event Translation\n// ==============================================================================\n\nclass StreamTranslator {\n private readonly model: string;\n private readonly responseId: string;\n private readonly createdAt: number;\n private readonly metadata: ResponsesStreamMetadata;\n private seq = 0;\n private outputCounter = 0;\n\n private textItem?: ResponsesOutputMessage;\n private textItemIndex = -1;\n private textBuffer = '';\n\n private readonly toolCalls = new Map<string, ToolCallState>();\n // shortName → namespace reverse map built from flattened namespace tools in\n // the translated request. Used to restore the namespace when an upstream\n // (e.g. DeepSeek) omits the \"namespace.\" prefix in its tool-call response.\n private readonly shortNameToNamespace: Map<string, string>;\n\n private inputTokens = 0;\n private outputTokens = 0;\n private cachedTokens = 0;\n\n constructor(options: TranslateStreamOptions) {\n this.model = options.model ?? '';\n this.responseId = options.responseId ?? makeId('resp');\n this.createdAt = options.createdAt ?? Math.floor(Date.now() / 1000);\n this.metadata = options.requestMetadata ?? {};\n this.shortNameToNamespace = buildShortNameToNamespace(this.metadata.tools ?? []);\n }\n\n createInitialEvent(): ResponsesStreamEvent {\n const toolsArr: unknown[] = this.metadata.tools ?? [];\n const response: Partial<ResponsesResponse> = {\n id: this.responseId,\n object: 'response',\n created_at: this.createdAt,\n model: this.model,\n status: 'in_progress',\n temperature: this.metadata.temperature,\n top_p: this.metadata.top_p,\n tool_choice: this.metadata.tool_choice,\n tools: toolsArr,\n parallel_tool_calls: true,\n store: this.metadata.store ?? true,\n metadata: this.metadata.metadata ?? {},\n output: [],\n };\n return this.makeEvent('response.created', { response });\n }\n\n *handleChunk(chunk: OpenAiChatStreamChunk): Generator<ResponsesStreamEvent, void, void> {\n if (chunk.usage) {\n if (typeof chunk.usage.prompt_tokens === 'number') {\n this.inputTokens = chunk.usage.prompt_tokens;\n }\n if (typeof chunk.usage.completion_tokens === 'number') {\n this.outputTokens = chunk.usage.completion_tokens;\n }\n const cached = chunk.usage.prompt_tokens_details?.cached_tokens;\n if (typeof cached === 'number') {\n this.cachedTokens = cached;\n }\n }\n\n const choice = chunk.choices?.[0];\n const delta: OpenAiChatStreamDelta | undefined = choice?.delta;\n if (!delta) {\n return;\n }\n\n if (delta.tool_calls?.length) {\n for (const [ordinal, tc] of delta.tool_calls.entries()) {\n const key = getToolCallKey(tc, ordinal);\n let state = this.toolCalls.get(key);\n if (!state) {\n const outputIndex = this.outputCounter++;\n const callId = tc.id ?? makeId('call');\n const item: ResponsesOutputFunctionCall = {\n id: callId,\n type: 'function_call',\n status: 'in_progress',\n name: '',\n arguments: '',\n call_id: callId,\n };\n state = { outputIndex, item };\n this.toolCalls.set(key, state);\n yield this.makeEvent('response.output_item.added', {\n response_id: this.responseId,\n output_index: outputIndex,\n item,\n });\n }\n\n const fn = tc.function;\n const thoughtSignature = getThoughtSignature(tc);\n if (thoughtSignature) {\n state.item.thought_signature = thoughtSignature;\n }\n if (fn?.name) {\n state.item.name = (state.item.name ?? '') + fn.name;\n }\n if (fn?.arguments != null) {\n const partial =\n typeof fn.arguments === 'string' ? fn.arguments : jsonStringifySafe(fn.arguments);\n if (partial) {\n state.item.arguments = (state.item.arguments ?? '') + partial;\n yield this.makeEvent('response.function_call_arguments.delta', {\n response_id: this.responseId,\n item_id: state.item.id,\n output_index: state.outputIndex,\n delta: partial,\n });\n }\n }\n }\n }\n\n if (typeof delta.content === 'string' && delta.content) {\n if (!this.textItem) {\n const outputIndex = this.outputCounter++;\n this.textItemIndex = outputIndex;\n this.textItem = {\n id: makeId('msg'),\n type: 'message',\n role: 'assistant',\n status: 'in_progress',\n content: [{ type: 'output_text', text: '' }],\n };\n yield this.makeEvent('response.output_item.added', {\n response_id: this.responseId,\n output_index: outputIndex,\n item: this.textItem,\n });\n }\n this.textBuffer += delta.content;\n // eslint-disable-next-line no-restricted-syntax -- Narrow union to text content\n const textContent = this.textItem.content[0] as { text: string };\n textContent.text = this.textBuffer;\n yield this.makeEvent('response.output_text.delta', {\n response_id: this.responseId,\n item_id: this.textItem.id,\n output_index: this.textItemIndex,\n content_index: 0,\n delta: delta.content,\n });\n }\n }\n\n *finalize(): Generator<ResponsesStreamEvent, void, void> {\n const items: { index: number; item: ResponsesOutputItem }[] = [];\n\n if (this.textItem) {\n this.textItem.status = 'completed';\n items.push({ index: this.textItemIndex, item: this.textItem });\n }\n\n for (const state of this.toolCalls.values()) {\n const item = state.item;\n item.status = 'completed';\n // Restore namespace so codex can route the call to the correct handler.\n // Skip splitting if the full name is already a known shell tool (e.g. \"container.exec\").\n // Case 1: upstream preserved the prefix → split on first dot.\n // Case 2: upstream stripped the prefix → look up the reverse map.\n if (item.name && !SHELL_TOOL_NAMES.has(item.name)) {\n const dotIdx = item.name.indexOf('.');\n if (dotIdx !== -1) {\n item.namespace = item.name.slice(0, dotIdx);\n item.name = item.name.slice(dotIdx + 1);\n } else {\n const ns = this.shortNameToNamespace.get(item.name);\n if (ns) {\n item.namespace = ns;\n }\n }\n }\n if (item.name && SHELL_TOOL_NAMES.has(item.name)) {\n item.type = 'local_shell_call';\n const parsed = safeJsonParse<{ command?: string[] }>(item.arguments ?? '');\n item.action = { type: 'exec', command: parsed?.command ?? [] };\n }\n items.push({ index: state.outputIndex, item });\n }\n\n items.sort((alpha, beta) => alpha.index - beta.index);\n\n for (const { index, item } of items) {\n yield this.makeEvent('response.output_item.done', {\n response_id: this.responseId,\n output_index: index,\n item,\n });\n }\n\n const output = items.map((item) => item.item);\n const finalToolsArr: unknown[] = this.metadata.tools ?? [];\n const total = this.inputTokens + this.outputTokens;\n\n const response: Partial<ResponsesResponse> = {\n id: this.responseId,\n object: 'response',\n created_at: this.createdAt,\n completed_at: Math.floor(Date.now() / 1000),\n model: this.model,\n status: 'completed',\n temperature: this.metadata.temperature,\n top_p: this.metadata.top_p,\n tool_choice: this.metadata.tool_choice,\n tools: finalToolsArr,\n parallel_tool_calls: true,\n store: this.metadata.store ?? true,\n metadata: this.metadata.metadata ?? {},\n output,\n usage: {\n input_tokens: this.inputTokens,\n output_tokens: this.outputTokens,\n total_tokens: total,\n input_tokens_details: {\n cached_tokens: this.cachedTokens,\n },\n },\n };\n\n yield this.makeEvent('response.completed', { response });\n }\n\n private makeEvent(type: string, data: Record<string, unknown>): ResponsesStreamEvent {\n this.seq += 1;\n return {\n id: makeId('evt'),\n object: 'response.event',\n type,\n created_at: Math.floor(Date.now() / 1000),\n sequence_number: this.seq,\n ...data,\n };\n }\n}\n\nfunction getThoughtSignature(tc: OpenAiChatStreamDeltaToolCall): string | undefined {\n const sig = tc.extra_content?.google?.thought_signature ?? tc.thought_signature;\n return typeof sig === 'string' && sig ? sig : undefined;\n}\n","// ==============================================================================\n// Tool Name Sanitizer\n// ==============================================================================\n// Some Chat Completions upstreams (e.g. DeepSeek) reject tool names that\n// contain chars outside [a-zA-Z0-9_-]. Namespace tools flattened by\n// translateRequest use dots as separators (e.g. \"multi_agent_v1.spawn_agent\").\n//\n// These helpers sanitize names before the upstream request and restore the\n// originals in the response/stream so callers always see the original names.\n\n/** Replace [^a-zA-Z0-9_-] with '_'; mutates body.tools in place.\n * Returns a map of sanitized→original for every renamed tool. */\nexport function sanitizeUpstreamToolNames(body: Record<string, unknown>): Map<string, string> {\n const map = new Map<string, string>();\n const tools = body.tools;\n if (!Array.isArray(tools)) {\n return map;\n }\n for (const tool of tools) {\n if (!tool || typeof tool !== 'object') {\n continue;\n }\n // eslint-disable-next-line no-restricted-syntax -- Chat Completions tool is Record; no stable type\n const toolRecord = tool as Record<string, unknown>;\n const fn = toolRecord.function;\n if (!fn || typeof fn !== 'object') {\n continue;\n }\n // eslint-disable-next-line no-restricted-syntax -- function field is Record; no stable type\n const fnRecord = fn as Record<string, unknown>;\n const original = fnRecord.name;\n if (typeof original !== 'string') {\n continue;\n }\n const sanitized = original.replace(/[^a-zA-Z0-9_-]/g, '_');\n if (sanitized !== original) {\n map.set(sanitized, original);\n fnRecord.name = sanitized;\n }\n }\n return map;\n}\n\n/** Restore tool_call function names in a non-streaming Chat Completions response. */\nexport function restoreToolNamesInChatResponse<T extends Record<string, unknown>>(\n body: T,\n map: Map<string, string>,\n): T {\n if (map.size === 0) {\n return body;\n }\n const choices = body.choices;\n if (!Array.isArray(choices)) {\n return body;\n }\n for (const choice of choices) {\n if (!choice || typeof choice !== 'object') {\n continue;\n }\n // eslint-disable-next-line no-restricted-syntax -- Chat Completions choice is Record; no stable type\n const choiceRecord = choice as Record<string, unknown>;\n const message = choiceRecord.message;\n if (!message || typeof message !== 'object') {\n continue;\n }\n // eslint-disable-next-line no-restricted-syntax -- message is Record; no stable type\n const msg = message as Record<string, unknown>;\n const toolCalls = msg.tool_calls;\n if (!Array.isArray(toolCalls)) {\n continue;\n }\n for (const tc of toolCalls) {\n if (!tc || typeof tc !== 'object') {\n continue;\n }\n // eslint-disable-next-line no-restricted-syntax -- tool call is Record; no stable type\n const callRecord = tc as Record<string, unknown>;\n const fn = callRecord.function;\n if (!fn || typeof fn !== 'object') {\n continue;\n }\n // eslint-disable-next-line no-restricted-syntax -- function is Record; no stable type\n const fnRecord = fn as Record<string, unknown>;\n const name = fnRecord.name;\n if (typeof name === 'string' && map.has(name)) {\n fnRecord.name = map.get(name);\n }\n }\n }\n return body;\n}\n\n/** Wrap a ReadableStream<Uint8Array> to restore tool names on the fly (handles SSE). */\nexport function createToolNameRestoreStream(\n body: ReadableStream<Uint8Array>,\n map: Map<string, string>,\n): ReadableStream<Uint8Array> {\n if (map.size === 0) {\n return body;\n }\n const entries = Array.from(map.entries());\n const decoder = new TextDecoder();\n const encoder = new TextEncoder();\n const reader = body.getReader();\n\n return new ReadableStream<Uint8Array>({\n async pull(controller) {\n // eslint-disable-next-line no-restricted-syntax -- try/catch needed for stream error handling\n try {\n const { value, done } = await reader.read();\n if (done) {\n controller.close();\n return;\n }\n let text = decoder.decode(value, { stream: true });\n for (const [sanitized, original] of entries) {\n const escapedSanitized = sanitized.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const re = new RegExp(`(\"name\"\\\\s*:\\\\s*\")${escapedSanitized}(\")`, 'g');\n text = text.replace(re, `$1${original}$2`);\n }\n controller.enqueue(encoder.encode(text));\n } catch (err) {\n controller.error(err);\n }\n },\n cancel() {\n reader.cancel().catch(() => {\n /* noop */\n });\n },\n });\n}\n","// ==============================================================================\n// URL & Format Helpers\n// ==============================================================================\n\n// === Config & Types ===\n/**\n * Drop-in `fetch` wrapper that translates OpenAI Responses API traffic\n * to an upstream API format (Anthropic Messages or OpenAI Chat).\n */\n\nimport * as anthropic from './translate/anthropic/index.js';\nimport * as openai from './translate/openai/index.js';\nimport { encodeSseEvent } from './utils/sse.js';\nimport type {\n ResponsesRequest,\n ResponsesStreamEvent,\n ResponsesResponse,\n ResponsesTool,\n} from './types/responses.js';\nimport type { AnthropicResponse, AnthropicThinkingConfig } from './types/anthropic.js';\nimport type { OpenAiChatResponse } from './types/openai_chat.js';\nimport {\n sanitizeUpstreamToolNames,\n restoreToolNamesInChatResponse,\n createToolNameRestoreStream,\n} from './tool-name-sanitizer.js';\n\nexport type UpstreamFormat = 'anthropic' | 'openai-chat';\n\nexport interface CacheStats {\n cachedTokens: number;\n cacheCreationTokens: number;\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n}\n\nexport interface CreateResponsesFetchOptions {\n /** Upstream API format. If omitted, inferred from `baseUrl`. */\n upstreamFormat?: UpstreamFormat;\n /** Upstream endpoint URL. Required. */\n baseUrl: string;\n /** Override upstream API version header (Anthropic only). */\n apiVersion?: string;\n /** Replace the caller-provided `model` field before translation. */\n model?: string;\n /** Extra headers merged into every upstream call. */\n defaultHeaders?: Record<string, string>;\n /** Underlying fetch. Defaults to `globalThis.fetch`. */\n fetch?: typeof fetch;\n /** Non-/responses traffic forward target. Defaults to `options.fetch`. */\n passthroughFetch?: typeof fetch;\n /** Drop image/file parts from user messages (e.g. DeepSeek text-only models). */\n dropImages?: boolean;\n /** Drop tools from the request before translation. Return true to drop a tool.\n * Use to reduce payload size when the upstream has a limit (e.g. DeepSeek ECONNRESET\n * on 252 KB requests with 143 tools). Applied before namespace flattening. */\n dropTools?: (tool: ResponsesTool) => boolean;\n /** Fallback thought signature for Gemini OpenAI-compatible tool histories. */\n fallbackThoughtSignature?: string;\n /** Optional callback to receive cache statistics. */\n onCacheStats?: (stats: CacheStats) => void;\n /** Override reasoning_effort sent to the upstream model (OpenAI Chat / Anthropic). */\n // ==============================================================================\n // Request Building\n // ==============================================================================\n\n reasoning_effort?: string;\n /** Override thinking configuration sent to the upstream model. */\n thinking?: unknown;\n /** Timeout in milliseconds for upstream requests. Defaults to no timeout. */\n timeoutMs?: number;\n /** Fallback upstream for requests where the last user message contains images. */\n fallbackUpstream?: {\n baseUrl: string;\n upstreamFormat?: UpstreamFormat;\n model?: string;\n defaultHeaders?: Record<string, string>;\n apiVersion?: string;\n reasoning_effort?: string;\n thinking?: unknown;\n };\n}\n\nexport function createResponsesFetch(options: CreateResponsesFetchOptions): typeof fetch {\n if (!options.baseUrl) {\n throw new Error('baseUrl is required');\n }\n\n const rawFormat = options.upstreamFormat;\n const format = rawFormat\n ? normalizeFormat(rawFormat)\n : (inferFormatFromUrl(options.baseUrl) ?? inferFormatFromModel(options.model) ?? 'openai-chat');\n if (!format) {\n throw new Error(\n `Unsupported upstream format: ${options.upstreamFormat}. Use 'anthropic' or 'openai-chat'`,\n );\n }\n\n const baseFetch = options.fetch ?? globalThis.fetch;\n if (!baseFetch) {\n throw new Error('fetch is not available; pass options.fetch');\n }\n const passthrough = options.passthroughFetch ?? baseFetch;\n\n return async (input, init) => {\n const url = urlOf(input);\n if (!isResponsesEndpoint(url)) {\n return passthrough(input, init);\n }\n\n const { body, signal, method, headers } = await extractRequest(input, init);\n if (method !== 'POST') {\n return passthrough(input, init);\n }\n\n let parsed: ResponsesRequest | undefined;\n // eslint-disable-next-line no-restricted-syntax -- try/catch needed for server-side HTTP error handling\n try {\n parsed = body ? JSON.parse(body) : undefined;\n } catch {\n return jsonErrorResponse(400, 'Invalid JSON body for /responses');\n }\n if (!parsed) {\n return jsonErrorResponse(400, 'Missing body for /responses');\n }\n\n if (options.model) {\n parsed.model = options.model;\n }\n return handleResponses(parsed, format, options, baseFetch, headers, signal, options.dropImages);\n };\n}\n\n// ── format helpers ──\n\nfunction normalizeBaseUrl(url: string, format: UpstreamFormat): string {\n // eslint-disable-next-line no-restricted-syntax -- try/catch needed for server-side HTTP error handling\n try {\n const parsedUrl = new URL(url);\n const path = parsedUrl.pathname.replace(/\\/+$/, '');\n if (format === 'anthropic') {\n if (path.endsWith('/v1/messages') || path.endsWith('/messages')) {\n return parsedUrl.toString();\n }\n if (path.endsWith('/v1')) {\n parsedUrl.pathname += '/messages';\n return parsedUrl.toString();\n }\n parsedUrl.pathname = '/v1/messages';\n } else {\n if (path.endsWith('/v1/chat/completions') || path.endsWith('/chat/completions')) {\n return parsedUrl.toString();\n }\n if (path.endsWith('/v1')) {\n parsedUrl.pathname += '/chat/completions';\n return parsedUrl.toString();\n }\n parsedUrl.pathname = '/v1/chat/completions';\n }\n return parsedUrl.toString();\n } catch {\n return url;\n }\n}\n\nfunction normalizeFormat(format: string): UpstreamFormat | null {\n const fmt: UpstreamFormat | null =\n format === 'anthropic' || format === 'openai-chat' ? format : null;\n return fmt;\n}\n\nfunction inferFormatFromUrl(baseUrl: string): UpstreamFormat | null {\n // eslint-disable-next-line no-restricted-syntax -- try/catch needed for server-side HTTP error handling\n try {\n const parsedUrl = new URL(baseUrl);\n const path = parsedUrl.pathname.replace(/\\/+$/, '');\n if (/\\/messages$/.test(path) || parsedUrl.hostname.toLowerCase().includes('anthropic')) {\n return 'anthropic';\n }\n if (/\\/chat\\/completions$/.test(path)) {\n return 'openai-chat';\n }\n } catch {\n /* ignore */\n }\n return null;\n}\n\n/** Infer upstream format from model name. */\nfunction inferFormatFromModel(model: string | undefined): UpstreamFormat | null {\n if (!model) {\n return null;\n }\n if (/^claude/i.test(model)) {\n return 'anthropic';\n }\n return null;\n}\n\n// ── request extraction ──\n\nfunction isResponsesEndpoint(url: string): boolean {\n // eslint-disable-next-line no-restricted-syntax -- try/catch needed for server-side HTTP error handling\n try {\n return /\\/v1\\/responses\\/?$/.test(new URL(url, 'http://_internal_').pathname);\n } catch {\n return /\\/v1\\/responses(?:\\?|$)/.test(url);\n }\n}\n// ==============================================================================\n// Main Fetch Function\n// ==============================================================================\n\nfunction urlOf(input: RequestInfo | URL): string {\n if (typeof input === 'string') {\n return input;\n }\n if (input instanceof URL) {\n return input.toString();\n }\n if (typeof Request !== 'undefined' && input instanceof Request) {\n return input.url;\n }\n return String(input);\n}\n\nfunction parseHeaders(raw: HeadersInit | undefined): Record<string, string> {\n const out: Record<string, string> = {};\n if (!raw) {\n return out;\n }\n if (typeof Headers !== 'undefined' && raw instanceof Headers) {\n raw.forEach((val, key) => {\n out[key.toLowerCase()] = val;\n });\n return out;\n }\n if (Array.isArray(raw)) {\n for (const [k, v] of raw) {\n out[String(k).toLowerCase()] = String(v);\n }\n return out;\n }\n for (const [k, v] of Object.entries(raw)) {\n out[k.toLowerCase()] = String(v);\n }\n return out;\n}\n\nasync function extractRequest(\n input: RequestInfo | URL,\n init?: RequestInit,\n): Promise<{\n body: string | undefined;\n signal: AbortSignal | undefined;\n method: string;\n headers: Record<string, string>;\n}> {\n if (typeof Request !== 'undefined' && input instanceof Request) {\n const text = await input.clone().text();\n const headers: HeadersInit = parseHeaders(input.headers);\n return { body: text || undefined, signal: input.signal, method: input.method, headers };\n }\n const method = init?.method?.toUpperCase() ?? 'GET';\n const body =\n init?.body != null\n ? typeof init.body === 'string'\n ? init.body\n : await readBody(init.body)\n : undefined;\n return { body, signal: init?.signal, method, headers: parseHeaders(init?.headers) };\n}\n\nasync function readBody(body: BodyInit): Promise<string> {\n if (typeof body === 'string') {\n return body;\n }\n if (body instanceof Uint8Array || body instanceof ArrayBuffer) {\n return new TextDecoder().decode(body);\n }\n return String(body);\n}\n\n// ── main handler ──\n\nasync function handleResponses(\n request: ResponsesRequest,\n format: UpstreamFormat,\n options: CreateResponsesFetchOptions,\n baseFetch: typeof fetch,\n incomingHeaders: Record<string, string>,\n // ==============================================================================\n // HTTP Client\n // ==============================================================================\n\n signal: AbortSignal | undefined,\n dropImages?: boolean,\n): Promise<Response> {\n // Auto-fallback: if this upstream drops images but the last user message has them,\n // transparently switch to the fallback upstream.\n if (dropImages && options.fallbackUpstream && lastUserMessageHasImage(request)) {\n dropImages = false;\n const fb = options.fallbackUpstream;\n options = { ...options, ...fb, fallbackUpstream: undefined };\n format =\n fb.upstreamFormat ??\n inferFormatFromUrl(fb.baseUrl) ??\n inferFormatFromModel(fb.model) ??\n format;\n if (options.model) {\n request.model = options.model;\n }\n const fbModel = fb.model ? `, model: ${fb.model}` : '';\n console.warn(`[fallback] last user message has image, routing to ${fb.baseUrl}${fbModel}`);\n }\n\n if (options.dropTools && request.tools) {\n const { dropTools } = options;\n request = { ...request, tools: request.tools.filter((tool) => !dropTools(tool)) };\n }\n\n const streaming = request.stream ?? false;\n const resolvedUrl = normalizeBaseUrl(options.baseUrl, format);\n const { upstreamBody, requestMetadata } = buildUpstreamBody(\n request,\n format,\n streaming,\n options.baseUrl,\n dropImages,\n options.reasoning_effort,\n options.thinking,\n options.fallbackThoughtSignature,\n );\n const upstreamHeaders = buildUpstreamHeaders(format, options, incomingHeaders);\n\n // Sanitize tool names: replace chars outside [a-zA-Z0-9_-] (e.g. dots) with '_'\n // and restore originals in the response so callers see the original names.\n const toolNameMap =\n format === 'openai-chat'\n ? // eslint-disable-next-line no-restricted-syntax -- upstreamBody is unknown; cast to Record for tool mutation\n sanitizeUpstreamToolNames(upstreamBody as Record<string, unknown>)\n : new Map<string, string>();\n\n const upstream = await baseFetch(resolvedUrl, {\n method: 'POST',\n headers: upstreamHeaders,\n body: JSON.stringify(upstreamBody),\n signal,\n });\n\n if (!upstream.ok) {\n return new Response(await upstream.text().catch(() => ''), {\n status: upstream.status,\n headers: { 'content-type': 'application/json' },\n });\n }\n\n if (!streaming) {\n const rawBody = await upstream.json();\n const restoredBody = restoreToolNamesInChatResponse(\n // eslint-disable-next-line no-restricted-syntax -- upstream json() returns unknown; cast to Record for tool name restoration\n rawBody as Record<string, unknown>,\n toolNameMap,\n );\n const translated =\n format === 'anthropic'\n ? // eslint-disable-next-line no-restricted-syntax -- union type narrowing requires type assertion\n anthropic.translateResponse(restoredBody as unknown as AnthropicResponse, {\n model: request.model,\n })\n : // eslint-disable-next-line no-restricted-syntax -- union type narrowing requires type assertion\n openai.translateResponse(restoredBody as unknown as OpenAiChatResponse, {\n model: request.model,\n requestTools: request.tools ?? [],\n });\n options.onCacheStats?.(extractCacheStatsFromResponse(translated));\n return new Response(JSON.stringify(translated), {\n status: 200,\n headers: { 'content-type': 'application/json' },\n });\n }\n\n if (!upstream.body) {\n return jsonErrorResponse(502, 'Upstream streaming response has no body');\n }\n\n const upstreamBodyStream = createToolNameRestoreStream(upstream.body, toolNameMap);\n\n const events =\n format === 'anthropic'\n ? anthropic.translateStream(upstreamBodyStream, { model: request.model, requestMetadata })\n : openai.translateStream(upstreamBodyStream, { model: request.model, requestMetadata });\n\n return new Response(\n responsesEventsToSseStream(collectCacheStatsFromStream(events, options.onCacheStats)),\n {\n status: 200,\n headers: {\n 'content-type': 'text/event-stream; charset=utf-8',\n 'cache-control': 'no-cache',\n connection: 'keep-alive',\n },\n },\n );\n}\n\n// ── upstream body ──\n\nfunction buildRequestMetadata(request: ResponsesRequest, temperature?: number, top_p?: number) {\n return {\n temperature,\n top_p,\n tools: request.tools ?? [],\n tool_choice: request.tool_choice,\n store: request.store ?? true,\n metadata: request.metadata ?? {},\n };\n}\n\nfunction buildUpstreamBody(\n request: ResponsesRequest,\n format: UpstreamFormat,\n streaming: boolean,\n baseUrl: string,\n dropImages?: boolean,\n reasoning_effort?: string,\n thinking?: unknown,\n fallbackThoughtSignature?: string,\n): { upstreamBody: unknown; requestMetadata: ReturnType<typeof buildRequestMetadata> } {\n if (format === 'anthropic') {\n const { request: ar } = anthropic.translateRequest(request);\n ar.stream = streaming;\n if (thinking !== undefined) {\n // eslint-disable-next-line no-restricted-syntax -- thinking comes from config.json, runtime-checked\n ar.thinking = thinking as AnthropicThinkingConfig;\n } else if (reasoning_effort) {\n const effort = reasoning_effort.toLowerCase();\n if (effort === 'minimal') {\n ar.thinking = { type: 'disabled' };\n } else if (effort === 'low') {\n ar.thinking = { type: 'enabled', budget_tokens: 4096 };\n } else if (effort === 'medium') {\n ar.thinking = { type: 'enabled', budget_tokens: 16384 };\n } else if (effort === 'high') {\n ar.thinking = { type: 'enabled', budget_tokens: 32768 };\n } else if (effort === 'xhigh') {\n ar.thinking = { type: 'enabled', budget_tokens: 65536 };\n }\n }\n // Ensure max_tokens > thinking.budget_tokens (Anthropic requirement)\n if (ar.thinking && typeof ar.thinking === 'object' && 'budget_tokens' in ar.thinking) {\n // eslint-disable-next-line no-restricted-syntax -- runtime-checked budget_tokens from thinking config\n const budget = Number((ar.thinking as unknown as Record<string, unknown>).budget_tokens);\n if (budget > 0 && ar.max_tokens <= budget) {\n ar.max_tokens = budget + 1024;\n }\n }\n return {\n upstreamBody: ar,\n requestMetadata: buildRequestMetadata(request, ar.temperature, ar.top_p),\n };\n }\n const { request: cr } = openai.translateRequest(request, {\n dropImages: dropImages,\n fallbackThoughtSignature,\n });\n cr.stream = streaming;\n if (streaming) {\n cr.stream_options = { include_usage: true };\n }\n if (reasoning_effort !== undefined) {\n cr.reasoning_effort = reasoning_effort;\n }\n if (thinking !== undefined) {\n cr.thinking = thinking;\n }\n return {\n upstreamBody: cr,\n requestMetadata: buildRequestMetadata(request, cr.temperature, cr.top_p),\n };\n}\n\n// ── upstream headers ──\n\nfunction buildUpstreamHeaders(\n format: UpstreamFormat,\n options: CreateResponsesFetchOptions,\n incoming: Record<string, string>,\n): Record<string, string> {\n const out: Record<string, string> = {};\n for (const [key, value] of Object.entries(incoming)) {\n if (DROPPED_HEADERS.has(key) || isClientSpecificHeader(key)) {\n continue;\n }\n out[key] = value;\n }\n if (options.defaultHeaders) {\n for (const [k, v] of Object.entries(options.defaultHeaders)) {\n out[k.toLowerCase()] = v;\n }\n }\n out['content-type'] = 'application/json';\n if (format === 'anthropic') {\n if (!out['anthropic-version']) {\n out['anthropic-version'] = options.apiVersion ?? '2023-06-01';\n }\n if (typeof out['authorization'] === 'string') {\n const match = /^Bearer\\s+(.+)$/i.exec(out['authorization']);\n if (match) {\n out['x-api-key'] = match[1].trim();\n }\n }\n delete out['authorization'];\n }\n return out;\n}\n\nconst DROPPED_HEADERS = new Set([\n 'host',\n 'content-length',\n 'connection',\n 'accept-encoding',\n 'accept',\n 'user-agent',\n]);\n\nfunction isClientSpecificHeader(key: string): boolean {\n const keyLower = key.toLowerCase();\n return (\n keyLower.startsWith('openai-') ||\n keyLower.startsWith('x-stainless') ||\n keyLower.startsWith('x-codex-') ||\n keyLower === 'originator' ||\n keyLower === 'session_id' ||\n keyLower === 'x-client-request-id'\n );\n}\n\n// ── SSE stream ──\n\nfunction responsesEventsToSseStream(\n events: AsyncGenerator<ResponsesStreamEvent, void, void>,\n): ReadableStream<Uint8Array> {\n const encoder = new TextEncoder();\n return new ReadableStream<Uint8Array>({\n async pull(controller) {\n // eslint-disable-next-line no-restricted-syntax -- try/catch needed for server-side HTTP error handling\n try {\n const { value, done } = await events.next();\n if (done) {\n controller.enqueue(encoder.encode('data: [DONE]\\n\\n'));\n controller.close();\n return;\n }\n controller.enqueue(encoder.encode(encodeSseEvent(value && value.type, value)));\n } catch (err) {\n controller.error(err);\n }\n },\n async cancel() {\n // eslint-disable-next-line no-restricted-syntax -- try/catch needed for server-side HTTP error handling\n try {\n await events.return?.();\n } catch {\n /* noop */\n }\n },\n });\n}\n\n// ── cache stats ──\n\nfunction extractCacheStatsFromResponse(response: ResponsesResponse): CacheStats {\n const usage = response.usage;\n return {\n cachedTokens: usage?.input_tokens_details?.cached_tokens ?? 0,\n cacheCreationTokens: usage?.input_tokens_details?.cache_creation_tokens ?? 0,\n inputTokens: usage?.input_tokens ?? 0,\n outputTokens: usage?.output_tokens ?? 0,\n totalTokens: usage?.total_tokens ?? 0,\n };\n}\n\nasync function* collectCacheStatsFromStream(\n events: AsyncGenerator<ResponsesStreamEvent, void, void>,\n onCacheStats?: (stats: CacheStats) => void,\n): AsyncGenerator<ResponsesStreamEvent, void, void> {\n let lastStats: CacheStats | undefined;\n for await (const event of events) {\n if (event.type === 'response.completed') {\n // eslint-disable-next-line no-restricted-syntax -- upstream event carries runtime property not in type\n const eventResp = event as unknown as { response?: ResponsesResponse };\n const resp = eventResp.response;\n if (resp?.usage) {\n lastStats = extractCacheStatsFromResponse(resp);\n }\n }\n yield event;\n }\n if (lastStats && onCacheStats) {\n onCacheStats(lastStats);\n }\n}\n\n/**\n * Check if the last user message in the input contains image content.\n * Assistant messages and tool results are skipped — only the most recent\n * `role: 'user'` item is inspected.\n */\nfunction lastUserMessageHasImage(request: ResponsesRequest): boolean {\n const input = request.input;\n if (!input || !Array.isArray(input)) {\n return false;\n }\n for (let i = input.length - 1; i >= 0; i--) {\n const item = input[i];\n if (!item || typeof item !== 'object') {\n continue;\n }\n const itemRecord: Record<string, unknown> = item;\n if (itemRecord.role !== 'user') {\n continue;\n }\n // Found the last user message\n const content = itemRecord.content;\n if (!Array.isArray(content)) {\n return false;\n }\n for (const part of content) {\n if (part && typeof part === 'object') {\n const partItem: Record<string, unknown> = part;\n const type = partItem.type;\n if (type === 'input_image' || type === 'image' || type === 'image_url') {\n return true;\n }\n }\n }\n return false;\n }\n return false;\n}\n\n// ── error helpers ──\n\nfunction jsonErrorResponse(status: number, message: string): Response {\n return new Response(\n JSON.stringify({ error: { message, type: 'upstream_error', code: String(status) } }),\n { status, headers: { 'content-type': 'application/json' } },\n );\n}\n","/**\n * Unified translation layer for Responses API.\n *\n * This module translates between OpenAI Responses API format and upstream\n * API formats. You specify the upstream API format (`anthropic` or\n * `openai-chat`) instead of a named provider.\n *\n * - `anthropic` → Anthropic Messages API\n * - `openai-chat` → OpenAI-compatible Chat Completions API (OpenAI, ZAI, etc.)\n */\n\nexport * as anthropic from './anthropic/index.js';\nexport * as openai from './openai/index.js';\n\n// Re-export unified types\nexport type {\n ResponsesRequest,\n ResponsesResponse,\n ResponsesStreamEvent,\n} from '../types/responses.js';\n"]}
1
+ {"version":3,"sources":["../src/translate/anthropic/index.ts","../src/utils/id.ts","../src/translate/anthropic/translateRequest.ts","../src/utils/json.ts","../src/translate/anthropic/translateResponse.ts","../src/utils/sse.ts","../src/translate/anthropic/translateStream.ts","../src/translate/openai/index.ts","../src/translate/openai/gemini-fixups.ts","../src/translate/openai/translateRequest.ts","../src/translate/openai/translateResponse.ts","../src/translate/openai/translateStream.ts","../src/tool-name-sanitizer.ts","../src/fetch.ts","../src/translate/index.ts"],"names":["data","SHELL_TOOL_NAMES","item","translateRequest","translateResponse","translateStream","mapTools","mapToolChoice","buildShortNameToNamespace","StreamTranslator","getThoughtSignature"],"mappings":"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","file":"index.cjs","sourcesContent":["export {\n translateRequest,\n type TranslateRequestOptions,\n type TranslateRequestResult,\n} from './translateRequest.js';\nexport {\n translateResponse,\n mapOutputItems,\n type TranslateResponseOptions,\n} from './translateResponse.js';\nexport {\n translateStream,\n translateAnthropicEvents,\n type TranslateStreamOptions,\n type ResponsesStreamMetadata,\n} from './translateStream.js';\n","/** Monotonic-ish id generator that works in both browser and Node. */\nlet counter = 0;\n\nexport function nowMs(): number {\n return Date.now();\n}\n\nexport function nextSeq(): number {\n counter = (counter + 1) & 0x7fffffff;\n return counter;\n}\n\nexport function makeId(prefix: string): string {\n return `${prefix}_${Date.now()}_${nextSeq()}`;\n}\n","/* eslint-disable max-lines */\n// ==============================================================================\n// Block Conversion\n// ==============================================================================\n\nimport type {\n ResponsesRequest,\n ResponsesInputItem,\n ResponsesTool,\n ResponsesToolChoice,\n ResponsesContentPart,\n} from '../../types/responses.js';\nimport type {\n AnthropicContentBlock,\n AnthropicMessage,\n AnthropicRequest,\n AnthropicTextBlock,\n AnthropicTool,\n AnthropicToolChoice,\n AnthropicThinkingConfig,\n AnthropicToolUseBlock,\n AnthropicToolResultBlock,\n} from '../../types/anthropic.js';\nimport { makeId } from '../../utils/id.js';\n\nconst ANTHROPIC_BUILTIN_TOOL_TYPES = new Set([\n 'web_search_20250305',\n 'computer_use_20250124',\n 'text_editor_20250124',\n 'bash_20250124',\n]);\n\n// ==============================================================================\n// Main Translation\n// ==============================================================================\n\nexport interface TranslateRequestOptions {\n /** Default max tokens when not provided (Anthropic requires `max_tokens`). */\n defaultMaxTokens?: number;\n /** Thinking budget overrides, keyed by effort. */\n reasoningBudgets?: Partial<Record<'minimal' | 'low' | 'medium' | 'high' | 'xhigh', number>>;\n}\n\nexport interface TranslateRequestResult {\n request: AnthropicRequest;\n hasPromptCache: boolean;\n}\n\nconst DEFAULT_REASONING_BUDGETS: Record<string, number> = {\n minimal: 1024,\n low: 4096,\n medium: 16384,\n high: 32768,\n xhigh: 65536,\n};\n\n/** Convert a Responses API request into an Anthropic Messages API request. */\nexport function translateRequest(\n data: ResponsesRequest,\n options: TranslateRequestOptions = {},\n): TranslateRequestResult {\n const model = data.model;\n const maxTokens =\n (typeof data.max_output_tokens === 'number' && data.max_output_tokens) ||\n (typeof data.max_tokens === 'number' && data.max_tokens) ||\n options.defaultMaxTokens ||\n 8192;\n\n let systemBlocks: AnthropicTextBlock[] = extractSystemBlocks(data.instructions);\n\n const built = buildMessages(data, systemBlocks);\n let messages = built.messages;\n let hasPromptCache = built.hasPromptCache;\n\n if (data.prompt_cache_key) {\n hasPromptCache = true;\n systemBlocks = markBlocksForCache(systemBlocks);\n messages = markCacheBreakpoint(messages);\n }\n\n messages = repairToolAdjacency(messages);\n messages = sanitizeMessages(messages);\n messages = ensureEndsWithUser(messages);\n\n if (data.prompt_cache_key) {\n messages = markCacheBreakpoint(messages);\n }\n\n const request: AnthropicRequest = {\n model,\n messages,\n max_tokens: maxTokens,\n };\n\n if (systemBlocks.length) {\n request.system = systemBlocks;\n }\n if (typeof data.temperature === 'number') {\n request.temperature = data.temperature;\n }\n if (typeof data.top_p === 'number') {\n request.top_p = data.top_p;\n }\n\n const tools = mapTools(data.tools || []);\n if (tools.length) {\n request.tools = tools;\n const toolChoice = mapToolChoice(data.tool_choice);\n if (toolChoice) {\n request.tool_choice = toolChoice;\n }\n }\n\n if (data.metadata && typeof data.metadata === 'object') {\n request.metadata = data.metadata;\n }\n\n const thinking = mapThinking(data, maxTokens, options.reasoningBudgets);\n if (thinking) {\n request.thinking = thinking;\n }\n\n return { request, hasPromptCache };\n}\n\nfunction extractSystemBlocks(instructions: ResponsesRequest['instructions']): AnthropicTextBlock[] {\n if (!instructions) {\n return [];\n }\n if (typeof instructions === 'string') {\n return [{ type: 'text', text: instructions }];\n }\n if (!Array.isArray(instructions)) {\n return [];\n }\n const blocks: AnthropicTextBlock[] = [];\n for (const item of instructions) {\n if (typeof item === 'string') {\n blocks.push({ type: 'text', text: item });\n } else if (item && typeof item === 'object') {\n const block: AnthropicTextBlock = {\n type: 'text',\n text: String(item.text ?? ''),\n };\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const cacheItem = item as { cache_control?: Record<string, unknown> };\n const cache = cacheItem.cache_control;\n if (cache) {\n block.cache_control = cache;\n }\n blocks.push(block);\n }\n }\n return blocks;\n}\n\ninterface BuildResult {\n messages: AnthropicMessage[];\n hasPromptCache: boolean;\n}\n\nfunction buildMessages(data: ResponsesRequest, systemBlocks: AnthropicTextBlock[]): BuildResult {\n const messages: AnthropicMessage[] = [];\n let hasPromptCache = false;\n\n let pendingToolUses: AnthropicToolUseBlock[] = [];\n let pendingToolResults: AnthropicToolResultBlock[] = [];\n\n const flushToolUses = () => {\n if (pendingToolUses.length) {\n messages.push({ role: 'assistant', content: pendingToolUses });\n pendingToolUses = [];\n }\n };\n const flushToolResults = () => {\n if (pendingToolResults.length) {\n messages.push({ role: 'user', content: pendingToolResults });\n pendingToolResults = [];\n }\n };\n const flushPending = () => {\n flushToolUses();\n flushToolResults();\n };\n\n const rawInput = data.input;\n const inputItems: ResponsesInputItem[] =\n typeof rawInput === 'string' ? [rawInput] : Array.isArray(rawInput) ? rawInput : [];\n\n for (const raw of inputItems) {\n if (typeof raw === 'string') {\n flushPending();\n messages.push({ role: 'user', content: [{ type: 'text', text: raw }] });\n continue;\n }\n if (!raw || typeof raw !== 'object') {\n continue;\n }\n const item: Record<string, unknown> = raw;\n const itemType: string = String(item.type || 'message');\n\n if (\n itemType === 'function_call_output' ||\n itemType === 'commandExecutionOutput' ||\n itemType === 'fileChangeOutput' ||\n itemType === 'custom_tool_call_output'\n ) {\n flushToolUses();\n const callId: string = String(item.call_id || item.id || makeId('call'));\n pendingToolResults.push({\n type: 'tool_result',\n tool_use_id: callId,\n content: extractToolOutputText(item),\n });\n continue;\n }\n\n if (\n itemType === 'function_call' ||\n itemType === 'commandExecution' ||\n itemType === 'local_shell_call' ||\n itemType === 'fileChange' ||\n itemType === 'custom_tool_call' ||\n itemType === 'web_search_call'\n ) {\n flushToolResults();\n const block = mapInputToolCall(item);\n if (block) {\n pendingToolUses.push(block);\n }\n continue;\n }\n\n if (itemType === 'reasoning') {\n flushPending();\n continue;\n }\n\n if (itemType === 'message' || itemType === 'agentMessage') {\n flushPending();\n let role: string = String(item.role || 'user');\n if (role === 'developer') {\n role = 'system';\n }\n\n if (role === 'system') {\n const text = extractMessageText(item);\n if (text) {\n systemBlocks.push({ type: 'text', text });\n }\n continue;\n }\n\n const contentBlocks: AnthropicContentBlock[] = [];\n const rawContent = item.content;\n if (typeof rawContent === 'string') {\n contentBlocks.push({ type: 'text', text: rawContent });\n } else if (Array.isArray(rawContent)) {\n for (const part of rawContent) {\n if (typeof part === 'string') {\n contentBlocks.push({ type: 'text', text: part });\n } else if (part && typeof part === 'object') {\n const contentPart: ResponsesContentPart = part;\n if (\n contentPart.type === 'input_text' ||\n contentPart.type === 'text' ||\n contentPart.type === 'output_text'\n ) {\n const textBlock: AnthropicContentBlock = {\n type: 'text',\n text: String(contentPart.text ?? ''),\n };\n // eslint-disable-next-line no-restricted-syntax -- ResponsesContentPart union doesn't expose cache_control\n const cc = (contentPart as { cache_control?: Record<string, unknown> }).cache_control;\n if (cc) {\n textBlock.cache_control = cc;\n }\n contentBlocks.push(textBlock);\n } else if (\n contentPart.type === 'input_image' ||\n contentPart.type === 'image' ||\n contentPart.type === 'image_url'\n ) {\n const imgUrlPart: { image_url?: string | { url: string } } = contentPart;\n const imgUrl = imgUrlPart.image_url;\n const urlStr =\n typeof imgUrl === 'string'\n ? imgUrl\n : imgUrl && typeof imgUrl === 'object'\n ? imgUrl.url\n : '';\n if (urlStr.startsWith('data:')) {\n const match = /^data:([^;,]+);base64,(.*)$/.exec(urlStr);\n if (match) {\n contentBlocks.push({\n type: 'image',\n source: { type: 'base64', media_type: match[1], data: match[2] },\n });\n }\n } else if (urlStr) {\n const imgSource = { type: 'url', url: urlStr };\n contentBlocks.push({\n type: 'image',\n source: imgSource,\n });\n } else {\n const data = String(contentPart.data ?? contentPart.base64 ?? '');\n if (data) {\n contentBlocks.push({\n type: 'image',\n source: {\n type: 'base64',\n media_type: contentPart.mime_type || contentPart.media_type || 'image/png',\n data,\n },\n });\n }\n // ==============================================================================\n // Tool Adjacency\n // ==============================================================================\n }\n } else if (contentPart.type === 'input_file') {\n contentBlocks.push({\n type: 'document',\n source: {\n type: 'base64',\n media_type: contentPart.mime_type || 'application/pdf',\n data: String(contentPart.data ?? ''),\n },\n });\n }\n }\n }\n }\n\n if (role === 'assistant' || role === 'model') {\n if (contentBlocks.length) {\n messages.push({ role: 'assistant', content: contentBlocks });\n }\n } else {\n if (contentBlocks.length) {\n messages.push({ role: 'user', content: contentBlocks });\n }\n }\n continue;\n }\n }\n\n flushPending();\n\n for (const block of systemBlocks) {\n if (block.cache_control) {\n hasPromptCache = true;\n }\n }\n\n return { messages, hasPromptCache };\n}\n\nfunction extractMessageText(item: Record<string, unknown>): string {\n const rawContent = item.content;\n if (typeof rawContent === 'string') {\n return rawContent;\n }\n if (Array.isArray(rawContent)) {\n let out = '';\n for (const part of rawContent) {\n if (typeof part === 'string') {\n out += part;\n } else if (part && typeof part === 'object') {\n out += String(part.text ?? '');\n }\n }\n return out;\n }\n return '';\n}\n\nfunction extractToolOutputText(item: Record<string, unknown>): string {\n const raw = item.output ?? item.content ?? item.stdout ?? '';\n if (typeof raw === 'string') {\n return raw;\n }\n if (Array.isArray(raw)) {\n let out = '';\n for (const part of raw) {\n if (typeof part === 'string') {\n out += part;\n } else if (part && typeof part === 'object') {\n out += String(part.text ?? '');\n }\n }\n return out;\n }\n\n if (raw && typeof raw === 'object') {\n // eslint-disable-next-line no-restricted-syntax -- type narrowing for unknown type\n return String((raw as Record<string, unknown>).content ?? '');\n }\n return '';\n}\n\nfunction mapInputToolCall(item: Record<string, unknown>): AnthropicToolUseBlock | undefined {\n const callId: string = String(item.call_id || item.id || makeId('call'));\n let name = typeof item.name === 'string' ? item.name : undefined;\n const itemType = typeof item.type === 'string' ? item.type : undefined;\n\n if (!name) {\n if (itemType === 'commandExecution') {\n name = 'run_shell_command';\n } else if (itemType === 'local_shell_call') {\n name = 'local_shell_command';\n } else if (itemType === 'fileChange') {\n name = 'write_file';\n } else if (itemType === 'web_search_call') {\n name = 'web_search';\n }\n }\n\n if (!name) {\n return undefined;\n }\n\n const args: Record<string, unknown> =\n typeof item.arguments === 'object' && item.arguments !== null\n ? // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n (item.arguments as Record<string, unknown>)\n : {};\n const input: Record<string, unknown> = args;\n\n const block: AnthropicToolUseBlock = {\n type: 'tool_use',\n id: callId,\n name,\n input: input,\n };\n\n const cacheItem: { cache_control?: Record<string, unknown> } = item;\n const cache = cacheItem.cache_control;\n if (cache) {\n block.cache_control = cache;\n }\n\n return block;\n}\n\n// ==============================================================================\n// Utility Functions\n// ==============================================================================\n\nfunction mapTools(tools: ResponsesTool[]): (AnthropicTool | Record<string, unknown>)[] {\n const out: (AnthropicTool | Record<string, unknown>)[] = [];\n for (const tool of tools) {\n if (!tool || typeof tool !== 'object') {\n continue;\n }\n const tt = tool.type || '';\n if (ANTHROPIC_BUILTIN_TOOL_TYPES.has(tt)) {\n out.push(tool);\n continue;\n }\n if (tt !== 'function') {\n continue;\n }\n const fn = tool.function;\n const name = fn?.name ?? tool.name;\n if (!name) {\n continue;\n }\n const toolInputSchema: Record<string, unknown> = fn?.parameters ??\n tool.parameters ?? { type: 'object' };\n out.push({\n name,\n description: fn?.description ?? tool.description ?? '',\n input_schema: toolInputSchema,\n });\n }\n return out;\n}\n\nfunction mapToolChoice(choice: ResponsesToolChoice): AnthropicToolChoice | undefined {\n if (choice == null || choice === 'auto') {\n return { type: 'auto' };\n }\n if (choice === 'required') {\n return { type: 'any' };\n }\n if (choice === 'none') {\n return undefined;\n }\n if (typeof choice === 'object') {\n if (choice.type === 'function' && 'function' in choice && choice.function?.name) {\n return { type: 'tool', name: choice.function.name };\n }\n if (choice.type === 'auto' || choice.type === 'any') {\n return { type: choice.type };\n }\n }\n return { type: 'auto' };\n}\n\nfunction mapThinking(\n data: ResponsesRequest,\n maxTokens: number,\n overrides?: Partial<Record<'minimal' | 'low' | 'medium' | 'high' | 'xhigh', number>>,\n): AnthropicThinkingConfig | undefined {\n const reasoning = data.reasoning;\n if (!reasoning) {\n return undefined;\n }\n const effort = reasoning.effort;\n if (!effort || effort === 'minimal') {\n return undefined;\n }\n const budgets = { ...DEFAULT_REASONING_BUDGETS, ...overrides };\n const budget = budgets[effort] ?? DEFAULT_REASONING_BUDGETS.medium;\n const clamped = Math.max(1024, Math.min(budget, Math.max(1024, maxTokens - 1024)));\n return { type: 'enabled', budget_tokens: clamped };\n}\n\nfunction repairToolAdjacency(messages: AnthropicMessage[]): AnthropicMessage[] {\n const repaired: AnthropicMessage[] = [];\n const working = messages.map((msg) => ({\n ...msg,\n content: Array.isArray(msg.content) ? [...msg.content] : msg.content,\n }));\n\n for (let i = 0; i < working.length; i++) {\n const msg = working[i];\n repaired.push(msg);\n const content = msg.content;\n if (msg.role !== 'assistant' || !Array.isArray(content)) {\n continue;\n }\n\n const toolUseIds = content\n .filter((block): block is AnthropicToolUseBlock => !!block && block.type === 'tool_use')\n .map((block) => block.id);\n if (!toolUseIds.length) {\n continue;\n }\n\n const next = working[i + 1];\n const nextUserContent =\n next && next.role === 'user' && Array.isArray(next.content) ? next.content : [];\n\n const foundById = new Map<string, AnthropicToolResultBlock>();\n const consumedInNext = new Set<string>();\n for (const block of nextUserContent) {\n if (block && block.type === 'tool_result') {\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const tr = block as AnthropicToolResultBlock;\n if (toolUseIds.includes(tr.tool_use_id) && !foundById.has(tr.tool_use_id)) {\n foundById.set(tr.tool_use_id, tr);\n consumedInNext.add(tr.tool_use_id);\n }\n }\n }\n\n const missing = toolUseIds.filter((id) => !foundById.has(id));\n if (missing.length) {\n const missingSet = new Set(missing);\n for (let j = i + 2; j < working.length && missingSet.size; j++) {\n const later = working[j];\n if (later.role !== 'user' || !Array.isArray(later.content)) {\n continue;\n }\n const keep: AnthropicContentBlock[] = [];\n for (const block of later.content) {\n if (block && block.type === 'tool_result') {\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const tr = block as AnthropicToolResultBlock;\n if (missingSet.has(tr.tool_use_id)) {\n foundById.set(tr.tool_use_id, tr);\n missingSet.delete(tr.tool_use_id);\n continue;\n }\n }\n keep.push(block);\n }\n later.content = keep;\n }\n }\n\n const ordered: AnthropicToolResultBlock[] = toolUseIds.map(\n (id) =>\n foundById.get(id) ?? {\n type: 'tool_result',\n tool_use_id: id,\n content: '',\n },\n );\n repaired.push({ role: 'user', content: ordered });\n\n if (nextUserContent.length) {\n const remaining = nextUserContent.filter((block) => {\n if (block && block.type === 'tool_result') {\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const tr = block as AnthropicToolResultBlock;\n if (consumedInNext.has(tr.tool_use_id)) {\n consumedInNext.delete(tr.tool_use_id);\n return false;\n }\n }\n return true;\n });\n if (remaining.length) {\n repaired.push({ role: 'user', content: remaining });\n }\n i += 1;\n }\n }\n\n return repaired;\n}\n\nfunction sanitizeMessages(messages: AnthropicMessage[]): AnthropicMessage[] {\n const out: AnthropicMessage[] = [];\n for (const msg of messages) {\n if (!msg || (msg.role !== 'user' && msg.role !== 'assistant')) {\n continue;\n }\n if (Array.isArray(msg.content)) {\n const blocks = msg.content.filter((block) => {\n if (!block || typeof block !== 'object') {\n return false;\n }\n if (block.type === 'text' && !block.text) {\n return false;\n }\n return true;\n });\n if (!blocks.length) {\n continue;\n }\n out.push({ role: msg.role, content: blocks });\n } else if (typeof msg.content === 'string' && msg.content) {\n out.push({ role: msg.role, content: [{ type: 'text', text: msg.content }] });\n }\n }\n return out;\n}\n\nfunction ensureEndsWithUser(messages: AnthropicMessage[]): AnthropicMessage[] {\n if (!messages.length) {\n return [{ role: 'user', content: [{ type: 'text', text: '...' }] }];\n }\n const last = messages[messages.length - 1];\n if (last.role === 'user') {\n return messages;\n }\n return [...messages, { role: 'user', content: [{ type: 'text', text: 'Continue.' }] }];\n}\n\n// ── prompt_cache_key → cache_control helpers ──\n\nfunction markBlocksForCache(blocks: AnthropicTextBlock[]): AnthropicTextBlock[] {\n // Anthropic allows at most 4 cache_control breakpoints total.\n // Reserve 1 for the conversation breakpoint, leaving 3 for system blocks.\n let count = 0;\n for (const block of blocks) {\n if (!block.cache_control) {\n block.cache_control = { type: 'ephemeral' };\n count++;\n if (count >= 3) {\n break;\n }\n }\n }\n return blocks;\n}\n\n/**\n * Mark a stable cache breakpoint on the last assistant message's last text block.\n * Falls back to the first user message if there's no assistant message (first turn).\n *\n * The last assistant message won't change across turns, so the cache key stays\n * stable and can be reused for subsequent requests (unlike the last user message\n * which contains the new input each time).\n */\nfunction markCacheBreakpoint(messages: AnthropicMessage[]): AnthropicMessage[] {\n // First assistant is at a fixed position from turn 2 onwards\n for (const msg of messages) {\n if (msg.role === 'assistant' && Array.isArray(msg.content)) {\n for (let j = msg.content.length - 1; j >= 0; j--) {\n const block = msg.content[j];\n if (block.type === 'text') {\n if (!block.cache_control) {\n block.cache_control = { type: 'ephemeral' };\n }\n return messages;\n }\n }\n }\n }\n\n // First turn: no assistant yet, mark the first user message's last text block\n for (const msg of messages) {\n if (msg.role === 'user' && Array.isArray(msg.content)) {\n for (let j = msg.content.length - 1; j >= 0; j--) {\n const block = msg.content[j];\n if (block.type === 'text') {\n if (!block.cache_control) {\n block.cache_control = { type: 'ephemeral' };\n }\n return messages;\n }\n }\n }\n }\n\n return messages;\n}\n","/** Safe JSON helpers used by translators. */\n\nexport function safeJsonParse<T = unknown>(text: string): T | undefined {\n // eslint-disable-next-line no-restricted-syntax -- try/catch needed for server-side HTTP error handling\n try {\n const parsed: T = JSON.parse(text);\n return parsed;\n } catch {\n return undefined;\n }\n}\n\nexport function jsonStringifySafe(value: unknown): string {\n // eslint-disable-next-line no-restricted-syntax -- try/catch needed for server-side HTTP error handling\n try {\n return JSON.stringify(value);\n } catch {\n return '';\n }\n}\n","import type {\n AnthropicResponse,\n AnthropicContentBlock,\n AnthropicTextBlock,\n AnthropicToolUseBlock,\n AnthropicThinkingBlock,\n} from '../../types/anthropic.js';\nimport type {\n ResponsesOutputItem,\n ResponsesOutputFunctionCall,\n ResponsesOutputMessage,\n ResponsesOutputReasoning,\n ResponsesResponse,\n} from '../../types/responses.js';\nimport { jsonStringifySafe } from '../../utils/json.js';\nimport { makeId } from '../../utils/id.js';\n\nexport interface TranslateResponseOptions {\n responseId?: string;\n createdAt?: number;\n model?: string;\n}\n\n/** Convert a non-streaming Anthropic response into a Responses-API response. */\nexport function translateResponse(\n body: AnthropicResponse,\n options: TranslateResponseOptions = {},\n): ResponsesResponse {\n const createdAt = options.createdAt ?? Math.floor(Date.now() / 1000);\n const id = options.responseId ?? body.id ?? makeId('resp');\n const model = options.model ?? body.model ?? '';\n\n const output = mapOutputItems(body.content ?? []);\n const usage = body.usage ?? { input_tokens: 0, output_tokens: 0 };\n\n return {\n id,\n object: 'response',\n created_at: createdAt,\n model,\n status: 'completed',\n output,\n usage: {\n input_tokens: usage.input_tokens ?? 0,\n output_tokens: usage.output_tokens ?? 0,\n total_tokens: (usage.input_tokens ?? 0) + (usage.output_tokens ?? 0),\n input_tokens_details: {\n cached_tokens: usage.cache_read_input_tokens ?? 0,\n cache_creation_tokens: usage.cache_creation_input_tokens ?? 0,\n },\n },\n };\n}\n\nconst SHELL_TOOL_NAMES = new Set(['shell', 'container.exec', 'shell_command']);\n\nexport function mapOutputItems(content: AnthropicContentBlock[]): ResponsesOutputItem[] {\n const out: ResponsesOutputItem[] = [];\n const textChunks: string[] = [];\n\n for (const block of content) {\n if (!block || typeof block !== 'object') {\n continue;\n }\n const btype: string = block.type;\n if (btype === 'text') {\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n textChunks.push(String((block as AnthropicTextBlock).text ?? ''));\n } else if (btype === 'tool_use') {\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const args = jsonStringifySafe((block as AnthropicToolUseBlock).input ?? {});\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const callId = (block as AnthropicToolUseBlock).id ?? makeId('call');\n const item: ResponsesOutputFunctionCall = {\n id: callId,\n type: 'function_call',\n status: 'completed',\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n name: (block as AnthropicToolUseBlock).name ?? 'tool',\n arguments: args,\n call_id: callId,\n };\n if (\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n (block as AnthropicToolUseBlock).name &&\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n SHELL_TOOL_NAMES.has((block as AnthropicToolUseBlock).name)\n ) {\n item.type = 'local_shell_call';\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const input_: Record<string, unknown> = (block as AnthropicToolUseBlock).input ?? {};\n const command: string[] = Array.isArray(input_.command) ? input_.command : [];\n item.action = { type: 'exec', command: command };\n }\n out.push(item);\n } else if (btype === 'thinking') {\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const text = String((block as AnthropicThinkingBlock).thinking ?? '');\n const reasoning: ResponsesOutputReasoning = {\n id: makeId('rs'),\n type: 'reasoning',\n summary: [],\n content: [{ type: 'reasoning_text', text }],\n status: 'completed',\n };\n out.push(reasoning);\n }\n }\n\n if (textChunks.length) {\n const message: ResponsesOutputMessage = {\n id: makeId('msg'),\n type: 'message',\n role: 'assistant',\n status: 'completed',\n content: [{ type: 'output_text', text: textChunks.join('') }],\n };\n out.push(message);\n }\n\n return out;\n}\n","/**\n * SSE helpers.\n *\n * - `parseSseStream`: Consume a ReadableStream of bytes and yield parsed\n * `{ event, data }` pairs. Works in both browser (fetch body) and Node 18+.\n * - `encodeSseEvent`: Serialize a `{ event, data }` pair to the SSE wire format.\n */\n\nexport interface SseMessage {\n event?: string;\n data: string;\n}\n\nexport async function* parseSseStream(\n stream: ReadableStream<Uint8Array>,\n): AsyncGenerator<SseMessage, void, void> {\n const reader = stream.getReader();\n const decoder = new TextDecoder('utf-8');\n let buffer = '';\n\n // eslint-disable-next-line no-restricted-syntax -- try/catch needed for server-side HTTP error handling\n try {\n while (true) {\n const { value, done } = await reader.read();\n if (done) {\n break;\n }\n if (value) {\n buffer += decoder.decode(value, { stream: true });\n }\n\n // Events are separated by blank lines.\n let idx: number;\n while ((idx = buffer.search(/\\r?\\n\\r?\\n/)) !== -1) {\n const raw = buffer.slice(0, idx);\n buffer = buffer.slice(idx + (buffer[idx] === '\\r' ? 4 : 2));\n const msg = parseSseBlock(raw);\n if (msg) {\n yield msg;\n }\n }\n }\n buffer += decoder.decode();\n if (buffer.trim().length > 0) {\n const msg = parseSseBlock(buffer);\n if (msg) {\n yield msg;\n }\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nfunction parseSseBlock(block: string): SseMessage | undefined {\n let event: string | undefined;\n const dataLines: string[] = [];\n for (const line of block.split(/\\r?\\n/)) {\n if (!line || line.startsWith(':')) {\n continue;\n }\n const colon = line.indexOf(':');\n const field = colon === -1 ? line : line.slice(0, colon);\n let value = colon === -1 ? '' : line.slice(colon + 1);\n if (value.startsWith(' ')) {\n value = value.slice(1);\n }\n if (field === 'event') {\n event = value;\n } else if (field === 'data') {\n dataLines.push(value);\n }\n }\n if (dataLines.length === 0) {\n return undefined;\n }\n return { event, data: dataLines.join('\\n') };\n}\n\nexport function encodeSseEvent(event: string, data: unknown): string {\n const payload = typeof data === 'string' ? data : JSON.stringify(data);\n return `event: ${event}\\ndata: ${payload}\\n\\n`;\n}\n","// ==============================================================================\n// Stream Translator\n// ==============================================================================\n\nimport type { AnthropicStreamEvent, AnthropicContentBlock } from '../../types/anthropic.js';\nimport type {\n ResponsesOutputItem,\n ResponsesOutputFunctionCall,\n ResponsesOutputMessage,\n ResponsesOutputReasoning,\n ResponsesResponse,\n ResponsesStreamEvent,\n} from '../../types/responses.js';\nimport { parseSseStream, type SseMessage } from '../../utils/sse.js';\nimport { safeJsonParse, jsonStringifySafe } from '../../utils/json.js';\nimport { makeId } from '../../utils/id.js';\n\nexport interface TranslateStreamOptions {\n model?: string;\n responseId?: string;\n // ==============================================================================\n // Event Handlers\n // ==============================================================================\n\n createdAt?: number;\n requestMetadata?: ResponsesStreamMetadata;\n}\n\nexport interface ResponsesStreamMetadata {\n temperature?: number;\n top_p?: number;\n tools?: unknown[];\n tool_choice?: unknown;\n store?: boolean;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Consume an Anthropic SSE stream and yield Responses-API SSE events.\n */\nexport async function* translateStream(\n stream: ReadableStream<Uint8Array>,\n options: TranslateStreamOptions = {},\n): AsyncGenerator<ResponsesStreamEvent, void, void> {\n const translator = new StreamTranslator(options);\n yield translator.createInitialEvent();\n for await (const msg of parseSseStream(stream)) {\n const event = parseAnthropicEvent(msg);\n if (!event) {\n continue;\n }\n yield* translator.handleEvent(event);\n }\n yield* translator.finalize();\n}\n\n/**\n * Consume an async iterable of parsed Anthropic events and yield Responses events.\n */\nexport async function* translateAnthropicEvents(\n events: AsyncIterable<AnthropicStreamEvent> | Iterable<AnthropicStreamEvent>,\n options: TranslateStreamOptions = {},\n): AsyncGenerator<ResponsesStreamEvent, void, void> {\n const translator = new StreamTranslator(options);\n yield translator.createInitialEvent();\n for await (const event of events) {\n yield* translator.handleEvent(event);\n }\n yield* translator.finalize();\n}\n\nfunction parseAnthropicEvent(msg: SseMessage): AnthropicStreamEvent | undefined {\n const parsed = safeJsonParse<AnthropicStreamEvent>(msg.data);\n if (!parsed) {\n return undefined;\n }\n return parsed;\n}\n\ninterface BlockState {\n type: 'text' | 'tool_use' | 'thinking' | string;\n outputIndex: number;\n item?: ResponsesOutputItem;\n buffer: string;\n}\n\nconst SHELL_TOOL_NAMES = new Set(['shell', 'container.exec', 'shell_command']);\n\nclass StreamTranslator {\n private readonly model: string;\n private readonly responseId: string;\n private readonly createdAt: number;\n private readonly metadata: ResponsesStreamMetadata;\n private seq = 0;\n private outputCounter = 0;\n private readonly blocks = new Map<number, BlockState>();\n\n private inputTokens = 0;\n private outputTokens = 0;\n private cacheCreationTokens = 0;\n private cacheReadTokens = 0;\n\n private textItem?: ResponsesOutputMessage;\n private textItemIndex = -1;\n private textBuffer = '';\n\n private stopReason: string | undefined;\n\n constructor(options: TranslateStreamOptions) {\n this.model = options.model ?? '';\n this.responseId = options.responseId ?? makeId('resp');\n this.createdAt = options.createdAt ?? Math.floor(Date.now() / 1000);\n this.metadata = options.requestMetadata ?? {};\n }\n\n createInitialEvent(): ResponsesStreamEvent {\n const response: Partial<ResponsesResponse> = {\n id: this.responseId,\n object: 'response',\n created_at: this.createdAt,\n model: this.model,\n status: 'in_progress',\n temperature: this.metadata.temperature,\n top_p: this.metadata.top_p,\n tool_choice: this.metadata.tool_choice,\n tools: this.metadata.tools ?? [],\n parallel_tool_calls: true,\n store: this.metadata.store ?? true,\n metadata: this.metadata.metadata ?? {},\n output: [],\n };\n return this.makeEvent('response.created', { response });\n }\n\n *handleEvent(event: AnthropicStreamEvent): Generator<ResponsesStreamEvent, void, void> {\n switch (event.type) {\n case 'message_start': {\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const msgStartEvt = event as Extract<AnthropicStreamEvent, { type: 'message_start' }>;\n this.onMessageStart(msgStartEvt);\n return;\n }\n case 'content_block_start':\n {\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const cbsEvt = event as Extract<AnthropicStreamEvent, { type: 'content_block_start' }>;\n yield* this.onContentBlockStart(cbsEvt);\n }\n return;\n case 'content_block_delta':\n {\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const cbdEvt = event as Extract<AnthropicStreamEvent, { type: 'content_block_delta' }>;\n yield* this.onContentBlockDelta(cbdEvt);\n }\n return;\n case 'content_block_stop':\n return;\n case 'message_delta':\n {\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const msgDeltaEvt = event as Extract<AnthropicStreamEvent, { type: 'message_delta' }>;\n this.onMessageDelta(msgDeltaEvt);\n }\n return;\n case 'message_stop':\n case 'ping':\n return;\n default:\n return;\n }\n }\n\n *finalize(): Generator<ResponsesStreamEvent, void, void> {\n const items: { index: number; item: ResponsesOutputItem }[] = [];\n\n if (this.textItem) {\n this.textItem.status = 'completed';\n this.textItem.content[0].text = this.textBuffer;\n items.push({ index: this.textItemIndex, item: this.textItem });\n }\n\n for (const block of this.blocks.values()) {\n if (!block.item) {\n continue;\n }\n if (items.find((item) => item.index === block.outputIndex)) {\n continue;\n }\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const item: Record<string, unknown> = block.item as Record<string, unknown>;\n item.status = 'completed';\n if (block.type === 'tool_use') {\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const call = block.item as ResponsesOutputFunctionCall;\n if (call.name && SHELL_TOOL_NAMES.has(call.name)) {\n call.type = 'local_shell_call';\n const parsed = safeJsonParse<{ command?: string[] }>(call.arguments ?? '');\n call.action = { type: 'exec', command: parsed?.command ?? [] };\n }\n }\n items.push({ index: block.outputIndex, item: block.item });\n }\n\n items.sort((alpha, beta) => alpha.index - beta.index);\n\n for (const { index, item } of items) {\n yield this.makeEvent('response.output_item.done', {\n response_id: this.responseId,\n output_index: index,\n item,\n });\n }\n\n const output = items.map((item) => item.item);\n const total = this.inputTokens + this.outputTokens;\n\n const response: Partial<ResponsesResponse> = {\n id: this.responseId,\n object: 'response',\n created_at: this.createdAt,\n completed_at: Math.floor(Date.now() / 1000),\n model: this.model,\n status: 'completed',\n temperature: this.metadata.temperature,\n top_p: this.metadata.top_p,\n tool_choice: this.metadata.tool_choice,\n tools: this.metadata.tools ?? [],\n parallel_tool_calls: true,\n store: this.metadata.store ?? true,\n metadata: this.metadata.metadata ?? {},\n output,\n usage: {\n input_tokens: this.inputTokens,\n output_tokens: this.outputTokens,\n total_tokens: total,\n input_tokens_details: {\n cached_tokens: this.cacheReadTokens,\n cache_creation_tokens: this.cacheCreationTokens,\n },\n },\n };\n\n yield this.makeEvent('response.completed', { response });\n }\n\n private onMessageStart(event: Extract<AnthropicStreamEvent, { type: 'message_start' }>): void {\n const usage = event.message?.usage;\n if (usage) {\n this.inputTokens = usage.input_tokens ?? 0;\n this.cacheCreationTokens = usage.cache_creation_input_tokens ?? 0;\n this.cacheReadTokens = usage.cache_read_input_tokens ?? 0;\n }\n return;\n }\n\n private *onContentBlockStart(\n event: Extract<AnthropicStreamEvent, { type: 'content_block_start' }>,\n ): Generator<ResponsesStreamEvent, void, void> {\n const index = event.index;\n const block: AnthropicContentBlock & { id?: string; name?: string } = event.content_block;\n const btype = block.type;\n\n if (btype === 'thinking') {\n const outputIndex = this.outputCounter++;\n const item: ResponsesOutputReasoning = {\n id: makeId('rs'),\n type: 'reasoning',\n summary: [],\n content: [{ type: 'reasoning_text', text: '' }],\n status: 'in_progress',\n };\n this.blocks.set(index, { type: 'thinking', outputIndex, item, buffer: '' });\n yield this.makeEvent('response.output_item.added', {\n response_id: this.responseId,\n output_index: outputIndex,\n item,\n });\n return;\n }\n\n if (btype === 'text') {\n if (!this.textItem) {\n const outputIndex = this.outputCounter++;\n this.textItemIndex = outputIndex;\n this.textItem = {\n id: makeId('msg'),\n type: 'message',\n role: 'assistant',\n status: 'in_progress',\n content: [{ type: 'output_text', text: '' }],\n };\n yield this.makeEvent('response.output_item.added', {\n response_id: this.responseId,\n output_index: outputIndex,\n item: this.textItem,\n });\n }\n this.blocks.set(index, { type: 'text', outputIndex: this.textItemIndex, buffer: '' });\n return;\n }\n\n if (btype === 'tool_use') {\n const outputIndex = this.outputCounter++;\n const callId = block.id ?? makeId('call');\n // Some proxies return the full input directly in content_block_start\n const initialInput =\n typeof block.input === 'object' && block.input !== null\n ? jsonStringifySafe(block.input)\n : '';\n const hasInitialInput = initialInput !== '' && initialInput !== '{}';\n const item: ResponsesOutputFunctionCall = {\n id: callId,\n type: 'function_call',\n status: 'in_progress',\n name: block.name ?? '',\n arguments: hasInitialInput ? initialInput : '',\n call_id: callId,\n };\n this.blocks.set(index, {\n type: 'tool_use',\n outputIndex,\n item,\n buffer: hasInitialInput ? initialInput : '',\n });\n yield this.makeEvent('response.output_item.added', {\n response_id: this.responseId,\n output_index: outputIndex,\n item,\n });\n return;\n }\n\n this.blocks.set(index, { type: btype, outputIndex: -1, buffer: '' });\n }\n\n private *onContentBlockDelta(\n event: Extract<AnthropicStreamEvent, { type: 'content_block_delta' }>,\n ): Generator<ResponsesStreamEvent, void, void> {\n const block = this.blocks.get(event.index);\n if (!block) {\n return;\n }\n const delta: Record<string, unknown> = event.delta;\n const dtype: string = typeof delta.type === 'string' ? delta.type : '';\n\n if (dtype === 'text_delta') {\n const text = String(delta.text ?? '');\n if (!text) {\n return;\n }\n this.textBuffer += text;\n // text content available via this.textItem.content[0]\n yield this.makeEvent('response.output_text.delta', {\n response_id: this.responseId,\n item_id: this.textItem?.id ?? '',\n output_index: this.textItemIndex,\n content_index: 0,\n delta: text,\n });\n return;\n }\n\n if (dtype === 'thinking_delta') {\n const thinking = String(delta.thinking ?? '');\n if (!thinking) {\n return;\n }\n block.buffer += thinking;\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const item = block.item as ResponsesOutputReasoning | undefined;\n if (item) {\n item.content[0].text = block.buffer;\n }\n yield this.makeEvent('response.reasoning_text.delta', {\n response_id: this.responseId,\n item_id: item?.id ?? '',\n output_index: block.outputIndex,\n content_index: 0,\n delta: thinking,\n });\n return;\n }\n\n if (dtype === 'input_json_delta') {\n const partial = String(delta.partial_json ?? '');\n if (!partial) {\n return;\n }\n block.buffer += partial;\n // eslint-disable-next-line no-restricted-syntax -- TypeScript narrowing requires this cast\n const item = block.item as ResponsesOutputFunctionCall | undefined;\n if (item) {\n item.arguments = block.buffer;\n }\n yield this.makeEvent('response.function_call_arguments.delta', {\n response_id: this.responseId,\n item_id: item?.id ?? '',\n output_index: block.outputIndex,\n delta: partial,\n });\n return;\n }\n }\n\n private onMessageDelta(event: Extract<AnthropicStreamEvent, { type: 'message_delta' }>): void {\n if (event.usage?.output_tokens != null) {\n this.outputTokens = event.usage.output_tokens;\n }\n const eventDelta: { stop_reason?: string } | undefined = event.delta;\n const stopReason = eventDelta?.stop_reason;\n if (stopReason) {\n this.stopReason = stopReason;\n }\n return;\n }\n\n private makeEvent(type: string, data: Record<string, unknown>): ResponsesStreamEvent {\n this.seq += 1;\n return {\n id: makeId('evt'),\n object: 'response.event',\n type,\n created_at: Math.floor(Date.now() / 1000),\n sequence_number: this.seq,\n ...data,\n };\n }\n}\n\n// Suppress unused export warning\nexport type __AnthropicContentBlockAlias = AnthropicContentBlock;\n","export {\n translateRequest,\n type TranslateRequestOptions,\n type TranslateRequestResult,\n} from './translateRequest.js';\nexport { translateResponse, type TranslateResponseOptions } from './translateResponse.js';\nexport {\n translateStream,\n type TranslateStreamOptions,\n type ResponsesStreamMetadata,\n} from './translateStream.js';\n","// ==============================================================================\n// Gemini-specific request fixups (gated on the model name)\n// ==============================================================================\n//\n// Gemini's OpenAI-compat endpoint diverges from OpenAI Chat in two ways that\n// break Codex histories. Both are applied in place, only for Gemini models.\n\nimport type { OpenAiChatMessage } from '../../types/openai_chat.js';\n\nexport function isGeminiModel(model: string | undefined): boolean {\n if (!model) {\n return false;\n }\n const lower = model.toLowerCase();\n return lower.includes('gemini') || lower.startsWith('google/');\n}\n\nfunction extractTextContent(content: unknown): string {\n if (typeof content === 'string') {\n return content;\n }\n if (!Array.isArray(content)) {\n return '';\n }\n let out = '';\n for (const part of content) {\n if (typeof part === 'string') {\n out += part;\n } else if (part && typeof part === 'object') {\n // eslint-disable-next-line no-restricted-syntax -- text read from an unknown content part\n out += String((part as { text?: string }).text ?? '');\n }\n }\n return out;\n}\n\n/**\n * Gemini's OpenAI-compat endpoint silently honors ONLY the last system message.\n * Codex emits several (base instructions, role prompt, usage hints), so fold\n * every system message into one at the front, preserving order.\n */\nfunction mergeSystemMessages(messages: OpenAiChatMessage[]): void {\n const systemTexts: string[] = [];\n const rest: OpenAiChatMessage[] = [];\n for (const msg of messages) {\n if (msg.role === 'system') {\n systemTexts.push(extractTextContent(msg.content));\n } else {\n rest.push(msg);\n }\n }\n if (systemTexts.length <= 1) {\n return;\n }\n messages.length = 0;\n messages.push({ role: 'system', content: systemTexts.join('\\n\\n') }, ...rest);\n}\n\nconst MULTI_TOOL_USE_MANDATE =\n 'Use `multi_tool_use.parallel` to parallelize tool calls and only this.';\nconst MULTI_TOOL_USE_REWRITE =\n 'Parallelize by returning multiple tool calls in a single response. A tool named `multi_tool_use.parallel` does NOT exist in this environment — never call it.';\n// Matches Codex's rejection for both observed spellings: \"unsupported call:\n// parallel\" and \"unsupported call: multi_tool_useparallel\".\nconst UNSUPPORTED_PARALLEL_RE = /^unsupported call: (?:multi_tool_use\\W*)?parallel/iu;\nconst UNSUPPORTED_PARALLEL_HINT =\n ' (`multi_tool_use.parallel` is not a real tool here. Re-issue each inner call as its own separate tool call — several tool calls in one response are fine.)';\n\n/**\n * Codex's base instructions mandate the GPT-only `multi_tool_use.parallel`\n * wrapper. Gemini obeys it, the dispatcher rejects \"unsupported call: parallel\",\n * and the model loops retrying. Rewrite the mandate to native guidance and\n * append a corrective hint to the rejection so an in-loop model self-corrects.\n */\nfunction applyGeminiToolUseShim(messages: OpenAiChatMessage[]): void {\n for (const msg of messages) {\n if (\n msg.role === 'system' &&\n typeof msg.content === 'string' &&\n msg.content.includes(MULTI_TOOL_USE_MANDATE)\n ) {\n msg.content = msg.content.split(MULTI_TOOL_USE_MANDATE).join(MULTI_TOOL_USE_REWRITE);\n } else if (\n msg.role === 'tool' &&\n typeof msg.content === 'string' &&\n UNSUPPORTED_PARALLEL_RE.test(msg.content)\n ) {\n msg.content = msg.content + UNSUPPORTED_PARALLEL_HINT;\n }\n }\n}\n\n/**\n * Apply all Gemini-specific message fixups in place. No-op for non-Gemini\n * models, so it is safe to call unconditionally.\n */\nexport function applyGeminiFixups(messages: OpenAiChatMessage[], model: string | undefined): void {\n if (!isGeminiModel(model)) {\n return;\n }\n mergeSystemMessages(messages);\n applyGeminiToolUseShim(messages);\n}\n","// ==============================================================================\n// Main Translation\n// ==============================================================================\n\nimport type {\n ResponsesRequest,\n ResponsesInputItem,\n ResponsesTool,\n ResponsesToolChoice,\n ResponsesContentPart,\n} from '../../types/responses.js';\nimport type {\n OpenAiChatMessage,\n OpenAiChatRequest,\n OpenAiChatTool,\n OpenAiChatToolCall,\n OpenAiChatToolChoice,\n} from '../../types/openai_chat.js';\nimport { makeId } from '../../utils/id.js';\nimport { jsonStringifySafe } from '../../utils/json.js';\nimport { applyGeminiFixups } from './gemini-fixups.js';\n\nexport interface TranslateRequestOptions {\n /** Default max tokens when not provided. */\n defaultMaxTokens?: number;\n /** If true, backfill reasoning_content on assistant tool-call messages. */\n backfillReasoning?: boolean;\n /** Placeholder string for backfilled reasoning_content. Defaults to '.'. */\n reasoningPlaceholder?: string;\n /** If true, strip `strict` from function tools (some upstreams reject it). */\n /** If true, drop image/file parts from user messages (e.g. DeepSeek text-only models). */\n dropImages?: boolean;\n /** Fallback signature for Gemini OpenAI histories that lack returned signatures. */\n fallbackThoughtSignature?: string;\n}\n\nexport interface TranslateRequestResult {\n request: OpenAiChatRequest;\n}\n\n/** Convert a Responses API request into an OpenAI Chat API request. */\nexport function translateRequest(\n data: ResponsesRequest,\n options: TranslateRequestOptions = {},\n): TranslateRequestResult {\n const messages: OpenAiChatMessage[] = [];\n\n const systemContent = buildSystemContent(data.instructions);\n if (systemContent) {\n messages.push({ role: 'system', content: systemContent });\n }\n\n const inputItems: ResponsesInputItem[] =\n typeof data.input === 'string' ? [data.input] : Array.isArray(data.input) ? data.input : [];\n\n for (const raw of inputItems) {\n if (typeof raw === 'string') {\n messages.push({ role: 'user', content: raw });\n continue;\n }\n if (!raw || typeof raw !== 'object') {\n continue;\n }\n const rawItem: Record<string, unknown> = raw;\n processInputItem(rawItem, messages, options);\n }\n\n const request: OpenAiChatRequest = {\n model: data.model,\n messages,\n };\n\n if (typeof data.temperature === 'number') {\n request.temperature = data.temperature;\n }\n if (typeof data.top_p === 'number') {\n request.top_p = data.top_p;\n }\n const effort = typeof data.reasoning?.effort === 'string' ? data.reasoning.effort : undefined;\n if (effort) {\n const req: Record<string, unknown> = request;\n req.reasoning_effort = effort;\n }\n\n const maxTokens =\n (typeof data.max_output_tokens === 'number' && data.max_output_tokens) ||\n (typeof data.max_tokens === 'number' && data.max_tokens) ||\n options.defaultMaxTokens;\n if (typeof maxTokens === 'number') {\n request.max_tokens = maxTokens;\n }\n\n const tools = mapTools(data.tools ?? []);\n if (tools.length) {\n request.tools = tools;\n const toolChoice = mapToolChoice(data.tool_choice);\n if (toolChoice !== undefined) {\n request.tool_choice = toolChoice;\n }\n }\n\n // Some upstreams (e.g. GLM thinking mode) require reasoning_content on every\n // assistant turn when thinking is enabled — not just ones that make tool calls.\n const placeholder = options.reasoningPlaceholder ?? '.';\n if (options.backfillReasoning !== false && placeholder) {\n for (const m of messages) {\n if (m.role === 'assistant' && m.reasoning_content == null) {\n m.reasoning_content = placeholder;\n }\n }\n }\n\n // Reorder messages to ensure tool outputs immediately follow their tool calls.\n // Some upstreams (e.g. GLM) require tool messages to come right after the assistant\n // message that emitted the tool_calls, with no other message in between.\n repairToolMessageOrder(messages);\n\n // Gemini (OpenAI-compat) needs extra fixups, gated on the model name (merge\n // system messages; rewrite Codex's GPT-only multi_tool_use.parallel mandate).\n applyGeminiFixups(messages, data.model);\n\n return { request };\n}\n\nfunction buildSystemContent(instructions: ResponsesRequest['instructions']): string {\n if (!instructions) {\n return '';\n }\n if (typeof instructions === 'string') {\n return instructions;\n }\n if (!Array.isArray(instructions)) {\n return '';\n }\n let out = '';\n for (const block of instructions) {\n if (typeof block === 'string') {\n out += block;\n } else if (block && typeof block === 'object') {\n // eslint-disable-next-line no-restricted-syntax -- Record extraction from unknown union\n out += String((block as { text?: string }).text ?? '');\n }\n }\n return out;\n}\n\n// ==============================================================================\n// Input Processing\n// ==============================================================================\n\nfunction processInputItem(\n item: Record<string, unknown>,\n messages: OpenAiChatMessage[],\n options: TranslateRequestOptions,\n): void {\n const itemType: string = String(item.type) || 'message';\n\n const getLastAssistant = (): OpenAiChatMessage => {\n const last = messages[messages.length - 1];\n if (last && last.role === 'assistant') {\n return last;\n }\n const msg: OpenAiChatMessage = { role: 'assistant', content: null };\n messages.push(msg);\n return msg;\n };\n\n if (itemType === 'message' || itemType === 'agentMessage') {\n // ==============================================================================\n // Helpers\n // ==============================================================================\n\n let role: string = String(item.role) || 'user';\n if (role === 'developer') {\n role = 'system';\n }\n\n let reasoningContent: string = String(item.reasoning_content ?? '');\n const rawContent = item.content;\n\n if (role === 'assistant' || role === 'model') {\n let content = '';\n if (typeof rawContent === 'string') {\n content = rawContent;\n } else if (Array.isArray(rawContent)) {\n for (const part of rawContent) {\n if (typeof part === 'string') {\n content += part;\n } else if (part && typeof part === 'object') {\n const contentPart: ResponsesContentPart = part;\n if (\n contentPart.type === 'input_text' ||\n contentPart.type === 'text' ||\n contentPart.type === 'output_text'\n ) {\n content += String(contentPart.text ?? '');\n } else if (contentPart.type === 'reasoning_text') {\n reasoningContent += String(contentPart.text ?? '');\n }\n }\n }\n }\n const amsg = getLastAssistant();\n if (content) {\n amsg.content = (amsg.content ?? '') + content;\n }\n if (reasoningContent) {\n amsg.reasoning_content = (amsg.reasoning_content ?? '') + reasoningContent;\n }\n const sig = item.thought_signature;\n if (typeof sig === 'string' && sig) {\n amsg.thought_signature = sig;\n }\n } else {\n if (typeof rawContent === 'string') {\n messages.push({ role, content: rawContent });\n } else if (Array.isArray(rawContent)) {\n const contentBlocks: Array<{ type: string; [k: string]: unknown }> = [];\n for (const part of rawContent) {\n if (typeof part === 'string') {\n contentBlocks.push({ type: 'text', text: part });\n } else if (part && typeof part === 'object') {\n const contentPart: ResponsesContentPart = part;\n if (\n contentPart.type === 'input_text' ||\n contentPart.type === 'text' ||\n contentPart.type === 'output_text'\n ) {\n contentBlocks.push({ type: 'text', text: String(contentPart.text ?? '') });\n } else if (contentPart.type === 'reasoning_text') {\n reasoningContent += String(contentPart.text ?? '');\n } else if (isImagePart(contentPart)) {\n if (options.dropImages) {\n continue;\n }\n const url = imagePartToUrl(part);\n if (url) {\n contentBlocks.push({ type: 'image_url', image_url: { url } });\n }\n } else if (part.type === 'input_file' || part.type === 'file') {\n const fileData = String(contentPart.file_data ?? contentPart.data ?? '');\n const mimeType = String(\n contentPart.mime_type ?? contentPart.media_type ?? 'application/pdf',\n );\n if (fileData) {\n const url = fileData.startsWith('data:')\n ? fileData\n : `data:${mimeType};base64,${fileData}`;\n contentBlocks.push({ type: 'image_url', image_url: { url } });\n }\n } else if (contentPart.type === 'input_audio') {\n const ia = contentPart.input_audio; // song audio (base64 / gs:// on Vertex)\n const data = String(ia?.data ?? contentPart.data ?? '');\n const format = String(ia?.format ?? contentPart.format ?? 'mp3');\n if (data) {\n contentBlocks.push({ type: 'input_audio', input_audio: { data, format } });\n }\n }\n }\n }\n const msg: OpenAiChatMessage = { role, content: contentBlocks };\n if (reasoningContent) {\n msg.reasoning_content = reasoningContent;\n }\n const sig = item.thought_signature;\n if (typeof sig === 'string' && sig) {\n msg.thought_signature = sig;\n }\n messages.push(msg);\n } else {\n messages.push({ role, content: '' });\n }\n }\n return;\n }\n\n if (itemType === 'reasoning') {\n const rawList = item.content;\n let content = '';\n if (Array.isArray(rawList)) {\n for (const cp of rawList) {\n if (typeof cp === 'string') {\n content += cp;\n } else if (cp && typeof cp === 'object') {\n // eslint-disable-next-line no-restricted-syntax -- Record extraction from unknown union\n content += String((cp as { text?: string }).text ?? '');\n }\n }\n } else if (typeof rawList === 'string') {\n content += rawList;\n }\n const amsg = getLastAssistant();\n amsg.reasoning_content = (amsg.reasoning_content ?? '') + content;\n const sig = item.thought_signature;\n if (typeof sig === 'string' && sig) {\n amsg.thought_signature = sig;\n }\n return;\n }\n\n if (\n itemType === 'function_call' ||\n itemType === 'commandExecution' ||\n itemType === 'local_shell_call' ||\n itemType === 'fileChange' ||\n itemType === 'custom_tool_call' ||\n itemType === 'web_search_call'\n ) {\n processToolCall(item, messages, getLastAssistant, options.fallbackThoughtSignature);\n return;\n }\n\n if (\n itemType === 'function_call_output' ||\n itemType === 'commandExecutionOutput' ||\n itemType === 'fileChangeOutput' ||\n itemType === 'custom_tool_call_output'\n ) {\n processToolOutput(item, messages, options);\n return;\n }\n}\n\nfunction processToolCall(\n item: Record<string, unknown>,\n messages: OpenAiChatMessage[],\n getLastAssistant: () => OpenAiChatMessage,\n fallbackThoughtSignature?: string,\n): void {\n const callId: string = String(item.call_id ?? '') || String(item.id ?? '') || makeId('call');\n let name: string | undefined = item.name === undefined ? undefined : String(item.name);\n const itemType: string | undefined = item.type === undefined ? undefined : String(item.type);\n\n if (!name) {\n if (itemType === 'commandExecution') {\n name = 'run_shell_command';\n } else if (itemType === 'local_shell_call') {\n name = 'local_shell_command';\n } else if (itemType === 'fileChange') {\n name = 'write_file';\n } else if (itemType === 'web_search_call') {\n name = 'web_search';\n }\n }\n\n let args: unknown =\n item.arguments ?? item.input ?? (isEmpty(item.arguments) && isEmpty(item.input) ? {} : {});\n if (isEmpty(args) && itemType === 'web_search_call') {\n args = item.action ?? {};\n }\n if (isEmpty(args)) {\n if (itemType === 'commandExecution') {\n args = {\n command: item.command ?? '',\n dir_path: item.cwd ?? '.',\n };\n } else if (itemType === 'local_shell_call') {\n // eslint-disable-next-line no-restricted-syntax -- Narrow unknown to Record\n const action = (item.action === undefined ? {} : item.action) as Record<string, unknown>;\n // eslint-disable-next-line no-restricted-syntax -- Narrow unknown to Record\n const execChild = (action.exec === undefined ? {} : action.exec) as Record<string, unknown>;\n args = {\n command: execChild.command ?? [],\n working_directory: execChild.working_directory,\n };\n } else if (itemType === 'fileChange') {\n const changes: Array<Record<string, unknown>> = Array.isArray(item.changes)\n ? item.changes\n : [];\n const path = changes[0]?.path ?? 'unknown';\n args = { file_path: path };\n }\n }\n\n const argsStr = typeof args === 'string' ? args : jsonStringifySafe(args ?? {});\n\n if (!name) {\n return;\n }\n\n const amsg = getLastAssistant();\n if (!amsg.tool_calls) {\n amsg.tool_calls = [];\n }\n const toolCall: OpenAiChatToolCall = {\n id: callId,\n type: 'function',\n function: { name, arguments: argsStr },\n };\n\n const sig = item.thought_signature ?? fallbackThoughtSignature;\n const thought = item.thought;\n if (typeof sig === 'string' && sig) {\n toolCall.extra_content = { google: { thought_signature: sig } };\n amsg.thought_signature = sig;\n }\n amsg.tool_calls.push(toolCall);\n if (typeof thought === 'string' && thought) {\n amsg.reasoning_content = (amsg.reasoning_content ?? '') + thought;\n }\n void messages;\n}\n\nfunction isImagePart(part: { type?: string }): boolean {\n return part.type === 'input_image' || part.type === 'image' || part.type === 'image_url';\n}\n\n// Extract a chat `image_url` value (http(s) URL or data: URI) from a Responses\n// image part. Shared by user-message and tool-output handling so both translate\n// images identically.\nfunction imagePartToUrl(part: {\n image_url?: string | { url?: string };\n data?: string;\n base64?: string;\n mime_type?: string;\n media_type?: string;\n}): string {\n const imgUrl = part.image_url;\n if (typeof imgUrl === 'string') {\n return imgUrl;\n }\n if (imgUrl && typeof imgUrl === 'object' && imgUrl.url) {\n return imgUrl.url;\n }\n const imgData = String(part.data ?? part.base64 ?? '');\n if (imgData) {\n const mimeType = String(part.mime_type ?? part.media_type ?? 'image/png');\n return imgData.startsWith('data:') ? imgData : `data:${mimeType};base64,${imgData}`;\n }\n return '';\n}\n\nfunction processToolOutput(\n item: Record<string, unknown>,\n messages: OpenAiChatMessage[],\n options: TranslateRequestOptions,\n): void {\n const callId: string | undefined = item.call_id === undefined ? undefined : String(item.call_id);\n const outputRaw = item.output ?? item.content ?? item.stdout ?? '';\n\n let content = '';\n const imageBlocks: Array<{ type: 'image_url'; image_url: { url: string } }> = [];\n if (typeof outputRaw === 'string') {\n content = outputRaw;\n } else if (Array.isArray(outputRaw)) {\n for (const part of outputRaw) {\n if (typeof part === 'string') {\n content += part;\n } else if (part && typeof part === 'object') {\n const partItem: { type?: string; text?: string } = part;\n if (partItem.type === 'input_text' || partItem.type === 'text') {\n content += String(partItem.text ?? '');\n } else if (!options.dropImages && isImagePart(partItem)) {\n const url = imagePartToUrl(part);\n if (url) {\n imageBlocks.push({ type: 'image_url', image_url: { url } });\n }\n }\n }\n }\n } else if (outputRaw && typeof outputRaw === 'object') {\n // eslint-disable-next-line no-restricted-syntax -- Narrow object to Record\n const obj = outputRaw as Record<string, unknown>;\n content = String(obj.content ?? '');\n if (!content && obj.success === false) {\n content = 'Error: Tool execution failed';\n }\n }\n\n if (!content && typeof item.stderr === 'string' && item.stderr) {\n content = `Error: ${item.stderr}`;\n }\n\n messages.push({\n role: 'tool',\n tool_call_id: callId,\n content,\n });\n\n // A chat `tool` message cannot carry images, so image parts in a tool output\n // (e.g. codex `view_image` screenshots) would be dropped on translation. Lift\n // them into a following `user` message — user messages DO map to chat\n // `image_url` content, so the upstream model can still see them.\n if (imageBlocks.length > 0) {\n messages.push({\n role: 'user',\n content: [\n { type: 'text', text: '[Image output returned by the preceding tool call]' },\n ...imageBlocks,\n ],\n });\n }\n}\n\n// ==============================================================================\n// Tool Mapping\n// ==============================================================================\nfunction mapTools(tools: ResponsesTool[]): OpenAiChatTool[] {\n /** If true, drop image/file parts from user messages (e.g. DeepSeek text-only models). */\n const out: OpenAiChatTool[] = [];\n for (const tool of tools) {\n if (!tool || typeof tool !== 'object') {\n continue;\n }\n const tt = tool.type;\n if (tt === 'function') {\n const fn = tool.function;\n const name = fn?.name ?? tool.name;\n if (!name) {\n continue;\n }\n const params = fn?.parameters ?? tool.parameters ?? { type: 'object' };\n out.push({\n type: 'function',\n function: {\n name,\n description: fn?.description ?? tool.description ?? '',\n parameters: params,\n },\n });\n continue;\n }\n if (tt === 'namespace') {\n // Flatten namespace sub-tools as \"{namespace}.{tool}\" function tools so\n // Chat Completions upstreams (e.g. DeepSeek) can call them. Codex\n // dispatches tool calls by full dotted name, so the prefix is required.\n const ns = tool.name;\n // eslint-disable-next-line no-restricted-syntax -- ResponsesTool[] extraction from unknown index signature\n const nested = tool.tools as ResponsesTool[] | undefined;\n if (ns && Array.isArray(nested)) {\n for (const sub of nested) {\n if (!sub || typeof sub !== 'object' || sub.type !== 'function') {\n continue;\n }\n const subName = sub.name;\n if (!subName) {\n continue;\n }\n const params = sub.parameters ?? { type: 'object' };\n out.push({\n type: 'function',\n function: {\n name: `${ns}.${subName}`,\n description: sub.description ?? '',\n // eslint-disable-next-line no-restricted-syntax -- schema is Record<string,unknown> by OpenAPI convention\n parameters: params as Record<string, unknown>,\n },\n });\n }\n }\n continue;\n }\n }\n return out;\n}\n\nfunction mapToolChoice(choice: ResponsesToolChoice): OpenAiChatToolChoice | undefined {\n if (choice == null) {\n return undefined;\n }\n if (choice === 'auto' || choice === 'required' || choice === 'none') {\n return choice;\n }\n if (typeof choice === 'object') {\n if (choice.type === 'function' && 'function' in choice && choice.function?.name) {\n return { type: 'function', function: { name: choice.function.name } };\n }\n return choice;\n }\n return undefined;\n}\n\nfunction isEmpty(value: unknown): boolean {\n if (value == null) {\n return true;\n }\n if (typeof value === 'string') {\n return value.length === 0;\n }\n if (Array.isArray(value)) {\n return value.length === 0;\n }\n if (typeof value === 'object' && value !== null) {\n return Object.keys(value).length === 0;\n }\n return false;\n}\n\n/**\n * Reorder messages so that every `role: 'tool'` message immediately follows\n * the `role: 'assistant'` message that contains its matching `tool_call_id`.\n *\n * Codex Desktop sometimes injects a user message (e.g. a warning) between a\n * `function_call` and the corresponding `function_call_output`. OpenAI Chat\n * format requires strict alternating: assistant (with tool_calls) → tool →\n * assistant → tool → … This function repairs that ordering.\n */\nfunction repairToolMessageOrder(messages: OpenAiChatMessage[]): void {\n if (messages.length === 0) {\n return;\n }\n\n // Collect every tool message by tool_call_id. A response can drift far from\n // its call — Codex interleaves user/assistant items between a function_call\n // and its function_call_output, and parallel calls land out of order — so a\n // tool response may sit in a different assistant \"block\" than its call.\n // Block-local reordering can't fix that; we re-home each response globally.\n const toolById = new Map<string, OpenAiChatMessage>();\n for (const msg of messages) {\n if (\n msg.role === 'tool' &&\n msg.tool_call_id !== undefined &&\n !toolById.has(String(msg.tool_call_id))\n ) {\n toolById.set(String(msg.tool_call_id), msg);\n }\n }\n\n const used = new Set<string>();\n const out: OpenAiChatMessage[] = [];\n for (const msg of messages) {\n // Tool messages are re-emitted right after their assistant below; skipping\n // them at their original position also drops orphans (no matching call).\n if (msg.role === 'tool') {\n continue;\n }\n if (msg.role !== 'assistant') {\n out.push(msg);\n continue;\n }\n\n const calls = msg.tool_calls ?? [];\n if (calls.length === 0) {\n // Keep assistants that carry content; drop empty placeholders.\n if (msg.content != null || msg.reasoning_content != null) {\n out.push(msg);\n }\n continue;\n }\n\n // Keep the assistant and ALL its tool_calls (a trailing call still awaiting\n // execution is legitimate — never drop it), then pull each call's response,\n // if present, to immediately follow in tool_calls order. This gives what\n // providers like Gemini enforce per turn (a turn's functionCall count must\n // equal the immediately-following functionResponse count). A genuinely\n // orphaned tool_call (no response anywhere) is left as-is — de-duping the\n // pairing is the caller's job, not this reorder's. Orphan tool messages\n // (no matching call) are dropped by being skipped at their original spot.\n out.push(msg);\n for (const call of calls) {\n const id = call.id ? String(call.id) : '';\n const tool = id ? toolById.get(id) : undefined;\n if (id && tool && !used.has(id)) {\n out.push(tool);\n used.add(id);\n }\n }\n }\n\n messages.length = 0;\n messages.push(...out);\n}\n","import type { OpenAiChatResponse, OpenAiChatToolCall } from '../../types/openai_chat.js';\nimport type {\n ResponsesOutputFunctionCall,\n ResponsesOutputItem,\n ResponsesResponse,\n} from '../../types/responses.js';\nimport { makeId } from '../../utils/id.js';\nimport { safeJsonParse, jsonStringifySafe } from '../../utils/json.js';\n\nexport interface TranslateResponseOptions {\n responseId?: string;\n createdAt?: number;\n model?: string;\n /** Chat Completions tool list from the translated request — used to recover\n * namespace when the upstream omits the \"namespace.\" prefix in a tool call. */\n requestTools?: unknown[];\n}\n\nconst SHELL_TOOL_NAMES = new Set(['shell', 'container.exec', 'shell_command']);\n\n// ==============================================================================\n// Namespace Tool Helpers\n// ==============================================================================\n\n/** Build shortName → namespace map — handles both flattened Chat Completions\n * tools (\"ns.tool\") and original Responses API namespace tools. */\nfunction buildShortNameToNamespace(tools: unknown[]): Map<string, string> {\n const map = new Map<string, string>();\n for (const tool of tools) {\n if (!tool || typeof tool !== 'object') {\n continue;\n }\n // eslint-disable-next-line no-restricted-syntax -- Record extraction from unknown union\n const entry = tool as Record<string, unknown>;\n // eslint-disable-next-line no-restricted-syntax -- nested Record extraction\n const fn = entry.function as Record<string, unknown> | undefined;\n const flatName =\n typeof fn?.name === 'string' ? fn.name : typeof entry.name === 'string' ? entry.name : '';\n const dotIdx = flatName.indexOf('.');\n if (dotIdx !== -1) {\n map.set(flatName.slice(dotIdx + 1), flatName.slice(0, dotIdx));\n continue;\n }\n if (\n entry.type === 'namespace' &&\n typeof entry.name === 'string' &&\n Array.isArray(entry.tools)\n ) {\n const ns = entry.name;\n // eslint-disable-next-line no-restricted-syntax -- unknown[] iteration over nested tools\n for (const sub of entry.tools as unknown[]) {\n if (!sub || typeof sub !== 'object') {\n continue;\n }\n // eslint-disable-next-line no-restricted-syntax -- Record extraction from unknown\n const subEntry = sub as Record<string, unknown>;\n const subName = typeof subEntry.name === 'string' ? subEntry.name : '';\n if (subName) {\n map.set(subName, ns);\n }\n }\n }\n }\n return map;\n}\n\n/** Convert an OpenAI Chat response into a Responses-API response. */\nexport function translateResponse(\n body: OpenAiChatResponse,\n options: TranslateResponseOptions = {},\n): ResponsesResponse {\n const createdAt = options.createdAt ?? body.created ?? Math.floor(Date.now() / 1000);\n const id = options.responseId ?? body.id ?? makeId('resp');\n const model = options.model ?? body.model ?? '';\n\n const choice = body.choices?.[0];\n const message = choice?.message;\n const output: ResponsesOutputItem[] = [];\n\n const shortNameToNs = buildShortNameToNamespace(options.requestTools ?? []);\n if (message?.tool_calls?.length) {\n for (const tc of message.tool_calls) {\n const item = mapToolCallToOutput(tc, shortNameToNs);\n if (item) {\n output.push(item);\n }\n }\n }\n\n if (typeof message?.content === 'string' && message.content) {\n output.push({\n id: makeId('msg'),\n type: 'message',\n role: 'assistant',\n status: 'completed',\n content: [{ type: 'output_text', text: message.content }],\n });\n }\n\n const usage = body.usage ?? {};\n const input = usage.prompt_tokens ?? 0;\n const completion = usage.completion_tokens ?? 0;\n const total = usage.total_tokens ?? input + completion;\n const cached = usage.prompt_tokens_details?.cached_tokens ?? 0;\n\n return {\n id,\n object: 'response',\n created_at: createdAt,\n model,\n status: 'completed',\n output,\n usage: {\n input_tokens: input,\n output_tokens: completion,\n total_tokens: total,\n input_tokens_details: {\n cached_tokens: cached,\n },\n },\n };\n}\n\nfunction mapToolCallToOutput(\n tc: OpenAiChatToolCall,\n shortNameToNs?: Map<string, string>,\n): ResponsesOutputFunctionCall | undefined {\n const name = tc.function?.name;\n if (!name) {\n return undefined;\n }\n const callId = tc.id ?? makeId('call');\n let args = tc.function?.arguments ?? '';\n if (typeof args !== 'string') {\n args = jsonStringifySafe(args ?? {});\n }\n\n // Restore namespace so codex can route the call to the correct handler.\n // Skip splitting if the full name is already a known shell tool (e.g. \"container.exec\").\n // Case 1: upstream preserved the prefix → split on first dot.\n // Case 2: upstream stripped the prefix → look up the reverse map.\n let resolvedName = name;\n let resolvedNamespace: string | undefined;\n if (!SHELL_TOOL_NAMES.has(name)) {\n const dotIdx = name.indexOf('.');\n if (dotIdx !== -1) {\n resolvedNamespace = name.slice(0, dotIdx);\n resolvedName = name.slice(dotIdx + 1);\n } else {\n resolvedNamespace = shortNameToNs?.get(name);\n }\n }\n\n const item: ResponsesOutputFunctionCall = {\n id: callId,\n type: 'function_call',\n status: 'completed',\n name: resolvedName,\n ...(resolvedNamespace ? { namespace: resolvedNamespace } : {}),\n arguments: args,\n call_id: callId,\n };\n const thoughtSignature = getThoughtSignature(tc);\n if (thoughtSignature) {\n item.thought_signature = thoughtSignature;\n }\n\n if (SHELL_TOOL_NAMES.has(resolvedName)) {\n item.type = 'local_shell_call';\n const parsed = safeJsonParse<{ command?: string[] }>(args);\n item.action = { type: 'exec', command: parsed?.command ?? [] };\n }\n\n return item;\n}\n\nfunction getThoughtSignature(tc: OpenAiChatToolCall): string | undefined {\n const sig = tc.extra_content?.google?.thought_signature ?? tc.thought_signature;\n return typeof sig === 'string' && sig ? sig : undefined;\n}\n","// ==============================================================================\n// Stream Translator\n// ==============================================================================\n\nimport type {\n OpenAiChatStreamChunk,\n OpenAiChatStreamDelta,\n OpenAiChatStreamDeltaToolCall,\n} from '../../types/openai_chat.js';\nimport type {\n ResponsesOutputFunctionCall,\n ResponsesOutputItem,\n ResponsesOutputMessage,\n ResponsesResponse,\n ResponsesStreamEvent,\n} from '../../types/responses.js';\nimport { parseSseStream, type SseMessage } from '../../utils/sse.js';\nimport { makeId } from '../../utils/id.js';\nimport { safeJsonParse, jsonStringifySafe } from '../../utils/json.js';\n\nexport interface ResponsesStreamMetadata {\n temperature?: number;\n top_p?: number;\n tools?: unknown[];\n tool_choice?: unknown;\n store?: boolean;\n metadata?: Record<string, unknown>;\n}\n\nexport interface TranslateStreamOptions {\n model?: string;\n responseId?: string;\n createdAt?: number;\n requestMetadata?: ResponsesStreamMetadata;\n}\n\nconst SHELL_TOOL_NAMES = new Set(['shell', 'container.exec', 'shell_command']);\n\n/** Build a shortName → namespace map so we can restore the namespace when an\n * upstream (e.g. DeepSeek) omits the \"namespace.\" prefix in a tool-call.\n *\n * Handles two formats that may appear in the tools list:\n * 1. Flattened Chat Completions tools: { function: { name: \"ns.tool\" } }\n * 2. Original Responses API namespace tools: { type: \"namespace\", name: \"ns\", tools: [...] }\n */\nfunction buildShortNameToNamespace(tools: unknown[]): Map<string, string> {\n const map = new Map<string, string>();\n for (const tool of tools) {\n if (!tool || typeof tool !== 'object') {\n continue;\n }\n // eslint-disable-next-line no-restricted-syntax -- Record extraction from unknown union\n const entry = tool as Record<string, unknown>;\n\n // Format 1: flattened Chat Completions tool with \"namespace.name\"\n // eslint-disable-next-line no-restricted-syntax -- nested Record extraction\n const fn = entry.function as Record<string, unknown> | undefined;\n const flatName =\n typeof fn?.name === 'string' ? fn.name : typeof entry.name === 'string' ? entry.name : '';\n const dotIdx = flatName.indexOf('.');\n if (dotIdx !== -1) {\n map.set(flatName.slice(dotIdx + 1), flatName.slice(0, dotIdx));\n continue;\n }\n\n // Format 2: Responses API namespace tool with nested sub-tools\n if (\n entry.type === 'namespace' &&\n typeof entry.name === 'string' &&\n Array.isArray(entry.tools)\n ) {\n const ns = entry.name;\n // eslint-disable-next-line no-restricted-syntax -- unknown[] iteration over nested tools\n for (const sub of entry.tools as unknown[]) {\n if (!sub || typeof sub !== 'object') {\n continue;\n }\n // eslint-disable-next-line no-restricted-syntax -- Record extraction from unknown\n const subEntry = sub as Record<string, unknown>;\n const subName = typeof subEntry.name === 'string' ? subEntry.name : '';\n if (subName) {\n map.set(subName, ns);\n }\n }\n }\n }\n return map;\n}\n\n/**\n * Consume an OpenAI-chat-style SSE stream and yield Responses-API SSE events.\n */\nexport async function* translateStream(\n stream: ReadableStream<Uint8Array>,\n options: TranslateStreamOptions = {},\n): AsyncGenerator<ResponsesStreamEvent, void, void> {\n const translator = new StreamTranslator(options);\n yield translator.createInitialEvent();\n\n for await (const msg of parseSseStream(stream)) {\n if (isDoneMessage(msg)) {\n break;\n }\n const chunk = safeJsonParse<OpenAiChatStreamChunk>(msg.data);\n if (!chunk) {\n continue;\n }\n yield* translator.handleChunk(chunk);\n }\n\n yield* translator.finalize();\n}\n\nfunction isDoneMessage(msg: SseMessage): boolean {\n return msg.data.trim() === '[DONE]';\n}\n\ninterface ToolCallState {\n outputIndex: number;\n item: ResponsesOutputFunctionCall;\n}\n\nfunction getToolCallKey(tc: OpenAiChatStreamDeltaToolCall, ordinal: number): string {\n if (typeof tc.index === 'number') {\n return `index:${tc.index}`;\n }\n if (tc.id) {\n return `id:${tc.id}`;\n }\n return `ordinal:${ordinal}`;\n}\n\n// ==============================================================================\n// Stateful Event Translation\n// ==============================================================================\n\nclass StreamTranslator {\n private readonly model: string;\n private readonly responseId: string;\n private readonly createdAt: number;\n private readonly metadata: ResponsesStreamMetadata;\n private seq = 0;\n private outputCounter = 0;\n\n private textItem?: ResponsesOutputMessage;\n private textItemIndex = -1;\n private textBuffer = '';\n\n private readonly toolCalls = new Map<string, ToolCallState>();\n // shortName → namespace reverse map built from flattened namespace tools in\n // the translated request. Used to restore the namespace when an upstream\n // (e.g. DeepSeek) omits the \"namespace.\" prefix in its tool-call response.\n private readonly shortNameToNamespace: Map<string, string>;\n\n private inputTokens = 0;\n private outputTokens = 0;\n private cachedTokens = 0;\n\n constructor(options: TranslateStreamOptions) {\n this.model = options.model ?? '';\n this.responseId = options.responseId ?? makeId('resp');\n this.createdAt = options.createdAt ?? Math.floor(Date.now() / 1000);\n this.metadata = options.requestMetadata ?? {};\n this.shortNameToNamespace = buildShortNameToNamespace(this.metadata.tools ?? []);\n }\n\n createInitialEvent(): ResponsesStreamEvent {\n const toolsArr: unknown[] = this.metadata.tools ?? [];\n const response: Partial<ResponsesResponse> = {\n id: this.responseId,\n object: 'response',\n created_at: this.createdAt,\n model: this.model,\n status: 'in_progress',\n temperature: this.metadata.temperature,\n top_p: this.metadata.top_p,\n tool_choice: this.metadata.tool_choice,\n tools: toolsArr,\n parallel_tool_calls: true,\n store: this.metadata.store ?? true,\n metadata: this.metadata.metadata ?? {},\n output: [],\n };\n return this.makeEvent('response.created', { response });\n }\n\n *handleChunk(chunk: OpenAiChatStreamChunk): Generator<ResponsesStreamEvent, void, void> {\n if (chunk.usage) {\n if (typeof chunk.usage.prompt_tokens === 'number') {\n this.inputTokens = chunk.usage.prompt_tokens;\n }\n if (typeof chunk.usage.completion_tokens === 'number') {\n this.outputTokens = chunk.usage.completion_tokens;\n }\n const cached = chunk.usage.prompt_tokens_details?.cached_tokens;\n if (typeof cached === 'number') {\n this.cachedTokens = cached;\n }\n }\n\n const choice = chunk.choices?.[0];\n const delta: OpenAiChatStreamDelta | undefined = choice?.delta;\n if (!delta) {\n return;\n }\n\n if (delta.tool_calls?.length) {\n for (const [ordinal, tc] of delta.tool_calls.entries()) {\n const key = getToolCallKey(tc, ordinal);\n let state = this.toolCalls.get(key);\n if (!state) {\n const outputIndex = this.outputCounter++;\n const callId = tc.id ?? makeId('call');\n const item: ResponsesOutputFunctionCall = {\n id: callId,\n type: 'function_call',\n status: 'in_progress',\n name: '',\n arguments: '',\n call_id: callId,\n };\n state = { outputIndex, item };\n this.toolCalls.set(key, state);\n yield this.makeEvent('response.output_item.added', {\n response_id: this.responseId,\n output_index: outputIndex,\n item,\n });\n }\n\n const fn = tc.function;\n const thoughtSignature = getThoughtSignature(tc);\n if (thoughtSignature) {\n state.item.thought_signature = thoughtSignature;\n }\n if (fn?.name) {\n state.item.name = (state.item.name ?? '') + fn.name;\n }\n if (fn?.arguments != null) {\n const partial =\n typeof fn.arguments === 'string' ? fn.arguments : jsonStringifySafe(fn.arguments);\n if (partial) {\n state.item.arguments = (state.item.arguments ?? '') + partial;\n yield this.makeEvent('response.function_call_arguments.delta', {\n response_id: this.responseId,\n item_id: state.item.id,\n output_index: state.outputIndex,\n delta: partial,\n });\n }\n }\n }\n }\n\n if (typeof delta.content === 'string' && delta.content) {\n if (!this.textItem) {\n const outputIndex = this.outputCounter++;\n this.textItemIndex = outputIndex;\n this.textItem = {\n id: makeId('msg'),\n type: 'message',\n role: 'assistant',\n status: 'in_progress',\n content: [{ type: 'output_text', text: '' }],\n };\n yield this.makeEvent('response.output_item.added', {\n response_id: this.responseId,\n output_index: outputIndex,\n item: this.textItem,\n });\n }\n this.textBuffer += delta.content;\n // eslint-disable-next-line no-restricted-syntax -- Narrow union to text content\n const textContent = this.textItem.content[0] as { text: string };\n textContent.text = this.textBuffer;\n yield this.makeEvent('response.output_text.delta', {\n response_id: this.responseId,\n item_id: this.textItem.id,\n output_index: this.textItemIndex,\n content_index: 0,\n delta: delta.content,\n });\n }\n }\n\n *finalize(): Generator<ResponsesStreamEvent, void, void> {\n const items: { index: number; item: ResponsesOutputItem }[] = [];\n\n if (this.textItem) {\n this.textItem.status = 'completed';\n items.push({ index: this.textItemIndex, item: this.textItem });\n }\n\n for (const state of this.toolCalls.values()) {\n const item = state.item;\n item.status = 'completed';\n // Restore namespace so codex can route the call to the correct handler.\n // Skip splitting if the full name is already a known shell tool (e.g. \"container.exec\").\n // Case 1: upstream preserved the prefix → split on first dot.\n // Case 2: upstream stripped the prefix → look up the reverse map.\n if (item.name && !SHELL_TOOL_NAMES.has(item.name)) {\n const dotIdx = item.name.indexOf('.');\n if (dotIdx !== -1) {\n item.namespace = item.name.slice(0, dotIdx);\n item.name = item.name.slice(dotIdx + 1);\n } else {\n const ns = this.shortNameToNamespace.get(item.name);\n if (ns) {\n item.namespace = ns;\n }\n }\n }\n if (item.name && SHELL_TOOL_NAMES.has(item.name)) {\n item.type = 'local_shell_call';\n const parsed = safeJsonParse<{ command?: string[] }>(item.arguments ?? '');\n item.action = { type: 'exec', command: parsed?.command ?? [] };\n }\n items.push({ index: state.outputIndex, item });\n }\n\n items.sort((alpha, beta) => alpha.index - beta.index);\n\n for (const { index, item } of items) {\n yield this.makeEvent('response.output_item.done', {\n response_id: this.responseId,\n output_index: index,\n item,\n });\n }\n\n const output = items.map((item) => item.item);\n const finalToolsArr: unknown[] = this.metadata.tools ?? [];\n const total = this.inputTokens + this.outputTokens;\n\n const response: Partial<ResponsesResponse> = {\n id: this.responseId,\n object: 'response',\n created_at: this.createdAt,\n completed_at: Math.floor(Date.now() / 1000),\n model: this.model,\n status: 'completed',\n temperature: this.metadata.temperature,\n top_p: this.metadata.top_p,\n tool_choice: this.metadata.tool_choice,\n tools: finalToolsArr,\n parallel_tool_calls: true,\n store: this.metadata.store ?? true,\n metadata: this.metadata.metadata ?? {},\n output,\n usage: {\n input_tokens: this.inputTokens,\n output_tokens: this.outputTokens,\n total_tokens: total,\n input_tokens_details: {\n cached_tokens: this.cachedTokens,\n },\n },\n };\n\n yield this.makeEvent('response.completed', { response });\n }\n\n private makeEvent(type: string, data: Record<string, unknown>): ResponsesStreamEvent {\n this.seq += 1;\n return {\n id: makeId('evt'),\n object: 'response.event',\n type,\n created_at: Math.floor(Date.now() / 1000),\n sequence_number: this.seq,\n ...data,\n };\n }\n}\n\nfunction getThoughtSignature(tc: OpenAiChatStreamDeltaToolCall): string | undefined {\n const sig = tc.extra_content?.google?.thought_signature ?? tc.thought_signature;\n return typeof sig === 'string' && sig ? sig : undefined;\n}\n","// ==============================================================================\n// Tool Name Sanitizer\n// ==============================================================================\n// Some Chat Completions upstreams (e.g. DeepSeek) reject tool names that\n// contain chars outside [a-zA-Z0-9_-]. Namespace tools flattened by\n// translateRequest use dots as separators (e.g. \"multi_agent_v1.spawn_agent\").\n//\n// These helpers sanitize names before the upstream request and restore the\n// originals in the response/stream so callers always see the original names.\n\n/** Replace [^a-zA-Z0-9_-] with '_'; mutates body.tools in place.\n * Returns a map of sanitized→original for every renamed tool. */\nexport function sanitizeUpstreamToolNames(body: Record<string, unknown>): Map<string, string> {\n const map = new Map<string, string>();\n const tools = body.tools;\n if (!Array.isArray(tools)) {\n return map;\n }\n for (const tool of tools) {\n if (!tool || typeof tool !== 'object') {\n continue;\n }\n // eslint-disable-next-line no-restricted-syntax -- Chat Completions tool is Record; no stable type\n const toolRecord = tool as Record<string, unknown>;\n const fn = toolRecord.function;\n if (!fn || typeof fn !== 'object') {\n continue;\n }\n // eslint-disable-next-line no-restricted-syntax -- function field is Record; no stable type\n const fnRecord = fn as Record<string, unknown>;\n const original = fnRecord.name;\n if (typeof original !== 'string') {\n continue;\n }\n const sanitized = original.replace(/[^a-zA-Z0-9_-]/g, '_');\n if (sanitized !== original) {\n map.set(sanitized, original);\n fnRecord.name = sanitized;\n }\n }\n return map;\n}\n\n/** Restore tool_call function names in a non-streaming Chat Completions response. */\nexport function restoreToolNamesInChatResponse<T extends Record<string, unknown>>(\n body: T,\n map: Map<string, string>,\n): T {\n if (map.size === 0) {\n return body;\n }\n const choices = body.choices;\n if (!Array.isArray(choices)) {\n return body;\n }\n for (const choice of choices) {\n if (!choice || typeof choice !== 'object') {\n continue;\n }\n // eslint-disable-next-line no-restricted-syntax -- Chat Completions choice is Record; no stable type\n const choiceRecord = choice as Record<string, unknown>;\n const message = choiceRecord.message;\n if (!message || typeof message !== 'object') {\n continue;\n }\n // eslint-disable-next-line no-restricted-syntax -- message is Record; no stable type\n const msg = message as Record<string, unknown>;\n const toolCalls = msg.tool_calls;\n if (!Array.isArray(toolCalls)) {\n continue;\n }\n for (const tc of toolCalls) {\n if (!tc || typeof tc !== 'object') {\n continue;\n }\n // eslint-disable-next-line no-restricted-syntax -- tool call is Record; no stable type\n const callRecord = tc as Record<string, unknown>;\n const fn = callRecord.function;\n if (!fn || typeof fn !== 'object') {\n continue;\n }\n // eslint-disable-next-line no-restricted-syntax -- function is Record; no stable type\n const fnRecord = fn as Record<string, unknown>;\n const name = fnRecord.name;\n if (typeof name === 'string' && map.has(name)) {\n fnRecord.name = map.get(name);\n }\n }\n }\n return body;\n}\n\n/** Wrap a ReadableStream<Uint8Array> to restore tool names on the fly (handles SSE). */\nexport function createToolNameRestoreStream(\n body: ReadableStream<Uint8Array>,\n map: Map<string, string>,\n): ReadableStream<Uint8Array> {\n if (map.size === 0) {\n return body;\n }\n const entries = Array.from(map.entries());\n const decoder = new TextDecoder();\n const encoder = new TextEncoder();\n const reader = body.getReader();\n\n return new ReadableStream<Uint8Array>({\n async pull(controller) {\n // eslint-disable-next-line no-restricted-syntax -- try/catch needed for stream error handling\n try {\n const { value, done } = await reader.read();\n if (done) {\n controller.close();\n return;\n }\n let text = decoder.decode(value, { stream: true });\n for (const [sanitized, original] of entries) {\n const escapedSanitized = sanitized.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const re = new RegExp(`(\"name\"\\\\s*:\\\\s*\")${escapedSanitized}(\")`, 'g');\n text = text.replace(re, `$1${original}$2`);\n }\n controller.enqueue(encoder.encode(text));\n } catch (err) {\n controller.error(err);\n }\n },\n cancel() {\n reader.cancel().catch(() => {\n /* noop */\n });\n },\n });\n}\n","// ==============================================================================\n// URL & Format Helpers\n// ==============================================================================\n\n// === Config & Types ===\n/**\n * Drop-in `fetch` wrapper that translates OpenAI Responses API traffic\n * to an upstream API format (Anthropic Messages or OpenAI Chat).\n */\n\nimport * as anthropic from './translate/anthropic/index.js';\nimport * as openai from './translate/openai/index.js';\nimport { encodeSseEvent } from './utils/sse.js';\nimport type {\n ResponsesRequest,\n ResponsesStreamEvent,\n ResponsesResponse,\n ResponsesTool,\n} from './types/responses.js';\nimport type { AnthropicResponse, AnthropicThinkingConfig } from './types/anthropic.js';\nimport type { OpenAiChatResponse } from './types/openai_chat.js';\nimport {\n sanitizeUpstreamToolNames,\n restoreToolNamesInChatResponse,\n createToolNameRestoreStream,\n} from './tool-name-sanitizer.js';\n\nexport type UpstreamFormat = 'anthropic' | 'openai-chat';\n\nexport interface CacheStats {\n cachedTokens: number;\n cacheCreationTokens: number;\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n}\n\nexport interface CreateResponsesFetchOptions {\n /** Upstream API format. If omitted, inferred from `baseUrl`. */\n upstreamFormat?: UpstreamFormat;\n /** Upstream endpoint URL. Required. */\n baseUrl: string;\n /** Override upstream API version header (Anthropic only). */\n apiVersion?: string;\n /** Replace the caller-provided `model` field before translation. */\n model?: string;\n /** Extra headers merged into every upstream call. */\n defaultHeaders?: Record<string, string>;\n /** Underlying fetch. Defaults to `globalThis.fetch`. */\n fetch?: typeof fetch;\n /** Non-/responses traffic forward target. Defaults to `options.fetch`. */\n passthroughFetch?: typeof fetch;\n /** Drop image/file parts from user messages (e.g. DeepSeek text-only models). */\n dropImages?: boolean;\n /** Drop tools from the request before translation. Return true to drop a tool.\n * Use to reduce payload size when the upstream has a limit (e.g. DeepSeek ECONNRESET\n * on 252 KB requests with 143 tools). Applied before namespace flattening. */\n dropTools?: (tool: ResponsesTool) => boolean;\n /** Fallback thought signature for Gemini OpenAI-compatible tool histories. */\n fallbackThoughtSignature?: string;\n /** Optional callback to receive cache statistics. */\n onCacheStats?: (stats: CacheStats) => void;\n /** Override reasoning_effort sent to the upstream model (OpenAI Chat / Anthropic). */\n // ==============================================================================\n // Request Building\n // ==============================================================================\n\n reasoning_effort?: string;\n /** Override thinking configuration sent to the upstream model. */\n thinking?: unknown;\n /** Timeout in milliseconds for upstream requests. Defaults to no timeout. */\n timeoutMs?: number;\n /** Fallback upstream for requests where the last user message contains images. */\n fallbackUpstream?: {\n baseUrl: string;\n upstreamFormat?: UpstreamFormat;\n model?: string;\n defaultHeaders?: Record<string, string>;\n apiVersion?: string;\n reasoning_effort?: string;\n thinking?: unknown;\n };\n}\n\nexport function createResponsesFetch(options: CreateResponsesFetchOptions): typeof fetch {\n if (!options.baseUrl) {\n throw new Error('baseUrl is required');\n }\n\n const rawFormat = options.upstreamFormat;\n const format = rawFormat\n ? normalizeFormat(rawFormat)\n : (inferFormatFromUrl(options.baseUrl) ?? inferFormatFromModel(options.model) ?? 'openai-chat');\n if (!format) {\n throw new Error(\n `Unsupported upstream format: ${options.upstreamFormat}. Use 'anthropic' or 'openai-chat'`,\n );\n }\n\n const baseFetch = options.fetch ?? globalThis.fetch;\n if (!baseFetch) {\n throw new Error('fetch is not available; pass options.fetch');\n }\n const passthrough = options.passthroughFetch ?? baseFetch;\n\n return async (input, init) => {\n const url = urlOf(input);\n if (!isResponsesEndpoint(url)) {\n return passthrough(input, init);\n }\n\n const { body, signal, method, headers } = await extractRequest(input, init);\n if (method !== 'POST') {\n return passthrough(input, init);\n }\n\n let parsed: ResponsesRequest | undefined;\n // eslint-disable-next-line no-restricted-syntax -- try/catch needed for server-side HTTP error handling\n try {\n parsed = body ? JSON.parse(body) : undefined;\n } catch {\n return jsonErrorResponse(400, 'Invalid JSON body for /responses');\n }\n if (!parsed) {\n return jsonErrorResponse(400, 'Missing body for /responses');\n }\n\n if (options.model) {\n parsed.model = options.model;\n }\n return handleResponses(parsed, format, options, baseFetch, headers, signal, options.dropImages);\n };\n}\n\n// ── format helpers ──\n\nfunction normalizeBaseUrl(url: string, format: UpstreamFormat): string {\n // eslint-disable-next-line no-restricted-syntax -- try/catch needed for server-side HTTP error handling\n try {\n const parsedUrl = new URL(url);\n const path = parsedUrl.pathname.replace(/\\/+$/, '');\n if (format === 'anthropic') {\n if (path.endsWith('/v1/messages') || path.endsWith('/messages')) {\n return parsedUrl.toString();\n }\n if (path.endsWith('/v1')) {\n parsedUrl.pathname += '/messages';\n return parsedUrl.toString();\n }\n parsedUrl.pathname = '/v1/messages';\n } else {\n if (path.endsWith('/v1/chat/completions') || path.endsWith('/chat/completions')) {\n return parsedUrl.toString();\n }\n if (path.endsWith('/v1')) {\n parsedUrl.pathname += '/chat/completions';\n return parsedUrl.toString();\n }\n parsedUrl.pathname = '/v1/chat/completions';\n }\n return parsedUrl.toString();\n } catch {\n return url;\n }\n}\n\nfunction normalizeFormat(format: string): UpstreamFormat | null {\n const fmt: UpstreamFormat | null =\n format === 'anthropic' || format === 'openai-chat' ? format : null;\n return fmt;\n}\n\nfunction inferFormatFromUrl(baseUrl: string): UpstreamFormat | null {\n // eslint-disable-next-line no-restricted-syntax -- try/catch needed for server-side HTTP error handling\n try {\n const parsedUrl = new URL(baseUrl);\n const path = parsedUrl.pathname.replace(/\\/+$/, '');\n if (/\\/messages$/.test(path) || parsedUrl.hostname.toLowerCase().includes('anthropic')) {\n return 'anthropic';\n }\n if (/\\/chat\\/completions$/.test(path)) {\n return 'openai-chat';\n }\n } catch {\n /* ignore */\n }\n return null;\n}\n\n/** Infer upstream format from model name. */\nfunction inferFormatFromModel(model: string | undefined): UpstreamFormat | null {\n if (!model) {\n return null;\n }\n if (/^claude/i.test(model)) {\n return 'anthropic';\n }\n return null;\n}\n\n// ── request extraction ──\n\nfunction isResponsesEndpoint(url: string): boolean {\n // eslint-disable-next-line no-restricted-syntax -- try/catch needed for server-side HTTP error handling\n try {\n return /\\/v1\\/responses\\/?$/.test(new URL(url, 'http://_internal_').pathname);\n } catch {\n return /\\/v1\\/responses(?:\\?|$)/.test(url);\n }\n}\n// ==============================================================================\n// Main Fetch Function\n// ==============================================================================\n\nfunction urlOf(input: RequestInfo | URL): string {\n if (typeof input === 'string') {\n return input;\n }\n if (input instanceof URL) {\n return input.toString();\n }\n if (typeof Request !== 'undefined' && input instanceof Request) {\n return input.url;\n }\n return String(input);\n}\n\nfunction parseHeaders(raw: HeadersInit | undefined): Record<string, string> {\n const out: Record<string, string> = {};\n if (!raw) {\n return out;\n }\n if (typeof Headers !== 'undefined' && raw instanceof Headers) {\n raw.forEach((val, key) => {\n out[key.toLowerCase()] = val;\n });\n return out;\n }\n if (Array.isArray(raw)) {\n for (const [k, v] of raw) {\n out[String(k).toLowerCase()] = String(v);\n }\n return out;\n }\n for (const [k, v] of Object.entries(raw)) {\n out[k.toLowerCase()] = String(v);\n }\n return out;\n}\n\nasync function extractRequest(\n input: RequestInfo | URL,\n init?: RequestInit,\n): Promise<{\n body: string | undefined;\n signal: AbortSignal | undefined;\n method: string;\n headers: Record<string, string>;\n}> {\n if (typeof Request !== 'undefined' && input instanceof Request) {\n const text = await input.clone().text();\n const headers: HeadersInit = parseHeaders(input.headers);\n return { body: text || undefined, signal: input.signal, method: input.method, headers };\n }\n const method = init?.method?.toUpperCase() ?? 'GET';\n const body =\n init?.body != null\n ? typeof init.body === 'string'\n ? init.body\n : await readBody(init.body)\n : undefined;\n return { body, signal: init?.signal, method, headers: parseHeaders(init?.headers) };\n}\n\nasync function readBody(body: BodyInit): Promise<string> {\n if (typeof body === 'string') {\n return body;\n }\n if (body instanceof Uint8Array || body instanceof ArrayBuffer) {\n return new TextDecoder().decode(body);\n }\n return String(body);\n}\n\n// ── main handler ──\n\nasync function handleResponses(\n request: ResponsesRequest,\n format: UpstreamFormat,\n options: CreateResponsesFetchOptions,\n baseFetch: typeof fetch,\n incomingHeaders: Record<string, string>,\n // ==============================================================================\n // HTTP Client\n // ==============================================================================\n\n signal: AbortSignal | undefined,\n dropImages?: boolean,\n): Promise<Response> {\n // Auto-fallback: if this upstream drops images but the last user message has them,\n // transparently switch to the fallback upstream.\n if (dropImages && options.fallbackUpstream && lastUserMessageHasImage(request)) {\n dropImages = false;\n const fb = options.fallbackUpstream;\n options = { ...options, ...fb, fallbackUpstream: undefined };\n format =\n fb.upstreamFormat ??\n inferFormatFromUrl(fb.baseUrl) ??\n inferFormatFromModel(fb.model) ??\n format;\n if (options.model) {\n request.model = options.model;\n }\n const fbModel = fb.model ? `, model: ${fb.model}` : '';\n console.warn(`[fallback] last user message has image, routing to ${fb.baseUrl}${fbModel}`);\n }\n\n if (options.dropTools && request.tools) {\n const { dropTools } = options;\n request = { ...request, tools: request.tools.filter((tool) => !dropTools(tool)) };\n }\n\n const streaming = request.stream ?? false;\n const resolvedUrl = normalizeBaseUrl(options.baseUrl, format);\n const { upstreamBody, requestMetadata } = buildUpstreamBody(\n request,\n format,\n streaming,\n options.baseUrl,\n dropImages,\n options.reasoning_effort,\n options.thinking,\n options.fallbackThoughtSignature,\n );\n const upstreamHeaders = buildUpstreamHeaders(format, options, incomingHeaders);\n\n // Sanitize tool names: replace chars outside [a-zA-Z0-9_-] (e.g. dots) with '_'\n // and restore originals in the response so callers see the original names.\n const toolNameMap =\n format === 'openai-chat'\n ? // eslint-disable-next-line no-restricted-syntax -- upstreamBody is unknown; cast to Record for tool mutation\n sanitizeUpstreamToolNames(upstreamBody as Record<string, unknown>)\n : new Map<string, string>();\n\n const upstream = await baseFetch(resolvedUrl, {\n method: 'POST',\n headers: upstreamHeaders,\n body: JSON.stringify(upstreamBody),\n signal,\n });\n\n if (!upstream.ok) {\n return new Response(await upstream.text().catch(() => ''), {\n status: upstream.status,\n headers: { 'content-type': 'application/json' },\n });\n }\n\n if (!streaming) {\n const rawBody = await upstream.json();\n const restoredBody = restoreToolNamesInChatResponse(\n // eslint-disable-next-line no-restricted-syntax -- upstream json() returns unknown; cast to Record for tool name restoration\n rawBody as Record<string, unknown>,\n toolNameMap,\n );\n const translated =\n format === 'anthropic'\n ? // eslint-disable-next-line no-restricted-syntax -- union type narrowing requires type assertion\n anthropic.translateResponse(restoredBody as unknown as AnthropicResponse, {\n model: request.model,\n })\n : // eslint-disable-next-line no-restricted-syntax -- union type narrowing requires type assertion\n openai.translateResponse(restoredBody as unknown as OpenAiChatResponse, {\n model: request.model,\n requestTools: request.tools ?? [],\n });\n options.onCacheStats?.(extractCacheStatsFromResponse(translated));\n return new Response(JSON.stringify(translated), {\n status: 200,\n headers: { 'content-type': 'application/json' },\n });\n }\n\n if (!upstream.body) {\n return jsonErrorResponse(502, 'Upstream streaming response has no body');\n }\n\n const upstreamBodyStream = createToolNameRestoreStream(upstream.body, toolNameMap);\n\n const events =\n format === 'anthropic'\n ? anthropic.translateStream(upstreamBodyStream, { model: request.model, requestMetadata })\n : openai.translateStream(upstreamBodyStream, { model: request.model, requestMetadata });\n\n return new Response(\n responsesEventsToSseStream(collectCacheStatsFromStream(events, options.onCacheStats)),\n {\n status: 200,\n headers: {\n 'content-type': 'text/event-stream; charset=utf-8',\n 'cache-control': 'no-cache',\n connection: 'keep-alive',\n },\n },\n );\n}\n\n// ── upstream body ──\n\nfunction buildRequestMetadata(request: ResponsesRequest, temperature?: number, top_p?: number) {\n return {\n temperature,\n top_p,\n tools: request.tools ?? [],\n tool_choice: request.tool_choice,\n store: request.store ?? true,\n metadata: request.metadata ?? {},\n };\n}\n\nfunction buildUpstreamBody(\n request: ResponsesRequest,\n format: UpstreamFormat,\n streaming: boolean,\n baseUrl: string,\n dropImages?: boolean,\n reasoning_effort?: string,\n thinking?: unknown,\n fallbackThoughtSignature?: string,\n): { upstreamBody: unknown; requestMetadata: ReturnType<typeof buildRequestMetadata> } {\n if (format === 'anthropic') {\n const { request: ar } = anthropic.translateRequest(request);\n ar.stream = streaming;\n if (thinking !== undefined) {\n // eslint-disable-next-line no-restricted-syntax -- thinking comes from config.json, runtime-checked\n ar.thinking = thinking as AnthropicThinkingConfig;\n } else if (reasoning_effort) {\n const effort = reasoning_effort.toLowerCase();\n if (effort === 'minimal') {\n ar.thinking = { type: 'disabled' };\n } else if (effort === 'low') {\n ar.thinking = { type: 'enabled', budget_tokens: 4096 };\n } else if (effort === 'medium') {\n ar.thinking = { type: 'enabled', budget_tokens: 16384 };\n } else if (effort === 'high') {\n ar.thinking = { type: 'enabled', budget_tokens: 32768 };\n } else if (effort === 'xhigh') {\n ar.thinking = { type: 'enabled', budget_tokens: 65536 };\n }\n }\n // Ensure max_tokens > thinking.budget_tokens (Anthropic requirement)\n if (ar.thinking && typeof ar.thinking === 'object' && 'budget_tokens' in ar.thinking) {\n // eslint-disable-next-line no-restricted-syntax -- runtime-checked budget_tokens from thinking config\n const budget = Number((ar.thinking as unknown as Record<string, unknown>).budget_tokens);\n if (budget > 0 && ar.max_tokens <= budget) {\n ar.max_tokens = budget + 1024;\n }\n }\n return {\n upstreamBody: ar,\n requestMetadata: buildRequestMetadata(request, ar.temperature, ar.top_p),\n };\n }\n const { request: cr } = openai.translateRequest(request, {\n dropImages: dropImages,\n fallbackThoughtSignature,\n });\n cr.stream = streaming;\n if (streaming) {\n cr.stream_options = { include_usage: true };\n }\n if (reasoning_effort !== undefined) {\n cr.reasoning_effort = reasoning_effort;\n }\n if (thinking !== undefined) {\n cr.thinking = thinking;\n }\n return {\n upstreamBody: cr,\n requestMetadata: buildRequestMetadata(request, cr.temperature, cr.top_p),\n };\n}\n\n// ── upstream headers ──\n\nfunction buildUpstreamHeaders(\n format: UpstreamFormat,\n options: CreateResponsesFetchOptions,\n incoming: Record<string, string>,\n): Record<string, string> {\n const out: Record<string, string> = {};\n for (const [key, value] of Object.entries(incoming)) {\n if (DROPPED_HEADERS.has(key) || isClientSpecificHeader(key)) {\n continue;\n }\n out[key] = value;\n }\n if (options.defaultHeaders) {\n for (const [k, v] of Object.entries(options.defaultHeaders)) {\n out[k.toLowerCase()] = v;\n }\n }\n out['content-type'] = 'application/json';\n if (format === 'anthropic') {\n if (!out['anthropic-version']) {\n out['anthropic-version'] = options.apiVersion ?? '2023-06-01';\n }\n if (typeof out['authorization'] === 'string') {\n const match = /^Bearer\\s+(.+)$/i.exec(out['authorization']);\n if (match) {\n out['x-api-key'] = match[1].trim();\n }\n }\n delete out['authorization'];\n }\n return out;\n}\n\nconst DROPPED_HEADERS = new Set([\n 'host',\n 'content-length',\n 'connection',\n 'accept-encoding',\n 'accept',\n 'user-agent',\n]);\n\nfunction isClientSpecificHeader(key: string): boolean {\n const keyLower = key.toLowerCase();\n return (\n keyLower.startsWith('openai-') ||\n keyLower.startsWith('x-stainless') ||\n keyLower.startsWith('x-codex-') ||\n keyLower === 'originator' ||\n keyLower === 'session_id' ||\n keyLower === 'x-client-request-id'\n );\n}\n\n// ── SSE stream ──\n\nfunction responsesEventsToSseStream(\n events: AsyncGenerator<ResponsesStreamEvent, void, void>,\n): ReadableStream<Uint8Array> {\n const encoder = new TextEncoder();\n return new ReadableStream<Uint8Array>({\n async pull(controller) {\n // eslint-disable-next-line no-restricted-syntax -- try/catch needed for server-side HTTP error handling\n try {\n const { value, done } = await events.next();\n if (done) {\n controller.enqueue(encoder.encode('data: [DONE]\\n\\n'));\n controller.close();\n return;\n }\n controller.enqueue(encoder.encode(encodeSseEvent(value && value.type, value)));\n } catch (err) {\n controller.error(err);\n }\n },\n async cancel() {\n // eslint-disable-next-line no-restricted-syntax -- try/catch needed for server-side HTTP error handling\n try {\n await events.return?.();\n } catch {\n /* noop */\n }\n },\n });\n}\n\n// ── cache stats ──\n\nfunction extractCacheStatsFromResponse(response: ResponsesResponse): CacheStats {\n const usage = response.usage;\n return {\n cachedTokens: usage?.input_tokens_details?.cached_tokens ?? 0,\n cacheCreationTokens: usage?.input_tokens_details?.cache_creation_tokens ?? 0,\n inputTokens: usage?.input_tokens ?? 0,\n outputTokens: usage?.output_tokens ?? 0,\n totalTokens: usage?.total_tokens ?? 0,\n };\n}\n\nasync function* collectCacheStatsFromStream(\n events: AsyncGenerator<ResponsesStreamEvent, void, void>,\n onCacheStats?: (stats: CacheStats) => void,\n): AsyncGenerator<ResponsesStreamEvent, void, void> {\n let lastStats: CacheStats | undefined;\n for await (const event of events) {\n if (event.type === 'response.completed') {\n // eslint-disable-next-line no-restricted-syntax -- upstream event carries runtime property not in type\n const eventResp = event as unknown as { response?: ResponsesResponse };\n const resp = eventResp.response;\n if (resp?.usage) {\n lastStats = extractCacheStatsFromResponse(resp);\n }\n }\n yield event;\n }\n if (lastStats && onCacheStats) {\n onCacheStats(lastStats);\n }\n}\n\n/**\n * Check if the last user message in the input contains image content.\n * Assistant messages and tool results are skipped — only the most recent\n * `role: 'user'` item is inspected.\n */\nfunction lastUserMessageHasImage(request: ResponsesRequest): boolean {\n const input = request.input;\n if (!input || !Array.isArray(input)) {\n return false;\n }\n for (let i = input.length - 1; i >= 0; i--) {\n const item = input[i];\n if (!item || typeof item !== 'object') {\n continue;\n }\n const itemRecord: Record<string, unknown> = item;\n if (itemRecord.role !== 'user') {\n continue;\n }\n // Found the last user message\n const content = itemRecord.content;\n if (!Array.isArray(content)) {\n return false;\n }\n for (const part of content) {\n if (part && typeof part === 'object') {\n const partItem: Record<string, unknown> = part;\n const type = partItem.type;\n if (type === 'input_image' || type === 'image' || type === 'image_url') {\n return true;\n }\n }\n }\n return false;\n }\n return false;\n}\n\n// ── error helpers ──\n\nfunction jsonErrorResponse(status: number, message: string): Response {\n return new Response(\n JSON.stringify({ error: { message, type: 'upstream_error', code: String(status) } }),\n { status, headers: { 'content-type': 'application/json' } },\n );\n}\n","/**\n * Unified translation layer for Responses API.\n *\n * This module translates between OpenAI Responses API format and upstream\n * API formats. You specify the upstream API format (`anthropic` or\n * `openai-chat`) instead of a named provider.\n *\n * - `anthropic` → Anthropic Messages API\n * - `openai-chat` → OpenAI-compatible Chat Completions API (OpenAI, ZAI, etc.)\n */\n\nexport * as anthropic from './anthropic/index.js';\nexport * as openai from './openai/index.js';\n\n// Re-export unified types\nexport type {\n ResponsesRequest,\n ResponsesResponse,\n ResponsesStreamEvent,\n} from '../types/responses.js';\n"]}