@jeffusion/bungee-core 6.7.3 → 6.8.1

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.
@@ -2,7 +2,7 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../../plugins/codex-router/server/index.ts", "../../../../../plugins/models-dev/contract.ts", "../../../src/plugin-logger.ts", "../../../src/hooks/impl.ts", "../../../src/plugin.types.ts", "../../../src/plugins/sse-envelope.ts", "../../../src/plugin-extensions.ts", "../../../src/data-admission/errors.ts", "../../../src/plugin-durable-state.ts", "../../../src/plugin-services/host-rpc.ts", "../../../src/plugin-services/wire-contract.ts", "../../../src/plugin-services/rpc-runtime.ts", "../../../src/plugin-services/peer-channel-protocol.ts", "../../../src/plugin-services/peer-channel-hub.ts", "../../../src/plugin-services/snapshot-store.ts", "../../../src/plugin-services.ts", "../../../src/gateway/retry-action.ts", "../../../src/token-stats-window.ts", "../../../../../plugins/llm-protocol-adapter/contract.ts", "../../../../../node_modules/base64-js/index.js", "../../../../../node_modules/js-tiktoken/dist/chunk-VL2OQCWN.js", "../../../../../node_modules/js-tiktoken/dist/index.js", "../../../../llms/src/token-accounting/helpers.ts", "../../../../llms/src/token-accounting/capabilities.ts", "../../../../llms/src/token-accounting/session.ts", "../../../../llms/src/responses-codec/common.ts", "../../../../llms/src/providers/openai/protocol-conversion.ts", "../../../../llms/src/responses-codec/request.ts", "../../../../llms/src/protocol-session/endpoint.ts", "../../../../../plugins/codex-router/server/protocol.ts", "../../../../../plugins/codex-router/server/config.ts", "../../../../../plugins/codex-router/server/catalog.ts", "../../../../../plugins/codex-router/contract.ts", "../../../../../plugins/codex-router/server/catalog-validators.ts"],
4
4
  "sourcesContent": [
5
- "import {createHash} from 'node:crypto';\nimport {ADAPTER_PLUGIN,CONVERSION_SERVICE_ID,CONVERSION_VERSION,historyRpc,historyClient,type HistoryClient,type ConversionService,type CollaborationRelay} from '../../llm-protocol-adapter/contract';\nimport {protocolAdapter} from './protocol';\nimport { definePlugin, DataAdmissionError, type Plugin, type PluginInitContext, type PluginHooks, type DispatchRequestPreparationInput } from '@jeffusion/bungee-core/plugin';\nimport manifest from '../manifest.json';\nimport type { PluginConfigField } from '@jeffusion/bungee-core/plugin';\nimport { parseBindings, parseCollaborationRelay, bindingSource } from './config';\nimport { mergeCatalog, catalogEtag, CatalogSnapshots, type CatalogSnapshot } from './catalog';\nimport { catalogValidatorsClient } from '../contract';\nimport { catalogKeys } from './catalog-validators';\n\nexport const CodexRouterPlugin = definePlugin(class implements Plugin {\n static readonly name = 'codex-router';\n static readonly version = '1.0.0';\n static readonly configSchema = manifest.configSchema as unknown as PluginConfigField[];\n private readonly bindings;\n private readonly relay?:CollaborationRelay;\n private history!:HistoryClient;\n private validators?: ReturnType<typeof catalogValidatorsClient>;\n private readonly catalogRequests = new Map<string, {key: string; snapshotKey: string; signal: AbortSignal; snapshot?: CatalogSnapshot}>();\n private readonly snapshots = new CatalogSnapshots();\n private conversion!:ConversionService;\n constructor(options?: { models?: unknown; collaborationRelay?: unknown }) { this.bindings = parseBindings(options?.models); this.relay = parseCollaborationRelay(options?.collaborationRelay); }\n async init(context: PluginInitContext) {\n if (context.scope?.type !== 'route') throw new Error('codex_router_requires_route_scope');\n this.history=historyClient(context.services!.rpc!.consume(ADAPTER_PLUGIN,historyRpc));\n this.conversion=context.services!.consume(ADAPTER_PLUGIN,CONVERSION_SERVICE_ID,CONVERSION_VERSION);\n try { this.validators = catalogValidatorsClient(context.services!); } catch { /* Optional notification state must not block generation. */ }\n context.services!.onDispose?.(() => { this.catalogRequests.clear(); this.snapshots.clear(); });\n }\n bodyRequirements(context: { method: string; url: URL }) {\n return {request:context.method === 'POST' && /\\/responses$/.test(context.url.pathname) ? 'json-write' as const : 'none' as const, response: context.method === 'GET' && /\\/models$/.test(context.url.pathname) ? ['json' as const] : []};\n }\n register(hooks: PluginHooks) {\n hooks.onWebSocketSessionMode.tap('codex-router.session', url => /\\/responses$/.test(url.pathname) ? 'responses' : undefined);\n hooks.onDispatchRequest.tap('codex-router.catalog-identity', input => {\n const keys = catalogKeys(input, this.bindings);\n if (keys) this.catalogRequests.set(input.context.requestId, {key: keys.validator, snapshotKey: keys.snapshot, signal: input.signal});\n });\n hooks.onDispatchRequest.tapPromise('codex-router.binding', async ({context,targets}) => {\n if (context.method !== 'POST' || !/\\/responses$/.test(context.originalUrl.pathname)) return;\n const binding = this.bindings.find(binding => bindingSource(binding) === context.body?.model);\n if (!binding) return;\n // The final route does not run entry finally hooks. Transfer ownership to\n // the per-request dispatch adapter before validation/preparation can fail.\n const notification = this.catalogRequests.get(context.requestId);\n this.catalogRequests.delete(context.requestId);\n if (!targets.some(target => target.type === binding.target.type && target.id === binding.target.id)) throw new DataAdmissionError(422,'codex_router_target_unavailable');\n const protocol = binding.target.protocol;\n const capabilities=this.conversion.resolveCapabilities({provider:binding.provider,model:binding.model,targetProtocol:protocol,restrictions:binding.capabilityOverrides});\n if(!capabilities || capabilities.contextWindow === null || !capabilities.inputModalities.includes('text'))throw new DataAdmissionError(503,'codex_router_model_unavailable');\n context.body={...context.body,model:binding.model};\n return {target:binding.target,protocol,prepareRequest:async ({context,principal,servingRevision,signal,executeAuxiliary,webSocketConnection}:DispatchRequestPreparationInput)=>{\n const entryScope=createHash('sha256').update(JSON.stringify([context.routeId,servingRevision ?? null,this.bindings,this.relay])).digest('hex');\n const scope=principal?.domain !== 'anonymous' && principal?.keyId ? createHash('sha256').update(JSON.stringify([principal,entryScope])).digest('hex') : null;\n let input=structuredClone(context.body);\n let requiredUpstreamId:string|undefined;\n let opaqueRestored=false;\n if(input.previous_response_id){\n if(!scope)throw new DataAdmissionError(422,'codex_router_history_identity_required');\n const prior=await this.history.get({scope,id:input.previous_response_id},{signal});\n if(!prior)throw new DataAdmissionError(422,'codex_router_history_missing_start_new_conversation');\n const delta=typeof input.input === 'string' ? [{role:'user',content:input.input}] : input.input;\n if(!Array.isArray(delta))throw new DataAdmissionError(422,'codex_router_invalid_history');\n if(prior.items.some((item:any)=>item.encrypted_content || item.type==='compaction')){\n if(protocol!=='responses' || JSON.stringify(prior.target)!==JSON.stringify(binding.target) || prior.origin?.provider!==binding.provider || prior.origin?.model!==binding.model || !prior.origin?.upstreamId)throw new DataAdmissionError(422,'codex_router_unrestorable_history_start_new_conversation');\n requiredUpstreamId=prior.origin.upstreamId;opaqueRestored=true;\n }\n input.input=[...prior.items,...delta];delete input.previous_response_id;\n }\n if(input.conversation || input.response_id)throw new DataAdmissionError(422,'codex_router_unsupported_history_reference');\n input.model=binding.model;\n let logicalInput=typeof input.input === 'string' ? [{role:'user',content:input.input}] : input.input;\n if(!Array.isArray(logicalInput))throw new DataAdmissionError(422,'codex_router_invalid_history');\n if(protocol!=='responses' && !opaqueRestored && logicalInput.some((item:any)=>item?.encrypted_content || item?.type==='compaction'))throw new DataAdmissionError(422,'codex_router_unrestorable_history_start_new_conversation');\n const hasTools=input.tools?.length || logicalInput.some((item:any)=>item?.type==='additional_tools' && item.tools?.length);\n if(hasTools && (!capabilities.toolCall || binding.capabilityOverrides?.tools===false))throw new DataAdmissionError(422,'codex_router_tools_unsupported');\n let relayDiagnostics:any[]=[];\n if(protocol!=='responses') {\n try {\n const inspected=this.conversion.inspectAgentMessages(input);\n for(const message of inspected.messages)if(message.encryptedContents.length>1)throw new DataAdmissionError(422,'llm_adapter_agent_message_multiple_encrypted_blocks',undefined,{param:message.encryptedContents[1].param,message:'Multiple encrypted agent blocks cannot be restored losslessly'});\n const replacements=[];\n for(const message of inspected.messages)for(const encrypted of message.encryptedContents) {\n if(!this.relay)throw new DataAdmissionError(422,'llm_adapter_agent_message_relay_required',undefined,{param:encrypted.param,message:'Encrypted agent content requires a configured relay'});\n const text=await this.conversion.relayAgentMessage({message:input.input[message.inputIndex],contentIndex:encrypted.contentIndex,param:encrypted.param,relay:this.relay,entryScope,scope,requestId:context.requestId,signal,executeAuxiliary,webSocketConnection});\n replacements.push({param:encrypted.param,text});\n }\n if(replacements.length){const replaced=this.conversion.replaceAgentMessageEncryptedContent(input,replacements);input=replaced.body;relayDiagnostics=replaced.diagnostics;}\n } catch(error) {const e=error as any;if(typeof e.code==='string' && e.name!=='DataAdmissionError')throw new DataAdmissionError(422,`llm_adapter_${e.code}`,undefined,{message:'Agent message cannot be converted',param:e.param});throw error;}\n }\n let diagnostics;\n let session;\n try {session=this.conversion.createSession({sourceProtocol:'responses',targetProtocol:protocol,model:binding.model,responseModel:bindingSource(binding),provider:binding.provider,profile:capabilities,restrictions:binding.capabilityOverrides,selectedEffort:input.reasoning?.effort,...(protocol!=='responses'?{agentMessageDelivery:'plaintext' as const}:{})});} catch(error) {const e=error as any;if(typeof e.code==='string')throw new DataAdmissionError(422,`llm_adapter_${e.code}`,undefined,{message:e.message,param:e.param});throw error;}\n try {\n const decoded=session.convertRequest(input);context.body=structuredClone(decoded.body);\n if(protocol!=='responses')logicalInput=structuredClone(decoded.canonicalHistory);\n // Host logs may flush after the consumer lease is revoked during drain.\n diagnostics=structuredClone([...relayDiagnostics,...decoded.diagnostics]);\n } catch(error) {session.dispose();const e=error as any;if(typeof e.code==='string')throw new DataAdmissionError(422,`llm_adapter_${e.code}`,undefined,{message:e.message,param:e.param});throw error;}\n const converted=protocolAdapter({session,protocol,model:bindingSource(binding),signal,\n save:async(response,responseContext)=>{if(scope && typeof response.id==='string')await this.history.put({scope,id:response.id,value:{target:binding.target,origin:{provider:binding.provider,model:binding.model,upstreamId:responseContext?.upstreamId},items:[...logicalInput,...response.output]}},{signal,operationId:crypto.randomUUID()});}});\n const adapter: Plugin = {bodyRequirements: converted.bodyRequirements.bind(converted), register: hooks => {\n converted.register(hooks);\n hooks.onRawResponse.tapPromise('codex-router.catalog-notification', async result => {\n await this.rewriteCatalogNotification(result.response, notification);\n return result;\n });\n }};\n return {requiredUpstreamId,adapter,...(protocol!=='responses'?{canonicalInput:logicalInput,diagnostics}:{})};\n }};\n });\n hooks.onBeforeRequest.tap('codex-router.catalog-validator', context => {\n if (context.method === 'GET' && /\\/models$/.test(context.originalUrl.pathname)) {\n for (const key of Object.keys(context.headers)) if (['if-none-match','if-modified-since'].includes(key.toLowerCase())) delete context.headers[key];\n const record = this.catalogRequests.get(context.requestId);\n if (record) {\n record.snapshot = this.snapshots.get(record.snapshotKey);\n if (record.snapshot?.upstreamEtag) context.headers['if-none-match'] = record.snapshot.upstreamEtag;\n }\n }\n return context;\n });\n hooks.onInterceptRequest.tapPromise('codex-router.catalog-cache', async context => {\n if (context.method !== 'GET' || !/\\/models$/.test(context.originalUrl.pathname)) return;\n const record = this.catalogRequests.get(context.requestId);\n const revalidate = Object.entries(context.headers).some(([key, value]) => key.toLowerCase() === 'cache-control' && /(?:^|,)\\s*(?:no-cache|max-age=0)\\s*(?:,|$)/i.test(value));\n if (!record?.snapshot || !this.snapshots.fresh(record.snapshot) || revalidate) return;\n const response = await this.catalogResponse(record.snapshot.native, new Headers(), record);\n return {action: 'respond' as const, response};\n });\n hooks.onRawResponse.tapPromise('codex-router.catalog-notification', async (result, context) => {\n if (context.method === 'GET' && /\\/models$/.test(context.originalUrl.pathname)) {\n const record = this.catalogRequests.get(context.requestId);\n if (record && [401, 403].includes(result.response.status)) this.snapshots.invalidate(record.snapshotKey);\n if (result.response.status === 304) {\n if (!record?.snapshot?.upstreamEtag) throw new DataAdmissionError(502, 'codex_router_catalog_without_snapshot');\n const headers = new Headers(result.response.headers);\n for (const key of ['content-length', 'content-encoding', 'transfer-encoding']) headers.delete(key);\n headers.set('content-type', 'application/json');\n headers.set('etag', headers.get('etag') ?? record.snapshot.upstreamEtag);\n return {...result, response: new Response(JSON.stringify(record.snapshot.native), {headers})};\n }\n }\n if (context.method === 'POST' && /\\/responses$/.test(context.originalUrl.pathname)) {\n await this.rewriteCatalogNotification(result.response, this.catalogRequests.get(context.requestId));\n }\n return result;\n });\n hooks.onResponse.tapPromise('codex-router.catalog', async (response, context) => {\n const record = this.catalogRequests.get(context.requestId);\n if (context.method !== 'GET' || !/\\/models$/.test(context.originalUrl.pathname) || !response.ok) return response;\n const native = await context.bodyHandle!.json({id:'codex-router.catalog',mandatory:true});\n const merged = await this.catalogResponse(native, response.headers, record, response.status);\n if (record && !record.signal.aborted) this.snapshots.put(record.snapshotKey, native, response.headers.get('etag'));\n return merged;\n });\n hooks.onFinally.tap('codex-router.catalog-cleanup', context => { this.catalogRequests.delete(context.requestId); });\n }\n private async catalogResponse(native: unknown, sourceHeaders: Headers, record?: {key: string; signal: AbortSignal}, status = 200) {\n const body = JSON.stringify(mergeCatalog(native, this.bindings, this.conversion));\n const etag = catalogEtag(body);\n const headers = new Headers(sourceHeaders);\n for (const key of ['content-length','content-encoding','etag','last-modified']) headers.delete(key);\n headers.set('content-type', 'application/json');\n headers.set('cache-control', 'private, no-store');\n headers.set('etag', etag);\n if (record && this.validators) {\n try { await this.validators.put({key: record.key, etag}, {signal: record.signal, timeoutMs: 1000, operationId: crypto.randomUUID()}); }\n catch { /* Directory delivery does not depend on transient notification state. */ }\n }\n return new Response(body, {status, headers});\n }\n private async rewriteCatalogNotification(response: Response, record?: {key: string; signal: AbortSignal}) {\n response.headers.delete('x-models-etag');\n if (record && this.validators) {\n try {\n const etag = await this.validators.get({key: record.key}, {signal: record.signal, timeoutMs: 1000});\n if (etag && !record.signal.aborted) response.headers.set('x-models-etag', etag);\n } catch { /* Missing/shared-state failures leave the generation body untouched. */ }\n }\n }\n reset() { this.catalogRequests.clear(); this.snapshots.clear(); }\n});\nexport default CodexRouterPlugin;\n",
5
+ "import {createHash} from 'node:crypto';\nimport {ADAPTER_PLUGIN,CONVERSION_SERVICE_ID,CONVERSION_VERSION,historyRpc,historyClient,type HistoryClient,type ConversionService,type CollaborationRelay} from '../../llm-protocol-adapter/contract';\nimport {protocolAdapter} from './protocol';\nimport { definePlugin, DataAdmissionError, type Plugin, type PluginInitContext, type PluginHooks, type DispatchRequestPreparationInput } from '@jeffusion/bungee-core/plugin';\nimport manifest from '../manifest.json';\nimport type { PluginConfigField } from '@jeffusion/bungee-core/plugin';\nimport { parseBindings, parseCollaborationRelay, bindingSource } from './config';\nimport { mergeCatalog, catalogEtag, CatalogSnapshots, type CatalogSnapshot } from './catalog';\nimport { catalogValidatorsClient } from '../contract';\nimport { catalogKeys } from './catalog-validators';\n\nexport const CodexRouterPlugin = definePlugin(class implements Plugin {\n static readonly name = 'codex-router';\n static readonly version = '1.0.0';\n static readonly configSchema = manifest.configSchema as unknown as PluginConfigField[];\n private readonly bindings;\n private readonly relay?:CollaborationRelay;\n private history!:HistoryClient;\n private validators?: ReturnType<typeof catalogValidatorsClient>;\n private readonly catalogRequests = new Map<string, {key: string; snapshotKey: string; signal: AbortSignal; snapshot?: CatalogSnapshot}>();\n private readonly snapshots = new CatalogSnapshots();\n private conversion!:ConversionService;\n constructor(options?: { models?: unknown; collaborationRelay?: unknown }) { this.bindings = parseBindings(options?.models); this.relay = parseCollaborationRelay(options?.collaborationRelay); }\n async init(context: PluginInitContext) {\n if (context.scope?.type !== 'route') throw new Error('codex_router_requires_route_scope');\n this.history=historyClient(context.services!.rpc!.consume(ADAPTER_PLUGIN,historyRpc));\n this.conversion=context.services!.consume(ADAPTER_PLUGIN,CONVERSION_SERVICE_ID,CONVERSION_VERSION);\n try { this.validators = catalogValidatorsClient(context.services!); } catch { /* Optional notification state must not block generation. */ }\n context.services!.onDispose?.(() => { this.catalogRequests.clear(); this.snapshots.clear(); });\n }\n bodyRequirements(context: { method: string; url: URL }) {\n return {request:context.method === 'POST' && /\\/responses$/.test(context.url.pathname) ? 'json-write' as const : 'none' as const, response: context.method === 'GET' && /\\/models$/.test(context.url.pathname) ? ['json' as const] : []};\n }\n register(hooks: PluginHooks) {\n hooks.onWebSocketSessionMode.tap('codex-router.session', url => /\\/responses$/.test(url.pathname) ? 'responses' : undefined);\n hooks.onDispatchRequest.tap('codex-router.catalog-identity', input => {\n const keys = catalogKeys(input, this.bindings);\n if (keys) this.catalogRequests.set(input.context.requestId, {key: keys.validator, snapshotKey: keys.snapshot, signal: input.signal});\n });\n hooks.onDispatchRequest.tapPromise('codex-router.binding', async ({context,targets}) => {\n if (context.method !== 'POST' || !/\\/responses$/.test(context.originalUrl.pathname)) return;\n const binding = this.bindings.find(binding => bindingSource(binding) === context.body?.model);\n if (!binding) return;\n // The final route does not run entry finally hooks. Transfer ownership to\n // the per-request dispatch adapter before validation/preparation can fail.\n const notification = this.catalogRequests.get(context.requestId);\n this.catalogRequests.delete(context.requestId);\n if (!targets.some(target => target.type === binding.target.type && target.id === binding.target.id)) throw new DataAdmissionError(422,'codex_router_target_unavailable');\n const protocol = binding.target.protocol;\n const capabilities=this.conversion.resolveCapabilities({provider:binding.provider,model:binding.model,targetProtocol:protocol,restrictions:binding.capabilityOverrides});\n if(!capabilities || capabilities.contextWindow === null || !capabilities.inputModalities.includes('text'))throw new DataAdmissionError(503,'codex_router_model_unavailable');\n context.body={...context.body,model:binding.model};\n return {target:binding.target,protocol,prepareRequest:async ({context,principal,servingRevision,signal,executeAuxiliary,webSocketConnection}:DispatchRequestPreparationInput)=>{\n const entryScope=createHash('sha256').update(JSON.stringify([context.routeId,servingRevision ?? null,this.bindings,this.relay])).digest('hex');\n const scope=principal?.domain !== 'anonymous' && principal?.keyId ? createHash('sha256').update(JSON.stringify([principal,entryScope])).digest('hex') : null;\n let input=structuredClone(context.body);\n let requiredUpstreamId:string|undefined;\n let opaqueRestored=false;\n if(input.previous_response_id){\n if(!scope)throw new DataAdmissionError(422,'codex_router_history_identity_required');\n const prior=await this.history.get({scope,id:input.previous_response_id},{signal});\n if(!prior)throw new DataAdmissionError(422,'codex_router_history_missing_start_new_conversation');\n const delta=typeof input.input === 'string' ? [{role:'user',content:input.input}] : input.input;\n if(!Array.isArray(delta))throw new DataAdmissionError(422,'codex_router_invalid_history');\n if(protocol!=='gemini_generate_content' && prior.items.some((item:any)=>item.encrypted_content || item.type==='compaction')){\n if(protocol!=='responses' || JSON.stringify(prior.target)!==JSON.stringify(binding.target) || prior.origin?.provider!==binding.provider || prior.origin?.model!==binding.model || !prior.origin?.upstreamId)throw new DataAdmissionError(422,'codex_router_unrestorable_history_start_new_conversation');\n requiredUpstreamId=prior.origin.upstreamId;opaqueRestored=true;\n }\n input.input=[...prior.items,...delta];delete input.previous_response_id;\n }\n if(input.conversation || input.response_id)throw new DataAdmissionError(422,'codex_router_unsupported_history_reference');\n input.model=binding.model;\n let logicalInput=typeof input.input === 'string' ? [{role:'user',content:input.input}] : input.input;\n if(!Array.isArray(logicalInput))throw new DataAdmissionError(422,'codex_router_invalid_history');\n if(protocol!=='responses' && protocol!=='gemini_generate_content' && !opaqueRestored && logicalInput.some((item:any)=>item?.encrypted_content || item?.type==='compaction'))throw new DataAdmissionError(422,'codex_router_unrestorable_history_start_new_conversation');\n const hasTools=input.tools?.length || logicalInput.some((item:any)=>item?.type==='additional_tools' && item.tools?.length);\n if(hasTools && (!capabilities.toolCall || binding.capabilityOverrides?.tools===false))throw new DataAdmissionError(422,'codex_router_tools_unsupported');\n let relayDiagnostics:any[]=[];\n if(protocol!=='responses') {\n try {\n const inspected=this.conversion.inspectAgentMessages(input);\n for(const message of inspected.messages)if(message.encryptedContents.length>1)throw new DataAdmissionError(422,'llm_adapter_agent_message_multiple_encrypted_blocks',undefined,{param:message.encryptedContents[1].param,message:'Multiple encrypted agent blocks cannot be restored losslessly'});\n const replacements=[];\n for(const message of inspected.messages)for(const encrypted of message.encryptedContents) {\n if(!this.relay)throw new DataAdmissionError(422,'llm_adapter_agent_message_relay_required',undefined,{param:encrypted.param,message:'Encrypted agent content requires a configured relay'});\n const text=await this.conversion.relayAgentMessage({message:input.input[message.inputIndex],contentIndex:encrypted.contentIndex,param:encrypted.param,relay:this.relay,entryScope,scope,requestId:context.requestId,signal,executeAuxiliary,webSocketConnection});\n replacements.push({param:encrypted.param,text});\n }\n if(replacements.length){const replaced=this.conversion.replaceAgentMessageEncryptedContent(input,replacements);input=replaced.body;relayDiagnostics=replaced.diagnostics;}\n } catch(error) {const e=error as any;if(typeof e.code==='string' && e.name!=='DataAdmissionError')throw new DataAdmissionError(422,`llm_adapter_${e.code}`,undefined,{message:'Agent message cannot be converted',param:e.param});throw error;}\n }\n let diagnostics;\n let session;\n try {session=this.conversion.createSession({sourceProtocol:'responses',targetProtocol:protocol,model:binding.model,responseModel:bindingSource(binding),provider:binding.provider,profile:capabilities,restrictions:binding.capabilityOverrides,selectedEffort:input.reasoning?.effort,...(protocol!=='responses'?{agentMessageDelivery:'plaintext' as const}:{})});} catch(error) {const e=error as any;if(typeof e.code==='string')throw new DataAdmissionError(422,`llm_adapter_${e.code}`,undefined,{message:e.message,param:e.param});throw error;}\n try {\n const decoded=session.convertRequest(input);context.body=structuredClone(decoded.body);\n if(protocol!=='responses')logicalInput=structuredClone(decoded.canonicalHistory);\n // Host logs may flush after the consumer lease is revoked during drain.\n diagnostics=structuredClone([...relayDiagnostics,...decoded.diagnostics]);\n } catch(error) {session.dispose();const e=error as any;if(typeof e.code==='string')throw new DataAdmissionError(422,`llm_adapter_${e.code}`,undefined,{message:e.message,param:e.param});throw error;}\n const converted=protocolAdapter({session,protocol,model:bindingSource(binding),signal,\n save:async(response,responseContext)=>{if(scope && typeof response.id==='string')await this.history.put({scope,id:response.id,value:{target:binding.target,origin:{provider:binding.provider,model:binding.model,upstreamId:responseContext?.upstreamId},items:[...logicalInput,...response.output]}},{signal,operationId:crypto.randomUUID()});}});\n const adapter: Plugin = {bodyRequirements: converted.bodyRequirements.bind(converted), register: hooks => {\n converted.register(hooks);\n hooks.onRawResponse.tapPromise('codex-router.catalog-notification', async result => {\n await this.rewriteCatalogNotification(result.response, notification);\n return result;\n });\n }};\n return {requiredUpstreamId,adapter,...(protocol!=='responses'?{canonicalInput:logicalInput,diagnostics}:{})};\n }};\n });\n hooks.onBeforeRequest.tap('codex-router.catalog-validator', context => {\n if (context.method === 'GET' && /\\/models$/.test(context.originalUrl.pathname)) {\n for (const key of Object.keys(context.headers)) if (['if-none-match','if-modified-since'].includes(key.toLowerCase())) delete context.headers[key];\n const record = this.catalogRequests.get(context.requestId);\n if (record) {\n record.snapshot = this.snapshots.get(record.snapshotKey);\n if (record.snapshot?.upstreamEtag) context.headers['if-none-match'] = record.snapshot.upstreamEtag;\n }\n }\n return context;\n });\n hooks.onInterceptRequest.tapPromise('codex-router.catalog-cache', async context => {\n if (context.method !== 'GET' || !/\\/models$/.test(context.originalUrl.pathname)) return;\n const record = this.catalogRequests.get(context.requestId);\n const revalidate = Object.entries(context.headers).some(([key, value]) => key.toLowerCase() === 'cache-control' && /(?:^|,)\\s*(?:no-cache|max-age=0)\\s*(?:,|$)/i.test(value));\n if (!record?.snapshot || !this.snapshots.fresh(record.snapshot) || revalidate) return;\n const response = await this.catalogResponse(record.snapshot.native, new Headers(), record);\n return {action: 'respond' as const, response};\n });\n hooks.onRawResponse.tapPromise('codex-router.catalog-notification', async (result, context) => {\n if (context.method === 'GET' && /\\/models$/.test(context.originalUrl.pathname)) {\n const record = this.catalogRequests.get(context.requestId);\n if (record && [401, 403].includes(result.response.status)) this.snapshots.invalidate(record.snapshotKey);\n if (result.response.status === 304) {\n if (!record?.snapshot?.upstreamEtag) throw new DataAdmissionError(502, 'codex_router_catalog_without_snapshot');\n const headers = new Headers(result.response.headers);\n for (const key of ['content-length', 'content-encoding', 'transfer-encoding']) headers.delete(key);\n headers.set('content-type', 'application/json');\n headers.set('etag', headers.get('etag') ?? record.snapshot.upstreamEtag);\n return {...result, response: new Response(JSON.stringify(record.snapshot.native), {headers})};\n }\n }\n if (context.method === 'POST' && /\\/responses$/.test(context.originalUrl.pathname)) {\n await this.rewriteCatalogNotification(result.response, this.catalogRequests.get(context.requestId));\n }\n return result;\n });\n hooks.onResponse.tapPromise('codex-router.catalog', async (response, context) => {\n const record = this.catalogRequests.get(context.requestId);\n if (context.method !== 'GET' || !/\\/models$/.test(context.originalUrl.pathname) || !response.ok) return response;\n const native = await context.bodyHandle!.json({id:'codex-router.catalog',mandatory:true});\n const merged = await this.catalogResponse(native, response.headers, record, response.status);\n if (record && !record.signal.aborted) this.snapshots.put(record.snapshotKey, native, response.headers.get('etag'));\n return merged;\n });\n hooks.onFinally.tap('codex-router.catalog-cleanup', context => { this.catalogRequests.delete(context.requestId); });\n }\n private async catalogResponse(native: unknown, sourceHeaders: Headers, record?: {key: string; signal: AbortSignal}, status = 200) {\n const body = JSON.stringify(mergeCatalog(native, this.bindings, this.conversion));\n const etag = catalogEtag(body);\n const headers = new Headers(sourceHeaders);\n for (const key of ['content-length','content-encoding','etag','last-modified']) headers.delete(key);\n headers.set('content-type', 'application/json');\n headers.set('cache-control', 'private, no-store');\n headers.set('etag', etag);\n if (record && this.validators) {\n try { await this.validators.put({key: record.key, etag}, {signal: record.signal, timeoutMs: 1000, operationId: crypto.randomUUID()}); }\n catch { /* Directory delivery does not depend on transient notification state. */ }\n }\n return new Response(body, {status, headers});\n }\n private async rewriteCatalogNotification(response: Response, record?: {key: string; signal: AbortSignal}) {\n response.headers.delete('x-models-etag');\n if (record && this.validators) {\n try {\n const etag = await this.validators.get({key: record.key}, {signal: record.signal, timeoutMs: 1000});\n if (etag && !record.signal.aborted) response.headers.set('x-models-etag', etag);\n } catch { /* Missing/shared-state failures leave the generation body untouched. */ }\n }\n }\n reset() { this.catalogRequests.clear(); this.snapshots.clear(); }\n});\nexport default CodexRouterPlugin;\n",
6
6
  "/**\n * Public contract of the models-dev catalog provider.\n *\n * This is the ONLY file other plugins may import from models-dev. It contains the\n * declared service identity, the wire-contract snapshot literal and the data types\n * of the read surface; it never exposes the downloader, the private storage keys or\n * the internal catalog representation.\n *\n * Consumers must declare a real dependency on `models-dev` and consume the local\n * service for their own process. The service methods are synchronous and read an\n * already-loaded in-memory view: no per-request network or SQL is performed.\n */\n\n/** Provider plugin name. Must match the manifest. */\nexport const MODELS_DEV_PLUGIN_NAME = 'models-dev';\n\n/** Explicit catalog identity, independent from the provider's wire model name. */\nexport interface CatalogModelReference {\n readonly provider: string;\n readonly model: string;\n}\nexport interface ModelIdentityDeclaration {\n readonly wireModel: string;\n readonly catalogModel: CatalogModelReference;\n}\nexport const MODEL_IDENTITY_ANNOTATION_KEY = 'models-dev.model-identity';\n\n/** The single upstream source; models-dev is the only component allowed to fetch it. */\nexport const MODELS_DEV_SOURCE_URL = 'https://models.dev/api.json';\n\n/** Same-process local read service, published in both the control and worker processes. */\nexport const MODELS_DEV_CATALOG_SERVICE_ID = 'models-dev.catalog.v1';\nexport const MODELS_DEV_CATALOG_CONTRACT_VERSION = 1;\n\n/** Versioned immutable snapshot of the full catalog, published by the control writer. */\nexport const MODELS_DEV_CATALOG_SNAPSHOT_ID = 'models-dev.catalog.snapshot.v1';\nexport const MODELS_DEV_CATALOG_SNAPSHOT_CONTRACT_VERSION = 1;\n/**\n * One atomic record keeps fetchedAt and the immutable catalog with its version.\n * The catalog remains unrestricted JSON so every upstream field is preserved.\n */\nexport const MODELS_DEV_CATALOG_SNAPSHOT_SCHEMA = Object.freeze({\n type: 'object', properties: {\n version: { type: 'number', integer: true, minimum: 1 },\n fetchedAt: { type: 'number', minimum: 0 },\n catalog: { type: 'json', maxBytes: 32 * 1024 * 1024 },\n },\n} as const);\nexport const MODELS_DEV_CATALOG_SNAPSHOT_CONTRACT = Object.freeze({\n id: MODELS_DEV_CATALOG_SNAPSHOT_ID,\n version: MODELS_DEV_CATALOG_SNAPSHOT_CONTRACT_VERSION,\n content: MODELS_DEV_CATALOG_SNAPSHOT_SCHEMA,\n});\n\n/** Catalog availability is separate from whether the service is published. */\nexport type ModelsDevCatalogState = 'empty' | 'ready' | 'stale' | 'failed';\n\nexport interface ModelsDevCatalogStatus {\n readonly state: ModelsDevCatalogState;\n /** Monotonic published data version; `null` before the first successful load. */\n readonly version: number | null;\n readonly fetchedAt: number | null;\n readonly providerCount: number;\n readonly modelCount: number;\n /** Last failure reason; `null` after a fully successful load. */\n readonly error: string | null;\n}\n\nexport interface ModelsDevProviderSummary {\n readonly provider: string;\n readonly name: string;\n /** Normalized upstream API base (`provider.api`), or `null` when models.dev declares none. */\n readonly api: string | null;\n readonly modelCount: number;\n}\n\n/** One selectable catalog model. `provider` is the pricing provider, never the protocol. */\nexport interface ModelsDevModelOption {\n readonly provider: string;\n readonly providerName: string;\n readonly model: string;\n readonly name: string;\n}\n\nexport interface ModelsDevModelPage {\n readonly models: readonly ModelsDevModelOption[];\n readonly total: number;\n /** 1-based page actually returned. */\n readonly page: number;\n readonly pageSize: number;\n}\n\n/** USD per million tokens, applied to the whole request at this input threshold. */\nexport interface ModelsDevContextTier {\n readonly minimumInputTokens: number;\n readonly input: number;\n readonly output: number;\n readonly cacheRead: number | null;\n readonly cacheWrite: number | null;\n}\n\n/** A resolved catalog entry with optional ascending context price bands. */\nexport interface ModelsDevModelMatch {\n readonly provider: string;\n readonly model: string;\n readonly input: number;\n readonly output: number;\n readonly cacheRead: number | null;\n readonly cacheWrite: number | null;\n readonly tiered: boolean;\n readonly contextTiers?: readonly ModelsDevContextTier[];\n}\n\nexport interface ModelsDevProviderMatch {\n readonly provider: string;\n}\n\n/**\n * The declared local read surface. Implementations must be side-effect free and\n * must never throw for a miss/corruption of the current view: an unavailable\n * catalog returns an `empty`/`failed` status instead of a fabricated price.\n */\nexport interface ModelsDevCatalogService {\n status(): ModelsDevCatalogStatus;\n providers(): readonly ModelsDevProviderSummary[];\n modelOptions(input?: { readonly provider?: string; readonly search?: string; readonly page?: number; readonly pageSize?: number }): ModelsDevModelPage;\n /**\n * Resolve exactly one catalog entry for a client model name.\n *\n * `url` (when supplied) is canonicalized to host + path and matched against the\n * full catalog's `provider.api`; more than one candidate is ambiguous and returns\n * null. `pricingProvider` is a catalog provider id and takes priority over URL and\n * prefix inference. A model id present under several providers without an explicit\n * provider is ambiguous. Matching defaults to exact and case-sensitive.\n * `estimate` additionally permits normalized names, original-lab prices and\n * dated members of the same family. Explicit provider IDs remain binding;\n * an unresolved URL is only a hint in estimate mode.\n */\n resolveModel(input: { readonly model: string; readonly pricingProvider?: string; readonly url?: string; readonly mode?: 'exact' | 'estimate' }): ModelsDevModelMatch | null;\n /** Resolve one provider from a real upstream URL via `provider.api`; ambiguous/none => null. */\n resolveProvider(input: { readonly url: string }): ModelsDevProviderMatch | null;\n}\n\n/** Capability reads are additive; existing catalog.v1 consumers stay unchanged. */\nexport const MODELS_DEV_CAPABILITIES_SERVICE_ID = 'models-dev.capabilities.v1';\nexport const MODELS_DEV_CAPABILITIES_CONTRACT_VERSION = 1;\n/** Upstream control values; null/default do not name a concrete effort level. */\nexport type ModelsDevReasoningEffortValue = null | 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max' | 'default';\n/** Validated models.dev reasoning_options, without inferred controls or levels. */\nexport type ModelsDevReasoningOption =\n | { readonly type: 'effort'; readonly values: readonly ModelsDevReasoningEffortValue[] }\n | { readonly type: 'toggle' }\n | { readonly type: 'budget_tokens'; readonly min?: number; readonly max?: number };\nexport type ModelsDevReasoningOptionsStatus = 'known' | 'missing' | 'invalid';\nexport interface ModelsDevCapabilities {\n readonly provider: string;\n readonly model: string;\n readonly name: string;\n readonly contextWindow: number | null;\n readonly outputLimit: number | null;\n readonly toolCall: boolean;\n readonly reasoning: boolean;\n /** null for missing/invalid metadata; a validated empty list remains known. */\n readonly reasoningOptions: readonly ModelsDevReasoningOption[] | null;\n readonly reasoningOptionsStatus: ModelsDevReasoningOptionsStatus;\n /** Version of the same complete snapshot that supplied all fields of this result. */\n readonly catalogVersion: number;\n readonly inputModalities: readonly string[];\n}\nexport interface ModelsDevCapabilitiesService {\n status(): ModelsDevCatalogStatus;\n /** Without a provider, require a unique exact model or a declared API URL match. */\n model(input: { readonly provider?: string; readonly model: string; readonly url?: string }): ModelsDevCapabilities | null;\n}\n",
7
7
  "/** Shared process sink; the public SDK must not bundle file transports into plugins. */\ntype Context = Readonly<Record<string, unknown>>;\ntype LogMethod = { (context: Context, message?: string): void; (message: string): void };\nexport interface PluginLogSink {\n info: LogMethod; warn: LogMethod; error: LogMethod; debug: LogMethod; fatal: LogMethod;\n child(bindings: Context): PluginLogSink;\n}\nconst sinkKey = Symbol.for('@jeffusion/bungee/plugin-log-sink');\nexport function installPluginLogSink(sink: PluginLogSink): void {\n (globalThis as Record<symbol, unknown>)[sinkKey] = sink;\n}\nfunction createLogger(bindings: Context = {}): PluginLogSink {\n const method = (level: 'info' | 'warn' | 'error' | 'debug' | 'fatal'): LogMethod =>\n (value: Context | string, message?: string) => {\n const sink = (globalThis as Record<symbol, unknown>)[sinkKey] as PluginLogSink | undefined;\n if (sink) {\n if (typeof value === 'string') sink[level](bindings, value);\n else sink[level]({...bindings, ...value}, message);\n } else if (level !== 'debug' || process.env.LOG_LEVEL === 'debug') {\n const write = level === 'fatal' ? console.error : console[level];\n write(message ?? (typeof value === 'string' ? value : ''), typeof value === 'string' ? bindings : {...bindings, ...value});\n }\n };\n return {info: method('info'), warn: method('warn'), error: method('error'), debug: method('debug'),\n fatal: method('fatal'), child: extra => createLogger({...bindings, ...extra})};\n}\nexport const logger = createLogger();\n",
8
8
  "/**\n * Hook 实现类\n *\n * 提供 4 种 Hook 类型的实现:\n * - AsyncParallelHook: 异步并行执行\n * - AsyncSeriesHook: 异步串行执行\n * - AsyncSeriesBailHook: 异步串行可中断\n * - AsyncSeriesWaterfallHook: 异步串行瀑布\n */\n\nimport { logger } from '../plugin-logger';\n/** Host-supplied view refresh, run between every waterfall tap. */\nexport const WATERFALL_VIEW_TRANSFORM = Symbol('waterfall-view-transform');\nimport type {\n TapInfo,\n Tap,\n IAsyncParallelHook,\n IAsyncSeriesHook,\n IAsyncSeriesBailHook,\n IAsyncSeriesWaterfallHook,\n IAsyncSeriesMapHook,\n HookStats,\n} from './types';\n\n/**\n * 标准化 TapInfo\n */\nfunction normalizeTapInfo(info: TapInfo | string): TapInfo {\n if (typeof info === 'string') {\n return { name: info, stage: 0 };\n }\n return { ...info, stage: info.stage ?? 0 };\n}\n\n/**\n * 基础 Hook 类\n */\nabstract class BaseHook<T extends any[]> {\n protected taps: Tap<T, any>[] = [];\n protected name: string;\n protected callCount = 0;\n protected totalTimeMs = 0;\n\n constructor(name?: string) {\n this.name = name ?? 'anonymous';\n }\n\n /**\n * 同步注册\n */\n tap(info: TapInfo | string, fn: (...args: T) => any): void {\n const tapInfo = normalizeTapInfo(info);\n this.taps.push({ info: tapInfo, type: 'sync', fn });\n this.sortTaps();\n }\n\n /**\n * 异步回调风格注册\n */\n tapAsync(info: TapInfo | string, fn: (...args: any[]) => void): void {\n const tapInfo = normalizeTapInfo(info);\n this.taps.push({ info: tapInfo, type: 'async', fn });\n this.sortTaps();\n }\n\n /**\n * Promise 风格注册\n */\n tapPromise(info: TapInfo | string, fn: (...args: T) => Promise<any>): void {\n const tapInfo = normalizeTapInfo(info);\n this.taps.push({ info: tapInfo, type: 'promise', fn });\n this.sortTaps();\n }\n\n /**\n * 检查是否有注册的回调\n */\n hasCallbacks(): boolean {\n return this.taps.length > 0;\n }\n\n /**\n * 获取统计信息\n */\n getStats(): HookStats {\n return {\n name: this.name,\n tapCount: this.taps.length,\n callCount: this.callCount,\n totalTimeMs: this.totalTimeMs,\n avgTimeMs: this.callCount > 0 ? this.totalTimeMs / this.callCount : 0,\n };\n }\n\n /**\n * 重置统计信息\n */\n resetStats(): void {\n this.callCount = 0;\n this.totalTimeMs = 0;\n }\n\n /**\n * 清空所有注册的回调\n */\n clear(): void {\n this.taps = [];\n }\n\n /**\n * 按 stage 排序(稳定排序)\n */\n private sortTaps(): void {\n this.taps.sort((a, b) => (a.info.stage ?? 0) - (b.info.stage ?? 0));\n }\n\n /**\n * 执行单个 tap\n */\n protected async executeTap<R>(\n tap: Tap<T, R>,\n args: T\n ): Promise<R | undefined> {\n try {\n if (tap.type === 'sync') {\n return tap.fn(...args);\n } else if (tap.type === 'promise') {\n return await tap.fn(...args);\n } else {\n // async (callback style)\n return await new Promise<R | undefined>((resolve, reject) => {\n const done = (err?: Error, result?: R) => {\n if (err) reject(err);\n else resolve(result);\n };\n tap.fn(...args, done);\n });\n }\n } catch (error) {\n logger.error(\n { error, hookName: this.name, pluginName: tap.info.name },\n 'Error in hook callback'\n );\n throw error;\n }\n }\n}\n\n/** Synchronous providers use the same registration, ordering and statistics as async hooks. */\nexport class SyncBailHook<T extends any[] = [], R = unknown> extends BaseHook<T> {\n override tapAsync(): never { throw new Error('synchronous provider requires tap'); }\n override tapPromise(): never { throw new Error('synchronous provider requires tap'); }\n call(...args: T): R | undefined {\n const started = performance.now();\n this.callCount++;\n try {\n for (const tap of this.taps) {\n const result = tap.fn(...args);\n if (result && typeof result.then === 'function') throw new Error('synchronous provider returned a Promise');\n if (result !== undefined) return result as R;\n }\n return undefined;\n } finally { this.totalTimeMs += performance.now() - started; }\n }\n}\n\n/**\n * 异步并行 Hook\n * 所有回调并行执行,全部完成后返回\n */\nexport class AsyncParallelHook<T extends any[] = []>\n extends BaseHook<T>\n implements IAsyncParallelHook<T>\n{\n async promise(...args: T): Promise<void> {\n if (this.taps.length === 0) return;\n\n const startTime = performance.now();\n this.callCount++;\n\n try {\n // 并行执行所有回调,错误独立处理不影响其他\n await Promise.all(\n this.taps.map(async (tap) => {\n try {\n await this.executeTap(tap, args);\n } catch (error) {\n // 并行 Hook 中单个回调的错误不应影响其他回调\n logger.error(\n { error, hookName: this.name, pluginName: tap.info.name },\n 'Error in parallel hook callback (ignored)'\n );\n }\n })\n );\n } finally {\n this.totalTimeMs += performance.now() - startTime;\n }\n }\n}\n\n/**\n * 异步串行 Hook\n * 所有回调按顺序串行执行\n */\nexport class AsyncSeriesHook<T extends any[] = []>\n extends BaseHook<T>\n implements IAsyncSeriesHook<T>\n{\n async promise(...args: T): Promise<void> {\n if (this.taps.length === 0) return;\n\n const startTime = performance.now();\n this.callCount++;\n\n try {\n for (const tap of this.taps) {\n await this.executeTap(tap, args);\n }\n } finally {\n this.totalTimeMs += performance.now() - startTime;\n }\n }\n}\n\n/**\n * 异步串行可中断 Hook\n * 任意回调返回非 undefined 值则停止执行并返回该值\n */\nexport class AsyncSeriesBailHook<T extends any[] = [], R = any>\n extends BaseHook<T>\n implements IAsyncSeriesBailHook<T, R>\n{\n async promise(...args: T): Promise<R | undefined> {\n if (this.taps.length === 0) return undefined;\n\n const startTime = performance.now();\n this.callCount++;\n\n try {\n for (const tap of this.taps) {\n const result = await this.executeTap<R>(tap, args);\n if (result !== undefined) {\n logger.debug(\n { hookName: this.name, pluginName: tap.info.name },\n 'Hook bailed with result'\n );\n return result;\n }\n }\n return undefined;\n } finally {\n this.totalTimeMs += performance.now() - startTime;\n }\n }\n}\n\n/**\n * 异步串行瀑布 Hook\n * 每个回调的返回值作为下一个回调的第一个参数\n */\nexport class AsyncSeriesWaterfallHook<T, A extends any[] = []>\n extends BaseHook<[T, ...A]>\n implements IAsyncSeriesWaterfallHook<T, A>\n{\n async promise(value: T, ...args: A): Promise<T> {\n if (this.taps.length === 0) return value;\n\n const startTime = performance.now();\n this.callCount++;\n\n try {\n let current = value;\n for (const tap of this.taps) {\n const result = await this.executeTap<T>(tap, [current, ...args] as [T, ...A]);\n // 只有返回非 undefined 时才更新值\n if (result !== undefined) {\n const transform = args[0]?.[WATERFALL_VIEW_TRANSFORM];\n current = typeof transform === 'function' ? await transform(result,current) : result;\n }\n }\n return current;\n } finally {\n this.totalTimeMs += performance.now() - startTime;\n }\n }\n}\n\n/**\n * 异步串行映射 Hook\n * 支持 N:M 转换:每个回调处理输入,可以返回 0 到多个输出\n *\n * 执行流程:\n * 1. 初始输入:单个 chunk\n * 2. 每个插件处理当前的所有 chunks,返回新的 chunks 数组\n * 3. 下一个插件处理上一步的所有输出\n *\n * 返回值约定:\n * - null/undefined: 不处理,原样输出当前 chunk\n * - []: 缓冲当前 chunk,不输出(N:0)\n * - [chunk]: 1:1 转换\n * - [chunk1, chunk2, ...]: 1:M 拆分\n *\n * 性能优化:\n * - 同步优先执行:sync tap 直接同步调用,跳过 Promise 开销\n * - 适用于流式响应处理等高频调用场景\n */\nexport class AsyncSeriesMapHook<T, A extends any[] = []>\n extends BaseHook<[T, ...A]>\n implements IAsyncSeriesMapHook<T, A>\n{\n /**\n * 同步执行单个 tap(跳过 Promise 开销)\n */\n private executeTapSync<R>(tap: Tap<[T, ...A], R>, args: [T, ...A]): R | undefined {\n try {\n return tap.fn(...args);\n } catch (error) {\n logger.error(\n { error, hookName: this.name, pluginName: tap.info.name },\n 'Error in hook callback'\n );\n throw error;\n }\n }\n\n async promise(value: T, ...args: A): Promise<T[]> {\n // 如果没有注册任何回调,直接返回原始值\n if (this.taps.length === 0) return [value];\n\n const startTime = performance.now();\n this.callCount++;\n\n try {\n // 初始输入为单个 chunk\n let chunks: T[] = [value];\n\n // 依次应用每个插件的转换\n for (const tap of this.taps) {\n const newChunks: T[] = [];\n\n // 对当前的每个 chunk 应用转换\n for (const chunk of chunks) {\n try {\n // 同步优先执行:sync tap 直接同步调用,跳过 Promise 开销\n const result = tap.type === 'sync'\n ? this.executeTapSync<T[] | null | undefined>(tap, [chunk, ...args] as [T, ...A])\n : await this.executeTap<T[] | null | undefined>(tap, [chunk, ...args] as [T, ...A]);\n\n if (result === null || result === undefined) {\n // 不处理,原样输出\n newChunks.push(chunk);\n } else if (Array.isArray(result)) {\n // N:M 转换\n // [] = 缓冲(不输出)\n // [item] = 1:1 转换\n // [item1, item2, ...] = 1:M 拆分\n newChunks.push(...result);\n } else {\n // 非法返回值,警告并原样输出\n logger.warn(\n { hookName: this.name, pluginName: tap.info.name, result },\n 'AsyncSeriesMapHook callback must return an array or null'\n );\n newChunks.push(chunk);\n }\n } catch (error) {\n // 单个 chunk 处理失败,记录错误并原样输出\n logger.error(\n { error, hookName: this.name, pluginName: tap.info.name },\n 'Error in AsyncSeriesMapHook callback'\n );\n if ((args[0] as { strict?: boolean } | undefined)?.strict) {\n throw error;\n }\n newChunks.push(chunk);\n }\n }\n\n chunks = newChunks;\n }\n\n return chunks;\n } finally {\n this.totalTimeMs += performance.now() - startTime;\n }\n }\n}\n",
@@ -29,15 +29,15 @@
29
29
  "import type { LLMProvider } from '../core/types';\nimport { getProviderTokenAccountingCapabilities } from './capabilities';\nimport {\n asString,\n clampTokens,\n countModelTextTokens,\n countJsonLikeTokens,\n countTextTokens,\n createPartialTokenAccountingEvent,\n finalizeTokenAccountingEvent,\n isRecord,\n readNumber,\n readRecord\n} from './helpers';\nimport type {\n CanonicalTokenAccountingEventV2,\n ProviderTokenAccountingAdapter,\n TokenAccountingSession,\n TokenAccountingSessionInput,\n TokenAccountingSessionState\n} from './types';\n\ntype JsonRecord = Record<string, unknown>;\n\nconst DEFERRED_MEDIA_KEYS = new Set([\n 'image_url', 'imageUrl', 'inline_data', 'inlineData', 'file_data', 'fileData',\n 'file_uri', 'fileUri', 'file_url', 'fileUrl', 'file_id', 'fileId', 'input_audio', 'inputAudio', 'audio_url', 'audioUrl',\n 'input_video', 'inputVideo', 'video_url', 'videoUrl'\n]);\nconst DEFERRED_MEDIA_TYPES = new Set([\n 'image', 'input_image', 'image_url', 'input_audio', 'audio', 'input_video', 'video',\n 'input_file', 'file'\n]);\nconst DEFERRED_METADATA_KEYS = new Set([\n 'model', 'role', 'type', 'status', 'index', 'id', 'mime_type', 'mimeType', 'detail'\n]);\n\n// Keep only bounded output fragments while the proxy is forwarding the stream.\n// Tokenization is deliberately deferred until finalization (one encode per side).\nconst MAX_STREAM_ESTIMATE_CHARS = 64 * 1024;\nconst MAX_STREAM_ESTIMATE_FRAGMENTS = 4096;\nconst MAX_INPUT_ESTIMATE_NODES = 4096;\nconst MAX_DEFERRED_MODEL_CHARS = 256;\ntype StreamEstimateState = TokenAccountingSessionState & {\n estimateFragments?: string[];\n estimateChars?: number;\n estimateTruncated?: boolean;\n requestEstimateTruncated?: boolean;\n deferFinalization?: boolean;\n deferredOutcome?: 'completed' | 'failed';\n estimateMediaSeen?: boolean;\n estimateNodes?: number;\n};\n\nfunction isDeferred(state: TokenAccountingSessionState): boolean {\n return (state as StreamEstimateState).deferFinalization === true;\n}\n\nfunction setSessionModel(state: TokenAccountingSessionState, value: unknown): void {\n const model = asString(value) ?? state.model ?? 'unknown';\n if (isDeferred(state) && model.length > MAX_DEFERRED_MODEL_CHARS) {\n state.model = model.slice(0, MAX_DEFERRED_MODEL_CHARS);\n (state as StreamEstimateState).requestEstimateTruncated = true;\n return;\n }\n state.model = model;\n}\n\nfunction observeOutput(state: TokenAccountingSessionState, value: unknown): void {\n if (state.outputAuthority === 'official') return;\n if (isDeferred(state) && typeof value === 'string' && isMediaDataUri(value)) {\n (state as StreamEstimateState).estimateMediaSeen = true;\n return;\n }\n const text = typeof value === 'string' ? value : JSON.stringify(value);\n if (!text) return;\n const estimateState = state as StreamEstimateState;\n const remaining = MAX_STREAM_ESTIMATE_CHARS - (estimateState.estimateChars ?? 0);\n if (remaining <= 0) {\n estimateState.estimateTruncated = true;\n return;\n }\n if ((estimateState.estimateFragments?.length ?? 0) >= MAX_STREAM_ESTIMATE_FRAGMENTS) {\n estimateState.estimateTruncated = true;\n return;\n }\n const fragment = text.slice(0, remaining);\n (estimateState.estimateFragments ??= []).push(fragment);\n estimateState.estimateChars = (estimateState.estimateChars ?? 0) + fragment.length;\n if (fragment.length < text.length) estimateState.estimateTruncated = true;\n}\n\nfunction observeBoundedOutput(state: TokenAccountingSessionState, value: unknown): void {\n if (state.outputAuthority === 'official') return;\n if (!isDeferred(state)) {\n if (typeof value === 'string') {\n observeOutput(state, value);\n return;\n }\n const bounded = boundedRequestSnapshot({ value });\n if (bounded.truncated) (state as StreamEstimateState).estimateTruncated = true;\n observeOutput(state, bounded.value.value);\n return;\n }\n const estimateState = state as StreamEstimateState;\n const nodesLeft = MAX_INPUT_ESTIMATE_NODES - (estimateState.estimateNodes ?? 0);\n if (nodesLeft < 3) {\n estimateState.estimateTruncated = true;\n return;\n }\n const bounded = typeof value === 'string'\n ? { value: { value: value.slice(0, MAX_STREAM_ESTIMATE_CHARS) }, truncated: value.length > MAX_STREAM_ESTIMATE_CHARS, nodesCopied: 0 }\n : boundedRequestSnapshot({ value }, Math.max(1, Math.floor(nodesLeft / 3)));\n estimateState.estimateNodes = (estimateState.estimateNodes ?? 0) + bounded.nodesCopied * 3;\n const filtered = stripDeferredMedia(bounded.value.value);\n if (bounded.truncated) estimateState.estimateTruncated = true;\n if (filtered.sawMedia) estimateState.estimateMediaSeen = true;\n if (filtered.hasContent) observeOutput(state, filtered.value);\n}\n\nfunction isMediaDataUri(value: string): boolean {\n return /^data:(?:image|audio|video)\\//i.test(value);\n}\n\nfunction stripDeferredMedia(value: unknown, key = ''): { value: unknown; sawMedia: boolean; hasContent: boolean } {\n if (key === 'tools' || key === 'tool_calls' || key === 'tool_use' || key === 'functionCall'\n || key === 'function_call' || key === 'arguments' || key === 'args') {\n return { value, sawMedia: false, hasContent: Array.isArray(value) ? value.length > 0 : value !== null && value !== undefined };\n }\n if (DEFERRED_MEDIA_KEYS.has(key)) return { value: undefined, sawMedia: true, hasContent: false };\n if (typeof value === 'string') {\n const dataUriPattern = /data:(?:image|audio|video)\\/[^\\s\"'<>)}\\]]+/gi;\n const stripped = value.replace(dataUriPattern, '');\n const sawMedia = stripped.length !== value.length;\n return { value: stripped || undefined, sawMedia, hasContent: stripped.length > 0 && !DEFERRED_METADATA_KEYS.has(key) };\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return { value, sawMedia: false, hasContent: !DEFERRED_METADATA_KEYS.has(key) };\n }\n if (Array.isArray(value)) {\n let sawMedia = false;\n let hasContent = false;\n const result: unknown[] = [];\n for (const item of value) {\n const filtered = stripDeferredMedia(item);\n sawMedia ||= filtered.sawMedia;\n hasContent ||= filtered.hasContent;\n if (filtered.value !== undefined) result.push(filtered.value);\n }\n return { value: result, sawMedia, hasContent };\n }\n if (!isRecord(value)) return { value, sawMedia: false, hasContent: false };\n if (asString(value.type) === 'tool_use' || asString(value.type) === 'function_call') return { value, sawMedia: false, hasContent: true };\n if (DEFERRED_MEDIA_TYPES.has(asString(value.type) ?? '')) return { value: undefined, sawMedia: true, hasContent: false };\n const result: JsonRecord = {};\n let sawMedia = false;\n let hasContent = false;\n for (const [childKey, child] of Object.entries(value)) {\n const filtered = stripDeferredMedia(child, childKey);\n sawMedia ||= filtered.sawMedia;\n hasContent ||= filtered.hasContent;\n if (filtered.value !== undefined) result[childKey] = filtered.value;\n }\n return { value: result, sawMedia, hasContent };\n}\n\nfunction clearObservedOutput(state: TokenAccountingSessionState): void {\n const estimateState = state as StreamEstimateState;\n estimateState.estimateFragments = undefined;\n estimateState.estimateChars = undefined;\n estimateState.estimateTruncated = false;\n estimateState.estimateMediaSeen = false;\n estimateState.estimateNodes = 0;\n}\n\nfunction estimatedStreamOutput(state: TokenAccountingSessionState): { tokens?: number; authority: 'local' | 'heuristic' | 'partial' | 'none' } {\n const estimateState = state as StreamEstimateState;\n const estimateChars = estimateState.estimateChars ?? 0;\n if (estimateChars === 0) return { authority: 'none' };\n if (isDeferred(state)) {\n const tokens = clampTokens(countTextTokens('x'.repeat(estimateChars)));\n return tokens === undefined\n ? { authority: 'none' }\n : { tokens, authority: estimateState.estimateTruncated || estimateState.estimateMediaSeen ? 'partial' : 'heuristic' };\n }\n const tokens = clampTokens(countModelTextTokens(estimateState.estimateFragments!.join(''), state.model));\n return tokens === undefined\n ? { authority: 'none' }\n : { tokens, authority: estimateState.estimateTruncated ? 'partial' : 'local' };\n}\n\nfunction finalizeMissingStreamOutput(state: TokenAccountingSessionState, interrupted = false): void {\n if (state.outputAuthority === 'official') return;\n const estimate = estimatedStreamOutput(state);\n state.outputTokens = estimate.tokens;\n state.outputAuthority = interrupted && estimate.tokens !== undefined ? 'partial' : estimate.authority;\n}\n\ntype BoundedRequest = { value: JsonRecord; truncated: boolean; nodesCopied: number };\n\nfunction boundedRequestSnapshot(body: JsonRecord, maxNodes = MAX_INPUT_ESTIMATE_NODES): BoundedRequest {\n let remaining = MAX_STREAM_ESTIMATE_CHARS;\n let nodes = maxNodes;\n let truncated = false;\n const copy = (value: unknown): unknown => {\n if (nodes <= 0 || remaining <= 0) {\n truncated = true;\n return undefined;\n }\n nodes -= 1;\n if (typeof value === 'string') {\n if (value.length > remaining) {\n truncated = true;\n const clipped = value.slice(0, remaining);\n remaining = 0;\n return clipped;\n }\n remaining -= value.length;\n return value;\n }\n if (value === null || typeof value === 'number' || typeof value === 'boolean') return value;\n if (Array.isArray(value)) {\n const result: unknown[] = [];\n for (let index = 0; index < value.length; index += 1) {\n if (nodes <= 0 || remaining <= 0) {\n truncated = true;\n break;\n }\n result.push(copy(value[index]));\n }\n if (result.length < value.length) truncated = true;\n return result;\n }\n if (!isRecord(value)) return undefined;\n const result: JsonRecord = {};\n for (const key in value) {\n if (!Object.prototype.hasOwnProperty.call(value, key)) continue;\n if (nodes <= 0 || remaining <= key.length) {\n truncated = true;\n break;\n }\n remaining -= key.length;\n result[key] = copy(value[key]);\n }\n return result;\n };\n return { value: copy(body) as JsonRecord, truncated, nodesCopied: maxNodes - nodes };\n}\n\nfunction storeRequestForEstimate(state: TokenAccountingSessionState, body: JsonRecord, fields: string[]): void {\n const relevant: JsonRecord = {};\n if (body.model !== undefined) relevant.model = isDeferred(state) && typeof body.model === 'string'\n ? body.model.slice(0, MAX_DEFERRED_MODEL_CHARS)\n : body.model;\n for (const field of fields) {\n if (Object.prototype.hasOwnProperty.call(body, field)) relevant[field] = body[field];\n }\n const bounded = boundedRequestSnapshot(relevant);\n state.requestBody = bounded.value;\n (state as StreamEstimateState).requestEstimateTruncated = bounded.truncated\n || (typeof body.model === 'string' && isDeferred(state) && body.model.length > MAX_DEFERRED_MODEL_CHARS);\n}\n\nfunction estimateMissingInput(state: TokenAccountingSessionState): void {\n if (state.estimatedInputAuthority === 'official') return;\n const requestBody = state.requestBody;\n if (!requestBody) {\n state.estimatedInputTokens = undefined;\n state.estimatedInputAuthority = 'none';\n return;\n }\n const hasInput = state.provider === 'openai'\n ? requestBody.input !== undefined || requestBody.messages !== undefined\n : state.provider === 'anthropic'\n ? requestBody.system !== undefined || requestBody.messages !== undefined\n : requestBody.contents !== undefined || requestBody.systemInstruction !== undefined;\n if (!hasInput) {\n state.estimatedInputTokens = undefined;\n state.estimatedInputAuthority = 'none';\n return;\n }\n const bounded = isDeferred(state)\n ? { value: requestBody, truncated: false }\n : boundedRequestSnapshot(requestBody);\n if (isDeferred(state)) {\n const filtered = stripDeferredMedia(bounded.value);\n const estimateBody = { ...filtered.value as JsonRecord };\n delete estimateBody.model;\n const hasToolSchema = Array.isArray(estimateBody.tools) && estimateBody.tools.length > 0;\n const hasContent = filtered.hasContent || hasToolSchema;\n if (!hasContent) {\n state.estimatedInputTokens = undefined;\n state.estimatedInputAuthority = 'none';\n return;\n }\n state.estimatedInputTokens = clampTokens(countJsonLikeTokens(estimateBody));\n state.estimatedInputAuthority = bounded.truncated\n || (state as StreamEstimateState).requestEstimateTruncated\n || filtered.sawMedia\n ? 'partial'\n : 'heuristic';\n return;\n }\n const estimate = state.provider === 'openai'\n ? estimateOpenAIInputTokens(bounded.value)\n : state.provider === 'anthropic'\n ? estimateAnthropicInputTokens(bounded.value)\n : estimateGeminiInputTokens(bounded.value);\n state.estimatedInputTokens = estimate;\n state.estimatedInputAuthority = bounded.truncated || (state as StreamEstimateState).requestEstimateTruncated ? 'partial' : 'local';\n}\nfunction hasOpenAIOutput(body: JsonRecord): boolean {\n if (Array.isArray(body.output) && body.output.length > 0) return true;\n return Array.isArray(body.choices) && body.choices.some((choice) => {\n if (!isRecord(choice)) return false;\n const message = readRecord(choice, 'message') ?? readRecord(choice, 'delta');\n return !!message && (message.content !== undefined && message.content !== null\n || Array.isArray(message.tool_calls) && message.tool_calls.length > 0);\n });\n}\n\nfunction hasAnthropicOutput(body: JsonRecord): boolean {\n return Array.isArray(body.content) && body.content.length > 0;\n}\n\nfunction observeAnthropicOutput(state: TokenAccountingSessionState, body: JsonRecord): void {\n const blocks = Array.isArray(body.content) ? body.content : [];\n for (let index = 0; index < blocks.length && index < MAX_INPUT_ESTIMATE_NODES; index += 1) {\n observeBoundedOutput(state, blocks[index]);\n }\n if (blocks.length > MAX_INPUT_ESTIMATE_NODES && isDeferred(state)) (state as StreamEstimateState).estimateTruncated = true;\n}\n\nfunction hasGeminiOutput(body: JsonRecord): boolean {\n return Array.isArray(body.candidates) && body.candidates.some((candidate) => {\n const parts = readRecord(candidate, 'content')?.parts;\n return Array.isArray(parts) && parts.length > 0;\n });\n}\n\nfunction isErrorResponse(body: JsonRecord): boolean {\n const status = asString(body.status)?.toLowerCase();\n const type = asString(body.type)?.toLowerCase();\n return body.error !== undefined || status === 'error' || status === 'failed'\n || type === 'error' || type?.endsWith('.error') === true || type?.endsWith('.failed') === true;\n}\n\nfunction isDeferredFailure(body: JsonRecord): boolean {\n const status = asString(body.status)?.toLowerCase();\n const type = asString(body.type)?.toLowerCase();\n return isErrorResponse(body) || status === 'incomplete' || type === 'incomplete' || type?.endsWith('.incomplete') === true;\n}\n\nfunction observeOpenAIOutput(\n state: TokenAccountingSessionState,\n chunk: JsonRecord,\n includeResponseSnapshot = true,\n event?: string\n): void {\n if (state.outputAuthority === 'official') return;\n let nodes = MAX_INPUT_ESTIMATE_NODES;\n const truncated = () => {\n if (isDeferred(state)) (state as StreamEstimateState).estimateTruncated = true;\n };\n const type = event ?? asString(chunk.type);\n if (type === 'response.output_text.delta') {\n if (isDeferred(state)) observeBoundedOutput(state, chunk.delta);\n else observeOutput(state, chunk.delta);\n }\n if (type === 'response.function_call_arguments.delta') {\n if (isDeferred(state)) observeBoundedOutput(state, chunk.delta);\n else observeOutput(state, chunk.delta);\n }\n if (includeResponseSnapshot) {\n const response = readRecord(chunk, 'response');\n const responseOutput = Array.isArray(response?.output) ? response.output : Array.isArray(chunk.output) ? chunk.output : undefined;\n if (responseOutput !== undefined) {\n if (isDeferred(state)) {\n const limit = Math.min(responseOutput.length, nodes);\n for (let index = 0; index < limit; index += 1, nodes -= 1) {\n observeBoundedOutput(state, responseOutput[index]);\n }\n if (responseOutput.length > limit) truncated();\n } else observeOutput(state, responseOutput);\n }\n }\n const choices = Array.isArray(chunk.choices) ? chunk.choices : [];\n const choiceLimit = Math.min(choices.length, nodes);\n for (let index = 0; index < choiceLimit; index += 1, nodes -= 1) {\n const choice = choices[index];\n if (!isRecord(choice)) continue;\n const delta = readRecord(choice, 'delta') ?? (isDeferred(state) ? readRecord(choice, 'message') : undefined);\n if (delta?.content !== undefined) {\n if (isDeferred(state)) observeBoundedOutput(state, delta.content);\n else observeOutput(state, delta.content);\n }\n const calls = Array.isArray(delta?.tool_calls) ? delta.tool_calls : [];\n const callLimit = Math.min(calls.length, nodes);\n for (let callIndex = 0; callIndex < callLimit; callIndex += 1, nodes -= 1) {\n const call = calls[callIndex];\n const fn = readRecord(call, 'function');\n if (fn?.arguments !== undefined) {\n if (isDeferred(state)) observeBoundedOutput(state, fn.arguments);\n else observeOutput(state, fn.arguments);\n }\n }\n if (calls.length > callLimit) truncated();\n }\n if (choices.length > choiceLimit) truncated();\n}\n\nfunction replaceObservedOutput(state: TokenAccountingSessionState): void {\n const estimateState = state as StreamEstimateState;\n estimateState.estimateFragments = [];\n estimateState.estimateChars = 0;\n estimateState.estimateTruncated = false;\n estimateState.estimateMediaSeen = false;\n estimateState.estimateNodes = 0;\n}\n\nfunction observeGeminiOutput(state: TokenAccountingSessionState, chunk: JsonRecord): void {\n let nodes = MAX_INPUT_ESTIMATE_NODES;\n const candidates = Array.isArray(chunk.candidates) ? chunk.candidates : [];\n const candidateLimit = Math.min(candidates.length, nodes);\n for (let candidateIndex = 0; candidateIndex < candidateLimit; candidateIndex += 1, nodes -= 1) {\n const candidate = candidates[candidateIndex];\n const content = readRecord(candidate, 'content');\n const parts = Array.isArray(content?.parts) ? content.parts : [];\n const partLimit = Math.min(parts.length, nodes);\n for (let partIndex = 0; partIndex < partLimit; partIndex += 1, nodes -= 1) {\n const part = parts[partIndex];\n if (!isRecord(part)) continue;\n if (isDeferred(state) && (part.inlineData !== undefined || part.inline_data !== undefined || part.fileData !== undefined || part.file_data !== undefined)) {\n (state as StreamEstimateState).estimateMediaSeen = true;\n }\n if (typeof part.text === 'string') {\n if (isDeferred(state)) observeBoundedOutput(state, part.text);\n else observeOutput(state, part.text);\n }\n if (part.functionCall !== undefined) {\n if (isDeferred(state)) observeBoundedOutput(state, part.functionCall);\n else observeOutput(state, part.functionCall);\n }\n }\n if (parts.length > partLimit && isDeferred(state)) (state as StreamEstimateState).estimateTruncated = true;\n }\n if (candidates.length > candidateLimit && isDeferred(state)) (state as StreamEstimateState).estimateTruncated = true;\n}\n\nfunction countOpenAIStringTokens(value: unknown, model: string | undefined): number {\n return countModelTextTokens(asString(value) ?? '', model);\n}\n\nfunction countOpenAIJsonLikeTokens(value: unknown, model: string | undefined): number {\n if (typeof value === 'string') {\n return countOpenAIStringTokens(value, model);\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return 1;\n }\n\n if (value === null || value === undefined) {\n return 0;\n }\n\n if (Array.isArray(value)) {\n return value.reduce((total, item) => total + countOpenAIJsonLikeTokens(item, model), 0);\n }\n\n if (isRecord(value)) {\n return Object.entries(value).reduce((total, [key, item]) => {\n return total + countOpenAIStringTokens(key, model) + countOpenAIJsonLikeTokens(item, model);\n }, 0);\n }\n\n return countOpenAIStringTokens(String(value), model);\n}\n\nfunction estimateOpenAIImageTokens(part: JsonRecord): number {\n const imageUrl = readRecord(part, 'image_url');\n const detail = asString(part.detail) ?? asString(imageUrl?.detail);\n if (detail === 'low') {\n return 85;\n }\n\n return 170;\n}\n\nfunction estimateOpenAIToolCallTokens(toolCall: unknown, model: string | undefined): number {\n if (!isRecord(toolCall)) {\n return countOpenAIJsonLikeTokens(toolCall, model);\n }\n\n const toolFunction = readRecord(toolCall, 'function');\n return 12\n + countOpenAIStringTokens(toolCall.id, model)\n + countOpenAIStringTokens(toolCall.type, model)\n + countOpenAIStringTokens(toolFunction?.name, model)\n + countOpenAIStringTokens(toolFunction?.arguments, model)\n + countOpenAIJsonLikeTokens(toolCall, model);\n}\n\nfunction estimateOpenAIMessageTokens(message: unknown, model: string | undefined): number {\n if (!isRecord(message)) {\n return countOpenAIJsonLikeTokens(message, model);\n }\n\n const content = message.content;\n const toolCalls = Array.isArray(message.tool_calls) ? message.tool_calls : [];\n return 4\n + countOpenAIStringTokens(message.role, model)\n + countOpenAIStringTokens(message.name, model)\n + countOpenAIStringTokens(message.tool_call_id, model)\n + estimateOpenAIMessageContent(content, model)\n + toolCalls.reduce((total, toolCall) => total + estimateOpenAIToolCallTokens(toolCall, model), 0);\n}\n\nfunction safeTokenSum(...values: number[]): number | undefined {\n const total = values.reduce((sum, value) => sum + value, 0);\n return Number.isSafeInteger(total) && total >= 0 ? total : undefined;\n}\n\nfunction estimateGeminiInlineDataTokens(inlineData: JsonRecord): number {\n const mimeType = asString(inlineData.mimeType)?.toLowerCase() ?? '';\n\n if (mimeType.startsWith('image/')) {\n return 224;\n }\n\n if (mimeType.startsWith('video/')) {\n return 384;\n }\n\n if (mimeType.startsWith('audio/')) {\n return 128;\n }\n\n return 96;\n}\n\nfunction estimateGeminiFunctionCallTokens(functionCall: JsonRecord): number {\n return 12\n + countTextTokens(asString(functionCall.name) ?? '')\n + countJsonLikeTokens(functionCall.args);\n}\n\nfunction estimateGeminiFunctionResponseTokens(functionResponse: JsonRecord): number {\n return 12\n + countTextTokens(asString(functionResponse.name) ?? '')\n + countJsonLikeTokens(functionResponse.response);\n}\n\nfunction buildAnthropicStreamingEvent(\n state: TokenAccountingSessionState,\n overrides: Partial<CanonicalTokenAccountingEventV2> = {}\n): CanonicalTokenAccountingEventV2 {\n return createPartialTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? 'none',\n ...overrides\n });\n}\n\nfunction estimateOpenAIMessageContent(content: unknown, model: string | undefined): number {\n if (typeof content === 'string') {\n return countModelTextTokens(content, model);\n }\n\n if (!Array.isArray(content)) {\n return countOpenAIJsonLikeTokens(content, model);\n }\n\n return content.reduce((total, part) => {\n if (!isRecord(part)) {\n return total + countOpenAIJsonLikeTokens(part, model);\n }\n\n const type = asString(part.type);\n if (type === 'text') {\n return total + countOpenAIStringTokens(part.text, model);\n }\n\n if (type === 'image_url' || type === 'image') {\n return total + estimateOpenAIImageTokens(part);\n }\n\n return total + countOpenAIJsonLikeTokens(part, model);\n }, 0);\n}\n\nfunction estimateOpenAIInputTokens(body: JsonRecord): number {\n const model = asString(body.model);\n if (body.input !== undefined) {\n return clampTokens(countOpenAIJsonLikeTokens(body.input, model) + 8) ?? 0;\n }\n const messages = Array.isArray(body.messages) ? body.messages : [];\n const messageTokens = messages.reduce((total, message) => total + estimateOpenAIMessageTokens(message, model), 0);\n\n const tools = Array.isArray(body.tools) ? body.tools : [];\n const toolTokens = tools.reduce((total, tool) => total + 16 + countOpenAIJsonLikeTokens(tool, model), 0);\n return clampTokens(messageTokens + toolTokens + 8) ?? 0;\n}\n\nfunction estimateOpenAIResponseOutputTokens(body: JsonRecord, model?: string): number {\n const choices = Array.isArray(body.choices) ? body.choices : [];\n return clampTokens(choices.reduce((total, choice) => {\n if (!isRecord(choice)) {\n return total + countOpenAIJsonLikeTokens(choice, model);\n }\n\n const message = readRecord(choice, 'message');\n const delta = readRecord(choice, 'delta');\n const toolCalls = Array.isArray(message?.tool_calls)\n ? message.tool_calls\n : Array.isArray(delta?.tool_calls)\n ? delta.tool_calls\n : [];\n\n return total\n + countOpenAIStringTokens(message?.role ?? delta?.role, model)\n + countOpenAIStringTokens(message?.tool_call_id, model)\n + estimateOpenAIMessageContent(message?.content ?? delta?.content, model)\n + toolCalls.reduce((toolTotal, toolCall) => toolTotal + estimateOpenAIToolCallTokens(toolCall, model), 0)\n + (asString(choice.finish_reason) === 'tool_calls' ? 4 : 0);\n }, 0)) ?? 0;\n}\n\nfunction openAIUsage(body: JsonRecord): JsonRecord | undefined {\n return readRecord(readRecord(body, 'response'), 'usage') ?? readRecord(body, 'usage');\n}\n\nfunction estimateOpenAIResponsesOutputTokens(response: JsonRecord, model?: string): number {\n const output = Array.isArray(response.output) ? response.output : [];\n return clampTokens(output.reduce((total, item) => {\n if (!isRecord(item)) return total + countOpenAIJsonLikeTokens(item, model);\n const content = Array.isArray(item.content) ? item.content : [];\n return total + content.reduce((contentTotal, part) => {\n if (isRecord(part) && typeof part.text === 'string') return contentTotal + countOpenAIStringTokens(part.text, model);\n return contentTotal + countOpenAIJsonLikeTokens(part, model);\n }, 0) + countOpenAIStringTokens(item.arguments, model);\n }, 0)) ?? 0;\n}\n\nfunction isDoneSentinel(chunk: JsonRecord): boolean {\n return chunk.data === '[DONE]' || chunk.type === '[DONE]';\n}\n\nfunction estimateAnthropicInputTokens(body: JsonRecord): number {\n const system = asString(body.system) ?? '';\n const messages = Array.isArray(body.messages) ? body.messages : [];\n const tools = Array.isArray(body.tools) ? body.tools : [];\n return clampTokens(\n countTextTokens(system)\n + messages.reduce((total, message) => total + countJsonLikeTokens(message), 0)\n + tools.reduce((total, tool) => total + 16 + countJsonLikeTokens(tool), 0)\n + 8\n ) ?? 0;\n}\n\nfunction estimateAnthropicOutputTokens(body: JsonRecord): number {\n const content = Array.isArray(body.content) ? body.content : [];\n return clampTokens(content.reduce((total, block) => total + countJsonLikeTokens(block), 0)) ?? 0;\n}\n\nfunction estimateGeminiPartTokens(part: unknown): number {\n if (!isRecord(part)) {\n return countJsonLikeTokens(part);\n }\n\n if (typeof part.text === 'string') {\n return countTextTokens(part.text);\n }\n\n if (isRecord(part.inlineData)) {\n return estimateGeminiInlineDataTokens(part.inlineData);\n }\n\n if (isRecord(part.functionCall)) {\n return estimateGeminiFunctionCallTokens(part.functionCall);\n }\n\n if (isRecord(part.functionResponse)) {\n return estimateGeminiFunctionResponseTokens(part.functionResponse);\n }\n\n return countJsonLikeTokens(part);\n}\n\nfunction estimateGeminiInputTokens(body: JsonRecord): number {\n const systemInstruction = readRecord(body, 'systemInstruction');\n const systemParts = Array.isArray(systemInstruction?.parts) ? systemInstruction.parts : [];\n const contents = Array.isArray(body.contents) ? body.contents : [];\n return clampTokens(\n systemParts.reduce((total, part) => total + estimateGeminiPartTokens(part), 0)\n + contents.reduce((total, item) => {\n if (!isRecord(item)) {\n return total + countJsonLikeTokens(item);\n }\n\n const parts = Array.isArray(item.parts) ? item.parts : [];\n return total + parts.reduce((partTotal, part) => partTotal + estimateGeminiPartTokens(part), 0);\n }, 0)\n + 8\n ) ?? 0;\n}\n\nfunction estimateGeminiOutputTokens(body: JsonRecord): number {\n const candidates = Array.isArray(body.candidates) ? body.candidates : [];\n return clampTokens(candidates.reduce((total, candidate) => {\n if (!isRecord(candidate)) {\n return total + countJsonLikeTokens(candidate);\n }\n\n const content = readRecord(candidate, 'content');\n const parts = Array.isArray(content?.parts) ? content.parts : [];\n return total + parts.reduce((partTotal, part) => partTotal + estimateGeminiPartTokens(part), 0);\n }, 0)) ?? 0;\n}\n\nfunction createOpenAIAdapter(): ProviderTokenAccountingAdapter {\n return {\n provider: 'openai',\n capabilities: getProviderTokenAccountingCapabilities('openai'),\n consumeRequest(state, body) {\n storeRequestForEstimate(state, body, ['input', 'messages', 'tools']);\n setSessionModel(state, body.model);\n },\n consumeResponse(state, body) {\n const usage = openAIUsage(body);\n const promptTokens = readNumber(usage, 'prompt_tokens') ?? readNumber(usage, 'input_tokens');\n const completionTokens = readNumber(usage, 'completion_tokens') ?? readNumber(usage, 'output_tokens');\n const responseStatus = asString(readRecord(body, 'response')?.status) ?? asString(body.status);\n const isIncomplete = responseStatus === 'incomplete' || asString(body.type) === 'response.incomplete';\n const isFailed = responseStatus === 'failed' || asString(body.type) === 'response.failed';\n const promptDetails = readRecord(usage, 'prompt_tokens_details') ?? readRecord(usage, 'input_tokens_details');\n const cacheReadTokens = readNumber(promptDetails, 'cached_tokens');\n if (isDeferred(state)) {\n if (promptTokens !== undefined) {\n state.estimatedInputTokens = promptTokens;\n state.estimatedInputAuthority = 'official';\n }\n if (completionTokens !== undefined) {\n state.outputTokens = completionTokens;\n state.outputAuthority = 'official';\n clearObservedOutput(state);\n }\n if (cacheReadTokens !== undefined) state.cacheReadTokens = cacheReadTokens;\n if (!isIncomplete && !isFailed && !isErrorResponse(body)) observeOpenAIOutput(state, body);\n state.protocolTerminalSeen = true;\n (state as StreamEstimateState).deferredOutcome = isIncomplete || isFailed || isErrorResponse(body) ? 'failed' : 'completed';\n return createPartialTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? 'none'\n });\n }\n if (promptTokens === undefined) estimateMissingInput(state);\n const responseHasOutput = hasOpenAIOutput(body) && !isIncomplete && !isFailed && !isErrorResponse(body);\n const estimatedOutput = completionTokens === undefined && responseHasOutput\n ? (Array.isArray(body.output) ? estimateOpenAIResponsesOutputTokens(body, state.model) : estimateOpenAIResponseOutputTokens(body, state.model))\n : undefined;\n\n if (promptTokens !== undefined || completionTokens !== undefined) {\n state.finalReceived = true;\n return finalizeTokenAccountingEvent(state, {\n inputTokens: promptTokens ?? state.estimatedInputTokens,\n outputTokens: completionTokens ?? estimatedOutput,\n cacheReadTokens,\n cacheWriteTokens: undefined,\n inputAuthority: promptTokens !== undefined ? 'official' : (state.estimatedInputAuthority ?? 'heuristic'),\n outputAuthority: completionTokens !== undefined ? 'official' : estimatedOutput === undefined ? 'none' : 'local'\n }, isIncomplete || isFailed ? 'failed' : 'completed');\n }\n\n const outputTokens = estimatedOutput;\n state.finalReceived = true;\n state.outputTokens = outputTokens;\n state.outputAuthority = outputTokens === undefined ? 'none' : 'local';\n return finalizeTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority\n }, isIncomplete || isFailed ? 'failed' : 'completed');\n },\n consumeStreamChunk(state, chunk, event) {\n if (state.finalReceived || isDoneSentinel(chunk)) return null;\n const response = readRecord(chunk, 'response');\n const usage = openAIUsage(chunk);\n const promptTokens = readNumber(usage, 'prompt_tokens') ?? readNumber(usage, 'input_tokens');\n const completionTokens = readNumber(usage, 'completion_tokens') ?? readNumber(usage, 'output_tokens');\n const promptDetails = readRecord(usage, 'prompt_tokens_details') ?? readRecord(usage, 'input_tokens_details');\n if (promptTokens !== undefined) {\n state.estimatedInputTokens = promptTokens;\n state.estimatedInputAuthority = 'official';\n }\n if (completionTokens !== undefined) {\n state.outputTokens = completionTokens;\n state.outputAuthority = 'official';\n clearObservedOutput(state);\n }\n const reportedCache = readNumber(promptDetails, 'cached_tokens');\n if (reportedCache !== undefined) state.cacheReadTokens = reportedCache;\n const responseType = event ?? asString(chunk.type);\n const responseStatus = asString(response?.status);\n const responseCompleted = responseType === 'response.completed' || responseStatus === 'completed';\n observeOpenAIOutput(state, chunk, !responseCompleted, event);\n const choices = Array.isArray(chunk.choices) ? chunk.choices : [];\n if (choices.some((choice) => isRecord(choice) && asString(choice.finish_reason) !== undefined && choice.finish_reason !== null)) {\n state.protocolTerminalSeen = true;\n if (isDeferred(state)) (state as StreamEstimateState).deferredOutcome = 'completed';\n }\n if (isDeferred(state)) {\n if (responseCompleted) {\n (state as StreamEstimateState).deferredOutcome = 'completed';\n state.protocolTerminalSeen = true;\n if (completionTokens === undefined && state.outputAuthority !== 'official' && Array.isArray(response?.output)) {\n replaceObservedOutput(state);\n observeOpenAIOutput(state, { response });\n }\n } else if (responseType === 'response.incomplete' || responseType === 'response.failed'\n || responseStatus === 'incomplete' || responseStatus === 'failed') {\n (state as StreamEstimateState).deferredOutcome = 'failed';\n state.protocolTerminalSeen = true;\n }\n return createPartialTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? 'none'\n });\n }\n if (responseCompleted) {\n if (completionTokens === undefined && state.outputAuthority !== 'official' && Array.isArray(response?.output)) {\n replaceObservedOutput(state);\n observeOpenAIOutput(state, { response });\n }\n if (completionTokens === undefined) finalizeMissingStreamOutput(state);\n if (promptTokens === undefined) estimateMissingInput(state);\n state.finalReceived = true;\n return finalizeTokenAccountingEvent(state, {\n inputTokens: promptTokens ?? state.estimatedInputTokens,\n outputTokens: completionTokens ?? state.outputTokens,\n cacheReadTokens: readNumber(readRecord(usage, 'input_tokens_details') ?? readRecord(usage, 'prompt_tokens_details'), 'cached_tokens') ?? state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: promptTokens !== undefined ? 'official' : (state.estimatedInputAuthority ?? 'heuristic'),\n outputAuthority: completionTokens !== undefined ? 'official' : (state.outputAuthority ?? 'none')\n });\n }\n if (responseType === 'response.incomplete' || responseType === 'response.failed'\n || responseStatus === 'incomplete' || responseStatus === 'failed') {\n state.finalReceived = true;\n const promptDetails = readRecord(usage, 'input_tokens_details') ?? readRecord(usage, 'prompt_tokens_details');\n const input = promptTokens === undefined ? undefined : promptTokens;\n const output = completionTokens;\n state.estimatedInputTokens = input ?? state.estimatedInputTokens;\n state.outputTokens = output ?? state.outputTokens;\n state.cacheReadTokens = readNumber(promptDetails, 'cached_tokens') ?? state.cacheReadTokens;\n if (output === undefined) finalizeMissingStreamOutput(state);\n if (input === undefined) estimateMissingInput(state);\n return finalizeTokenAccountingEvent(state, {\n inputTokens: input ?? state.estimatedInputTokens,\n outputTokens: output ?? state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: input !== undefined ? 'official' : (state.estimatedInputAuthority ?? 'heuristic'),\n outputAuthority: output !== undefined ? 'official' : (state.outputAuthority ?? 'none')\n }, 'failed');\n }\n return createPartialTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? 'none'\n });\n },\n finalizeAbortedStream(state) {\n finalizeMissingStreamOutput(state, true);\n estimateMissingInput(state);\n return finalizeTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? 'none'\n }, 'aborted');\n },\n finalizeCompletedStream(state) {\n if (state.finalReceived) return createPartialTokenAccountingEvent(state);\n state.finalReceived = true;\n finalizeMissingStreamOutput(state);\n estimateMissingInput(state);\n return finalizeTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? 'none'\n }, (state as StreamEstimateState).deferredOutcome ?? (state.protocolTerminalSeen ? 'completed' : 'failed'));\n }\n };\n}\n\nfunction createAnthropicAdapter(): ProviderTokenAccountingAdapter {\n return {\n provider: 'anthropic',\n capabilities: getProviderTokenAccountingCapabilities('anthropic'),\n consumeRequest(state, body) {\n storeRequestForEstimate(state, body, ['system', 'messages', 'tools']);\n setSessionModel(state, body.model);\n },\n consumeResponse(state, body) {\n const usage = readRecord(body, 'usage');\n const inputTokens = readNumber(usage, 'input_tokens');\n const outputTokens = readNumber(usage, 'output_tokens');\n const cacheWriteTokens = readNumber(usage, 'cache_creation_input_tokens');\n const cacheReadTokens = readNumber(usage, 'cache_read_input_tokens');\n const totalInputTokens = inputTokens === undefined ? undefined : safeTokenSum(inputTokens, cacheWriteTokens ?? 0, cacheReadTokens ?? 0);\n if (isDeferred(state)) {\n if (totalInputTokens !== undefined) {\n state.estimatedInputTokens = totalInputTokens;\n state.estimatedInputAuthority = 'official';\n }\n if (outputTokens !== undefined) {\n state.outputTokens = outputTokens;\n state.outputAuthority = 'official';\n clearObservedOutput(state);\n }\n if (cacheReadTokens !== undefined) state.cacheReadTokens = cacheReadTokens;\n if (cacheWriteTokens !== undefined) state.cacheWriteTokens = cacheWriteTokens;\n const failed = isDeferredFailure(body);\n if (!failed) observeAnthropicOutput(state, body);\n state.protocolTerminalSeen = true;\n (state as StreamEstimateState).deferredOutcome = failed ? 'failed' : 'completed';\n return createPartialTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? 'none'\n });\n }\n if (totalInputTokens === undefined) estimateMissingInput(state);\n const estimatedOutput = outputTokens === undefined && hasAnthropicOutput(body) && !isErrorResponse(body) ? estimateAnthropicOutputTokens(body) : undefined;\n\n if (usage && (inputTokens !== undefined || outputTokens !== undefined\n || readNumber(usage, 'cache_creation_input_tokens') !== undefined\n || readNumber(usage, 'cache_read_input_tokens') !== undefined)) {\n state.finalReceived = true;\n return finalizeTokenAccountingEvent(state, {\n inputTokens: totalInputTokens ?? state.estimatedInputTokens,\n outputTokens: outputTokens ?? estimatedOutput,\n cacheReadTokens,\n cacheWriteTokens,\n inputAuthority: totalInputTokens !== undefined ? 'official' : (state.estimatedInputAuthority ?? 'heuristic'),\n outputAuthority: outputTokens !== undefined ? 'official' : estimatedOutput === undefined ? 'none' : 'local'\n });\n }\n\n return finalizeTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: estimatedOutput,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: estimatedOutput === undefined ? 'none' : 'local'\n });\n },\n consumeStreamChunk(state, chunk, event) {\n if (state.finalReceived || isDoneSentinel(chunk)) return null;\n const type = event ?? asString(chunk.type);\n if (isDeferred(state) && type === 'error') {\n state.protocolTerminalSeen = true;\n (state as StreamEstimateState).deferredOutcome = 'failed';\n return createPartialTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? 'none'\n });\n }\n if (type === 'message_start') {\n const message = readRecord(chunk, 'message');\n const usage = readRecord(message, 'usage');\n setSessionModel(state, message?.model);\n state.cacheWriteTokens = readNumber(usage, 'cache_creation_input_tokens') ?? state.cacheWriteTokens;\n state.cacheReadTokens = readNumber(usage, 'cache_read_input_tokens') ?? state.cacheReadTokens;\n const rawInputTokens = readNumber(usage, 'input_tokens');\n const totalInputTokens = rawInputTokens === undefined\n ? undefined\n : safeTokenSum(rawInputTokens, state.cacheWriteTokens ?? 0, state.cacheReadTokens ?? 0);\n state.estimatedInputTokens = totalInputTokens ?? state.estimatedInputTokens;\n if (totalInputTokens !== undefined) state.estimatedInputAuthority = 'official';\n\n const initialOutputTokens = readNumber(usage, 'output_tokens');\n state.outputTokens = initialOutputTokens ?? state.outputTokens;\n state.outputAuthority = initialOutputTokens !== undefined ? 'official' : 'none';\n if (initialOutputTokens !== undefined) clearObservedOutput(state);\n return buildAnthropicStreamingEvent(state, {\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority\n });\n }\n\n if (type === 'content_block_start') {\n const contentBlock = readRecord(chunk, 'content_block');\n if (contentBlock?.text !== undefined) {\n if (isDeferred(state)) observeBoundedOutput(state, contentBlock.text);\n else observeOutput(state, contentBlock.text);\n }\n return buildAnthropicStreamingEvent(state);\n }\n\n if (type === 'content_block_delta') {\n const delta = readRecord(chunk, 'delta');\n const deltaType = asString(delta?.type);\n if (deltaType === 'text_delta') {\n if (isDeferred(state)) observeBoundedOutput(state, delta?.text);\n else observeOutput(state, delta?.text);\n }\n if (deltaType === 'input_json_delta') observeOutput(state, delta?.partial_json);\n return buildAnthropicStreamingEvent(state);\n }\n\n if (type === 'content_block_stop') {\n return buildAnthropicStreamingEvent(state);\n }\n\n if (type === 'message_delta') {\n const usage = readRecord(chunk, 'usage');\n const outputTokens = readNumber(usage, 'output_tokens');\n const rawInputTokens = readNumber(usage, 'input_tokens');\n if (rawInputTokens !== undefined) {\n state.cacheWriteTokens = readNumber(usage, 'cache_creation_input_tokens') ?? state.cacheWriteTokens;\n state.cacheReadTokens = readNumber(usage, 'cache_read_input_tokens') ?? state.cacheReadTokens;\n const totalInput = safeTokenSum(rawInputTokens, state.cacheWriteTokens ?? 0, state.cacheReadTokens ?? 0);\n state.estimatedInputTokens = totalInput ?? state.estimatedInputTokens;\n if (totalInput !== undefined) state.estimatedInputAuthority = 'official';\n }\n if (outputTokens !== undefined) {\n state.outputTokens = outputTokens;\n state.outputAuthority = 'official';\n clearObservedOutput(state);\n }\n state.cacheWriteTokens = readNumber(usage, 'cache_creation_input_tokens') ?? state.cacheWriteTokens;\n state.cacheReadTokens = readNumber(usage, 'cache_read_input_tokens') ?? state.cacheReadTokens;\n\n return buildAnthropicStreamingEvent(state, {\n outputAuthority: state.outputTokens !== undefined ? (state.outputAuthority ?? 'none') : 'none'\n });\n }\n\n if (type === 'message_stop') {\n if (state.finalReceived) {\n return null;\n }\n\n state.protocolTerminalSeen = true;\n if (isDeferred(state)) {\n (state as StreamEstimateState).deferredOutcome ??= 'completed';\n return createPartialTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? 'none'\n });\n }\n state.finalReceived = true;\n finalizeMissingStreamOutput(state);\n estimateMissingInput(state);\n return finalizeTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? 'none'\n });\n }\n\n return null;\n },\n finalizeAbortedStream(state) {\n finalizeMissingStreamOutput(state, true);\n estimateMissingInput(state);\n return finalizeTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputTokens !== undefined ? (state.outputAuthority ?? 'partial') : 'none'\n }, 'aborted');\n },\n finalizeCompletedStream(state) {\n if (state.finalReceived) return buildAnthropicStreamingEvent(state);\n state.finalReceived = true;\n finalizeMissingStreamOutput(state);\n estimateMissingInput(state);\n return finalizeTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputTokens !== undefined ? (state.outputAuthority ?? 'partial') : 'none'\n }, (state as StreamEstimateState).deferredOutcome ?? (state.protocolTerminalSeen ? 'completed' : 'failed'));\n }\n };\n}\n\nfunction createGeminiAdapter(): ProviderTokenAccountingAdapter {\n return {\n provider: 'gemini',\n capabilities: getProviderTokenAccountingCapabilities('gemini'),\n consumeRequest(state, body) {\n storeRequestForEstimate(state, body, ['contents', 'systemInstruction']);\n setSessionModel(state, body.model);\n },\n consumeResponse(state, body) {\n const usageMetadata = readRecord(body, 'usageMetadata');\n const promptTokenCount = readNumber(usageMetadata, 'promptTokenCount');\n const candidatesTokenCount = readNumber(usageMetadata, 'candidatesTokenCount');\n const thoughtsTokenCount = readNumber(usageMetadata, 'thoughtsTokenCount') ?? 0;\n const toolUsePromptTokenCount = readNumber(usageMetadata, 'toolUsePromptTokenCount') ?? 0;\n const cachedContentTokenCount = readNumber(usageMetadata, 'cachedContentTokenCount');\n if (isDeferred(state)) {\n const input = promptTokenCount === undefined ? undefined : safeTokenSum(promptTokenCount, toolUsePromptTokenCount);\n const output = candidatesTokenCount === undefined ? undefined : safeTokenSum(candidatesTokenCount, thoughtsTokenCount);\n if (input !== undefined) {\n state.estimatedInputTokens = input;\n state.estimatedInputAuthority = 'official';\n }\n if (output !== undefined) {\n state.outputTokens = output;\n state.outputAuthority = 'official';\n clearObservedOutput(state);\n }\n if (cachedContentTokenCount !== undefined) state.cacheReadTokens = cachedContentTokenCount;\n const failed = isDeferredFailure(body);\n if (!failed) observeGeminiOutput(state, body);\n state.protocolTerminalSeen = true;\n (state as StreamEstimateState).deferredOutcome = failed ? 'failed' : 'completed';\n return createPartialTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: undefined,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? 'none'\n });\n }\n if (promptTokenCount === undefined) estimateMissingInput(state);\n const estimatedOutput = candidatesTokenCount === undefined && hasGeminiOutput(body) && !isErrorResponse(body) ? estimateGeminiOutputTokens(body) : undefined;\n\n if (promptTokenCount !== undefined || candidatesTokenCount !== undefined) {\n state.finalReceived = true;\n return finalizeTokenAccountingEvent(state, {\n inputTokens: promptTokenCount === undefined ? state.estimatedInputTokens : safeTokenSum(promptTokenCount, toolUsePromptTokenCount) ?? state.estimatedInputTokens,\n outputTokens: candidatesTokenCount === undefined ? estimatedOutput : safeTokenSum(candidatesTokenCount, thoughtsTokenCount) ?? estimatedOutput,\n cacheReadTokens: cachedContentTokenCount,\n cacheWriteTokens: undefined,\n inputAuthority: promptTokenCount !== undefined && safeTokenSum(promptTokenCount, toolUsePromptTokenCount) !== undefined ? 'official' : (state.estimatedInputAuthority ?? 'heuristic'),\n outputAuthority: candidatesTokenCount !== undefined && safeTokenSum(candidatesTokenCount, thoughtsTokenCount) !== undefined ? 'official' : estimatedOutput === undefined ? 'none' : 'local'\n });\n }\n\n const outputTokens = estimatedOutput;\n state.finalReceived = true;\n state.outputTokens = outputTokens;\n state.outputAuthority = outputTokens === undefined ? 'none' : 'local';\n return finalizeTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority\n });\n },\n consumeStreamChunk(state, chunk, event) {\n if (state.finalReceived || isDoneSentinel(chunk)) return null;\n observeGeminiOutput(state, chunk);\n const usageMetadata = readRecord(chunk, 'usageMetadata');\n const promptTokenCount = readNumber(usageMetadata, 'promptTokenCount');\n const candidatesTokenCount = readNumber(usageMetadata, 'candidatesTokenCount');\n const thoughtsTokenCount = readNumber(usageMetadata, 'thoughtsTokenCount') ?? 0;\n const toolUsePromptTokenCount = readNumber(usageMetadata, 'toolUsePromptTokenCount') ?? 0;\n const reportedCacheRead = readNumber(usageMetadata, 'cachedContentTokenCount');\n const candidates = Array.isArray(chunk.candidates) ? chunk.candidates : [];\n if (candidates.some((candidate) => isRecord(candidate) && asString(candidate.finishReason) !== undefined)) {\n state.protocolTerminalSeen = true;\n if (isDeferred(state)) (state as StreamEstimateState).deferredOutcome ??= 'completed';\n }\n if (isDeferred(state) && isDeferredFailure(chunk)) {\n state.protocolTerminalSeen = true;\n (state as StreamEstimateState).deferredOutcome = 'failed';\n }\n if (isDeferred(state) && reportedCacheRead !== undefined && promptTokenCount === undefined && candidatesTokenCount === undefined) {\n state.cacheReadTokens = reportedCacheRead;\n return createPartialTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: undefined,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? 'none'\n });\n }\n if (promptTokenCount !== undefined || candidatesTokenCount !== undefined) {\n const input = promptTokenCount === undefined ? undefined : safeTokenSum(promptTokenCount, toolUsePromptTokenCount);\n const output = candidatesTokenCount === undefined ? undefined : safeTokenSum(candidatesTokenCount, thoughtsTokenCount);\n state.estimatedInputTokens = input ?? state.estimatedInputTokens;\n if (input !== undefined) state.estimatedInputAuthority = 'official';\n state.outputTokens = output ?? state.outputTokens;\n if (output !== undefined) {\n state.outputAuthority = 'official';\n clearObservedOutput(state);\n }\n const cacheRead = readNumber(usageMetadata, 'cachedContentTokenCount');\n if (cacheRead !== undefined) state.cacheReadTokens = cacheRead;\n return createPartialTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: undefined,\n inputAuthority: state.estimatedInputAuthority ?? 'heuristic',\n outputAuthority: state.outputAuthority ?? 'partial'\n });\n }\n\n return createPartialTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'heuristic',\n outputAuthority: state.outputAuthority ?? (state.outputTokens !== undefined ? 'partial' : 'none')\n });\n },\n finalizeAbortedStream(state) {\n finalizeMissingStreamOutput(state, true);\n estimateMissingInput(state);\n return finalizeTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? (state.outputTokens !== undefined ? 'partial' : 'none')\n }, 'aborted');\n },\n finalizeCompletedStream(state) {\n if (state.finalReceived) return createPartialTokenAccountingEvent(state);\n state.finalReceived = true;\n finalizeMissingStreamOutput(state);\n estimateMissingInput(state);\n return finalizeTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? (state.outputTokens !== undefined ? 'partial' : 'none')\n }, (state as StreamEstimateState).deferredOutcome ?? (state.protocolTerminalSeen ? 'completed' : 'failed'));\n }\n };\n}\n\nconst PROVIDER_ADAPTERS = {\n openai: createOpenAIAdapter(),\n anthropic: createAnthropicAdapter(),\n gemini: createGeminiAdapter()\n} as const satisfies Record<string, ProviderTokenAccountingAdapter>;\n\nfunction normalizeProvider(provider: LLMProvider): keyof typeof PROVIDER_ADAPTERS {\n return String(provider).trim().toLowerCase() as keyof typeof PROVIDER_ADAPTERS;\n}\n\nfunction getProviderAdapter(provider: LLMProvider): ProviderTokenAccountingAdapter {\n const adapter = PROVIDER_ADAPTERS[normalizeProvider(provider)];\n if (!adapter) {\n throw new Error(`Unsupported token accounting provider: ${provider}`);\n }\n\n return adapter;\n}\n\nexport function createTokenAccountingSession(\n input: TokenAccountingSessionInput,\n options: { deferFinalization?: boolean } = {}\n): TokenAccountingSession {\n const adapter = getProviderAdapter(input.provider);\n let terminalEvent: CanonicalTokenAccountingEventV2 | undefined;\n const state: TokenAccountingSessionState & StreamEstimateState = {\n provider: adapter.provider,\n routeId: input.routeId,\n upstreamId: input.upstreamId,\n requestId: input.requestId,\n attemptId: input.attemptId,\n streaming: input.streaming,\n model: input.model,\n finalReceived: false,\n deferFinalization: options.deferFinalization === true\n };\n\n return {\n consumeRequest({ body }) {\n adapter.consumeRequest(state, body);\n },\n consumeResponse({ body }): CanonicalTokenAccountingEventV2 {\n const event = adapter.consumeResponse(state, body);\n if (event.final || event.outcome !== 'completed') terminalEvent = event;\n return event;\n },\n consumeStreamChunk({ chunk, event: eventName }): CanonicalTokenAccountingEventV2 | null {\n const event = adapter.consumeStreamChunk(state, chunk, eventName);\n if (event && (event.final || event.outcome !== 'completed')) terminalEvent = event;\n return event;\n },\n finalizeCompletedStream(): CanonicalTokenAccountingEventV2 {\n if (terminalEvent) return terminalEvent;\n const event = adapter.finalizeCompletedStream(state);\n terminalEvent = event;\n return event;\n },\n finalizeAbortedStream(): CanonicalTokenAccountingEventV2 {\n if (terminalEvent) return terminalEvent;\n const event = adapter.finalizeAbortedStream(state);\n terminalEvent = event;\n return event;\n }\n };\n}\n",
30
30
  "import type { AgentMessageDelivery } from './agent-messages';\nexport type ResponsesProtocol = 'chat_completions' | 'anthropic_messages';\nexport type JsonRecord = Record<string, unknown>;\nexport interface ResponsesToolName { name: string; namespace?: string; custom: boolean }\n/** Per-request wire-name authority; never infer namespaces by splitting a provider name. */\nexport type ResponsesToolNames = ReadonlyMap<string, ResponsesToolName>;\nexport interface ResponsesCodecLimits {\n maxRequestBytes: number;\n maxOutputBytes: number;\n maxArgumentBytes: number;\n maxItems: number;\n}\nexport const DEFAULT_RESPONSES_CODEC_LIMITS: Readonly<ResponsesCodecLimits> = Object.freeze({\n maxRequestBytes: 8 * 1024 * 1024,\n maxOutputBytes: 8 * 1024 * 1024,\n maxArgumentBytes: 1024 * 1024,\n maxItems: 1024,\n});\nexport interface ResponsesCodecCapabilities {\n /** Explicit caller policy for plaintext collaboration across protocols. */\n agentMessageDelivery?: AgentMessageDelivery;\n reasoningEffort?: boolean;\n /** Plain reasoning history support is independent of effort parameter mapping. */\n reasoningHistory?: boolean;\n anthropicStrictTools?: boolean;\n /** Include original names in alias descriptions so model-facing identity is retained. */\n preserveToolIdentityDescription?: boolean;\n preserveRefusalContent?: boolean;\n /** Codex declares optional hosted search even when the selected model has no search backend. */\n omitOptionalWebSearch?: boolean;\n /** Explicit provider-approved thinking budget; do not guess budgets from effort labels. */\n anthropicThinkingBudget?: number;\n maxOutputTokens?: number;\n limits?: Partial<ResponsesCodecLimits>;\n}\nexport interface ResponsesConversionDiagnostic {\n param: string;\n action: 'mapped' | 'omitted';\n reason: string;\n}\nexport class ResponsesCodecError extends Error {\n constructor(readonly code: string, message: string, readonly param?: string) { super(message); this.name = 'ResponsesCodecError'; }\n}\nexport function fail(code: string, message: string, param?: string): never { throw new ResponsesCodecError(code, message, param); }\nexport function atParam<T>(param: string, run: () => T): T {\n try { return run(); } catch (error) {\n if (error instanceof ResponsesCodecError && error.param === undefined) throw new ResponsesCodecError(error.code, error.message, param);\n throw error;\n }\n}\nexport function record(value: unknown, where: string): JsonRecord {\n if (!value || typeof value !== 'object' || Array.isArray(value)) fail('invalid_payload', `${where} must be an object`);\n return value as JsonRecord;\n}\nexport function string(value: unknown, where: string, nonempty = false): string {\n if (typeof value !== 'string' || (nonempty && !value)) fail('invalid_payload', `${where} must be a${nonempty ? ' non-empty' : ''} string`);\n return value;\n}\nexport function list(value: unknown, where: string): unknown[] {\n if (!Array.isArray(value)) fail('invalid_payload', `${where} must be an array`);\n return value;\n}\nexport function limits(overrides?: Partial<ResponsesCodecLimits>): ResponsesCodecLimits {\n const result = { ...DEFAULT_RESPONSES_CODEC_LIMITS, ...overrides };\n for (const [key, value] of Object.entries(result)) {\n if (!Number.isSafeInteger(value) || value <= 0) fail('invalid_limit', `${key} must be a positive integer`);\n }\n return result;\n}\nexport function bytes(value: string): number { return new TextEncoder().encode(value).byteLength; }\nexport function bounded(value: string, max: number, where: string): string {\n if (bytes(value) > max) fail('resource_limit', `${where} exceeds ${max} bytes`);\n return value;\n}\nexport function serialized(value: unknown, max: number, where: string): string {\n let result: string | undefined;\n try { result = JSON.stringify(value); } catch { fail('invalid_payload', `${where} must be serializable JSON`); }\n if (result === undefined) fail('invalid_payload', `${where} must be serializable JSON`);\n return bounded(result, max, where);\n}\nexport function argumentObject(text: string): JsonRecord {\n let value: unknown;\n try { value = JSON.parse(text); } catch { fail('invalid_tool_arguments', 'Tool arguments must be complete JSON'); }\n return record(value, 'tool arguments');\n}\nexport function restoreTool(name: string, names: ResponsesToolNames): ResponsesToolName {\n const result = names.get(name);\n if (result) return result;\n if (names.size) fail('unknown_tool', `Provider returned undeclared tool ${name}`);\n return { name, custom: false };\n}\nexport function customInput(text: string): string {\n const value = argumentObject(text);\n if (Object.keys(value).length !== 1 || typeof value.input !== 'string') {\n fail('invalid_tool_arguments', 'Custom tools require exactly one string input property');\n }\n return value.input;\n}\n/** Decode only complete JSON-string characters. A split escape remains buffered. */\nexport function customInputPrefix(text: string): string {\n const prefix = /^\\s*\\{\\s*\"input\"\\s*:\\s*\"/.exec(text);\n if (!prefix) return '';\n let result = '';\n for (let i = prefix[0].length; i < text.length;) {\n const char = text[i];\n if (char === '\"') break;\n if (char !== '\\\\') { if (char.charCodeAt(0) < 32) fail('invalid_tool_arguments', 'Invalid JSON string character'); result += char; i++; continue; }\n const escape = text[i + 1];\n if (escape === undefined) break;\n const size = escape === 'u' ? 6 : 2;\n if (i + size > text.length) break;\n try { result += JSON.parse(`\"${text.slice(i, i + size)}\"`); } catch { fail('invalid_tool_arguments', 'Invalid JSON string escape'); }\n i += size;\n }\n return result;\n}\nexport interface Terminal { status: 'completed' | 'incomplete' | 'failed'; reason: string }\nexport function terminal(reason: unknown, protocol: ResponsesProtocol): Terminal {\n if (typeof reason !== 'string' || !reason) fail('missing_terminal', 'Upstream has no explicit completion reason');\n const completed = protocol === 'chat_completions' ? ['stop', 'tool_calls', 'function_call'] : ['end_turn', 'tool_use', 'stop_sequence'];\n if (completed.includes(reason)) return { status: 'completed', reason };\n if (reason === 'length' || reason === 'max_tokens' || reason === 'model_context_window_exceeded') return { status: 'incomplete', reason: 'max_output_tokens' };\n if (reason === 'content_filter' || reason === 'refusal') return { status: 'incomplete', reason: 'content_filter' };\n if (reason === 'error') return { status: 'failed', reason: 'upstream_error' };\n fail('unknown_terminal', `Unsupported upstream completion reason: ${reason}`);\n}\nfunction tokens(value: unknown, where: string): number {\n if (value === undefined) return 0;\n if (!Number.isSafeInteger(value) || (value as number) < 0) fail('invalid_usage', `${where} must be a non-negative integer`);\n return value as number;\n}\nexport function normalizeUsage(raw: unknown, protocol: ResponsesProtocol, prior: JsonRecord = {}): JsonRecord {\n if (raw === undefined || raw === null) return prior;\n const usage = record(raw, 'usage');\n const chat = protocol === 'chat_completions';\n const input = tokens(usage[chat ? 'prompt_tokens' : 'input_tokens'] ?? prior.input_tokens, 'input_tokens');\n const output = tokens(usage[chat ? 'completion_tokens' : 'output_tokens'] ?? prior.output_tokens, 'output_tokens');\n const details = chat ? usage.prompt_tokens_details : undefined;\n const cached = chat ? (details ? record(details, 'prompt_tokens_details').cached_tokens : undefined) : usage.cache_read_input_tokens;\n // Anthropic input_tokens excludes both cache classes; Responses input_tokens includes them.\n const cacheRead = tokens(cached ?? (prior.input_tokens_details as JsonRecord | undefined)?.cached_tokens, 'cached_tokens');\n const cacheWrite = chat ? 0 : tokens(usage.cache_creation_input_tokens ?? (prior.input_tokens_details as JsonRecord | undefined)?.cache_creation_tokens, 'cache_creation_input_tokens');\n const totalInput = chat ? input : (usage.input_tokens === undefined ? input : input + cacheRead + cacheWrite);\n const reasoning = chat && usage.completion_tokens_details ? record(usage.completion_tokens_details, 'completion_tokens_details').reasoning_tokens : undefined;\n return { input_tokens: totalInput, output_tokens: output, total_tokens: totalInput + output,\n input_tokens_details: { cached_tokens: cacheRead, ...(cacheWrite ? { cache_creation_tokens: cacheWrite } : {}) },\n output_tokens_details: { reasoning_tokens: tokens(reasoning ?? (prior.output_tokens_details as JsonRecord | undefined)?.reasoning_tokens, 'reasoning_tokens') } };\n}\nexport function isCollaborationFunction(name: unknown, namespace: unknown, custom = false): boolean {\n return !custom && namespace === 'collaboration' && typeof name === 'string' && ['spawn_agent', 'send_message', 'followup_task'].includes(name);\n}\nexport function plaintextCollaborationCall(item: JsonRecord, delivery?: AgentMessageDelivery): JsonRecord {\n return delivery === 'plaintext' && item.type === 'function_call' && isCollaborationFunction(item.name, item.namespace)\n ? { ...item, encrypted_function_args: [] } : item;\n}\nexport function toolItem(id: string, name: string, args: string, names: ResponsesToolNames, status = 'completed', agentMessageDelivery?: AgentMessageDelivery): JsonRecord {\n const original = restoreTool(name, names);\n const item: JsonRecord = { id: `fc_${id}`, type: original.custom ? 'custom_tool_call' : 'function_call', call_id: id, name: original.name, status };\n if (original.namespace) item.namespace = original.namespace;\n if (original.custom) item.input = customInput(args); else { argumentObject(args); item.arguments = args; }\n return plaintextCollaborationCall(item, agentMessageDelivery);\n}\nexport function responsePayload(id: string, model: string, output: JsonRecord[], end: Terminal, usage: JsonRecord, error?: unknown, createdAt = Math.floor(Date.now() / 1000)): JsonRecord {\n const result: JsonRecord = { id, object: 'response', created_at: createdAt, model, status: end.status, output, usage: Object.keys(usage).length ? usage : null };\n if (end.status === 'incomplete') result.incomplete_details = { reason: end.reason };\n if (end.status === 'failed') result.error = error ?? { code: end.reason, message: end.reason };\n return result;\n}\n",
31
31
  "export type JsonRecord = Record<string, unknown>;\n\nexport interface OpenAIProtocolConversionOptions {\n trimWhitespace?: boolean;\n}\n\nconst THINKING_TAG_PATTERN = /<thinking>([\\s\\S]*?)<\\/thinking>/gi;\nconst TOOL_CALL_CONTENT_TYPES = new Set([\n 'tool_use',\n 'tool_call',\n 'function_call',\n 'output_tool_call'\n]);\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction asString(value: unknown, trimWhitespace: boolean): string | undefined {\n if (typeof value !== 'string') {\n return undefined;\n }\n\n return trimWhitespace ? value.trim() : value;\n}\n\nfunction normalizePath(pathname: string): string {\n if (pathname.length > 1 && pathname.endsWith('/')) {\n return pathname.slice(0, -1);\n }\n\n return pathname;\n}\n\nfunction isEnabledLike(value: unknown): boolean {\n if (value === true) {\n return true;\n }\n\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n return normalized === 'enabled'\n || normalized === 'enable'\n || normalized === 'true'\n || normalized === 'on'\n || normalized === '1';\n }\n\n if (!isRecord(value)) {\n return false;\n }\n\n const type = typeof value.type === 'string' ? value.type.trim().toLowerCase() : '';\n if (type === 'disabled' || type === 'disable' || type === 'off') {\n return false;\n }\n\n if (value.enabled === false) {\n return false;\n }\n\n if (value.enabled === true) {\n return true;\n }\n\n if (type === 'enabled' || type === 'enable') {\n return true;\n }\n\n return Object.keys(value).length > 0;\n}\n\nfunction isToolCallContentBlock(item: JsonRecord): boolean {\n const itemType = typeof item.type === 'string' ? item.type.trim().toLowerCase() : '';\n if (TOOL_CALL_CONTENT_TYPES.has(itemType) || itemType.endsWith('_call')) {\n return true;\n }\n\n const hasCallIdentifier = typeof item.id === 'string'\n || typeof item.call_id === 'string'\n || typeof item.name === 'string';\n const hasCallPayload = item.input !== undefined\n || item.arguments !== undefined\n || item.function !== undefined;\n\n return hasCallIdentifier && hasCallPayload;\n}\n\nfunction hasToolCalls(value: unknown): boolean {\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n\n if (isRecord(value)) {\n return Object.keys(value).length > 0;\n }\n\n if (typeof value !== 'string') {\n return false;\n }\n\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n return false;\n }\n\n try {\n const parsed = JSON.parse(trimmed) as unknown;\n if (Array.isArray(parsed)) {\n return parsed.length > 0;\n }\n\n return isRecord(parsed);\n } catch {\n return true;\n }\n}\n\nfunction hasToolCallLikeContent(content: unknown): boolean {\n if (!Array.isArray(content)) {\n return false;\n }\n\n for (const item of content) {\n if (!isRecord(item)) {\n continue;\n }\n\n if (isToolCallContentBlock(item)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction isAssistantToolCallMessage(message: JsonRecord): boolean {\n if (message.role !== 'assistant') {\n return false;\n }\n\n return hasToolCalls(message.tool_calls) || hasToolCallLikeContent(message.content);\n}\n\nfunction extractThinkingTagContent(content: string, trimWhitespace: boolean): string {\n THINKING_TAG_PATTERN.lastIndex = 0;\n const extracted: string[] = [];\n let matched: RegExpExecArray | null = THINKING_TAG_PATTERN.exec(content);\n while (matched !== null) {\n const block = asString(matched[1], trimWhitespace);\n if (block) {\n extracted.push(block);\n }\n matched = THINKING_TAG_PATTERN.exec(content);\n }\n\n if (extracted.length === 0) {\n return '';\n }\n\n return extracted.join('\\n\\n');\n}\n\nfunction extractReasoningFromArrayContent(content: unknown[], trimWhitespace: boolean): string {\n const reasoningTexts: string[] = [];\n\n for (const item of content) {\n if (!isRecord(item)) {\n continue;\n }\n\n const type = typeof item.type === 'string' ? item.type : '';\n if (type !== 'reasoning' && type !== 'thinking' && type !== 'reasoning_content') {\n continue;\n }\n\n const candidates: unknown[] = [\n item.text,\n item.content,\n item.reasoning,\n item.thinking\n ];\n\n for (const candidate of candidates) {\n const text = asString(candidate, trimWhitespace);\n if (text && text.length > 0) {\n reasoningTexts.push(text);\n break;\n }\n }\n }\n\n if (reasoningTexts.length === 0) {\n return '';\n }\n\n return reasoningTexts.join('\\n\\n');\n}\n\nfunction extractReasoningContent(content: unknown, trimWhitespace: boolean): string {\n if (typeof content === 'string') {\n return extractThinkingTagContent(content, trimWhitespace);\n }\n\n if (Array.isArray(content)) {\n return extractReasoningFromArrayContent(content, trimWhitespace);\n }\n\n return '';\n}\n\nfunction normalizeAnthropicUsage(usage: unknown): { input_tokens: number; output_tokens: number } {\n if (!isRecord(usage)) {\n return {\n input_tokens: 0,\n output_tokens: 0\n };\n }\n\n return {\n input_tokens: typeof usage.input_tokens === 'number' ? usage.input_tokens : 0,\n output_tokens: typeof usage.output_tokens === 'number' ? usage.output_tokens : 0\n };\n}\n\nfunction normalizeAssistantToolCallMessage(message: JsonRecord, trimWhitespace: boolean): JsonRecord {\n if (typeof message.reasoning_content === 'string') {\n const normalized = trimWhitespace ? message.reasoning_content.trim() : message.reasoning_content;\n if (normalized === message.reasoning_content) {\n return message;\n }\n\n return {\n ...message,\n reasoning_content: normalized\n };\n }\n\n return {\n ...message,\n reasoning_content: extractReasoningContent(message.content, trimWhitespace)\n };\n}\n\nfunction convertChatUserContentToResponsesContent(content: unknown): JsonRecord[] {\n if (typeof content === 'string') {\n const text = content.trim();\n return text ? [{ type: 'input_text', text }] : [{ type: 'input_text', text: '' }];\n }\n\n if (!Array.isArray(content)) {\n return [{ type: 'input_text', text: '' }];\n }\n\n const converted: JsonRecord[] = [];\n\n for (const part of content) {\n if (typeof part === 'string') {\n const text = part.trim();\n if (text) {\n converted.push({ type: 'input_text', text });\n }\n continue;\n }\n\n if (!isRecord(part)) {\n continue;\n }\n\n if (part.type === 'text' && typeof part.text === 'string') {\n converted.push({ type: 'input_text', text: part.text });\n continue;\n }\n\n if (part.type === 'image_url' && isRecord(part.image_url) && typeof part.image_url.url === 'string') {\n converted.push({ type: 'input_image', image_url: part.image_url.url });\n }\n }\n\n return converted.length > 0 ? converted : [{ type: 'input_text', text: '' }];\n}\n\nexport class OpenAIProtocolConversion {\n private readonly trimWhitespace: boolean;\n\n constructor(options?: OpenAIProtocolConversionOptions) {\n this.trimWhitespace = options?.trimWhitespace !== false;\n }\n\n isResponsesPath(pathname: string): boolean {\n const normalizedPath = normalizePath(pathname);\n return normalizedPath === '/v1/responses' || normalizedPath === '/responses';\n }\n\n isReasoningContext(body: JsonRecord): boolean {\n if (body.reasoning !== undefined && body.reasoning !== null) {\n return true;\n }\n\n if (typeof body.reasoning_effort === 'string' && body.reasoning_effort.trim().length > 0) {\n return true;\n }\n\n if (isEnabledLike(body.enable_thinking)) {\n return true;\n }\n\n return isEnabledLike(body.thinking);\n }\n\n normalizeResponsesReasoningBody(body: JsonRecord): JsonRecord {\n let changed = false;\n let normalizedBody = body;\n\n for (const key of ['input', 'messages'] as const) {\n const normalizedCollection = this.normalizeMessageCollection(normalizedBody, key);\n if (normalizedCollection.changed) {\n normalizedBody = normalizedCollection.body;\n changed = true;\n }\n }\n\n if (!changed) {\n return body;\n }\n\n return normalizedBody;\n }\n\n /** Normalize an already parsed object without reading or mutating a transport body. */\n ensureAssistantToolUseReasoningContent(body: unknown): unknown {\n if (!isRecord(body) || body.type !== 'message' || body.role !== 'assistant' || !Array.isArray(body.content)) {\n return body;\n }\n if (!body.content.some((block) => isRecord(block) && block.type === 'tool_use')\n || typeof body.reasoning_content === 'string') {\n return body;\n }\n return {\n ...body,\n reasoning_content: this.extractThinkingTextFromAnthropicContent(body.content)\n };\n }\n\n ensureMessagesStreamCompatibility(\n events: unknown[],\n ctx: { streamState: Map<string, unknown> }\n ): unknown[] {\n const withUsage = this.ensureMessageDeltaUsage(events, ctx);\n return this.ensureMessageStartReasoningContent(withUsage);\n }\n\n convertChatMessagesToResponsesInput(messages: unknown): { input: JsonRecord[]; instructions?: string } {\n if (!Array.isArray(messages)) {\n return { input: [] };\n }\n\n const input: JsonRecord[] = [];\n const instructionParts: string[] = [];\n\n for (const msg of messages) {\n if (!isRecord(msg)) {\n continue;\n }\n\n if (msg.role === 'system') {\n const text = typeof msg.content === 'string' ? msg.content.trim() : '';\n if (text) instructionParts.push(text);\n continue;\n }\n\n if (msg.role === 'user') {\n input.push({\n role: 'user',\n content: convertChatUserContentToResponsesContent(msg.content)\n });\n continue;\n }\n\n if (msg.role === 'assistant') {\n const assistantText = typeof msg.content === 'string' ? msg.content.trim() : '';\n if (assistantText) {\n input.push({\n role: 'assistant',\n content: [{ type: 'output_text', text: assistantText }]\n });\n }\n\n if (Array.isArray(msg.tool_calls)) {\n for (const toolCall of msg.tool_calls) {\n if (!isRecord(toolCall)) {\n continue;\n }\n\n const callId = typeof toolCall.id === 'string' ? toolCall.id : '';\n const functionObject = isRecord(toolCall.function) ? toolCall.function : undefined;\n if (!functionObject) {\n continue;\n }\n const functionName = typeof functionObject?.name === 'string' ? functionObject.name : '';\n if (!callId || !functionName) {\n continue;\n }\n\n input.push({\n type: 'function_call',\n call_id: callId,\n name: functionName,\n arguments: functionObject.arguments || '{}'\n });\n }\n }\n\n continue;\n }\n\n if (msg.role === 'tool') {\n const callId = typeof msg.tool_call_id === 'string' ? msg.tool_call_id : '';\n if (!callId) {\n continue;\n }\n\n input.push({\n type: 'function_call_output',\n call_id: callId,\n output: msg.content ?? ''\n });\n }\n }\n\n const instructions = instructionParts.length > 0 ? instructionParts.join('\\n') : undefined;\n return { input, instructions };\n }\n\n mapChatToolsToResponsesTools(chatTools: unknown): JsonRecord[] {\n if (!Array.isArray(chatTools)) {\n return [];\n }\n\n const mapped: JsonRecord[] = [];\n for (const tool of chatTools) {\n if (!isRecord(tool) || tool.type !== 'function' || !isRecord(tool.function)) {\n continue;\n }\n\n const name = typeof tool.function.name === 'string' ? tool.function.name : '';\n if (!name) {\n continue;\n }\n\n const parameters = isRecord(tool.function.parameters)\n ? tool.function.parameters\n : { type: 'object', properties: {} };\n\n mapped.push({\n type: 'function',\n name,\n description: typeof tool.function.description === 'string' ? tool.function.description : '',\n parameters\n });\n }\n\n return mapped;\n }\n\n convertResponsesInputToMessages(input: unknown): JsonRecord[] {\n if (typeof input === 'string') {\n const text = input.trim();\n return text ? [{ role: 'user', content: text }] : [];\n }\n\n if (!Array.isArray(input)) {\n return [];\n }\n\n const messages: JsonRecord[] = [];\n const pendingTopLevelInputParts: unknown[] = [];\n\n const flushPendingTopLevelInputParts = (): void => {\n if (pendingTopLevelInputParts.length === 0) {\n return;\n }\n\n messages.push({\n role: 'user',\n content: this.normalizeResponsesMessageContent([...pendingTopLevelInputParts])\n });\n\n pendingTopLevelInputParts.length = 0;\n };\n\n for (const item of input) {\n if (typeof item === 'string') {\n if (item.trim()) {\n pendingTopLevelInputParts.push({ type: 'input_text', text: item });\n }\n continue;\n }\n\n if (!isRecord(item)) {\n continue;\n }\n\n const itemType = item.type;\n\n if (\n itemType === 'input_text'\n || itemType === 'output_text'\n || itemType === 'input_image'\n || itemType === 'text'\n || itemType === 'image_url'\n ) {\n pendingTopLevelInputParts.push(item);\n continue;\n }\n\n if (itemType === 'function_call') {\n flushPendingTopLevelInputParts();\n\n const rawArgs = item.arguments;\n const argumentsString = typeof rawArgs === 'string'\n ? rawArgs\n : JSON.stringify(rawArgs || {});\n\n messages.push({\n role: 'assistant',\n content: null,\n tool_calls: [{\n id: item.call_id || item.id || '',\n type: 'function',\n function: {\n name: item.name || '',\n arguments: argumentsString\n }\n }]\n });\n continue;\n }\n\n if (itemType === 'function_call_output') {\n flushPendingTopLevelInputParts();\n\n messages.push({\n role: 'tool',\n tool_call_id: item.call_id || '',\n content: item.output ?? '',\n is_error: item.is_error === true || item.status === 'error' || item.status === 'failed'\n });\n continue;\n }\n\n if (itemType === 'message') {\n flushPendingTopLevelInputParts();\n\n const role = item.role || 'user';\n if (typeof role === 'string') {\n messages.push({\n role,\n content: this.normalizeResponsesMessageContent(item.content)\n });\n }\n continue;\n }\n\n if (typeof item.role === 'string') {\n flushPendingTopLevelInputParts();\n\n messages.push({\n role: item.role,\n content: this.normalizeResponsesMessageContent(item.content)\n });\n }\n }\n\n flushPendingTopLevelInputParts();\n\n return messages;\n }\n\n normalizeResponsesMessageContent(content: unknown): unknown {\n if (typeof content === 'string') {\n return content;\n }\n\n if (!Array.isArray(content)) {\n return content;\n }\n\n const converted = content\n .map((part) => {\n if (typeof part === 'string') {\n return { type: 'text', text: part };\n }\n\n if (!isRecord(part)) {\n return null;\n }\n\n if (part.type === 'input_text' || part.type === 'output_text') {\n return { type: 'text', text: part.text || '' };\n }\n\n if (part.type === 'input_image') {\n const imageUrl = typeof part.image_url === 'string'\n ? part.image_url\n : isRecord(part.image_url)\n ? part.image_url.url\n : undefined;\n\n if (typeof imageUrl === 'string' && imageUrl) {\n return {\n type: 'image_url',\n image_url: { url: imageUrl }\n };\n }\n }\n\n return part;\n })\n .filter((part) => part !== null);\n\n return converted;\n }\n\n private normalizeMessageCollection(\n body: JsonRecord,\n key: 'input' | 'messages'\n ): { body: JsonRecord; changed: boolean } {\n const collection = body[key];\n if (!Array.isArray(collection)) {\n return { body, changed: false };\n }\n\n let changed = false;\n const normalizedCollection = collection.map((item) => {\n const normalizedItem = this.normalizeAssistantToolCallCandidate(item);\n if (normalizedItem.changed) {\n changed = true;\n }\n\n return normalizedItem.normalized;\n });\n\n if (!changed) {\n return { body, changed: false };\n }\n\n return {\n body: {\n ...body,\n [key]: normalizedCollection\n },\n changed: true\n };\n }\n\n private normalizeAssistantToolCallCandidate(\n value: unknown\n ): { normalized: unknown; changed: boolean } {\n if (!isRecord(value)) {\n return { normalized: value, changed: false };\n }\n\n let changed = false;\n let current: JsonRecord = value;\n\n if (isRecord(current.message)) {\n const nested = this.normalizeAssistantToolCallCandidate(current.message);\n if (nested.changed) {\n current = {\n ...current,\n message: nested.normalized\n };\n changed = true;\n }\n }\n\n if (!isAssistantToolCallMessage(current)) {\n return { normalized: current, changed };\n }\n\n const normalizedMessage = normalizeAssistantToolCallMessage(current, this.trimWhitespace);\n if (normalizedMessage !== current) {\n current = normalizedMessage;\n changed = true;\n }\n\n return { normalized: current, changed };\n }\n\n private extractThinkingTextFromAnthropicContent(content: unknown[]): string {\n const segments: string[] = [];\n\n for (const block of content) {\n if (!isRecord(block) || block.type !== 'thinking') {\n continue;\n }\n\n if (typeof block.thinking === 'string' && block.thinking.trim().length > 0) {\n segments.push(block.thinking.trim());\n }\n }\n\n return segments.join('\\n\\n');\n }\n\n private ensureMessageStartReasoningContent(events: unknown[]): unknown[] {\n return events.map((event) => {\n if (!isRecord(event) || event.type !== 'message_start' || !isRecord(event.message)) {\n return event;\n }\n\n const existingReasoningContent = event.message.reasoning_content;\n if (typeof existingReasoningContent === 'string') {\n return event;\n }\n\n return {\n ...event,\n message: {\n ...event.message,\n reasoning_content: ''\n }\n };\n });\n }\n\n private ensureMessageDeltaUsage(\n events: unknown[],\n ctx: { streamState: Map<string, unknown> }\n ): unknown[] {\n const lastUsageKey = 'messages_compat_last_usage';\n const cachedUsage = normalizeAnthropicUsage(ctx.streamState.get(lastUsageKey));\n\n return events.map((event) => {\n if (!isRecord(event) || event.type !== 'message_delta') {\n return event;\n }\n\n const normalizedUsage = normalizeAnthropicUsage(event.usage ?? cachedUsage);\n ctx.streamState.set(lastUsageKey, normalizedUsage);\n\n return {\n ...event,\n usage: normalizedUsage\n };\n });\n }\n}\n",
32
- "import { validateAgentMessage, validateEncryptedFunctionArgs } from './agent-messages';\nimport { OpenAIProtocolConversion } from '../providers/openai/protocol-conversion';\nimport { isCollaborationFunction, argumentObject, atParam, bounded, fail, limits, list, record, serialized, string,\n type JsonRecord, type ResponsesCodecCapabilities, type ResponsesConversionDiagnostic, type ResponsesProtocol, type ResponsesToolName, type ResponsesToolNames } from './common';\nimport { applyResponsesPreferences } from './request-preferences';\nimport { validateWebSearch } from './web-search';\n\nconst contentNormalizer = new OpenAIProtocolConversion({ trimWhitespace: false });\n\nexport interface DecodedResponsesRequest {\n body: JsonRecord;\n toolNames: ResponsesToolNames;\n canonicalInput: JsonRecord[];\n diagnostics: ResponsesConversionDiagnostic[];\n}\n\n// Compare JSON definitions independently of object key order; arrays retain their order.\nfunction definitionKey(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(definitionKey).join(',')}]`;\n if (value && typeof value === 'object') return `{${Object.keys(value).sort().map(key => `${JSON.stringify(key)}:${definitionKey((value as JsonRecord)[key])}`).join(',')}}`;\n return JSON.stringify(value);\n}\n\n/** Converts only self-contained history. Reference resolution belongs to the caller. */\nexport function decodeResponsesRequest(raw: unknown, protocol: ResponsesProtocol, capabilities: ResponsesCodecCapabilities = {}): DecodedResponsesRequest {\n const body = record(raw, 'Responses request');\n if (capabilities.agentMessageDelivery !== undefined && capabilities.agentMessageDelivery !== 'plaintext') fail('invalid_payload', 'Unknown agent message delivery policy', 'agentMessageDelivery');\n const budget = limits(capabilities.limits);\n serialized(body, budget.maxRequestBytes, 'request');\n const supported = new Set(['model', 'input', 'instructions', 'tools', 'tool_choice', 'reasoning', 'text',\n 'stream', 'temperature', 'top_p', 'parallel_tool_calls', 'metadata', 'max_output_tokens',\n 'previous_response_id', 'conversation', 'response_id', 'background', 'n', 'truncation', 'include', 'store', 'prompt_cache_key', 'client_metadata', 'stream_options', 'access_programs']);\n for (const key of Object.keys(body)) if (!supported.has(key)) fail('unsupported_request', 'Unrecognized Responses request field', key);\n if (body.store === true) fail('unsupported_request', 'Stored Responses require caller-owned persistence');\n for (const key of ['previous_response_id', 'conversation', 'response_id']) {\n if (body[key] != null) fail('unresolved_reference', `${key} must be resolved before protocol conversion`);\n }\n if (body.background === true) fail('unsupported_request', 'Background Responses cannot be represented by this codec');\n if (body.n !== undefined && body.n !== 1) fail('unsupported_request', 'Only one response candidate is supported');\n if (body.truncation !== undefined && body.truncation !== 'disabled') fail('unsupported_request', 'Automatic input truncation cannot be represented');\n // This asks for encrypted output if available; it does not supply opaque input history.\n // Converted providers return no encrypted output. Actual encrypted input remains rejected below.\n if (body.include !== undefined && list(body.include, 'include').some(field => field !== 'reasoning.encrypted_content')) fail('unsupported_request', 'Requested extra Responses output fields cannot be represented');\n if (body.prompt_cache_key !== undefined) string(body.prompt_cache_key, 'prompt_cache_key');\n if (body.client_metadata !== undefined) record(body.client_metadata, 'client_metadata');\n const model = string(body.model, 'model', true);\n const diagnostics: ResponsesConversionDiagnostic[] = [];\n const input = atParam('input', () => typeof body.input === 'string' ? [{ role: 'user', content: body.input }] : list(body.input, 'input'));\n if (input.length > budget.maxItems) fail('resource_limit', 'Too many input items', 'input');\n const canonicalInput: JsonRecord[] = [];\n const toolNames = new Map<string, ResponsesToolName>();\n const byOriginal = new Map<string, string>();\n const definitions = new Map<string, string>();\n let examinedTools = 0;\n const tools: JsonRecord[] = [];\n const identity = (name: string, namespace?: string) => JSON.stringify([namespace ?? null, name]);\n const register = (name: string, namespace: string | undefined, custom: boolean): string => {\n const key = identity(name, namespace);\n if (byOriginal.has(key)) fail('tool_name_collision', 'Duplicate tool identity');\n if (toolNames.size >= budget.maxItems) fail('resource_limit', 'Too many tools');\n // Always use short opaque names: arbitrary Unicode/namespace names and collisions are reversible.\n const wire = `bungee_tool_${toolNames.size}`;\n toolNames.set(wire, { name, namespace, custom }); byOriginal.set(key, wire);\n return wire;\n };\n const expandTool = (rawTool: unknown, namespace?: string, path = 'tools', namespaceDescription?: string): void => {\n if (++examinedTools > budget.maxItems) fail('resource_limit', 'Too many tool declarations');\n const tool = record(rawTool, 'tool');\n if (namespace === undefined && (tool.type === 'web_search' || tool.type === 'web_search_preview')) {\n serialized(tool, budget.maxArgumentBytes, 'tool definition');\n validateWebSearch(tool, path);\n if (capabilities.omitOptionalWebSearch && (body.tool_choice === undefined || body.tool_choice === 'auto' || body.tool_choice === 'none')) {\n diagnostics.push({ param: path, action: 'omitted', reason: 'optional_hosted_web_search_unavailable' });\n return;\n }\n fail('unsupported_tool', 'Hosted web search cannot be executed by the target protocol', `${path}.type`);\n }\n const allowed = tool.type === 'namespace' ? ['type','name','description','tools']\n : tool.type === 'custom' ? ['type','name','description','format'] : ['type','name','description','parameters','strict'];\n for (const key of Object.keys(tool)) if (!allowed.includes(key)) fail('unsupported_tool', 'Unsupported tool definition field', `${path}.${key}`);\n if (tool.type === 'namespace') {\n if (namespace !== undefined) fail('unsupported_tool', 'Nested tool namespaces are not supported');\n const name = string(tool.name, 'namespace name', true);\n const description = tool.description === undefined ? undefined : string(tool.description, 'namespace description');\n for (const [index, child] of list(tool.tools, 'namespace tools').entries()) {\n const childPath = `${path}.tools[${index}]`;\n atParam(childPath, () => expandTool(child, name, childPath, description));\n }\n return;\n }\n if (tool.type !== 'function' && tool.type !== 'custom') fail('unsupported_tool', 'This tool type cannot be executed by Codex through the target protocol');\n serialized(tool, budget.maxArgumentBytes, 'tool definition');\n const name = string(tool.name, 'tool name', true);\n const custom = tool.type === 'custom';\n if (tool.strict !== undefined && typeof tool.strict !== 'boolean') fail('invalid_payload', 'Tool strict must be boolean');\n if (protocol === 'anthropic_messages' && tool.strict === true && !capabilities.anthropicStrictTools) fail('unsupported_tool', 'Anthropic strict tool enforcement requires an explicit provider capability');\n if (custom && tool.format !== undefined) {\n const format = record(tool.format, 'custom format');\n if (format.type !== 'text' && format.type !== 'grammar') fail('unsupported_tool', 'Unknown custom tool format');\n }\n const key = identity(name, namespace);\n const signature = definitionKey({ ...tool, ...(namespaceDescription !== undefined ? { namespaceDescription } : {}) });\n if (definitions.has(key)) {\n if (definitions.get(key) !== signature) fail('tool_name_collision', 'Conflicting definitions for the same tool identity');\n return;\n }\n const wire = register(name, namespace, custom);\n definitions.set(key, signature);\n let parameters = custom\n ? { type: 'object', properties: { input: { type: 'string' } }, required: ['input'], additionalProperties: false }\n : record(tool.parameters ?? { type: 'object', properties: {} }, 'tool parameters');\n if (capabilities.agentMessageDelivery === 'plaintext' && isCollaborationFunction(name, namespace, custom)) {\n const properties = parameters.properties;\n if (properties && typeof properties === 'object' && !Array.isArray(properties)) {\n const message = (properties as JsonRecord).message;\n if (message && typeof message === 'object' && !Array.isArray(message) && (message as JsonRecord).encrypted === true) {\n const { encrypted: _encrypted, ...plaintext } = message as JsonRecord;\n parameters = { ...parameters, properties: { ...properties, message: plaintext } };\n diagnostics.push({ param: `${path}.parameters.properties.message.encrypted`, action: 'omitted', reason: 'collaboration_message_plaintext_delivery' });\n }\n }\n }\n const declaredDescription = tool.description === undefined ? undefined : string(tool.description, 'tool description');\n const identityHint = capabilities.preserveToolIdentityDescription ? `Original tool identity: ${JSON.stringify({ name, ...(namespace ? { namespace } : {}) })}` : undefined;\n const description = [identityHint, namespaceDescription, declaredDescription].filter(value => value !== undefined).join('\\n') || undefined;\n const customHint = custom ? `Pass the complete original custom tool input verbatim in the input string.${tool.format ? ` Original input format: ${JSON.stringify(tool.format)}` : ''}` : undefined;\n if (protocol === 'chat_completions') {\n tools.push({ type: 'function', function: { name: wire, parameters, ...(description || customHint ? { description: [description, customHint].filter(Boolean).join('\\n') } : {}), ...(tool.strict !== undefined ? { strict: tool.strict } : {}) } });\n } else {\n tools.push({ name: wire, input_schema: parameters, ...(description || customHint ? { description: [description, customHint].filter(Boolean).join('\\n') } : {}), ...(tool.strict !== undefined && capabilities.anthropicStrictTools ? {strict:tool.strict} : {}) });\n }\n };\n if (body.tools !== undefined) atParam('tools', () => {\n for (const [index, tool] of list(body.tools, 'tools').entries()) atParam(`tools[${index}]`, () => expandTool(tool, undefined, `tools[${index}]`));\n });\n // Behavior reference: cc-switch b4a0794 collect_input_declared_tools. Tool carriers\n // are declarations, not messages. Use this codec's existing reversible name authority.\n for (const [index, rawItem] of input.entries()) atParam(`input[${index}]`, () => {\n const item = record(rawItem, 'input item');\n if (item.type !== 'additional_tools') {\n if(item.internal_chat_message_metadata_passthrough!==undefined) {\n record(item.internal_chat_message_metadata_passthrough,'message metadata');\n const {internal_chat_message_metadata_passthrough: _metadata,...message}=item;\n canonicalInput.push(message);\n diagnostics.push({param:`input[${index}].internal_chat_message_metadata_passthrough`,action:'omitted',reason:'source_message_metadata'});\n } else canonicalInput.push(item);\n return;\n }\n if (item.content !== undefined) fail('invalid_payload', 'A tool declaration carrier cannot also contain message content', `input[${index}].content`);\n for (const [toolIndex, tool] of list(item.tools, 'additional tools').entries()) {\n const toolPath = `input[${index}].tools[${toolIndex}]`;\n atParam(toolPath, () => expandTool(tool, undefined, toolPath));\n }\n });\n const resolve = (item: JsonRecord, custom: boolean): string => {\n const name = string(item.name, 'call name', true);\n const namespace = item.namespace === undefined ? undefined : string(item.namespace, 'call namespace', true);\n let wire = byOriginal.get(identity(name, namespace));\n // Historical calls need not appear in today's tool declarations. Preserve them in the same authority.\n if (wire === undefined) wire = register(name, namespace, custom);\n if (toolNames.get(wire)!.custom !== custom) fail('tool_name_collision', 'Historical tool kind conflicts with its current declaration');\n return wire;\n };\n const normalizeContent = (rawContent: unknown, role: string): unknown => {\n if (typeof rawContent === 'string') return rawContent;\n const parts = list(rawContent, 'message content');\n for (const rawPart of parts) {\n const part = record(rawPart, 'content part');\n if (part.type === 'input_text' || part.type === 'output_text' || part.type === 'text') string(part.text, 'content text');\n else if (part.type === 'refusal' && role === 'assistant') {\n string(part.refusal,'refusal');\n if (capabilities.preserveRefusalContent && protocol !== 'chat_completions') fail('unsupported_content','Target protocol cannot preserve refusal history authority');\n }\n else if (part.type === 'input_image' && role === 'user') {\n if (protocol !== 'chat_completions') fail('unsupported_content', 'Anthropic image conversion requires provider-specific URL/data support');\n string(part.image_url, 'image_url', true);\n if (part.detail !== undefined && !['auto', 'low', 'high'].includes(String(part.detail))) fail('unsupported_content', 'Unknown image detail');\n } else fail('unsupported_content', 'Unsupported message content type');\n if (part.annotations !== undefined && list(part.annotations, 'annotations').length) fail('unsupported_content', 'Output annotations cannot be represented in input history');\n }\n // Reuse the existing text/image normalizer only after validating every part.\n const normalized = contentNormalizer.normalizeResponsesMessageContent(parts.map(raw=>{const part=raw as JsonRecord;return part.type==='refusal'?{type:'output_text',text:part.refusal}:part;})) as JsonRecord[];\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i] as JsonRecord;\n if (part.type === 'input_image' && part.detail !== undefined) (normalized[i].image_url as JsonRecord).detail = part.detail;\n if (part.type === 'refusal' && capabilities.preserveRefusalContent) normalized[i] = {type:'refusal',refusal:part.refusal};\n }\n return normalized;\n };\n const chat: JsonRecord[] = [];\n const messageParams = new WeakMap<JsonRecord, string>();\n let messageParam = 'instructions';\n const callIds = new Set<string>();\n const answered = new Set<string>();\n let pendingReasoning = '';\n const addMessage = (message: JsonRecord): void => {\n if (chat.length >= budget.maxItems) fail('resource_limit', 'Too many input messages');\n chat.push(message);\n messageParams.set(message, messageParam);\n };\n if (body.instructions !== undefined) addMessage({ role: 'system', content: string(body.instructions, 'instructions') });\n for (const [inputIndex, rawItem] of input.entries()) atParam(`input[${inputIndex}]`, () => {\n messageParam = `input[${inputIndex}]`;\n const item = record(rawItem, 'input item');\n if (item.type === 'additional_tools') return;\n if (item.type === 'agent_message') {\n validateAgentMessage(item, messageParam, capabilities.limits);\n if (capabilities.agentMessageDelivery !== 'plaintext') fail('unsupported_content', 'Agent messages require explicit plaintext delivery', messageParam);\n if (pendingReasoning) fail('unsupported_reasoning', 'Reasoning must precede an assistant item', messageParam);\n addMessage({ role: 'user', content: [{ type: 'text', text: `[Agent message metadata: ${JSON.stringify({ author: item.author, recipient: item.recipient })}]\\n` }, ...(item.content as JsonRecord[]).map(part => ({ type: 'text', text: part.text }))] });\n diagnostics.push({ param: messageParam, action: 'mapped', reason: 'agent_message_plaintext_delivery' });\n return;\n }\n if (item.encrypted_content != null) fail('unsupported_content', 'Encrypted content cannot cross protocols', `${messageParam}.encrypted_content`);\n if (item.type === 'compaction') fail('unsupported_content', 'Encrypted reasoning and compaction cannot be restored');\n if (item.type === 'item_reference') fail('unresolved_reference', 'Input item references must be resolved before conversion');\n if (item.type === 'reasoning') {\n if (protocol !== 'chat_completions' || !(capabilities.reasoningHistory || capabilities.reasoningEffort)) fail('unsupported_reasoning', 'Reasoning history requires an explicit compatible reasoning capability');\n if (item.content != null) fail('unsupported_reasoning', 'Reasoning content requires an explicit history mapping', `${messageParam}.content`);\n const summary = list(item.summary, 'reasoning summary');\n pendingReasoning += summary.map(part => { const p = record(part, 'reasoning summary'); if (p.type !== 'summary_text') fail('unsupported_reasoning', 'Unknown reasoning summary'); return string(p.text, 'summary text'); }).join('');\n return;\n }\n if (item.type === 'function_call' || item.type === 'custom_tool_call') {\n const custom = item.type === 'custom_tool_call';\n validateEncryptedFunctionArgs(item, capabilities.agentMessageDelivery, messageParam);\n const id = string(item.call_id, 'call_id', true);\n if (callIds.has(id)) fail('invalid_tool_history', 'Duplicate tool call identifier');\n callIds.add(id);\n const args = custom ? JSON.stringify({ input: string(item.input, 'custom input') }) : string(item.arguments, 'arguments');\n bounded(args, budget.maxArgumentBytes, 'arguments'); argumentObject(args);\n const call = { id, type: 'function', function: { name: resolve(item, custom), arguments: args } };\n const previous = chat.at(-1);\n if (previous?.role === 'assistant') {\n previous.tool_calls = [...(previous.tool_calls as JsonRecord[] ?? []), call];\n if (pendingReasoning) previous.reasoning_content = pendingReasoning;\n } else addMessage({ role: 'assistant', content: null, tool_calls: [call], ...(pendingReasoning ? { reasoning_content: pendingReasoning } : {}) });\n pendingReasoning = '';\n return;\n }\n if (item.type === 'function_call_output' || item.type === 'custom_tool_call_output') {\n const id = string(item.call_id, 'call_id', true);\n if (!callIds.has(id) || answered.has(id)) fail('invalid_tool_history', 'Unmatched or duplicate tool result');\n answered.add(id);\n const output = typeof item.output === 'string' ? item.output : normalizeContent(item.output, 'tool');\n addMessage({ role: 'tool', tool_call_id: id, content: output, ...(item.is_error === true ? { is_error: true } : {}) });\n return;\n }\n if (item.type !== undefined && item.type !== 'message') fail('unsupported_content', 'Unsupported input item type');\n const role = string(item.role, 'message role', true);\n if (!['user', 'assistant', 'system', 'developer'].includes(role)) fail('unsupported_content', 'Unknown message role');\n const message: JsonRecord = { role, content: normalizeContent(item.content, role) };\n if (pendingReasoning) { if (role !== 'assistant') fail('unsupported_reasoning', 'Reasoning must precede an assistant item'); message.reasoning_content = pendingReasoning; pendingReasoning = ''; }\n addMessage(message);\n });\n if (pendingReasoning) fail('unsupported_reasoning', 'Orphan reasoning history cannot be represented');\n const result: JsonRecord = { model, messages: chat };\n const omittedAllTools = !tools.length && diagnostics.some(item => item.reason === 'optional_hosted_web_search_unavailable');\n for (const key of ['stream', 'temperature', 'top_p', 'parallel_tool_calls', 'metadata'])\n if (body[key] !== undefined && !(omittedAllTools && key === 'parallel_tool_calls')) result[key] = body[key];\n if (protocol === 'chat_completions' && body.stream === true) result.stream_options = { include_usage: true };\n const maxTokens = body.max_output_tokens ?? capabilities.maxOutputTokens;\n if (maxTokens !== undefined) {\n if (!Number.isSafeInteger(maxTokens) || (maxTokens as number) <= 0) fail('invalid_payload', 'max_output_tokens must be a positive integer');\n result[protocol === 'chat_completions' ? 'max_completion_tokens' : 'max_tokens'] = maxTokens;\n }\n if (tools.length) result.tools = tools;\n if (body.tool_choice !== undefined && !omittedAllTools) {\n const choice = body.tool_choice;\n if (typeof choice === 'string') {\n if (!['auto', 'none', 'required'].includes(choice)) fail('unsupported_tool_choice', `Unsupported tool choice ${choice}`);\n result.tool_choice = protocol === 'chat_completions' ? choice : { type: choice === 'required' ? 'any' : choice };\n } else {\n const c = record(choice, 'tool_choice');\n if (c.type !== 'function' && c.type !== 'custom') fail('unsupported_tool_choice', 'Forced hosted tools are unsupported');\n const wire = byOriginal.get(identity(string(c.name, 'tool choice name', true), c.namespace === undefined ? undefined : string(c.namespace, 'tool choice namespace')));\n if (!wire || !tools.some(t => t.name === wire || (t.function as JsonRecord | undefined)?.name === wire)) fail('unsupported_tool_choice', 'Forced tool is not declared');\n result.tool_choice = protocol === 'chat_completions' ? { type: 'function', function: { name: wire } } : { type: 'tool', name: wire };\n }\n }\n applyResponsesPreferences(body, result, protocol, capabilities, maxTokens, diagnostics);\n if (body.text !== undefined) atParam('text.format', () => {\n const text = record(body.text, 'text');\n if (text.format !== undefined) {\n const format = record(text.format, 'text format');\n const allowed = format.type === 'json_schema' ? ['type','name','schema','strict','description'] : ['type'];\n for (const key of Object.keys(format)) if (!allowed.includes(key)) fail('unsupported_request', 'Unsupported output format field', `text.format.${key}`);\n if (format.type === 'json_schema') {\n atParam('text.format.name', () => string(format.name, 'output schema name', true));\n atParam('text.format.schema', () => record(format.schema, 'output schema'));\n if (format.strict !== undefined && typeof format.strict !== 'boolean') fail('invalid_payload', 'Output schema strict must be boolean', 'text.format.strict');\n if (format.description !== undefined) atParam('text.format.description', () => string(format.description, 'output schema description'));\n }\n if (protocol !== 'chat_completions' && format.type !== 'text') fail('unsupported_request', 'Anthropic structured output requires a separate provider capability');\n if (format.type === 'json_schema') result.response_format = { type: 'json_schema', json_schema: { name: format.name, schema: format.schema, ...(format.strict !== undefined ? { strict: format.strict } : {}), ...(format.description !== undefined ? { description: format.description } : {}) } };\n else if (format.type === 'json_object' || format.type === 'text') { if (protocol === 'chat_completions') result.response_format = format; }\n else fail('unsupported_request', 'Unknown text format');\n }\n });\n if (protocol === 'anthropic_messages') {\n const system: string[] = [];\n const messages: JsonRecord[] = [];\n const append = (role: string, content: JsonRecord[]): void => {\n const previous = messages.at(-1);\n if (previous?.role === role) (previous.content as JsonRecord[]).push(...content);\n else messages.push({ role, content });\n };\n for (const msg of chat) {\n if (msg.role === 'system' || msg.role === 'developer') {\n if (messages.length) fail('unsupported_content', 'Mid-conversation system instructions cannot be relocated safely', `${messageParams.get(msg)}.role`);\n system.push(typeof msg.content === 'string' ? msg.content : (msg.content as JsonRecord[]).map(p => string(p.text, 'system text')).join(''));\n continue;\n }\n if (msg.role === 'tool') {\n append('user', [{ type: 'tool_result', tool_use_id: msg.tool_call_id, content: msg.content, ...(msg.is_error ? { is_error: true } : {}) }]);\n } else {\n const content: JsonRecord[] = msg.content == null ? [] : typeof msg.content === 'string' ? [{ type: 'text', text: msg.content }] : msg.content as JsonRecord[];\n for (const call of msg.tool_calls as JsonRecord[] ?? []) {\n const fn = call.function as JsonRecord;\n content.push({ type: 'tool_use', id: call.id, name: fn.name, input: argumentObject(fn.arguments as string) });\n }\n append(msg.role as string, content);\n }\n }\n result.messages = messages;\n if (system.length) result.system = system.join('\\n');\n if (maxTokens === undefined) fail('missing_capability', 'Anthropic requires max_output_tokens or capabilities.maxOutputTokens');\n if (body.parallel_tool_calls !== undefined && !omittedAllTools) {\n result.tool_choice = { ...record(result.tool_choice ?? { type: 'auto' }, 'tool_choice'), disable_parallel_tool_use: body.parallel_tool_calls === false };\n delete result.parallel_tool_calls;\n }\n }\n return { body: result, toolNames, canonicalInput, diagnostics };\n}\n",
32
+ "import { validateAgentMessage, validateEncryptedFunctionArgs } from './agent-messages';\nimport { OpenAIProtocolConversion } from '../providers/openai/protocol-conversion';\nimport { isCollaborationFunction, argumentObject, atParam, bounded, fail, limits, list, record, serialized, string,\n type JsonRecord, type ResponsesCodecCapabilities, type ResponsesConversionDiagnostic, type ResponsesProtocol, type ResponsesToolName, type ResponsesToolNames } from './common';\nimport { applyResponsesPreferences } from './request-preferences';\nimport { validateWebSearch } from './web-search';\n\nconst contentNormalizer = new OpenAIProtocolConversion({ trimWhitespace: false });\n\nexport interface DecodedResponsesRequest {\n body: JsonRecord;\n toolNames: ResponsesToolNames;\n canonicalInput: JsonRecord[];\n diagnostics: ResponsesConversionDiagnostic[];\n}\n\n// Compare JSON definitions independently of object key order; arrays retain their order.\nfunction definitionKey(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(definitionKey).join(',')}]`;\n if (value && typeof value === 'object') return `{${Object.keys(value).sort().map(key => `${JSON.stringify(key)}:${definitionKey((value as JsonRecord)[key])}`).join(',')}}`;\n return JSON.stringify(value);\n}\n\n/** Converts only self-contained history. Reference resolution belongs to the caller. */\nexport function decodeResponsesRequest(raw: unknown, protocol: ResponsesProtocol, capabilities: ResponsesCodecCapabilities = {}, options: { preserveContentOrder?: boolean } = {}): DecodedResponsesRequest {\n const body = record(raw, 'Responses request');\n if (capabilities.agentMessageDelivery !== undefined && capabilities.agentMessageDelivery !== 'plaintext') fail('invalid_payload', 'Unknown agent message delivery policy', 'agentMessageDelivery');\n const budget = limits(capabilities.limits);\n serialized(body, budget.maxRequestBytes, 'request');\n const supported = new Set(['model', 'input', 'instructions', 'tools', 'tool_choice', 'reasoning', 'text',\n 'stream', 'temperature', 'top_p', 'parallel_tool_calls', 'metadata', 'max_output_tokens',\n 'previous_response_id', 'conversation', 'response_id', 'background', 'n', 'truncation', 'include', 'store', 'prompt_cache_key', 'client_metadata', 'stream_options', 'access_programs']);\n for (const key of Object.keys(body)) if (!supported.has(key)) fail('unsupported_request', 'Unrecognized Responses request field', key);\n if (body.store === true) fail('unsupported_request', 'Stored Responses require caller-owned persistence');\n for (const key of ['previous_response_id', 'conversation', 'response_id']) {\n if (body[key] != null) fail('unresolved_reference', `${key} must be resolved before protocol conversion`);\n }\n if (body.background === true) fail('unsupported_request', 'Background Responses cannot be represented by this codec');\n if (body.n !== undefined && body.n !== 1) fail('unsupported_request', 'Only one response candidate is supported');\n if (body.truncation !== undefined && body.truncation !== 'disabled') fail('unsupported_request', 'Automatic input truncation cannot be represented');\n // This asks for encrypted output if available; it does not supply opaque input history.\n // Converted providers return no encrypted output. Actual encrypted input remains rejected below.\n if (body.include !== undefined && list(body.include, 'include').some(field => field !== 'reasoning.encrypted_content')) fail('unsupported_request', 'Requested extra Responses output fields cannot be represented');\n if (body.prompt_cache_key !== undefined) string(body.prompt_cache_key, 'prompt_cache_key');\n if (body.client_metadata !== undefined) record(body.client_metadata, 'client_metadata');\n const model = string(body.model, 'model', true);\n const diagnostics: ResponsesConversionDiagnostic[] = [];\n const input = atParam('input', () => typeof body.input === 'string' ? [{ role: 'user', content: body.input }] : list(body.input, 'input'));\n if (input.length > budget.maxItems) fail('resource_limit', 'Too many input items', 'input');\n const canonicalInput: JsonRecord[] = [];\n const toolNames = new Map<string, ResponsesToolName>();\n const byOriginal = new Map<string, string>();\n const definitions = new Map<string, string>();\n let examinedTools = 0;\n const tools: JsonRecord[] = [];\n const identity = (name: string, namespace?: string) => JSON.stringify([namespace ?? null, name]);\n const register = (name: string, namespace: string | undefined, custom: boolean): string => {\n const key = identity(name, namespace);\n if (byOriginal.has(key)) fail('tool_name_collision', 'Duplicate tool identity');\n if (toolNames.size >= budget.maxItems) fail('resource_limit', 'Too many tools');\n // Always use short opaque names: arbitrary Unicode/namespace names and collisions are reversible.\n const wire = `bungee_tool_${toolNames.size}`;\n toolNames.set(wire, { name, namespace, custom }); byOriginal.set(key, wire);\n return wire;\n };\n const expandTool = (rawTool: unknown, namespace?: string, path = 'tools', namespaceDescription?: string): void => {\n if (++examinedTools > budget.maxItems) fail('resource_limit', 'Too many tool declarations');\n const tool = record(rawTool, 'tool');\n if (namespace === undefined && (tool.type === 'web_search' || tool.type === 'web_search_preview')) {\n serialized(tool, budget.maxArgumentBytes, 'tool definition');\n validateWebSearch(tool, path);\n if (capabilities.omitOptionalWebSearch && (body.tool_choice === undefined || body.tool_choice === 'auto' || body.tool_choice === 'none')) {\n diagnostics.push({ param: path, action: 'omitted', reason: 'optional_hosted_web_search_unavailable' });\n return;\n }\n fail('unsupported_tool', 'Hosted web search cannot be executed by the target protocol', `${path}.type`);\n }\n const allowed = tool.type === 'namespace' ? ['type','name','description','tools']\n : tool.type === 'custom' ? ['type','name','description','format'] : ['type','name','description','parameters','strict'];\n for (const key of Object.keys(tool)) if (!allowed.includes(key)) fail('unsupported_tool', 'Unsupported tool definition field', `${path}.${key}`);\n if (tool.type === 'namespace') {\n if (namespace !== undefined) fail('unsupported_tool', 'Nested tool namespaces are not supported');\n const name = string(tool.name, 'namespace name', true);\n const description = tool.description === undefined ? undefined : string(tool.description, 'namespace description');\n for (const [index, child] of list(tool.tools, 'namespace tools').entries()) {\n const childPath = `${path}.tools[${index}]`;\n atParam(childPath, () => expandTool(child, name, childPath, description));\n }\n return;\n }\n if (tool.type !== 'function' && tool.type !== 'custom') fail('unsupported_tool', 'This tool type cannot be executed by Codex through the target protocol');\n serialized(tool, budget.maxArgumentBytes, 'tool definition');\n const name = string(tool.name, 'tool name', true);\n const custom = tool.type === 'custom';\n if (tool.strict !== undefined && typeof tool.strict !== 'boolean') fail('invalid_payload', 'Tool strict must be boolean');\n if (protocol === 'anthropic_messages' && tool.strict === true && !capabilities.anthropicStrictTools) fail('unsupported_tool', 'Anthropic strict tool enforcement requires an explicit provider capability');\n if (custom && tool.format !== undefined) {\n const format = record(tool.format, 'custom format');\n if (format.type !== 'text' && format.type !== 'grammar') fail('unsupported_tool', 'Unknown custom tool format');\n }\n const key = identity(name, namespace);\n const signature = definitionKey({ ...tool, ...(namespaceDescription !== undefined ? { namespaceDescription } : {}) });\n if (definitions.has(key)) {\n if (definitions.get(key) !== signature) fail('tool_name_collision', 'Conflicting definitions for the same tool identity');\n return;\n }\n const wire = register(name, namespace, custom);\n definitions.set(key, signature);\n let parameters = custom\n ? { type: 'object', properties: { input: { type: 'string' } }, required: ['input'], additionalProperties: false }\n : record(tool.parameters ?? { type: 'object', properties: {} }, 'tool parameters');\n if (capabilities.agentMessageDelivery === 'plaintext' && isCollaborationFunction(name, namespace, custom)) {\n const properties = parameters.properties;\n if (properties && typeof properties === 'object' && !Array.isArray(properties)) {\n const message = (properties as JsonRecord).message;\n if (message && typeof message === 'object' && !Array.isArray(message) && (message as JsonRecord).encrypted === true) {\n const { encrypted: _encrypted, ...plaintext } = message as JsonRecord;\n parameters = { ...parameters, properties: { ...properties, message: plaintext } };\n diagnostics.push({ param: `${path}.parameters.properties.message.encrypted`, action: 'omitted', reason: 'collaboration_message_plaintext_delivery' });\n }\n }\n }\n const declaredDescription = tool.description === undefined ? undefined : string(tool.description, 'tool description');\n const identityHint = capabilities.preserveToolIdentityDescription ? `Original tool identity: ${JSON.stringify({ name, ...(namespace ? { namespace } : {}) })}` : undefined;\n const description = [identityHint, namespaceDescription, declaredDescription].filter(value => value !== undefined).join('\\n') || undefined;\n const customHint = custom ? `Pass the complete original custom tool input verbatim in the input string.${tool.format ? ` Original input format: ${JSON.stringify(tool.format)}` : ''}` : undefined;\n if (protocol === 'chat_completions') {\n tools.push({ type: 'function', function: { name: wire, parameters, ...(description || customHint ? { description: [description, customHint].filter(Boolean).join('\\n') } : {}), ...(tool.strict !== undefined ? { strict: tool.strict } : {}) } });\n } else {\n tools.push({ name: wire, input_schema: parameters, ...(description || customHint ? { description: [description, customHint].filter(Boolean).join('\\n') } : {}), ...(tool.strict !== undefined && capabilities.anthropicStrictTools ? {strict:tool.strict} : {}) });\n }\n };\n if (body.tools !== undefined) atParam('tools', () => {\n for (const [index, tool] of list(body.tools, 'tools').entries()) atParam(`tools[${index}]`, () => expandTool(tool, undefined, `tools[${index}]`));\n });\n // Behavior reference: cc-switch b4a0794 collect_input_declared_tools. Tool carriers\n // are declarations, not messages. Use this codec's existing reversible name authority.\n for (const [index, rawItem] of input.entries()) atParam(`input[${index}]`, () => {\n const item = record(rawItem, 'input item');\n if (item.type !== 'additional_tools') {\n if(item.internal_chat_message_metadata_passthrough!==undefined) {\n record(item.internal_chat_message_metadata_passthrough,'message metadata');\n const {internal_chat_message_metadata_passthrough: _metadata,...message}=item;\n canonicalInput.push(message);\n diagnostics.push({param:`input[${index}].internal_chat_message_metadata_passthrough`,action:'omitted',reason:'source_message_metadata'});\n } else canonicalInput.push(item);\n return;\n }\n if (item.content !== undefined) fail('invalid_payload', 'A tool declaration carrier cannot also contain message content', `input[${index}].content`);\n for (const [toolIndex, tool] of list(item.tools, 'additional tools').entries()) {\n const toolPath = `input[${index}].tools[${toolIndex}]`;\n atParam(toolPath, () => expandTool(tool, undefined, toolPath));\n }\n });\n const resolve = (item: JsonRecord, custom: boolean): string => {\n const name = string(item.name, 'call name', true);\n const namespace = item.namespace === undefined ? undefined : string(item.namespace, 'call namespace', true);\n let wire = byOriginal.get(identity(name, namespace));\n // Historical calls need not appear in today's tool declarations. Preserve them in the same authority.\n if (wire === undefined) wire = register(name, namespace, custom);\n if (toolNames.get(wire)!.custom !== custom) fail('tool_name_collision', 'Historical tool kind conflicts with its current declaration');\n return wire;\n };\n const normalizeContent = (rawContent: unknown, role: string): unknown => {\n if (typeof rawContent === 'string') return rawContent;\n const parts = list(rawContent, 'message content');\n for (const rawPart of parts) {\n const part = record(rawPart, 'content part');\n if (part.type === 'input_text' || part.type === 'output_text' || part.type === 'text') string(part.text, 'content text');\n else if (part.type === 'refusal' && role === 'assistant') {\n string(part.refusal,'refusal');\n if (capabilities.preserveRefusalContent && protocol !== 'chat_completions') fail('unsupported_content','Target protocol cannot preserve refusal history authority');\n }\n else if (part.type === 'input_image' && role === 'user') {\n if (protocol !== 'chat_completions') fail('unsupported_content', 'Anthropic image conversion requires provider-specific URL/data support');\n string(part.image_url, 'image_url', true);\n if (part.detail !== undefined && !['auto', 'low', 'high'].includes(String(part.detail))) fail('unsupported_content', 'Unknown image detail');\n } else fail('unsupported_content', 'Unsupported message content type');\n if (part.annotations !== undefined && list(part.annotations, 'annotations').length) fail('unsupported_content', 'Output annotations cannot be represented in input history');\n }\n // Reuse the existing text/image normalizer only after validating every part.\n const normalized = contentNormalizer.normalizeResponsesMessageContent(parts.map(raw=>{const part=raw as JsonRecord;return part.type==='refusal'?{type:'output_text',text:part.refusal}:part;})) as JsonRecord[];\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i] as JsonRecord;\n if (part.type === 'input_image' && part.detail !== undefined) (normalized[i].image_url as JsonRecord).detail = part.detail;\n if (part.type === 'refusal' && capabilities.preserveRefusalContent) normalized[i] = {type:'refusal',refusal:part.refusal};\n }\n return normalized;\n };\n const chat: JsonRecord[] = [];\n const messageParams = new WeakMap<JsonRecord, string>();\n let messageParam = 'instructions';\n const callIds = new Set<string>();\n const answered = new Set<string>();\n let pendingReasoning = '';\n const addMessage = (message: JsonRecord): void => {\n if (chat.length >= budget.maxItems) fail('resource_limit', 'Too many input messages');\n chat.push(message);\n messageParams.set(message, messageParam);\n };\n if (body.instructions !== undefined) addMessage({ role: 'system', content: string(body.instructions, 'instructions') });\n for (const [inputIndex, rawItem] of input.entries()) atParam(`input[${inputIndex}]`, () => {\n messageParam = `input[${inputIndex}]`;\n const item = record(rawItem, 'input item');\n if (item.type === 'additional_tools') return;\n if (item.type === 'agent_message') {\n validateAgentMessage(item, messageParam, capabilities.limits);\n if (capabilities.agentMessageDelivery !== 'plaintext') fail('unsupported_content', 'Agent messages require explicit plaintext delivery', messageParam);\n if (pendingReasoning) fail('unsupported_reasoning', 'Reasoning must precede an assistant item', messageParam);\n addMessage({ role: 'user', content: [{ type: 'text', text: `[Agent message metadata: ${JSON.stringify({ author: item.author, recipient: item.recipient })}]\\n` }, ...(item.content as JsonRecord[]).map(part => ({ type: 'text', text: part.text }))] });\n diagnostics.push({ param: messageParam, action: 'mapped', reason: 'agent_message_plaintext_delivery' });\n return;\n }\n if (item.encrypted_content != null) fail('unsupported_content', 'Encrypted content cannot cross protocols', `${messageParam}.encrypted_content`);\n if (item.type === 'compaction') fail('unsupported_content', 'Encrypted reasoning and compaction cannot be restored');\n if (item.type === 'item_reference') fail('unresolved_reference', 'Input item references must be resolved before conversion');\n if (item.type === 'reasoning') {\n if (protocol !== 'chat_completions' || !(capabilities.reasoningHistory || capabilities.reasoningEffort)) fail('unsupported_reasoning', 'Reasoning history requires an explicit compatible reasoning capability');\n if (item.content != null) fail('unsupported_reasoning', 'Reasoning content requires an explicit history mapping', `${messageParam}.content`);\n const summary = list(item.summary, 'reasoning summary');\n const text = summary.map(part => { const p = record(part, 'reasoning summary'); if (p.type !== 'summary_text') fail('unsupported_reasoning', 'Unknown reasoning summary'); return string(p.text, 'summary text'); }).join('');\n if (options.preserveContentOrder) addMessage({ role: 'assistant', content: null, reasoning_content: text, ...(item.id === undefined ? {} : { id: string(item.id, 'item.id', true) }) });\n else pendingReasoning += text;\n return;\n }\n if (item.type === 'function_call' || item.type === 'custom_tool_call') {\n const custom = item.type === 'custom_tool_call';\n validateEncryptedFunctionArgs(item, capabilities.agentMessageDelivery, messageParam);\n const id = string(item.call_id, 'call_id', true);\n if (callIds.has(id)) fail('invalid_tool_history', 'Duplicate tool call identifier');\n callIds.add(id);\n const args = custom ? JSON.stringify({ input: string(item.input, 'custom input') }) : string(item.arguments, 'arguments');\n bounded(args, budget.maxArgumentBytes, 'arguments'); argumentObject(args);\n const call = { id, type: 'function', function: { name: resolve(item, custom), arguments: args } };\n const previous = chat.at(-1);\n if (previous?.role === 'assistant' && !options.preserveContentOrder) {\n previous.tool_calls = [...(previous.tool_calls as JsonRecord[] ?? []), call];\n if (pendingReasoning) previous.reasoning_content = pendingReasoning;\n } else addMessage({ role: 'assistant', content: null, tool_calls: [call], ...(pendingReasoning ? { reasoning_content: pendingReasoning } : {}) });\n pendingReasoning = '';\n return;\n }\n if (item.type === 'function_call_output' || item.type === 'custom_tool_call_output') {\n const id = string(item.call_id, 'call_id', true);\n if (!callIds.has(id) || answered.has(id)) fail('invalid_tool_history', 'Unmatched or duplicate tool result');\n answered.add(id);\n const output = typeof item.output === 'string' ? item.output : normalizeContent(item.output, 'tool');\n addMessage({ role: 'tool', tool_call_id: id, content: output, ...(item.is_error === true ? { is_error: true } : {}) });\n return;\n }\n if (item.type !== undefined && item.type !== 'message') fail('unsupported_content', 'Unsupported input item type');\n const role = string(item.role, 'message role', true);\n if (!['user', 'assistant', 'system', 'developer'].includes(role)) fail('unsupported_content', 'Unknown message role');\n const message: JsonRecord = { role, content: normalizeContent(item.content, role) };\n if (options.preserveContentOrder && item.id !== undefined) message.id = string(item.id, 'item.id', true);\n if (pendingReasoning) { if (role !== 'assistant') fail('unsupported_reasoning', 'Reasoning must precede an assistant item'); message.reasoning_content = pendingReasoning; pendingReasoning = ''; }\n addMessage(message);\n });\n if (pendingReasoning) fail('unsupported_reasoning', 'Orphan reasoning history cannot be represented');\n const result: JsonRecord = { model, messages: chat };\n const omittedAllTools = !tools.length && diagnostics.some(item => item.reason === 'optional_hosted_web_search_unavailable');\n for (const key of ['stream', 'temperature', 'top_p', 'parallel_tool_calls', 'metadata'])\n if (body[key] !== undefined && !(omittedAllTools && key === 'parallel_tool_calls')) result[key] = body[key];\n if (protocol === 'chat_completions' && body.stream === true) result.stream_options = { include_usage: true };\n const maxTokens = body.max_output_tokens ?? capabilities.maxOutputTokens;\n if (maxTokens !== undefined) {\n if (!Number.isSafeInteger(maxTokens) || (maxTokens as number) <= 0) fail('invalid_payload', 'max_output_tokens must be a positive integer');\n result[protocol === 'chat_completions' ? 'max_completion_tokens' : 'max_tokens'] = maxTokens;\n }\n if (tools.length) result.tools = tools;\n if (body.tool_choice !== undefined && !omittedAllTools) {\n const choice = body.tool_choice;\n if (typeof choice === 'string') {\n if (!['auto', 'none', 'required'].includes(choice)) fail('unsupported_tool_choice', `Unsupported tool choice ${choice}`);\n result.tool_choice = protocol === 'chat_completions' ? choice : { type: choice === 'required' ? 'any' : choice };\n } else {\n const c = record(choice, 'tool_choice');\n if (c.type !== 'function' && c.type !== 'custom') fail('unsupported_tool_choice', 'Forced hosted tools are unsupported');\n const wire = byOriginal.get(identity(string(c.name, 'tool choice name', true), c.namespace === undefined ? undefined : string(c.namespace, 'tool choice namespace')));\n if (!wire || !tools.some(t => t.name === wire || (t.function as JsonRecord | undefined)?.name === wire)) fail('unsupported_tool_choice', 'Forced tool is not declared');\n result.tool_choice = protocol === 'chat_completions' ? { type: 'function', function: { name: wire } } : { type: 'tool', name: wire };\n }\n }\n applyResponsesPreferences(body, result, protocol, capabilities, maxTokens, diagnostics);\n if (body.text !== undefined) atParam('text.format', () => {\n const text = record(body.text, 'text');\n if (text.format !== undefined) {\n const format = record(text.format, 'text format');\n const allowed = format.type === 'json_schema' ? ['type','name','schema','strict','description'] : ['type'];\n for (const key of Object.keys(format)) if (!allowed.includes(key)) fail('unsupported_request', 'Unsupported output format field', `text.format.${key}`);\n if (format.type === 'json_schema') {\n atParam('text.format.name', () => string(format.name, 'output schema name', true));\n atParam('text.format.schema', () => record(format.schema, 'output schema'));\n if (format.strict !== undefined && typeof format.strict !== 'boolean') fail('invalid_payload', 'Output schema strict must be boolean', 'text.format.strict');\n if (format.description !== undefined) atParam('text.format.description', () => string(format.description, 'output schema description'));\n }\n if (protocol !== 'chat_completions' && format.type !== 'text') fail('unsupported_request', 'Anthropic structured output requires a separate provider capability');\n if (format.type === 'json_schema') result.response_format = { type: 'json_schema', json_schema: { name: format.name, schema: format.schema, ...(format.strict !== undefined ? { strict: format.strict } : {}), ...(format.description !== undefined ? { description: format.description } : {}) } };\n else if (format.type === 'json_object' || format.type === 'text') { if (protocol === 'chat_completions') result.response_format = format; }\n else fail('unsupported_request', 'Unknown text format');\n }\n });\n if (protocol === 'anthropic_messages') {\n const system: string[] = [];\n const messages: JsonRecord[] = [];\n const append = (role: string, content: JsonRecord[]): void => {\n const previous = messages.at(-1);\n if (previous?.role === role) (previous.content as JsonRecord[]).push(...content);\n else messages.push({ role, content });\n };\n for (const msg of chat) {\n if (msg.role === 'system' || msg.role === 'developer') {\n if (messages.length) fail('unsupported_content', 'Mid-conversation system instructions cannot be relocated safely', `${messageParams.get(msg)}.role`);\n system.push(typeof msg.content === 'string' ? msg.content : (msg.content as JsonRecord[]).map(p => string(p.text, 'system text')).join(''));\n continue;\n }\n if (msg.role === 'tool') {\n append('user', [{ type: 'tool_result', tool_use_id: msg.tool_call_id, content: msg.content, ...(msg.is_error ? { is_error: true } : {}) }]);\n } else {\n const content: JsonRecord[] = msg.content == null ? [] : typeof msg.content === 'string' ? [{ type: 'text', text: msg.content }] : msg.content as JsonRecord[];\n for (const call of msg.tool_calls as JsonRecord[] ?? []) {\n const fn = call.function as JsonRecord;\n content.push({ type: 'tool_use', id: call.id, name: fn.name, input: argumentObject(fn.arguments as string) });\n }\n append(msg.role as string, content);\n }\n }\n result.messages = messages;\n if (system.length) result.system = system.join('\\n');\n if (maxTokens === undefined) fail('missing_capability', 'Anthropic requires max_output_tokens or capabilities.maxOutputTokens');\n if (body.parallel_tool_calls !== undefined && !omittedAllTools) {\n result.tool_choice = { ...record(result.tool_choice ?? { type: 'auto' }, 'tool_choice'), disable_parallel_tool_use: body.parallel_tool_calls === false };\n delete result.parallel_tool_calls;\n }\n }\n return { body: result, toolNames, canonicalInput, diagnostics };\n}\n",
33
33
  "import { fail } from '../responses-codec/common';\nimport type { LLMProtocol } from './types';\n\n/** Read the actual generation model. Gemini's URL is authoritative, including base prefixes. */\nexport function protocolRequestModel(protocol: LLMProtocol, body: unknown, url?: string | URL): string {\n if (protocol === 'gemini_generate_content') {\n let path: string;\n try { path = new URL(url!).pathname; }\n catch { return fail('invalid_payload', 'A valid Gemini target URL is required', 'url'); }\n const match = path.match(/\\/models\\/([^/]+):(?:streamGenerateContent|generateContent)$/);\n if (!match) return fail('invalid_payload', 'Gemini target URL has no terminal model', 'url');\n try {\n const model = decodeURIComponent(match[1]!);\n if (model) return model;\n } catch { return fail('invalid_payload', 'Gemini target model encoding is invalid', 'url'); }\n return fail('invalid_payload', 'Gemini target model is required', 'url');\n }\n const model = (body as { model?: unknown } | null)?.model;\n if (typeof model !== 'string' || !model) return fail('invalid_payload', 'Target model is required', 'model');\n return model;\n}\n\n/** Generation endpoint; Responses keeps the host/provider's /responses entry contract. */\nexport function protocolRequestPath(protocol: LLMProtocol, model: string, streaming: boolean): string {\n switch (protocol) {\n case 'responses': return '/responses';\n case 'chat_completions': return '/v1/chat/completions';\n case 'anthropic_messages': return '/v1/messages';\n case 'gemini_generate_content':\n if (typeof model !== 'string' || !model) fail('invalid_payload', 'Target model is required', 'model');\n return `/v1beta/models/${encodeURIComponent(model)}:${streaming ? 'streamGenerateContent' : 'generateContent'}`;\n default: return fail('unsupported_protocol', 'Unknown protocol');\n }\n}\n",
34
34
  "import { logger, protocolSSEOutput, DataAdmissionError, type Plugin, type PluginHooks } from '@jeffusion/bungee-core/plugin';\nimport { protocolRequestModel } from '@jeffusion/bungee-llms/plugin-api';\nimport { readModelIdentity } from '../../llm-protocol-adapter/contract';\nimport type { AdapterSession, LLMProtocol } from '../../llm-protocol-adapter/contract';\n/** Codex transport integration only; all codec and state-machine methods are public service calls. */\nexport function protocolAdapter(input: {\n session: AdapterSession;\n protocol: LLMProtocol;\n model: string;\n save: (response: any, context: any) => Promise<void>;\n signal: AbortSignal;\n}): Plugin {\n let nativeTerminal: any, sourceContext: any, flushed = false;\n const dispose = () => input.session.dispose();\n input.signal.addEventListener('abort', dispose, { once: true });\n const release = () => { input.signal.removeEventListener('abort', dispose); dispose(); };\n const convert = <T>(run: () => T): T => { try {\n return run();\n }\n catch (error) {\n const e = error as any;\n if (typeof e.code === 'string')\n throw new DataAdmissionError(422, `llm_adapter_${e.code}`, undefined, { message: e.message, param: e.param });\n throw error;\n } };\n const remember = (events: any[]) => { for (const event of events)\n if (event.type === 'response.completed')\n nativeTerminal = event.response; };\n return { bodyRequirements() { return { request: 'none', response: ['json', 'sse-json'] }; }, register(hooks: PluginHooks) {\n hooks.onValidateOutbound.tapPromise('codex-router.target', async (context) => { input.signal.throwIfAborted(); const result = convert(() => input.session.validateAttempt({ model: protocolRequestModel(input.protocol, context.body, context.url), modelIdentity: readModelIdentity(context.annotations), protocol: input.protocol, body: context.body, url: context.url })); logger.info({ requestId: context.requestId, attemptId: context.attemptId, ...result }, 'llm_adapter_target_validated'); return context; });\n hooks.onResponse.tapPromise('codex-router.protocol', async (response, context) => {\n if (!response.ok || !response.headers.get('content-type')?.includes('json'))\n return response;\n const raw = await context.bodyHandle!.json({ id: 'codex-router.protocol', mandatory: true });\n const body: any = structuredClone(convert(() => input.session.convertResponse(raw)));\n body.model = input.model;\n if (body.status === 'completed') {\n input.signal.throwIfAborted();\n await input.save(body, context);\n }\n release();\n const headers = new Headers(response.headers);\n headers.delete('content-length');\n headers.delete('content-encoding');\n headers.set('content-type', 'application/json');\n return new Response(JSON.stringify(body), { status: response.status, headers });\n });\n hooks.onStreamChunk.tapPromise('codex-router.protocol', async (envelope, context) => {\n sourceContext = context;\n input.signal.throwIfAborted();\n if (envelope.data === '[DONE]')\n return [];\n if (envelope.json === undefined)\n return [envelope];\n const events = structuredClone(convert(() => input.session.push(envelope.json)));\n remember(events);\n return protocolSSEOutput(events.map(e => e.response ? { ...e, response: { ...e.response as any, model: input.model } } : e), 'responses', envelope);\n });\n hooks.onFlushStream.tapPromise('codex-router.protocol', async (chunks) => {\n if (flushed)\n return chunks;\n flushed = true;\n input.signal.throwIfAborted();\n const events = structuredClone(convert(() => input.session.finish()));\n remember(events);\n if (nativeTerminal) {\n input.signal.throwIfAborted();\n await input.save(nativeTerminal, sourceContext);\n }\n release();\n return [...chunks, ...protocolSSEOutput(events, 'responses')];\n });\n hooks.onError.tap('codex-router.protocol-error', () => { nativeTerminal = undefined; release(); });\n } };\n}\n",
35
- "import type { LLMProtocol } from '@jeffusion/bungee-types';\nimport type { CollaborationRelay } from '../../llm-protocol-adapter/contract';\n\nexport function parseCollaborationRelay(value: unknown): CollaborationRelay | undefined {\n if (value === undefined) return;\n if (!value || typeof value !== 'object' || Array.isArray(value)) throw new Error('codex_router_invalid_collaboration_relay');\n const relay = value as Record<string,any>, target = relay.target;\n if (Object.keys(relay).some(key => !['target','model'].includes(key)) || typeof relay.model !== 'string' || !relay.model || relay.model !== relay.model.trim() || relay.model.length > 512 || /[\\x00-\\x1f\\x7f]/.test(relay.model)\n || !target || typeof target !== 'object' || Array.isArray(target) || !['route','service'].includes(target.type) || typeof target.id !== 'string' || !target.id || target.id !== target.id.trim() || target.id.length > 512 || /[\\x00-\\x1f\\x7f]/.test(target.id) || target.protocol !== 'responses' || Object.keys(target).some(key=>!['type','id','protocol'].includes(key))) throw new Error('codex_router_invalid_collaboration_relay');\n return Object.freeze(structuredClone(relay)) as CollaborationRelay;\n}\n\nexport interface ModelBinding {\n provider: string;\n model: string;\n source?: string;\n sourceProvider?: string;\n sourceProtocol?: 'responses';\n alias?: string;\n target: { type: 'route' | 'service'; id: string; protocol: LLMProtocol };\n capabilityOverrides?: { contextWindow?: number; tools?: boolean; reasoning?: boolean; images?: boolean };\n}\n/** The model in the client request; model itself is the upstream destination. */\nexport function bindingSource(binding: ModelBinding): string { return binding.source ?? binding.alias ?? binding.model; }\nexport function parseBindings(value: unknown): readonly ModelBinding[] {\n if (value === undefined) return [];\n if (!Array.isArray(value) || value.length > 100) throw new Error('codex_router_invalid_bindings');\n const ids = new Set<string>();\n return Object.freeze(value.map(entry => {\n if (!entry || typeof entry !== 'object' || Array.isArray(entry)\n || Object.keys(entry).some(key => !['provider','model','source','sourceProvider','sourceProtocol','alias','target','capabilityOverrides'].includes(key))\n || (entry.source !== undefined && entry.alias !== undefined)\n || (entry.sourceProvider !== undefined && entry.source === undefined)) throw new Error('codex_router_invalid_bindings');\n for (const text of [entry.provider, entry.model, ...(entry.source === undefined ? [] : [entry.source]), ...(entry.sourceProvider === undefined ? [] : [entry.sourceProvider]), ...(entry.alias === undefined ? [] : [entry.alias])]) {\n if (typeof text !== 'string' || !text || text !== text.trim() || text.length > 512 || /[\\x00-\\x1f\\x7f]/.test(text)) throw new Error('codex_router_invalid_bindings');\n }\n if (entry.sourceProtocol !== undefined && entry.sourceProtocol !== 'responses') throw new Error('codex_router_source_protocol_unsupported');\n const target = entry.target;\n if (!target || !['route','service'].includes(target.type) || typeof target.id !== 'string' || !target.id\n || Object.keys(target).some(key => !['type','id','protocol'].includes(key))) throw new Error('codex_router_invalid_target');\n if (target.protocol === undefined) throw new Error('codex_router_target_protocol_required');\n if (!['responses','chat_completions','anthropic_messages'].includes(target.protocol)) throw new Error('codex_router_target_protocol_invalid');\n const publicId = bindingSource(entry);\n if (ids.has(publicId)) throw new Error('codex_router_model_conflict');\n ids.add(publicId);\n const overrides = entry.capabilityOverrides;\n if (overrides !== undefined) {\n if (!overrides || typeof overrides !== 'object' || Array.isArray(overrides)) throw new Error('codex_router_invalid_capabilities');\n for (const [key, val] of Object.entries(overrides)) {\n if (['contextWindow'].includes(key) ? typeof val !== 'number' || !Number.isSafeInteger(val) || val < 1\n : !['tools','reasoning','images'].includes(key) || typeof val !== 'boolean') throw new Error('codex_router_invalid_capabilities');\n }\n }\n return Object.freeze(structuredClone(entry)) as ModelBinding;\n }));\n}\n",
35
+ "import type { LLMProtocol } from '@jeffusion/bungee-types';\nimport type { CollaborationRelay } from '../../llm-protocol-adapter/contract';\n\nexport function parseCollaborationRelay(value: unknown): CollaborationRelay | undefined {\n if (value === undefined) return;\n if (!value || typeof value !== 'object' || Array.isArray(value)) throw new Error('codex_router_invalid_collaboration_relay');\n const relay = value as Record<string,any>, target = relay.target;\n if (Object.keys(relay).some(key => !['target','model'].includes(key)) || typeof relay.model !== 'string' || !relay.model || relay.model !== relay.model.trim() || relay.model.length > 512 || /[\\x00-\\x1f\\x7f]/.test(relay.model)\n || !target || typeof target !== 'object' || Array.isArray(target) || !['route','service'].includes(target.type) || typeof target.id !== 'string' || !target.id || target.id !== target.id.trim() || target.id.length > 512 || /[\\x00-\\x1f\\x7f]/.test(target.id) || target.protocol !== 'responses' || Object.keys(target).some(key=>!['type','id','protocol'].includes(key))) throw new Error('codex_router_invalid_collaboration_relay');\n return Object.freeze(structuredClone(relay)) as CollaborationRelay;\n}\n\nexport interface ModelBinding {\n provider: string;\n model: string;\n source?: string;\n sourceProvider?: string;\n sourceProtocol?: 'responses';\n alias?: string;\n target: { type: 'route' | 'service'; id: string; protocol: LLMProtocol };\n capabilityOverrides?: { contextWindow?: number; tools?: boolean; reasoning?: boolean; images?: boolean };\n}\n/** The model in the client request; model itself is the upstream destination. */\nexport function bindingSource(binding: ModelBinding): string { return binding.source ?? binding.alias ?? binding.model; }\nexport function parseBindings(value: unknown): readonly ModelBinding[] {\n if (value === undefined) return [];\n if (!Array.isArray(value) || value.length > 100) throw new Error('codex_router_invalid_bindings');\n const ids = new Set<string>();\n return Object.freeze(value.map(entry => {\n if (!entry || typeof entry !== 'object' || Array.isArray(entry)\n || Object.keys(entry).some(key => !['provider','model','source','sourceProvider','sourceProtocol','alias','target','capabilityOverrides'].includes(key))\n || (entry.source !== undefined && entry.alias !== undefined)\n || (entry.sourceProvider !== undefined && entry.source === undefined)) throw new Error('codex_router_invalid_bindings');\n for (const text of [entry.provider, entry.model, ...(entry.source === undefined ? [] : [entry.source]), ...(entry.sourceProvider === undefined ? [] : [entry.sourceProvider]), ...(entry.alias === undefined ? [] : [entry.alias])]) {\n if (typeof text !== 'string' || !text || text !== text.trim() || text.length > 512 || /[\\x00-\\x1f\\x7f]/.test(text)) throw new Error('codex_router_invalid_bindings');\n }\n if (entry.sourceProtocol !== undefined && entry.sourceProtocol !== 'responses') throw new Error('codex_router_source_protocol_unsupported');\n const target = entry.target;\n if (!target || !['route','service'].includes(target.type) || typeof target.id !== 'string' || !target.id\n || Object.keys(target).some(key => !['type','id','protocol'].includes(key))) throw new Error('codex_router_invalid_target');\n if (target.protocol === undefined) throw new Error('codex_router_target_protocol_required');\n if (!['responses','chat_completions','anthropic_messages','gemini_generate_content'].includes(target.protocol)) throw new Error('codex_router_target_protocol_invalid');\n const publicId = bindingSource(entry);\n if (ids.has(publicId)) throw new Error('codex_router_model_conflict');\n ids.add(publicId);\n const overrides = entry.capabilityOverrides;\n if (overrides !== undefined) {\n if (!overrides || typeof overrides !== 'object' || Array.isArray(overrides)) throw new Error('codex_router_invalid_capabilities');\n for (const [key, val] of Object.entries(overrides)) {\n if (['contextWindow'].includes(key) ? typeof val !== 'number' || !Number.isSafeInteger(val) || val < 1\n : !['tools','reasoning','images'].includes(key) || typeof val !== 'boolean') throw new Error('codex_router_invalid_capabilities');\n }\n }\n return Object.freeze(structuredClone(entry)) as ModelBinding;\n }));\n}\n",
36
36
  "import { createHash } from 'node:crypto';\nimport type { ConversionService } from '../../llm-protocol-adapter/contract';\nimport { bindingSource, type ModelBinding } from './config';\nimport template from './model-template-0.160.1.json';\n\nexport interface CatalogSnapshot {\n readonly native: unknown;\n readonly upstreamEtag: string | null;\n readonly expiresAt: number;\n}\n\n/** Worker-local upstream snapshots; expired entries remain available for revalidation. */\nexport class CatalogSnapshots {\n private readonly entries = new Map<string, CatalogSnapshot & {bytes: number}>();\n private bytes = 0;\n constructor(private readonly now = Date.now, private readonly maxBytes = 32 * 1024 * 1024) {}\n get(key: string): CatalogSnapshot | undefined {\n const entry = this.entries.get(key);\n if (entry) { this.entries.delete(key); this.entries.set(key, entry); }\n return entry;\n }\n fresh(snapshot: CatalogSnapshot): boolean { return snapshot.expiresAt > this.now(); }\n put(key: string, native: unknown, upstreamEtag: string | null): void {\n this.invalidate(key);\n const bytes = Buffer.byteLength(JSON.stringify(native), 'utf8');\n if (bytes > this.maxBytes) return;\n while (this.entries.size >= 32 || this.bytes + bytes > this.maxBytes) this.invalidate(this.entries.keys().next().value!);\n this.entries.set(key, {native: structuredClone(native), upstreamEtag, expiresAt: this.now() + 600_000, bytes});\n this.bytes += bytes;\n }\n invalidate(key: string): void {\n const entry = this.entries.get(key);\n if (entry) { this.bytes -= entry.bytes; this.entries.delete(key); }\n }\n clear(): void { this.entries.clear(); this.bytes = 0; }\n}\n\nexport function mergeCatalog(native: unknown, bindings: readonly ModelBinding[], catalog: ConversionService): unknown {\n if (!native || typeof native !== 'object' || Array.isArray(native)) throw new Error('codex_router_invalid_catalog');\n const body = native as Record<string, any>;\n // Generic OpenAI consumers retain their original shape. Codex requires richer models.\n const rich = Array.isArray(body.models);\n if (!rich && !Array.isArray(body.data)) throw new Error('codex_router_invalid_catalog');\n const existing = rich ? body.models : body.data;\n const ids = new Set(existing.map((entry: any) => rich ? entry.slug : entry.id));\n const added: any[] = [];\n const replacements = new Map<string, any>();\n const unavailable = new Set<string>();\n const bound = new Set<string>();\n for (const binding of bindings) {\n const id = bindingSource(binding);\n if (bound.has(id) || (ids.has(id) && binding.source === undefined)) throw new Error('codex_router_model_conflict');\n bound.add(id);\n const replace = ids.has(id);\n ids.add(id);\n const info = catalog.resolveCapabilities({provider:binding.provider,model:binding.model,targetProtocol:binding.target.protocol,restrictions:binding.capabilityOverrides});\n if (!info || info.contextWindow === null || !info.inputModalities.includes('text')) {\n if (replace) unavailable.add(id);\n continue;\n }\n if (!rich) {\n const model = {id, object: 'model', owned_by: binding.provider};\n if (replace) replacements.set(id, model); else added.push(model);\n continue;\n }\n const overrides = binding.capabilityOverrides;\n const context = Math.min(info.contextWindow, overrides?.contextWindow ?? info.contextWindow);\n // Only the implemented protocol subset is advertised; catalog fields are not promises of hosted tools.\n const model = {...template, slug:id, display_name:info.name, description:`${info.name} (${binding.provider})`,\n context_window:context, max_context_window:context, auto_compact_token_limit:Math.floor(context * 0.85),\n input_modalities: ['text', ...(info.inputModalities.includes('image') && overrides?.images !== false ? ['image'] : [])],\n supported_reasoning_levels: info.supportedEfforts.map(effort => ({effort,description:effort})),\n supports_reasoning_effort_updates:info.supportedEfforts.length>0, default_reasoning_level:info.defaultEffort, support_verbosity:false,\n };\n if (replace) replacements.set(id, model); else added.push(model);\n }\n return {...body, [rich ? 'models' : 'data']: [...existing.filter((entry: any) => !unavailable.has(rich ? entry.slug : entry.id))\n .map((entry: any) => replacements.get(rich ? entry.slug : entry.id) ?? entry), ...added]};\n}\n/** Hash exactly the serialized UTF-8 representation returned to the client. */\nexport function catalogEtag(body: string): string {\n return `\"${createHash('sha256').update(body, 'utf8').digest('hex')}\"`;\n}\n",
37
37
  "import { defineRpcService, type PluginServices } from '@jeffusion/bungee-core/plugin';\n\nconst key = {type: 'string', minLength: 64, maxLength: 64} as const;\nconst etag = {type: 'string', minLength: 66, maxLength: 66} as const;\n\n/** Only directory validators cross workers; no catalog bodies or credentials. */\nexport const catalogValidatorsRpc = defineRpcService({\n id: 'codex-router.catalog-validators.v1', version: 1, methods: {\n get: {kind: 'query', input: {type: 'object', properties: {key}},\n output: {type: 'union', variants: [etag, {type: 'null'}]}, purposes: ['request', 'attempt']},\n put: {kind: 'command', input: {type: 'object', properties: {key, etag}},\n output: {type: 'null'}, purposes: ['request', 'attempt'],\n command: {deduplication: 'none', resultRetentionMs: 1, quotaBytes: 1024, maxResultBytes: 1024}},\n },\n});\n\nexport function catalogValidatorsClient(services: PluginServices) {\n return services.rpc!.consume('codex-router', catalogValidatorsRpc);\n}\n",
38
38
  "import { createHash } from 'node:crypto';\nimport type { DispatchRequestInput } from '@jeffusion/bungee-core/plugin';\nimport type { ModelBinding } from './config';\n\nfunction header(headers: Record<string, string>, name: string): string {\n return Object.entries(headers).find(([key]) => key.toLowerCase() === name)?.[1] ?? '';\n}\n\n/** Request headers are captured at entry dispatch, before provider rewrites. */\nexport function catalogKeys({context, principal, servingRevision}: DispatchRequestInput, bindings: readonly ModelBinding[]): {validator: string; snapshot: string} | null {\n const directory = context.method === 'GET' && /\\/models$/.test(context.originalUrl.pathname);\n const generation = context.method === 'POST' && /\\/responses$/.test(context.originalUrl.pathname);\n if ((!directory && !generation) || !context.routeId) return null;\n const versions = context.originalUrl.searchParams.getAll('client_version');\n const version = directory ? versions.length === 1 ? versions[0] : '' : header(context.headers, 'version');\n if (!version || version.length > 128 || /[\\u0000-\\u0020\\u007f]/.test(version)) return null;\n // Account headers partition records only; authorization still belongs to the host.\n const scope = [\n context.routeId, servingRevision ?? null, bindings,\n principal ? [principal.domain, principal.keyId, principal.credentialVersion] : ['anonymous', '', 0],\n header(context.headers, 'authorization'), header(context.headers, 'x-api-key'), header(context.headers, 'api-key'),\n header(context.headers, 'chatgpt-account-id'),\n ];\n const key = (version: string) => createHash('sha256').update(JSON.stringify([...scope, version])).digest('hex');\n // Codex queries the release version but sends the full version in generation headers.\n // Normalize only notification matching; upstream snapshots retain the exact query version.\n return {validator: key(version.replace(/^(\\d+\\.\\d+\\.\\d+)[-+].*$/, '$1')), snapshot: key(version)};\n}\n\n/** Ephemeral control-process LRU. Reads affect eviction, never the publication TTL. */\nexport class CatalogValidators {\n private readonly entries = new Map<string, {etag: string; expires: number}>();\n constructor(private readonly now = Date.now) {}\n private sweep(): void {\n const now = this.now();\n for (const [key, entry] of this.entries) if (entry.expires <= now) this.entries.delete(key);\n }\n get(key: string): string | null {\n this.sweep();\n const entry = this.entries.get(key);\n if (!entry) return null;\n this.entries.delete(key);\n this.entries.set(key, entry);\n return entry.etag;\n }\n put(key: string, etag: string): null {\n if (!/^[a-f0-9]{64}$/.test(key) || !/^\"[a-f0-9]{64}\"$/.test(etag)) throw new Error('codex_router_invalid_catalog_validator');\n this.sweep();\n this.entries.delete(key);\n if (this.entries.size >= 512) this.entries.delete(this.entries.keys().next().value!);\n this.entries.set(key, {etag, expires: this.now() + 600_000});\n return null;\n }\n clear(): void { this.entries.clear(); }\n}\n"
39
39
  ],
40
- "mappings": "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",
41
- "debugId": "4746A700856A37E564756E2164756E21",
40
+ "mappings": "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",
41
+ "debugId": "89980D241AFB595A64756E2164756E21",
42
42
  "names": []
43
43
  }