@codeproxy/core 0.1.6 → 0.1.8

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.
package/dist/index.js.map CHANGED
@@ -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/fetch.ts","../src/translate/index.ts"],"names":["data","SHELL_TOOL_NAMES","item","translateRequest","translateResponse","translateStream","mapTools","mapToolChoice","StreamTranslator"],"mappings":"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","file":"index.js","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 for (const block of blocks) {\n if (!block.cache_control) {\n block.cache_control = { type: 'ephemeral' };\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 } 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 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 const item: ResponsesOutputFunctionCall = {\n id: callId,\n type: 'function_call',\n status: 'in_progress',\n name: block.name ?? '',\n arguments: '',\n call_id: callId,\n };\n this.blocks.set(index, { type: 'tool_use', 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 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 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}\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.dropImages);\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\nfunction processInputItem(\n item: Record<string, unknown>,\n messages: OpenAiChatMessage[],\n dropImages?: boolean,\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 (\n contentPart.type === 'input_image' ||\n contentPart.type === 'image' ||\n contentPart.type === 'image_url'\n ) {\n if (dropImages) {\n continue;\n }\n let url = '';\n const partWithImage: { image_url?: string | { url: string } } = part;\n const imgUrl = partWithImage.image_url;\n if (typeof imgUrl === 'string') {\n url = imgUrl;\n } else if (imgUrl && typeof imgUrl === 'object' && imgUrl.url) {\n url = imgUrl.url;\n } else {\n const partWithData: { data?: string; base64?: string } = part;\n const imgData = String(partWithData.data ?? partWithData.base64 ?? '');\n if (imgData) {\n const partWithMime: { mime_type?: string; media_type?: string } = part;\n const mimeType = String(\n partWithMime.mime_type ?? partWithMime.media_type ?? 'image/png',\n );\n url = imgData.startsWith('data:')\n ? imgData\n : `data:${mimeType};base64,${imgData}`;\n }\n }\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);\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);\n return;\n }\n}\n\nfunction processToolCall(\n item: Record<string, unknown>,\n messages: OpenAiChatMessage[],\n getLastAssistant: () => OpenAiChatMessage,\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 amsg.tool_calls.push({\n id: callId,\n type: 'function',\n function: { name, arguments: argsStr },\n });\n\n const sig = item.thought_signature;\n const thought = item.thought;\n if (typeof sig === 'string' && sig) {\n amsg.thought_signature = sig;\n }\n if (typeof thought === 'string' && thought) {\n amsg.reasoning_content = (amsg.reasoning_content ?? '') + thought;\n }\n void messages;\n}\n\nfunction processToolOutput(item: Record<string, unknown>, messages: OpenAiChatMessage[]): 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 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 }\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\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 }\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}\n\nconst SHELL_TOOL_NAMES = new Set(['shell', 'container.exec', 'shell_command']);\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 if (message?.tool_calls?.length) {\n for (const tc of message.tool_calls) {\n const item = mapToolCallToOutput(tc);\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(tc: OpenAiChatToolCall): 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 const item: ResponsesOutputFunctionCall = {\n id: callId,\n type: 'function_call',\n status: 'completed',\n name,\n arguments: args,\n call_id: callId,\n };\n\n if (SHELL_TOOL_NAMES.has(name)) {\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","// ==============================================================================\n// Stream Translator\n// ==============================================================================\n\nimport type { OpenAiChatStreamChunk, OpenAiChatStreamDelta } 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/**\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\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<number, ToolCallState>();\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 }\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 tc of delta.tool_calls) {\n const idx = tc.index ?? 0;\n let state = this.toolCalls.get(idx);\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(idx, 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 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 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","// ==============================================================================\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} from './types/responses.js';\nimport type { AnthropicResponse, AnthropicThinkingConfig } from './types/anthropic.js';\nimport type { OpenAiChatResponse } from './types/openai_chat.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 /** 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) ?? '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 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 );\n const upstreamHeaders = buildUpstreamHeaders(format, options, incomingHeaders);\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 body = await upstream.json();\n const translated =\n format === 'anthropic'\n ? // eslint-disable-next-line no-restricted-syntax -- union type narrowing requires type assertion\n anthropic.translateResponse(body as AnthropicResponse, { model: request.model })\n : // eslint-disable-next-line no-restricted-syntax -- union type narrowing requires type assertion\n openai.translateResponse(body as OpenAiChatResponse, { model: request.model });\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 events =\n format === 'anthropic'\n ? anthropic.translateStream(upstream.body, { model: request.model, requestMetadata })\n : openai.translateStream(upstream.body, { 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): { 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, { dropImages: dropImages });\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/toolSchema.ts","../src/translate/openai/translateRequest.ts","../src/translate/openai/translateResponse.ts","../src/translate/openai/translateStream.ts","../src/fetch.ts","../src/translate/index.ts"],"names":["data","SHELL_TOOL_NAMES","item","translateRequest","translateResponse","translateStream","mapTools","mapToolChoice","amsg","StreamTranslator","getThoughtSignature"],"mappings":"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","file":"index.js","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","import type { OpenAiChatTool } from '../../types/openai_chat.js';\n\n/**\n * Strip JSON Schema keywords that some OpenAI-compatible upstreams reject.\n */\nexport function sanitizeJsonSchema(schema: unknown, depth = 0): unknown {\n if (!schema || typeof schema !== 'object' || Array.isArray(schema) || depth > 20) {\n return schema;\n }\n // eslint-disable-next-line no-restricted-syntax -- Runtime schema traversal needs unknown narrowing.\n const src = schema as Record<string, unknown>;\n\n if ('$ref' in src) {\n return src.description ? { description: src.description } : {};\n }\n\n const out: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(src)) {\n if (isDroppedSchemaKeyword(key)) {\n continue;\n }\n if (key === 'properties' && val && typeof val === 'object' && !Array.isArray(val)) {\n const props: Record<string, unknown> = {};\n // eslint-disable-next-line no-restricted-syntax -- Runtime schema traversal needs unknown narrowing.\n for (const [propName, propSchema] of Object.entries(val as Record<string, unknown>)) {\n props[propName] = sanitizeJsonSchema(propSchema, depth + 1);\n }\n out[key] = props;\n } else if (key === 'additionalProperties') {\n if (typeof val !== 'boolean') {\n out[key] = sanitizeJsonSchema(val, depth + 1);\n }\n } else if (key === 'items') {\n out[key] = sanitizeJsonSchema(val, depth + 1);\n } else if (isSchemaCompositionKeyword(key) && Array.isArray(val)) {\n out[key] = val.map((schemaItem) => sanitizeJsonSchema(schemaItem, depth + 1));\n } else {\n out[key] = val;\n }\n }\n return out;\n}\n\nexport function getValidFunctionNames(tools: OpenAiChatTool[]): Set<string> | undefined {\n const names = new Set<string>();\n for (const tool of tools) {\n // eslint-disable-next-line no-restricted-syntax -- OpenAiChatTool is intentionally extensible.\n const maybeTool = tool as { type?: unknown; function?: { name?: unknown } };\n if (maybeTool.type === 'function' && typeof maybeTool.function?.name === 'string') {\n names.add(maybeTool.function.name);\n }\n }\n return names.size ? names : undefined;\n}\n\nfunction isDroppedSchemaKeyword(key: string): boolean {\n return (\n key === '$schema' ||\n key === '$defs' ||\n key === 'definitions' ||\n key === '$id' ||\n key === '$anchor' ||\n key === '$comment'\n );\n}\n\nfunction isSchemaCompositionKeyword(key: string): boolean {\n return key === 'anyOf' || key === 'oneOf' || key === 'allOf' || key === 'not';\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 { getValidFunctionNames, sanitizeJsonSchema } from './toolSchema.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\ninterface TranslationContext {\n validFunctionNames?: Set<string>;\n ignoredToolCallIds: Set<string>;\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 const tools = mapTools(data.tools ?? []);\n const validFunctionNames = getValidFunctionNames(tools);\n const context: TranslationContext = {\n validFunctionNames,\n ignoredToolCallIds: new Set(),\n };\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, context);\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 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\nfunction processInputItem(\n item: Record<string, unknown>,\n messages: OpenAiChatMessage[],\n options: TranslateRequestOptions,\n context: TranslationContext,\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 (\n contentPart.type === 'input_image' ||\n contentPart.type === 'image' ||\n contentPart.type === 'image_url'\n ) {\n if (options.dropImages) {\n continue;\n }\n let url = '';\n const partWithImage: { image_url?: string | { url: string } } = part;\n const imgUrl = partWithImage.image_url;\n if (typeof imgUrl === 'string') {\n url = imgUrl;\n } else if (imgUrl && typeof imgUrl === 'object' && imgUrl.url) {\n url = imgUrl.url;\n } else {\n const partWithData: { data?: string; base64?: string } = part;\n const imgData = String(partWithData.data ?? partWithData.base64 ?? '');\n if (imgData) {\n const partWithMime: { mime_type?: string; media_type?: string } = part;\n const mimeType = String(\n partWithMime.mime_type ?? partWithMime.media_type ?? 'image/png',\n );\n url = imgData.startsWith('data:')\n ? imgData\n : `data:${mimeType};base64,${imgData}`;\n }\n }\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, context);\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, context);\n return;\n }\n}\n\n// ==============================================================================\n// Tool History\n// ==============================================================================\n\nfunction processToolCall(\n item: Record<string, unknown>,\n messages: OpenAiChatMessage[],\n getLastAssistant: () => OpenAiChatMessage,\n fallbackThoughtSignature?: string,\n context?: TranslationContext,\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 if (context?.validFunctionNames?.size && !context.validFunctionNames.has(name)) {\n context.ignoredToolCallIds.add(callId);\n const amsg = getLastAssistant();\n const note = `Unsupported tool call omitted: ${name}`;\n amsg.content =\n typeof amsg.content === 'string' && amsg.content ? `${amsg.content}\\n${note}` : note;\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 processToolOutput(\n item: Record<string, unknown>,\n messages: OpenAiChatMessage[],\n context?: TranslationContext,\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 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 }\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 if (callId && context?.ignoredToolCallIds.has(callId)) {\n if (content) {\n messages.push({\n role: 'user',\n content: `Output for omitted unsupported tool call: ${content}`,\n });\n }\n return;\n }\n\n messages.push({\n role: 'tool',\n tool_call_id: callId,\n content,\n });\n}\n\n// ==============================================================================\n// Tool Mapping\n// ==============================================================================\n\nfunction mapTools(tools: ResponsesTool[]): OpenAiChatTool[] {\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 rawParams = fn?.parameters ?? tool.parameters ?? { type: 'object' };\n const params = sanitizeJsonSchema(rawParams);\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 }\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}\n\nconst SHELL_TOOL_NAMES = new Set(['shell', 'container.exec', 'shell_command']);\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 if (message?.tool_calls?.length) {\n for (const tc of message.tool_calls) {\n const item = mapToolCallToOutput(tc);\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(tc: OpenAiChatToolCall): 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 const item: ResponsesOutputFunctionCall = {\n id: callId,\n type: 'function_call',\n status: 'completed',\n name,\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(name)) {\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/**\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\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<number, ToolCallState>();\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 }\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 tc of delta.tool_calls) {\n const idx = tc.index ?? 0;\n let state = this.toolCalls.get(idx);\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(idx, 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 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// 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} from './types/responses.js';\nimport type { AnthropicResponse, AnthropicThinkingConfig } from './types/anthropic.js';\nimport type { OpenAiChatResponse } from './types/openai_chat.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 /** 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 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 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 body = await upstream.json();\n const translated =\n format === 'anthropic'\n ? // eslint-disable-next-line no-restricted-syntax -- union type narrowing requires type assertion\n anthropic.translateResponse(body as AnthropicResponse, { model: request.model })\n : // eslint-disable-next-line no-restricted-syntax -- union type narrowing requires type assertion\n openai.translateResponse(body as OpenAiChatResponse, { model: request.model });\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 events =\n format === 'anthropic'\n ? anthropic.translateStream(upstream.body, { model: request.model, requestMetadata })\n : openai.translateStream(upstream.body, { 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"]}