@janole/ai-sdk-provider-codex-asp 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/dist/index.cjs +5 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +5 -4
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/object.ts","../src/approvals.ts","../src/errors.ts","../src/client/app-server-client.ts","../src/client/transport-persistent.ts","../src/client/transport-stdio.ts","../src/client/transport-websocket.ts","../src/client/worker.ts","../src/client/worker-pool.ts","../src/dynamic-tools.ts","../package.json","../src/package-info.ts","../src/protocol/provider-metadata.ts","../src/protocol/event-mapper.ts","../src/session.ts","../src/utils/prompt-file-resolver.ts","../src/model.ts","../src/client/persistent-pool-registry.ts","../src/provider.ts"],"names":["waiter","approvalsDispatcher","pool","released"],"mappings":"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","file":"index.js","sourcesContent":["// Converts `foo: T | undefined` into `foo?: T` while keeping non-undefined keys required.\ntype StripUndefined<T extends Record<string, unknown>> = {\n [K in keyof T as undefined extends T[K] ? never : K]: T[K];\n} & {\n [K in keyof T as undefined extends T[K] ? K : never]?: Exclude<T[K], undefined>;\n};\n\n// Runtime helper that drops `undefined` values and returns the narrowed object type above.\nexport function stripUndefined<T extends Record<string, unknown>>(obj: T): StripUndefined<T>\n{\n return Object.fromEntries(\n Object.entries(obj).filter(([, value]) => value !== undefined),\n ) as StripUndefined<T>;\n}\n","import type { AppServerClient } from \"./client/app-server-client\";\nimport type { JsonRpcRequest } from \"./client/transport\";\nimport type {\n CommandExecutionApprovalDecision,\n CommandExecutionRequestApprovalParams,\n CommandExecutionRequestApprovalResponse,\n FileChangeApprovalDecision,\n FileChangeRequestApprovalParams,\n FileChangeRequestApprovalResponse,\n} from \"./protocol/types\";\nimport { stripUndefined } from \"./utils/object\";\n\nexport interface CodexCommandApprovalRequest {\n threadId: string;\n turnId: string;\n itemId: string;\n approvalId?: string | null;\n reason?: string | null;\n networkApprovalContext?: CommandExecutionRequestApprovalParams[\"networkApprovalContext\"];\n command?: string | null;\n cwd?: string | null;\n commandActions?: CommandExecutionRequestApprovalParams[\"commandActions\"];\n additionalPermissions?: CommandExecutionRequestApprovalParams[\"additionalPermissions\"];\n proposedExecpolicyAmendment?: CommandExecutionRequestApprovalParams[\"proposedExecpolicyAmendment\"];\n proposedNetworkPolicyAmendments?: CommandExecutionRequestApprovalParams[\"proposedNetworkPolicyAmendments\"];\n}\n\nexport interface CodexFileChangeApprovalRequest {\n threadId: string;\n turnId: string;\n itemId: string;\n reason?: string | null;\n grantRoot?: string | null;\n}\n\nexport type CommandApprovalHandler = (\n request: CodexCommandApprovalRequest,\n) => CommandExecutionApprovalDecision | Promise<CommandExecutionApprovalDecision>;\n\nexport type FileChangeApprovalHandler = (\n request: CodexFileChangeApprovalRequest,\n) => FileChangeApprovalDecision | Promise<FileChangeApprovalDecision>;\n\nexport interface ApprovalsDispatcherSettings {\n onCommandApproval?: CommandApprovalHandler;\n onFileChangeApproval?: FileChangeApprovalHandler;\n}\n\nexport class ApprovalsDispatcher\n{\n private readonly onCommandApproval: CommandApprovalHandler;\n private readonly onFileChangeApproval: FileChangeApprovalHandler;\n\n constructor(settings: ApprovalsDispatcherSettings = {})\n {\n this.onCommandApproval = settings.onCommandApproval ?? (() => \"decline\");\n this.onFileChangeApproval = settings.onFileChangeApproval ?? (() => \"decline\");\n }\n\n attach(client: AppServerClient): () => void\n {\n const unsubCommand = client.onRequest(\n \"item/commandExecution/requestApproval\",\n async (params: unknown, _request: JsonRpcRequest) =>\n {\n const p = params as CommandExecutionRequestApprovalParams;\n const request: CodexCommandApprovalRequest = stripUndefined({\n threadId: p.threadId,\n turnId: p.turnId,\n itemId: p.itemId,\n approvalId: p.approvalId,\n reason: p.reason,\n networkApprovalContext: p.networkApprovalContext,\n command: p.command,\n cwd: p.cwd,\n commandActions: p.commandActions,\n additionalPermissions: p.additionalPermissions,\n proposedExecpolicyAmendment: p.proposedExecpolicyAmendment,\n proposedNetworkPolicyAmendments: p.proposedNetworkPolicyAmendments,\n });\n\n const decision = await this.onCommandApproval(request);\n return { decision } satisfies CommandExecutionRequestApprovalResponse;\n },\n );\n\n const unsubFileChange = client.onRequest(\n \"item/fileChange/requestApproval\",\n async (params: unknown, _request: JsonRpcRequest) =>\n {\n const p = params as FileChangeRequestApprovalParams;\n const request: CodexFileChangeApprovalRequest = stripUndefined({\n threadId: p.threadId,\n turnId: p.turnId,\n itemId: p.itemId,\n reason: p.reason,\n grantRoot: p.grantRoot,\n });\n\n const decision = await this.onFileChangeApproval(request);\n return { decision } satisfies FileChangeRequestApprovalResponse;\n },\n );\n\n return () =>\n {\n unsubCommand();\n unsubFileChange();\n };\n }\n}\n","/** Base error type for this provider package. */\nexport class CodexProviderError extends Error \n{\n constructor(message: string, options?: { cause?: unknown }) \n {\n super(message, options);\n this.name = \"CodexProviderError\";\n }\n}\n\n/** Error used for methods intentionally left as stubs in early PRs. */\nexport class CodexNotImplementedError extends CodexProviderError \n{\n constructor(method: string) \n {\n super(`Codex provider method not implemented yet: ${method}`);\n this.name = \"CodexNotImplementedError\";\n }\n}\n","import { CodexProviderError } from \"../errors\";\nimport type {\n CodexToolCallRequestParams,\n CodexToolCallResult,\n} from \"../protocol/types\";\nimport { stripUndefined } from \"../utils/object\";\nimport type {\n CodexTransport,\n JsonRpcErrorResponse,\n JsonRpcId,\n JsonRpcMessage,\n JsonRpcRequest,\n JsonRpcResponse,\n JsonRpcSuccessResponse,\n} from \"./transport\";\n\nexport class JsonRpcError extends CodexProviderError \n{\n readonly code: number;\n readonly data?: unknown;\n\n constructor(error: { code: number; message: string; data?: unknown }) \n {\n super(error.message);\n this.name = \"JsonRpcError\";\n this.code = error.code;\n this.data = error.data;\n }\n}\n\nexport interface AppServerClientSettings\n{\n requestTimeoutMs?: number;\n onPacket?: (packet: {\n direction: \"inbound\" | \"outbound\";\n message: JsonRpcMessage;\n }) => void;\n}\n\ntype NotificationHandler = (params: unknown) => void | Promise<void>;\ntype AnyNotificationHandler = (\n method: string,\n params: unknown,\n) => void | Promise<void>;\ntype RequestHandler = (\n params: unknown,\n request: JsonRpcRequest,\n) => unknown;\ntype ToolCallRequestHandler = (\n params: CodexToolCallRequestParams,\n request: JsonRpcRequest,\n) => CodexToolCallResult | Promise<CodexToolCallResult>;\n\nfunction isResponse(message: JsonRpcMessage): message is JsonRpcResponse \n{\n return (\n \"id\" in message &&\n message.id !== undefined &&\n (\"result\" in message || \"error\" in message) &&\n !(\"method\" in message)\n );\n}\n\nfunction isRequestOrNotification(\n message: JsonRpcMessage,\n): message is JsonRpcRequest | { method: string; params?: unknown } \n{\n return \"method\" in message && typeof message.method === \"string\";\n}\n\nexport class AppServerClient \n{\n private readonly transport: CodexTransport;\n private readonly requestTimeoutMs: number;\n private readonly onPacket?: AppServerClientSettings[\"onPacket\"];\n private nextId = 1;\n\n private readonly pendingRequests = new Map<\n JsonRpcId,\n {\n resolve: (value: unknown) => void;\n reject: (reason?: unknown) => void;\n timer: NodeJS.Timeout;\n }\n >();\n\n private readonly notificationHandlers = new Map<string, Set<NotificationHandler>>();\n private readonly anyNotificationHandlers = new Set<AnyNotificationHandler>();\n private readonly requestHandlers = new Map<string, RequestHandler>();\n\n private removeMessageListener: (() => void) | null = null;\n private removeErrorListener: (() => void) | null = null;\n\n constructor(transport: CodexTransport, settings: AppServerClientSettings = {}) \n {\n this.transport = transport;\n this.requestTimeoutMs = settings.requestTimeoutMs ?? 30_000;\n this.onPacket = settings.onPacket;\n }\n\n async connect(): Promise<void> \n {\n await this.transport.connect();\n\n this.removeMessageListener = this.transport.on(\"message\", (message) => \n {\n void this.handleMessage(message).catch(() => \n {\n // Inbound requests can race with disconnect; ignore transport write failures.\n });\n });\n\n this.removeErrorListener = this.transport.on(\"error\", (error) => \n {\n for (const pending of this.pendingRequests.values()) \n {\n clearTimeout(pending.timer);\n pending.reject(error);\n }\n this.pendingRequests.clear();\n });\n }\n\n async disconnect(): Promise<void> \n {\n if (this.removeMessageListener) \n {\n this.removeMessageListener();\n this.removeMessageListener = null;\n }\n\n if (this.removeErrorListener) \n {\n this.removeErrorListener();\n this.removeErrorListener = null;\n }\n\n for (const pending of this.pendingRequests.values()) \n {\n clearTimeout(pending.timer);\n pending.reject(new CodexProviderError(\"Client disconnected.\"));\n }\n this.pendingRequests.clear();\n\n await this.transport.disconnect();\n }\n\n async request<TResult>(\n method: string,\n params?: unknown,\n timeoutMs = this.requestTimeoutMs,\n ): Promise<TResult> \n {\n const id = this.nextId++;\n\n const message: JsonRpcRequest =\n params === undefined ? { id, method } : { id, method, params };\n\n const promise = new Promise<TResult>((resolve, reject) => \n {\n const timer = setTimeout(() => \n {\n this.pendingRequests.delete(id);\n reject(new CodexProviderError(`Request timed out: ${method}`));\n }, timeoutMs);\n\n this.pendingRequests.set(id, {\n resolve: (value) => resolve(value as TResult),\n reject,\n timer,\n });\n });\n\n this.onPacket?.({ direction: \"outbound\", message });\n await this.transport.sendMessage(message);\n return promise;\n }\n\n async notification(method: string, params?: unknown): Promise<void> \n {\n const message = stripUndefined({ method, params });\n this.onPacket?.({ direction: \"outbound\", message });\n await this.transport.sendNotification(method, params);\n }\n\n onNotification(method: string, handler: NotificationHandler): () => void \n {\n const handlers = this.notificationHandlers.get(method) ?? new Set();\n handlers.add(handler);\n this.notificationHandlers.set(method, handlers);\n\n return () => \n {\n handlers.delete(handler);\n if (handlers.size === 0) \n {\n this.notificationHandlers.delete(method);\n }\n };\n }\n\n onAnyNotification(handler: AnyNotificationHandler): () => void \n {\n this.anyNotificationHandlers.add(handler);\n return () => \n {\n this.anyNotificationHandlers.delete(handler);\n };\n }\n\n onRequest(method: string, handler: RequestHandler): () => void \n {\n this.requestHandlers.set(method, handler);\n\n return () => \n {\n this.requestHandlers.delete(method);\n };\n }\n\n onToolCallRequest(handler: ToolCallRequestHandler): () => void \n {\n return this.onRequest(\"item/tool/call\", async (params, request) =>\n handler((params ?? {}) as CodexToolCallRequestParams, request),\n );\n }\n\n private async handleMessage(message: JsonRpcMessage): Promise<void> \n {\n this.onPacket?.({ direction: \"inbound\", message });\n\n if (isResponse(message)) \n {\n this.handleResponse(message);\n return;\n }\n\n if (!isRequestOrNotification(message)) \n {\n return;\n }\n\n const hasRequestId = \"id\" in message && message.id !== undefined;\n\n if (hasRequestId) \n {\n await this.handleInboundRequest(message);\n return;\n }\n\n await this.handleNotification(message.method, message.params);\n }\n\n private handleResponse(message: JsonRpcResponse): void \n {\n const pending = this.pendingRequests.get(message.id);\n if (!pending) \n {\n return;\n }\n\n clearTimeout(pending.timer);\n this.pendingRequests.delete(message.id);\n\n if (\"error\" in message) \n {\n pending.reject(new JsonRpcError(message.error));\n return;\n }\n\n pending.resolve((message).result);\n }\n\n private async handleNotification(method: string, params: unknown): Promise<void> \n {\n const handlers = this.notificationHandlers.get(method);\n if (handlers) \n {\n for (const handler of handlers) \n {\n await handler(params);\n }\n }\n\n for (const handler of this.anyNotificationHandlers) \n {\n await handler(method, params);\n }\n }\n\n private async handleInboundRequest(request: JsonRpcRequest): Promise<void> \n {\n const handler = this.requestHandlers.get(request.method);\n\n if (!handler) \n {\n const notFoundResponse = {\n id: request.id,\n error: {\n code: -32601,\n message: `Method not found: ${request.method}`,\n },\n } as JsonRpcErrorResponse;\n this.onPacket?.({ direction: \"outbound\", message: notFoundResponse });\n await this.transport.sendMessage(notFoundResponse);\n return;\n }\n\n try \n {\n const result = await handler(request.params, request);\n const response = {\n id: request.id,\n result,\n } as JsonRpcSuccessResponse;\n this.onPacket?.({ direction: \"outbound\", message: response });\n await this.transport.sendMessage(response);\n }\n catch (error) \n {\n try \n {\n const errorResponse = {\n id: request.id,\n error: {\n code: -32000,\n message: error instanceof Error ? error.message : \"Request handler failed\",\n },\n } as JsonRpcErrorResponse;\n this.onPacket?.({ direction: \"outbound\", message: errorResponse });\n await this.transport.sendMessage(errorResponse);\n }\n catch \n {\n // Ignore transport errors while replying to inbound requests during shutdown.\n }\n }\n }\n}\n","import type { CodexToolCallResult } from \"../protocol/types\";\nimport { stripUndefined } from \"../utils/object\";\nimport type {\n CodexTransport,\n CodexTransportEventMap,\n JsonRpcMessage,\n JsonRpcSuccessResponse,\n} from \"./transport\";\nimport type { PendingToolCall } from \"./worker\";\nimport type { CodexWorker } from \"./worker\";\nimport type { CodexWorkerPool } from \"./worker-pool\";\n\nexport interface PersistentTransportSettings {\n pool: CodexWorkerPool;\n signal?: AbortSignal;\n threadId?: string;\n}\n\nexport class PersistentTransport implements CodexTransport\n{\n private readonly pool: CodexWorkerPool;\n private readonly signal: AbortSignal | undefined;\n private readonly threadId: string | undefined;\n private worker: CodexWorker | null = null;\n private pendingInitializeId: string | number | null = null;\n private initializeIntercepted = false;\n\n private readonly messageListeners = new Set<(message: JsonRpcMessage) => void>();\n private readonly errorListeners = new Set<(error: unknown) => void>();\n private readonly closeListeners = new Set<\n (code: number | null, signal: NodeJS.Signals | null) => void\n >();\n\n constructor(settings: PersistentTransportSettings)\n {\n this.pool = settings.pool;\n this.signal = settings.signal;\n this.threadId = settings.threadId;\n }\n\n async connect(): Promise<void>\n {\n this.worker = await this.pool.acquire(stripUndefined({ signal: this.signal, threadId: this.threadId }));\n await this.worker.ensureConnected();\n }\n\n disconnect(): Promise<void>\n {\n if (this.worker)\n {\n const w = this.worker;\n this.worker = null;\n this.messageListeners.clear();\n this.errorListeners.clear();\n this.closeListeners.clear();\n this.pool.release(w);\n }\n return Promise.resolve();\n }\n\n async sendMessage(message: JsonRpcMessage): Promise<void>\n {\n if (!this.worker)\n {\n throw new Error(\"PersistentTransport is not connected.\");\n }\n\n if (isInitializeRequest(message))\n {\n if (this.worker.initialized)\n {\n this.initializeIntercepted = true;\n const requestId = message.id;\n const cachedResult = this.worker.initializeResult;\n\n queueMicrotask(() =>\n {\n for (const listener of this.messageListeners)\n {\n listener({ id: requestId, result: cachedResult });\n }\n });\n return;\n }\n\n this.initializeIntercepted = false;\n this.pendingInitializeId = message.id;\n }\n\n await this.worker.sendMessage(message);\n }\n\n async sendNotification(method: string, params?: unknown): Promise<void>\n {\n if (!this.worker)\n {\n throw new Error(\"PersistentTransport is not connected.\");\n }\n\n if (method === \"initialized\" && this.initializeIntercepted)\n {\n return;\n }\n\n await this.worker.sendNotification(method, params);\n }\n\n on<K extends keyof CodexTransportEventMap>(\n event: K,\n listener: CodexTransportEventMap[K],\n ): () => void\n {\n if (!this.worker)\n {\n throw new Error(\"PersistentTransport is not connected.\");\n }\n\n if (event === \"message\")\n {\n const msgListener = listener as (message: JsonRpcMessage) => void;\n\n const wrappedListener = ((incoming: JsonRpcMessage) =>\n {\n if (\n this.pendingInitializeId !== null &&\n \"id\" in incoming &&\n incoming.id === this.pendingInitializeId &&\n \"result\" in incoming\n )\n {\n this.worker?.markInitialized(incoming.result);\n this.pendingInitializeId = null;\n }\n msgListener(incoming);\n }) as CodexTransportEventMap[K];\n\n const workerUnsub = this.worker.onSession(event, wrappedListener);\n this.messageListeners.add(msgListener);\n\n return () =>\n {\n workerUnsub();\n this.messageListeners.delete(msgListener);\n };\n }\n\n if (event === \"error\")\n {\n const errListener = listener as (error: unknown) => void;\n const workerUnsub = this.worker.onSession(event, listener);\n this.errorListeners.add(errListener);\n\n return () =>\n {\n workerUnsub();\n this.errorListeners.delete(errListener);\n };\n }\n\n if (event === \"close\")\n {\n const closeListener = listener as (\n code: number | null,\n signal: NodeJS.Signals | null,\n ) => void;\n const workerUnsub = this.worker.onSession(event, listener);\n this.closeListeners.add(closeListener);\n\n return () =>\n {\n workerUnsub();\n this.closeListeners.delete(closeListener);\n };\n }\n\n return this.worker.onSession(event, listener);\n }\n\n getPendingToolCall(): PendingToolCall | null\n {\n return this.worker?.pendingToolCall ?? null;\n }\n\n async respondToToolCall(result: CodexToolCallResult): Promise<void>\n {\n if (!this.worker?.pendingToolCall)\n {\n throw new Error(\"No pending tool call to respond to.\");\n }\n\n const { requestId } = this.worker.pendingToolCall;\n this.worker.pendingToolCall = null;\n\n await this.worker.sendMessage({\n id: requestId,\n result,\n } as JsonRpcSuccessResponse);\n }\n\n parkToolCall(pending: PendingToolCall): void\n {\n if (!this.worker)\n {\n throw new Error(\"PersistentTransport is not connected.\");\n }\n this.worker.pendingToolCall = pending;\n }\n}\n\nfunction isInitializeRequest(\n message: JsonRpcMessage,\n): message is { id: string | number; method: \"initialize\"; params?: unknown }\n{\n return \"id\" in message && \"method\" in message && message.method === \"initialize\";\n}\n","import { type ChildProcessWithoutNullStreams, spawn, type SpawnOptionsWithoutStdio } from \"node:child_process\";\n\nimport type {\n CodexTransport,\n CodexTransportEventMap,\n JsonRpcMessage,\n} from \"./transport\";\n\nexport interface StdioTransportSettings {\n command?: string;\n args?: string[];\n cwd?: string;\n env?: NodeJS.ProcessEnv;\n}\n\ntype ListenerStore = {\n [K in keyof CodexTransportEventMap]: Set<CodexTransportEventMap[K]>;\n};\n\nconst DEFAULT_COMMAND = \"codex\";\nconst DEFAULT_ARGS = [\"app-server\", \"--listen\", \"stdio://\"];\n\nexport class StdioTransport implements CodexTransport \n{\n private readonly settings: StdioTransportSettings;\n private process: ChildProcessWithoutNullStreams | null = null;\n private readonly listeners: ListenerStore = {\n message: new Set(),\n error: new Set(),\n close: new Set(),\n };\n private stdoutBuffer = \"\";\n\n constructor(settings: StdioTransportSettings = {}) \n {\n this.settings = settings;\n }\n\n connect(): Promise<void>\n {\n if (this.process !== null)\n {\n return Promise.resolve();\n }\n\n const options: SpawnOptionsWithoutStdio = {\n cwd: this.settings.cwd,\n env: this.settings.env,\n stdio: \"pipe\",\n };\n\n const child = spawn(\n this.settings.command ?? DEFAULT_COMMAND,\n this.settings.args ?? DEFAULT_ARGS,\n options,\n );\n\n this.process = child;\n\n child.stdout.setEncoding(\"utf8\");\n child.stdout.on(\"data\", (chunk: string | Buffer) => \n {\n this.handleStdoutChunk(typeof chunk === \"string\" ? chunk : chunk.toString(\"utf8\"));\n });\n\n child.stderr.setEncoding(\"utf8\");\n child.stderr.on(\"data\", (chunk: string | Buffer) => \n {\n this.emit(\"error\", new Error(`codex stderr: ${typeof chunk === \"string\" ? chunk : chunk.toString(\"utf8\")}`));\n });\n\n child.on(\"error\", (error) => \n {\n this.emit(\"error\", error);\n });\n\n child.on(\"close\", (code, signal) =>\n {\n this.process = null;\n this.emit(\"close\", code, signal);\n });\n\n return Promise.resolve();\n }\n\n async disconnect(): Promise<void> \n {\n if (this.process === null) \n {\n return;\n }\n\n const child = this.process;\n this.process = null;\n\n await new Promise<void>((resolve) => \n {\n let finished = false;\n const finish = () => \n {\n if (!finished) \n {\n finished = true;\n resolve();\n }\n };\n\n child.once(\"close\", () => finish());\n child.once(\"exit\", () => finish());\n\n if (!child.killed) \n {\n child.kill();\n }\n\n setTimeout(finish, 250);\n });\n }\n\n async sendMessage(message: JsonRpcMessage): Promise<void> \n {\n if (this.process === null || this.process.stdin.destroyed) \n {\n throw new Error(\"StdioTransport is not connected.\");\n }\n\n const payload = `${JSON.stringify(message)}\\n`;\n\n await new Promise<void>((resolve, reject) => \n {\n this.process?.stdin.write(payload, (error) => \n {\n if (error) \n {\n reject(error);\n return;\n }\n resolve();\n });\n });\n }\n\n async sendNotification(method: string, params?: unknown): Promise<void> \n {\n await this.sendMessage(\n params === undefined ? { method } : { method, params },\n );\n }\n\n on<K extends keyof CodexTransportEventMap>(\n event: K,\n listener: CodexTransportEventMap[K],\n ): () => void \n {\n const listeners = this.listeners[event] as Set<CodexTransportEventMap[K]>;\n listeners.add(listener);\n\n return () => \n {\n listeners.delete(listener);\n };\n }\n\n private handleStdoutChunk(chunk: string): void \n {\n this.stdoutBuffer += chunk;\n\n let lineBreakIndex = this.stdoutBuffer.indexOf(\"\\n\");\n\n while (lineBreakIndex >= 0) \n {\n const line = this.stdoutBuffer.slice(0, lineBreakIndex).trim();\n this.stdoutBuffer = this.stdoutBuffer.slice(lineBreakIndex + 1);\n\n if (line.length > 0) \n {\n try \n {\n const message = JSON.parse(line) as JsonRpcMessage;\n this.emit(\"message\", message);\n }\n catch (error) \n {\n this.emit(\"error\", error);\n }\n }\n\n lineBreakIndex = this.stdoutBuffer.indexOf(\"\\n\");\n }\n }\n\n private emit<K extends keyof CodexTransportEventMap>(\n event: K,\n ...args: Parameters<CodexTransportEventMap[K]>\n ): void \n {\n const listeners = this.listeners[event] as Set<(...handlerArgs: Parameters<CodexTransportEventMap[K]>) => void>;\n\n for (const listener of listeners) \n {\n listener(...args);\n }\n }\n}\n","import type {\n CodexTransport,\n CodexTransportEventMap,\n JsonRpcMessage,\n} from \"./transport\";\n\nexport interface WebSocketTransportSettings {\n url?: string;\n headers?: Record<string, string>;\n}\n\ntype ListenerStore = {\n [K in keyof CodexTransportEventMap]: Set<CodexTransportEventMap[K]>;\n};\n\nconst DEFAULT_WS_URL = \"ws://localhost:3000\";\n\ntype WebSocketConstructor = new (\n url: string,\n protocols?: string | string[],\n init?: { headers?: Record<string, string> },\n) => WebSocket;\n\nexport class WebSocketTransport implements CodexTransport \n{\n private readonly settings: WebSocketTransportSettings;\n private socket: WebSocket | null = null;\n private readonly listeners: ListenerStore = {\n message: new Set(),\n error: new Set(),\n close: new Set(),\n };\n\n constructor(settings: WebSocketTransportSettings = {}) \n {\n this.settings = settings;\n }\n\n async connect(): Promise<void> \n {\n if (this.socket && this.socket.readyState === this.socket.OPEN) \n {\n return;\n }\n\n const WebSocketCtor = (globalThis as { WebSocket?: WebSocketConstructor }).WebSocket;\n if (!WebSocketCtor) \n {\n throw new Error(\"WebSocket is not available in this runtime.\");\n }\n\n const socket = new WebSocketCtor(\n this.settings.url ?? DEFAULT_WS_URL,\n undefined,\n this.settings.headers ? { headers: this.settings.headers } : undefined,\n );\n\n this.socket = socket;\n\n socket.addEventListener(\"message\", (event) => \n {\n this.handleIncomingMessage(event.data);\n });\n\n socket.addEventListener(\"error\", (event) => \n {\n this.emit(\"error\", event);\n });\n\n socket.addEventListener(\"close\", (event) => \n {\n this.socket = null;\n this.emit(\"close\", event.code, null);\n });\n\n await new Promise<void>((resolve, reject) => \n {\n const onOpen = () => \n {\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n resolve();\n };\n\n const onError = (event: Event) => \n {\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n reject(new Error(`WebSocket connection failed: ${String(event.type)}`));\n };\n\n socket.addEventListener(\"open\", onOpen, { once: true });\n socket.addEventListener(\"error\", onError, { once: true });\n });\n }\n\n async disconnect(): Promise<void> \n {\n if (!this.socket) \n {\n return;\n }\n\n const socket = this.socket;\n\n await new Promise<void>((resolve) => \n {\n let finished = false;\n const finish = () => \n {\n if (!finished) \n {\n finished = true;\n resolve();\n }\n };\n\n socket.addEventListener(\"close\", () => finish(), { once: true });\n socket.close();\n setTimeout(finish, 250);\n });\n\n this.socket = null;\n }\n\n sendMessage(message: JsonRpcMessage): Promise<void>\n {\n if (!this.socket || this.socket.readyState !== this.socket.OPEN)\n {\n return Promise.reject(new Error(\"WebSocketTransport is not connected.\"));\n }\n\n this.socket.send(JSON.stringify(message));\n\n return Promise.resolve();\n }\n\n async sendNotification(method: string, params?: unknown): Promise<void> \n {\n await this.sendMessage(\n params === undefined ? { method } : { method, params },\n );\n }\n\n on<K extends keyof CodexTransportEventMap>(\n event: K,\n listener: CodexTransportEventMap[K],\n ): () => void \n {\n const listeners = this.listeners[event] as Set<CodexTransportEventMap[K]>;\n listeners.add(listener);\n\n return () => \n {\n listeners.delete(listener);\n };\n }\n\n private handleIncomingMessage(raw: unknown): void \n {\n try \n {\n if (typeof raw !== \"string\") \n {\n return;\n }\n\n const message = JSON.parse(raw) as JsonRpcMessage;\n this.emit(\"message\", message);\n }\n catch (error) \n {\n this.emit(\"error\", error);\n }\n }\n\n private emit<K extends keyof CodexTransportEventMap>(\n event: K,\n ...args: Parameters<CodexTransportEventMap[K]>\n ): void \n {\n const listeners = this.listeners[event] as Set<(...handlerArgs: Parameters<CodexTransportEventMap[K]>) => void>;\n\n for (const listener of listeners) \n {\n listener(...args);\n }\n }\n}\n","import type {\n CodexTransport,\n CodexTransportEventMap,\n JsonRpcId,\n JsonRpcMessage,\n} from \"./transport\";\n\nexport interface CodexWorkerSettings {\n transportFactory: () => CodexTransport;\n idleTimeoutMs: number;\n}\n\nexport interface PendingToolCall {\n requestId: JsonRpcId;\n callId: string;\n toolName: string;\n args: unknown;\n threadId: string;\n}\n\ntype SessionListenerEntry<K extends keyof CodexTransportEventMap> = {\n event: K;\n listener: CodexTransportEventMap[K];\n unsubscribe: () => void;\n};\n\nexport class CodexWorker\n{\n state: \"idle\" | \"busy\" | \"disconnected\" = \"disconnected\";\n initialized = false;\n initializeResult: unknown = undefined;\n pendingToolCall: PendingToolCall | null = null;\n\n private inner: CodexTransport | null = null;\n private readonly settings: CodexWorkerSettings;\n private idleTimer: ReturnType<typeof setTimeout> | null = null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private sessionListeners: SessionListenerEntry<any>[] = [];\n\n constructor(settings: CodexWorkerSettings)\n {\n this.settings = settings;\n }\n\n async ensureConnected(): Promise<void>\n {\n if (this.inner)\n {\n return;\n }\n\n this.inner = this.settings.transportFactory();\n\n this.inner.on(\"close\", () =>\n {\n this.initialized = false;\n this.initializeResult = undefined;\n this.inner = null;\n this.state = \"disconnected\";\n });\n\n this.inner.on(\"error\", () =>\n {\n this.initialized = false;\n this.initializeResult = undefined;\n this.inner = null;\n this.state = \"disconnected\";\n });\n\n await this.inner.connect();\n }\n\n acquire(): void\n {\n this.clearSessionListeners();\n if (this.idleTimer)\n {\n clearTimeout(this.idleTimer);\n this.idleTimer = null;\n }\n this.state = \"busy\";\n }\n\n release(): void\n {\n this.clearSessionListeners();\n this.state = \"idle\";\n\n if (this.settings.idleTimeoutMs > 0)\n {\n this.idleTimer = setTimeout(() =>\n {\n void this.shutdown();\n }, this.settings.idleTimeoutMs);\n }\n }\n\n markInitialized(result: unknown): void\n {\n this.initialized = true;\n this.initializeResult = result;\n }\n\n onSession<K extends keyof CodexTransportEventMap>(\n event: K,\n listener: CodexTransportEventMap[K],\n ): () => void\n {\n if (!this.inner)\n {\n throw new Error(\"Worker has no active transport.\");\n }\n\n const unsubscribe = this.inner.on(event, listener);\n this.sessionListeners.push({ event, listener, unsubscribe });\n return unsubscribe;\n }\n\n clearSessionListeners(): void\n {\n for (const entry of this.sessionListeners)\n {\n entry.unsubscribe();\n }\n this.sessionListeners = [];\n }\n\n async sendMessage(message: JsonRpcMessage): Promise<void>\n {\n if (!this.inner)\n {\n throw new Error(\"Worker has no active transport.\");\n }\n await this.inner.sendMessage(message);\n }\n\n async sendNotification(method: string, params?: unknown): Promise<void>\n {\n if (!this.inner)\n {\n throw new Error(\"Worker has no active transport.\");\n }\n await this.inner.sendNotification(method, params);\n }\n\n async shutdown(): Promise<void>\n {\n if (this.idleTimer)\n {\n clearTimeout(this.idleTimer);\n this.idleTimer = null;\n }\n\n this.clearSessionListeners();\n\n if (this.inner)\n {\n const transport = this.inner;\n this.inner = null;\n this.initialized = false;\n this.initializeResult = undefined;\n this.state = \"disconnected\";\n await transport.disconnect();\n }\n else\n {\n this.state = \"disconnected\";\n }\n }\n}\n","import { CodexProviderError } from \"../errors\";\nimport type { CodexTransport } from \"./transport\";\nimport { CodexWorker } from \"./worker\";\n\nexport interface CodexWorkerPoolSettings\n{\n poolSize?: number;\n transportFactory: () => CodexTransport;\n idleTimeoutMs?: number;\n}\n\ninterface AcquireOptions\n{\n threadId?: string;\n signal?: AbortSignal;\n}\n\ninterface AcquireWaiter\n{\n threadId: string | undefined;\n resolve: (worker: CodexWorker) => void;\n reject: (error: Error) => void;\n signal: AbortSignal | undefined;\n abortHandler: (() => void) | undefined;\n}\n\nexport class CodexWorkerPool\n{\n private readonly workers: CodexWorker[];\n private shutdownCalled = false;\n private readonly waiters: AcquireWaiter[] = [];\n\n constructor(settings: CodexWorkerPoolSettings)\n {\n const size = settings.poolSize ?? 1;\n const idleTimeoutMs = settings.idleTimeoutMs ?? 300_000;\n\n this.workers = Array.from({ length: size }, () =>\n new CodexWorker({\n transportFactory: settings.transportFactory,\n idleTimeoutMs,\n }),\n );\n }\n\n async acquire(options?: AcquireOptions): Promise<CodexWorker>\n {\n if (this.shutdownCalled)\n {\n throw new CodexProviderError(\"Worker pool has been shut down.\");\n }\n\n // 1. Exact match: worker reserved for this thread's pending tool call\n if (options?.threadId)\n {\n const reserved = this.workers.find(\n (w) => (w.state === \"idle\" || w.state === \"disconnected\")\n && w.pendingToolCall?.threadId === options.threadId,\n );\n\n if (reserved)\n {\n reserved.acquire();\n return reserved;\n }\n }\n\n // 2. Any unreserved worker (no pending tool call from another thread)\n const worker = this.workers.find(\n (w) => (w.state === \"idle\" || w.state === \"disconnected\")\n && !w.pendingToolCall,\n );\n\n if (!worker)\n {\n if (options?.signal?.aborted)\n {\n throw new CodexProviderError(\"Worker acquisition aborted while waiting.\");\n }\n\n return new Promise<CodexWorker>((resolve, reject) =>\n {\n const waiter: AcquireWaiter = {\n threadId: options?.threadId,\n resolve,\n reject,\n signal: options?.signal,\n abortHandler: undefined,\n };\n\n if (waiter.signal)\n {\n waiter.abortHandler = () =>\n {\n this.removeWaiter(waiter);\n waiter.reject(new CodexProviderError(\"Worker acquisition aborted while waiting.\"));\n };\n waiter.signal.addEventListener(\"abort\", waiter.abortHandler, { once: true });\n }\n\n this.waiters.push(waiter);\n });\n }\n\n worker.acquire();\n return worker;\n }\n\n release(worker: CodexWorker): void\n {\n // Always clear session listeners from the previous session before\n // reuse, even during direct FIFO handoff. Without this, stale\n // listeners can leak onto the underlying transport when the\n // higher-level disconnect path didn't (or couldn't) clean up.\n worker.clearSessionListeners();\n\n // An aborted waiter can never appear here: the abort handler\n // synchronously removes it from the queue via removeWaiter(),\n // so shift() will only ever return live (non-aborted) waiters.\n\n // Try to match a waiter that needs this specific worker's pending tool call\n if (worker.pendingToolCall)\n {\n const idx = this.waiters.findIndex(w => w.threadId === worker.pendingToolCall?.threadId);\n if (idx >= 0)\n {\n const [waiter] = this.waiters.splice(idx, 1);\n this.clearWaiterAbortHandler(waiter!);\n waiter!.resolve(worker);\n return;\n }\n }\n\n // Otherwise: existing FIFO behavior\n const waiter = this.waiters.shift();\n if (waiter)\n {\n this.clearWaiterAbortHandler(waiter); // prevent stale abort handler from firing after resolve\n waiter.resolve(worker);\n }\n else\n {\n worker.release();\n }\n }\n\n async shutdown(): Promise<void>\n {\n this.shutdownCalled = true;\n while (this.waiters.length > 0)\n {\n const waiter = this.waiters.shift()!;\n this.clearWaiterAbortHandler(waiter);\n waiter.reject(new CodexProviderError(\"Worker pool has been shut down.\"));\n }\n await Promise.all(this.workers.map((w) => w.shutdown()));\n }\n\n private removeWaiter(target: AcquireWaiter): void\n {\n const index = this.waiters.indexOf(target);\n if (index >= 0)\n {\n this.waiters.splice(index, 1);\n }\n }\n\n /** Remove the abort listener so it doesn't fire after the waiter is already served. */\n private clearWaiterAbortHandler(waiter: AcquireWaiter): void\n {\n if (!waiter.signal || !waiter.abortHandler)\n {\n return;\n }\n waiter.signal.removeEventListener(\"abort\", waiter.abortHandler);\n waiter.abortHandler = undefined;\n }\n}\n","import type { AppServerClient } from \"./client/app-server-client\";\nimport { CodexProviderError } from \"./errors\";\nimport type {\n CodexToolCallRequestParams,\n CodexToolCallResult,\n CodexToolResultContentItem,\n} from \"./protocol/types\";\nimport { stripUndefined } from \"./utils/object\";\n\nexport interface DynamicToolExecutionContext\n{\n threadId?: string;\n turnId?: string;\n callId?: string;\n toolName: string;\n}\n\nexport type DynamicToolHandler = (\n args: unknown,\n context: DynamicToolExecutionContext,\n) => Promise<CodexToolCallResult>;\n\n/** Full tool definition: schema advertised to Codex + local execution handler. */\nexport interface DynamicToolDefinition\n{\n description: string;\n inputSchema: Record<string, unknown>;\n execute: DynamicToolHandler;\n}\n\nexport interface DynamicToolsDispatcherSettings\n{\n /** Tools with full schema advertised to Codex. Handlers are registered automatically. */\n tools?: Record<string, DynamicToolDefinition>;\n /** Legacy handler-only registration (no schema). Tools are not advertised to Codex. */\n handlers?: Record<string, DynamicToolHandler>;\n timeoutMs?: number;\n onDebugEvent?: (event: {\n event: string;\n data?: unknown;\n }) => void;\n}\n\nfunction toTextResult(message: string, success: boolean): CodexToolCallResult \n{\n const contentItems: CodexToolResultContentItem[] = [{ type: \"inputText\", text: message }];\n return { success, contentItems };\n}\n\nfunction withTimeout<T>(promise: Promise<T>, timeoutMs: number): Promise<T> \n{\n return new Promise<T>((resolve, reject) => \n {\n const timer = setTimeout(() => \n {\n reject(new CodexProviderError(`Dynamic tool execution timed out after ${timeoutMs}ms.`));\n }, timeoutMs);\n\n promise\n .then((value) => \n {\n clearTimeout(timer);\n resolve(value);\n })\n .catch((error) =>\n {\n clearTimeout(timer);\n reject(error instanceof Error ? error : new Error(String(error)));\n });\n });\n}\n\nexport class DynamicToolsDispatcher \n{\n private readonly handlers = new Map<string, DynamicToolHandler>();\n private readonly timeoutMs: number;\n private readonly onDebugEvent?: DynamicToolsDispatcherSettings[\"onDebugEvent\"];\n\n constructor(settings: DynamicToolsDispatcherSettings = {})\n {\n this.timeoutMs = settings.timeoutMs ?? 30_000;\n this.onDebugEvent = settings.onDebugEvent;\n\n if (settings.tools)\n {\n for (const [name, def] of Object.entries(settings.tools))\n {\n this.register(name, def.execute);\n this.onDebugEvent?.({\n event: \"dynamic-tool-registered\",\n data: { name, source: \"tools\" },\n });\n }\n }\n\n if (settings.handlers)\n {\n for (const [name, handler] of Object.entries(settings.handlers))\n {\n this.register(name, handler);\n this.onDebugEvent?.({\n event: \"dynamic-tool-registered\",\n data: { name, source: \"handlers\" },\n });\n }\n }\n }\n\n register(name: string, handler: DynamicToolHandler): void \n {\n this.handlers.set(name, handler);\n }\n\n attach(client: AppServerClient): () => void \n {\n return client.onToolCallRequest(async (params) => this.dispatch(params));\n }\n\n async dispatch(params: CodexToolCallRequestParams): Promise<CodexToolCallResult> \n {\n const toolName = params.tool ?? params.toolName;\n\n if (!toolName) \n {\n this.onDebugEvent?.({\n event: \"dynamic-tool-missing-name\",\n data: {\n callId: params.callId,\n threadId: params.threadId,\n turnId: params.turnId,\n },\n });\n return toTextResult(\"Dynamic tool call is missing the tool name.\", false);\n }\n\n const handler = this.handlers.get(toolName);\n\n if (!handler) \n {\n this.onDebugEvent?.({\n event: \"dynamic-tool-missing-handler\",\n data: {\n toolName,\n callId: params.callId,\n threadId: params.threadId,\n turnId: params.turnId,\n },\n });\n return toTextResult(`No dynamic tool handler registered for \"${toolName}\".`, false);\n }\n\n const context: DynamicToolExecutionContext = stripUndefined({\n toolName,\n threadId: params.threadId,\n turnId: params.turnId,\n callId: params.callId,\n });\n\n const args = params.arguments ?? params.input;\n const startedAt = Date.now();\n\n this.onDebugEvent?.({\n event: \"dynamic-tool-dispatch-start\",\n data: {\n toolName,\n callId: params.callId,\n threadId: params.threadId,\n turnId: params.turnId,\n hasArguments: args !== undefined,\n },\n });\n\n try \n {\n const result = await withTimeout(handler(args, context), this.timeoutMs);\n\n this.onDebugEvent?.({\n event: \"dynamic-tool-dispatch-success\",\n data: {\n toolName,\n callId: params.callId,\n durationMs: Date.now() - startedAt,\n success: result.success,\n contentItemsCount: result.contentItems.length,\n },\n });\n\n return result;\n }\n catch (error) \n {\n const message = error instanceof Error ? error.message : \"Dynamic tool execution failed.\";\n\n this.onDebugEvent?.({\n event: \"dynamic-tool-dispatch-error\",\n data: {\n toolName,\n callId: params.callId,\n durationMs: Date.now() - startedAt,\n message,\n },\n });\n\n return toTextResult(message, false);\n }\n }\n}\n","{\n \"name\": \"@janole/ai-sdk-provider-codex-asp\",\n \"version\": \"0.3.1\",\n \"description\": \"Vercel AI SDK v6 custom provider for the Codex App Server Protocol.\",\n \"license\": \"MIT\",\n \"author\": \"Jan Ole Suhr\",\n \"type\": \"module\",\n \"sideEffects\": false,\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n }\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"engines\": {\n \"node\": \">=20\"\n },\n \"scripts\": {\n \"codex:generate-types\": \"codex app-server generate-ts --experimental -o src/protocol/app-server-protocol\",\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"clean\": \"rimraf dist\",\n \"lint\": \"eslint .\",\n \"lint:fix\": \"eslint . --fix\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"typecheck\": \"tsc --noEmit\",\n \"qa\": \"npm run lint && npm run typecheck && npm run test\",\n \"prepublishOnly\": \"npm run clean && npm run build && npm run qa\"\n },\n \"keywords\": [\n \"ai\",\n \"sdk\",\n \"vercel\",\n \"provider\",\n \"typescript\",\n \"codex\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/janole/ai-sdk-provider-codex-asp.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/janole/ai-sdk-provider-codex-asp/issues\"\n },\n \"homepage\": \"https://github.com/janole/ai-sdk-provider-codex-asp#readme\",\n \"peerDependencies\": {\n \"ai\": \"^6.0.0\"\n },\n \"devDependencies\": {\n \"@stylistic/eslint-plugin\": \"^5.9.0\",\n \"@types/node\": \"^22.13.10\",\n \"@typescript-eslint/eslint-plugin\": \"^8.25.0\",\n \"@typescript-eslint/parser\": \"^8.25.0\",\n \"eslint\": \"^9.21.0\",\n \"eslint-plugin-simple-import-sort\": \"^12.1.1\",\n \"eslint-plugin-unicorn\": \"^63.0.0\",\n \"rimraf\": \"^6.0.1\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"^5.8.2\",\n \"vitest\": \"^3.0.7\"\n },\n \"dependencies\": {\n \"@ai-sdk/provider\": \"^3.0.8\",\n \"@ai-sdk/provider-utils\": \"^4.0.15\"\n }\n}\n","import pkg from \"../package.json\" with { type: \"json\" };\n\n/** Package name from package.json. */\nexport const PACKAGE_NAME: string = pkg.name;\n\n/** Package version from package.json. */\nexport const PACKAGE_VERSION: string = pkg.version;\n","import type { LanguageModelV3StreamPart } from \"@ai-sdk/provider\";\n\nimport { stripUndefined } from \"../utils/object\";\n\nexport const CODEX_PROVIDER_ID = \"@janole/ai-sdk-provider-codex-asp\";\n\nexport function codexProviderMetadata(threadId: string | undefined, turnId?: string)\n{\n if (!threadId)\n {\n return undefined;\n }\n\n return { [CODEX_PROVIDER_ID]: stripUndefined({ threadId, turnId }) };\n}\n\nexport function withProviderMetadata<T extends LanguageModelV3StreamPart>(\n part: T,\n threadId: string | undefined,\n turnId?: string,\n): T\n{\n const meta = codexProviderMetadata(threadId, turnId);\n return meta ? { ...part, providerMetadata: meta } : part;\n}\n","import type {\n LanguageModelV3FinishReason,\n LanguageModelV3StreamPart,\n LanguageModelV3Usage,\n} from \"@ai-sdk/provider\";\n\nimport type { AgentMessageDeltaNotification } from \"./app-server-protocol/v2/AgentMessageDeltaNotification\";\nimport type { CommandExecutionOutputDeltaNotification } from \"./app-server-protocol/v2/CommandExecutionOutputDeltaNotification\";\nimport type { ItemCompletedNotification } from \"./app-server-protocol/v2/ItemCompletedNotification\";\nimport type { ItemStartedNotification } from \"./app-server-protocol/v2/ItemStartedNotification\";\nimport type { McpToolCallProgressNotification } from \"./app-server-protocol/v2/McpToolCallProgressNotification\";\nimport type { ReasoningSummaryPartAddedNotification } from \"./app-server-protocol/v2/ReasoningSummaryPartAddedNotification\";\nimport type { ThreadTokenUsageUpdatedNotification } from \"./app-server-protocol/v2/ThreadTokenUsageUpdatedNotification\";\nimport type { TurnCompletedNotification } from \"./app-server-protocol/v2/TurnCompletedNotification\";\nimport type { TurnStartedNotification } from \"./app-server-protocol/v2/TurnStartedNotification\";\nimport type { TurnStatus } from \"./app-server-protocol/v2/TurnStatus\";\nimport { withProviderMetadata } from \"./provider-metadata\";\n\nexport interface CodexEventMapperInput\n{\n method: string;\n params?: unknown;\n}\n\n/** Shared shape for reasoning/plan/fileChange delta params. */\ninterface DeltaParams\n{\n itemId?: string;\n delta?: string;\n}\n\nconst EMPTY_USAGE: LanguageModelV3Usage = {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n};\n\nfunction toFinishReason(status: TurnStatus | undefined): LanguageModelV3FinishReason\n{\n switch (status)\n {\n case \"completed\":\n return { unified: \"stop\", raw: \"completed\" };\n case \"failed\":\n return { unified: \"error\", raw: \"failed\" };\n case \"interrupted\":\n return { unified: \"other\", raw: \"interrupted\" };\n default:\n return { unified: \"other\", raw: undefined };\n }\n}\n\nexport interface CodexEventMapperOptions\n{\n /** Emit plan updates as tool-call/tool-result parts. Default: true. */\n emitPlanUpdates?: boolean;\n}\n\n/**\n * Extract threadId from notification params. All codex protocol notifications\n * include threadId as a top-level field. Returns undefined for notifications\n * that don't carry a threadId (e.g. codex/event/* wrappers, account events).\n */\nexport function extractNotificationThreadId(params: unknown): string | undefined\n{\n if (params && typeof params === \"object\" && \"threadId\" in params)\n {\n const val = (params as Record<string, unknown>)[\"threadId\"];\n return typeof val === \"string\" ? val : undefined;\n }\n return undefined;\n}\n\nexport class CodexEventMapper\n{\n private readonly options: Required<CodexEventMapperOptions>;\n private streamStarted = false;\n private readonly openTextParts = new Set<string>();\n private readonly textDeltaReceived = new Set<string>();\n private readonly openReasoningParts = new Set<string>();\n private readonly openToolCalls = new Map<string, { toolName: string; output: string }>();\n private readonly planSequenceByTurnId = new Map<string, number>();\n private threadId: string | undefined;\n private turnId: string | undefined;\n private latestUsage: LanguageModelV3Usage | undefined;\n\n constructor(options?: CodexEventMapperOptions)\n {\n this.options = {\n emitPlanUpdates: options?.emitPlanUpdates ?? true,\n };\n }\n\n setThreadId(threadId: string): void\n {\n this.threadId = threadId;\n }\n\n setTurnId(turnId: string): void\n {\n this.turnId = turnId;\n }\n\n getTurnId(): string | undefined\n {\n return this.turnId;\n }\n\n private nextPlanSequence(turnId: string): number\n {\n const next = (this.planSequenceByTurnId.get(turnId) ?? 0) + 1;\n this.planSequenceByTurnId.set(turnId, next);\n return next;\n }\n\n map(event: CodexEventMapperInput): LanguageModelV3StreamPart[]\n {\n const parts: LanguageModelV3StreamPart[] = [];\n\n const withMeta = <T extends LanguageModelV3StreamPart>(part: T): T =>\n withProviderMetadata(part, this.threadId, this.turnId);\n\n const pushStreamStart = () =>\n {\n if (!this.streamStarted)\n {\n parts.push({ type: \"stream-start\", warnings: [] });\n this.streamStarted = true;\n }\n };\n\n const pushReasoningDelta = (id: string, delta: string) =>\n {\n pushStreamStart();\n\n if (!this.openReasoningParts.has(id))\n {\n this.openReasoningParts.add(id);\n parts.push(withMeta({ type: \"reasoning-start\", id }));\n }\n\n if (!delta)\n {\n return;\n }\n\n parts.push(withMeta({ type: \"reasoning-delta\", id, delta }));\n };\n\n switch (event.method)\n {\n case \"turn/started\": {\n const turnStartedParams = event.params as TurnStartedNotification | undefined;\n if (turnStartedParams?.turn?.id)\n {\n this.turnId = turnStartedParams.turn.id;\n }\n pushStreamStart();\n break;\n }\n\n case \"item/started\": {\n const params = (event.params ?? {}) as ItemStartedNotification;\n const item = params.item;\n if (!item?.id)\n {\n break;\n }\n\n switch (item.type)\n {\n case \"agentMessage\": {\n pushStreamStart();\n this.openTextParts.add(item.id);\n parts.push(withMeta({ type: \"text-start\", id: item.id }));\n break;\n }\n case \"commandExecution\": {\n pushStreamStart();\n const toolName = \"codex_command_execution\";\n this.openToolCalls.set(item.id, { toolName, output: \"\" });\n parts.push(withMeta({\n type: \"tool-call\",\n toolCallId: item.id,\n toolName,\n input: JSON.stringify({ command: item.command, cwd: item.cwd }),\n providerExecuted: true,\n dynamic: true,\n }));\n break;\n }\n case \"reasoning\":\n case \"plan\":\n case \"fileChange\":\n case \"mcpToolCall\":\n case \"collabAgentToolCall\":\n case \"webSearch\":\n case \"imageView\":\n case \"contextCompaction\":\n case \"enteredReviewMode\":\n case \"exitedReviewMode\": {\n pushReasoningDelta(item.id, \"\");\n break;\n }\n default:\n break;\n }\n break;\n }\n\n case \"item/agentMessage/delta\": {\n const delta = (event.params ?? {}) as AgentMessageDeltaNotification;\n if (!delta.itemId || !delta.delta)\n {\n break;\n }\n\n pushStreamStart();\n\n if (!this.openTextParts.has(delta.itemId))\n {\n this.openTextParts.add(delta.itemId);\n parts.push(withMeta({ type: \"text-start\", id: delta.itemId }));\n }\n\n parts.push(withMeta({ type: \"text-delta\", id: delta.itemId, delta: delta.delta }));\n this.textDeltaReceived.add(delta.itemId);\n break;\n }\n\n case \"item/completed\": {\n const params = (event.params ?? {}) as ItemCompletedNotification;\n const item = params.item;\n if (!item?.id)\n {\n break;\n }\n\n if (item.type === \"agentMessage\")\n {\n // Fallback: if no deltas were streamed for this item,\n // emit the full text from the completed event so the\n // message isn't silently lost.\n if (!this.textDeltaReceived.has(item.id) && item.text)\n {\n pushStreamStart();\n\n if (!this.openTextParts.has(item.id))\n {\n this.openTextParts.add(item.id);\n parts.push(withMeta({ type: \"text-start\", id: item.id }));\n }\n\n parts.push(withMeta({ type: \"text-delta\", id: item.id, delta: item.text }));\n }\n\n if (this.openTextParts.has(item.id))\n {\n parts.push(withMeta({ type: \"text-end\", id: item.id }));\n this.openTextParts.delete(item.id);\n }\n }\n else if (item.type === \"commandExecution\" && this.openToolCalls.has(item.id))\n {\n const tracked = this.openToolCalls.get(item.id)!;\n const output = item.aggregatedOutput ?? tracked.output;\n const exitCode = item.exitCode;\n const status = item.status;\n\n parts.push(withMeta({\n type: \"tool-result\",\n toolCallId: item.id,\n toolName: tracked.toolName,\n result: { output, exitCode, status },\n }));\n this.openToolCalls.delete(item.id);\n }\n else if (this.openReasoningParts.has(item.id))\n {\n parts.push(withMeta({ type: \"reasoning-end\", id: item.id }));\n this.openReasoningParts.delete(item.id);\n }\n break;\n }\n\n case \"item/reasoning/textDelta\":\n case \"item/reasoning/summaryTextDelta\":\n case \"item/plan/delta\":\n case \"item/fileChange/outputDelta\": {\n const delta = (event.params ?? {}) as DeltaParams;\n if (delta.itemId && delta.delta)\n {\n pushReasoningDelta(delta.itemId, delta.delta);\n }\n break;\n }\n\n case \"item/reasoning/summaryPartAdded\": {\n const params = (event.params ?? {}) as ReasoningSummaryPartAddedNotification;\n if (params.itemId)\n {\n pushReasoningDelta(params.itemId, \"\\n\\n\");\n }\n break;\n }\n\n // codex/event/agent_reasoning mirrors canonical reasoning summary\n // stream events in current logs. Ignore wrapper to avoid duplicate\n // reasoning text in consumers.\n case \"codex/event/agent_reasoning\":\n break;\n\n // codex/event/agent_reasoning_section_break is the wrapper form of\n // item/reasoning/summaryPartAdded (identical 1:1). Handled by the\n // canonical event above — skip the wrapper to avoid double \"\\n\\n\".\n case \"codex/event/agent_reasoning_section_break\":\n break;\n\n case \"turn/plan/updated\": {\n if (!this.options.emitPlanUpdates)\n {\n break;\n }\n\n const params = (event.params ?? {}) as {\n turnId?: string;\n explanation?: string | null;\n plan?: Array<{ step: string; status: string }>;\n };\n const turnId = params.turnId;\n const plan = params.plan;\n if (turnId && plan)\n {\n pushStreamStart();\n const planSequence = this.nextPlanSequence(turnId);\n const toolCallId = `plan:${turnId}:${planSequence}`;\n const toolName = \"codex_plan_update\";\n\n parts.push(withMeta({\n type: \"tool-call\",\n toolCallId,\n toolName,\n input: JSON.stringify({}),\n providerExecuted: true,\n dynamic: true,\n }));\n\n parts.push(withMeta({\n type: \"tool-result\",\n toolCallId,\n toolName,\n result: { plan, explanation: params.explanation ?? undefined },\n }));\n }\n break;\n }\n\n // codex/event/plan_update is the wrapper form of turn/plan/updated (1:1).\n case \"codex/event/plan_update\":\n break;\n\n // NOTE: turn/diff/updated and codex/event/turn_diff are intentionally\n // NOT mapped. They carry full unified diffs (often 50-100 KB) which,\n // when emitted as reasoning deltas, crash or freeze the frontend\n // markdown renderer. If these need to surface in the UI, they should\n // use a dedicated part type with lazy/collapsed rendering — not\n // reasoning text.\n case \"turn/diff/updated\":\n case \"codex/event/turn_diff\":\n break;\n\n case \"item/commandExecution/outputDelta\": {\n const delta = (event.params ?? {}) as CommandExecutionOutputDeltaNotification;\n if (delta.itemId && delta.delta && this.openToolCalls.has(delta.itemId))\n {\n const tracked = this.openToolCalls.get(delta.itemId)!;\n tracked.output += delta.delta;\n parts.push(withMeta({\n type: \"tool-result\",\n toolCallId: delta.itemId,\n toolName: tracked.toolName,\n result: { output: tracked.output },\n preliminary: true,\n }));\n }\n break;\n }\n\n case \"codex/event/mcp_tool_call_begin\": {\n const params = (event.params ?? {}) as {\n msg?: {\n call_id?: string;\n invocation?: { server?: string; tool?: string; arguments?: unknown };\n };\n };\n const callId = params.msg?.call_id;\n const inv = params.msg?.invocation;\n if (callId && inv)\n {\n pushStreamStart();\n const toolName = `mcp:${inv.server}/${inv.tool}`;\n this.openToolCalls.set(callId, { toolName, output: \"\" });\n parts.push(withMeta({\n type: \"tool-call\",\n toolCallId: callId,\n toolName,\n input: JSON.stringify(inv.arguments ?? {}),\n providerExecuted: true,\n dynamic: true,\n }));\n }\n break;\n }\n\n case \"codex/event/mcp_tool_call_end\": {\n const params = (event.params ?? {}) as {\n msg?: {\n call_id?: string;\n result?: { Ok?: { content?: Array<{ type: string; text?: string }> }; Err?: unknown };\n };\n };\n const callId = params.msg?.call_id;\n if (callId && this.openToolCalls.has(callId))\n {\n const tracked = this.openToolCalls.get(callId)!;\n const result = params.msg?.result;\n const textParts = result?.Ok?.content?.filter(c => c.type === \"text\").map(c => c.text) ?? [];\n const output = textParts.join(\"\\n\") || (result?.Err ? JSON.stringify(result.Err) : \"\");\n\n parts.push(withMeta({\n type: \"tool-result\",\n toolCallId: callId,\n toolName: tracked.toolName,\n result: { output },\n }));\n this.openToolCalls.delete(callId);\n }\n break;\n }\n\n case \"item/mcpToolCall/progress\": {\n const params = (event.params ?? {}) as McpToolCallProgressNotification;\n if (params.itemId && params.message)\n {\n pushReasoningDelta(params.itemId, params.message);\n }\n break;\n }\n\n case \"item/tool/callStarted\": {\n const params = (event.params ?? {}) as { callId?: string; tool?: string };\n if (params.callId && params.tool)\n {\n pushStreamStart();\n parts.push(withMeta({ type: \"tool-input-start\", id: params.callId, toolName: params.tool, dynamic: true }));\n }\n break;\n }\n\n case \"item/tool/callDelta\": {\n const params = (event.params ?? {}) as { callId?: string; delta?: string };\n if (params.callId && params.delta)\n {\n parts.push(withMeta({ type: \"tool-input-delta\", id: params.callId, delta: params.delta }));\n }\n break;\n }\n\n case \"item/tool/callFinished\": {\n const params = (event.params ?? {}) as { callId?: string };\n if (params.callId)\n {\n parts.push(withMeta({ type: \"tool-input-end\", id: params.callId }));\n }\n break;\n }\n\n case \"thread/tokenUsage/updated\": {\n const params = (event.params ?? {}) as ThreadTokenUsageUpdatedNotification;\n const last = params.tokenUsage?.last;\n if (last)\n {\n this.latestUsage = {\n inputTokens: {\n total: last.inputTokens,\n noCache: undefined,\n cacheRead: last.cachedInputTokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: last.outputTokens,\n text: undefined,\n reasoning: last.reasoningOutputTokens,\n },\n };\n }\n break;\n }\n\n case \"turn/completed\": {\n pushStreamStart();\n\n for (const itemId of this.openTextParts)\n {\n parts.push(withMeta({ type: \"text-end\", id: itemId }));\n }\n this.openTextParts.clear();\n\n for (const itemId of this.openReasoningParts)\n {\n parts.push(withMeta({ type: \"reasoning-end\", id: itemId }));\n }\n this.openReasoningParts.clear();\n\n for (const [itemId, tracked] of this.openToolCalls)\n {\n parts.push(withMeta({\n type: \"tool-result\",\n toolCallId: itemId,\n toolName: tracked.toolName,\n result: { output: tracked.output },\n }));\n }\n this.openToolCalls.clear();\n\n const completed = (event.params ?? {}) as TurnCompletedNotification;\n if (completed.turn?.id)\n {\n this.planSequenceByTurnId.delete(completed.turn.id);\n }\n const usage = this.latestUsage ?? EMPTY_USAGE;\n parts.push(withMeta({ type: \"finish\", finishReason: toFinishReason(completed.turn?.status), usage }));\n break;\n }\n\n default:\n break;\n }\n\n return parts;\n }\n}\n","import type { AppServerClient } from \"./client/app-server-client\";\nimport type { UserInput } from \"./protocol/app-server-protocol/v2/UserInput\";\nimport type {\n CodexTurnInterruptParams,\n CodexTurnInterruptResult,\n CodexTurnStartParams,\n CodexTurnStartResult,\n} from \"./protocol/types\";\n\nexport interface CodexSession\n{\n readonly threadId: string;\n readonly turnId: string | undefined;\n isActive(): boolean;\n injectMessage(input: string | UserInput[]): Promise<void>;\n interrupt(): Promise<void>;\n}\n\nexport class CodexSessionImpl implements CodexSession\n{\n private readonly _threadId: string;\n private _turnId: string | undefined;\n private _active = true;\n private readonly client: AppServerClient;\n private readonly interruptTimeoutMs: number;\n\n constructor(opts: {\n client: AppServerClient;\n threadId: string;\n turnId: string | undefined;\n interruptTimeoutMs: number;\n })\n {\n this.client = opts.client;\n this._threadId = opts.threadId;\n this._turnId = opts.turnId;\n this.interruptTimeoutMs = opts.interruptTimeoutMs;\n }\n\n get threadId(): string\n {\n return this._threadId;\n }\n\n get turnId(): string | undefined\n {\n return this._turnId;\n }\n\n /** @internal Called by the model when turn/started arrives with a turnId. */\n setTurnId(turnId: string): void\n {\n this._turnId = turnId;\n }\n\n /** @internal Called by the model when the turn completes or the stream closes. */\n markInactive(): void\n {\n this._active = false;\n }\n\n isActive(): boolean\n {\n return this._active;\n }\n\n /**\n * Inject follow-up input into the current thread.\n *\n * Uses turn/start which the app-server routes through steer_input when a\n * turn is already active, or starts a new turn otherwise. This avoids the\n * strict timing requirements of turn/steer (which needs codex/event/task_started\n * before it accepts input). We may revisit turn/steer in the future.\n */\n async injectMessage(input: string | UserInput[]): Promise<void>\n {\n if (!this._active)\n {\n throw new Error(\"Session is no longer active.\");\n }\n\n const userInput: UserInput[] = typeof input === \"string\"\n ? [{ type: \"text\", text: input, text_elements: [] }]\n : input;\n\n const turnStartParams: CodexTurnStartParams = {\n threadId: this._threadId,\n input: userInput,\n };\n\n const result = await this.client.request<CodexTurnStartResult & { turn?: { id?: string } }>(\"turn/start\", turnStartParams);\n\n // Update turnId if the server started a new turn\n const newTurnId = result.turnId ?? result.turn?.id;\n if (newTurnId)\n {\n this._turnId = newTurnId;\n }\n }\n\n async interrupt(): Promise<void>\n {\n if (!this._active || !this._turnId)\n {\n return;\n }\n\n const interruptParams: CodexTurnInterruptParams = {\n threadId: this._threadId,\n turnId: this._turnId,\n };\n\n await this.client.request<CodexTurnInterruptResult>(\n \"turn/interrupt\",\n interruptParams,\n this.interruptTimeoutMs,\n );\n }\n}\n","import { randomUUID } from \"node:crypto\";\nimport { unlink, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\n\nimport type { LanguageModelV3FilePart, LanguageModelV3Prompt } from \"@ai-sdk/provider\";\n\nimport type { CodexTurnInputItem, CodexTurnInputText } from \"../protocol/types\";\n\n/**\n * Extracts system messages from the prompt and concatenates them into a single\n * string suitable for `developerInstructions` on `thread/start` or\n * `thread/resume`. Returns `undefined` when no system content is present.\n */\nexport function mapSystemPrompt(prompt: LanguageModelV3Prompt): string | undefined\n{\n const chunks: string[] = [];\n\n for (const message of prompt)\n {\n if (message.role === \"system\")\n {\n const text = message.content.trim();\n if (text.length > 0)\n {\n chunks.push(text);\n }\n }\n }\n\n return chunks.length > 0 ? chunks.join(\"\\n\\n\") : undefined;\n}\n\nfunction textItem(text: string): CodexTurnInputText\n{\n return { type: \"text\", text, text_elements: [] };\n}\n\n/**\n * Pluggable backend for persisting inline binary data so that the Codex\n * protocol can reference it by URL.\n *\n * Implement this interface to use a different storage backend (e.g. S3, GCS).\n *\n * - A `file:` URL maps to `{ type: \"localImage\", path }` in the Codex protocol.\n * - An `http(s):` URL maps to `{ type: \"image\", url }`.\n */\nexport interface FileWriter\n{\n /** Persist `data` and return a URL that Codex can use to access it. */\n write(data: Uint8Array | string, mediaType: string): Promise<URL>;\n\n /**\n * Remove previously written files. Best-effort — implementations should\n * never throw.\n */\n cleanup(urls: URL[]): Promise<void>;\n}\n\nconst MEDIA_TYPE_TO_EXT: Record<string, string> = {\n \"image/png\": \".png\",\n \"image/jpeg\": \".jpg\",\n \"image/gif\": \".gif\",\n \"image/webp\": \".webp\",\n \"image/svg+xml\": \".svg\",\n \"image/bmp\": \".bmp\",\n \"image/tiff\": \".tiff\",\n};\n\nfunction extensionForMediaType(mediaType: string): string\n{\n return MEDIA_TYPE_TO_EXT[mediaType] ?? \".bin\";\n}\n\n/**\n * A {@link FileWriter} that writes to `os.tmpdir()` and returns `file:` URLs.\n */\nexport class LocalFileWriter implements FileWriter\n{\n async write(data: Uint8Array | string, mediaType: string): Promise<URL>\n {\n const ext = extensionForMediaType(mediaType);\n const filename = `codex-ai-sdk-${randomUUID()}${ext}`;\n const filepath = join(tmpdir(), filename);\n\n const buffer = typeof data === \"string\"\n ? Buffer.from(data, \"base64\")\n : data;\n\n await writeFile(filepath, buffer);\n return pathToFileURL(filepath);\n }\n\n async cleanup(urls: URL[]): Promise<void>\n {\n await Promise.allSettled(\n urls\n .filter((u) => u.protocol === \"file:\")\n .map((u) => unlink(u)),\n );\n }\n}\n\n/**\n * Resolves inline binary data in AI SDK prompts and maps user content to\n * {@link CodexTurnInputItem} arrays ready for `turn/start`.\n *\n * Instantiate with an optional custom {@link FileWriter} for non-local storage\n * (e.g. S3). Tracks all written URLs so that {@link cleanup} can remove them\n * after the turn completes.\n *\n * @example\n * ```ts\n * const fileResolver = new PromptFileResolver();\n * const turnInput = await fileResolver.resolve(prompt, isResume);\n * // … after the turn …\n * await fileResolver.cleanup();\n * ```\n */\nexport class PromptFileResolver\n{\n private readonly writer: FileWriter;\n private readonly written: URL[] = [];\n\n constructor(writer?: FileWriter)\n {\n this.writer = writer ?? new LocalFileWriter();\n }\n\n /**\n * Resolve inline file data and map user content to Codex input items.\n *\n * - Inline image data (base64 / Uint8Array) is written via the\n * {@link FileWriter} and converted to `localImage` or `image` items.\n * - URL-based image file parts are converted directly.\n * - Inline text file data is decoded and inlined as text.\n * - Unsupported media types are silently skipped.\n *\n * @param isResume - When true only the last user message is extracted.\n * When false (fresh thread) all user text is accumulated with images\n * flushing the text buffer to preserve ordering.\n */\n async resolve(\n prompt: LanguageModelV3Prompt,\n isResume: boolean = false,\n ): Promise<CodexTurnInputItem[]>\n {\n if (isResume)\n {\n return this.resolveResumed(prompt);\n }\n\n return this.resolveFresh(prompt);\n }\n\n /**\n * Remove all files created by previous {@link resolve} calls.\n * Best-effort — never throws.\n */\n async cleanup(): Promise<void>\n {\n const urls = this.written.splice(0);\n if (urls.length > 0)\n {\n await this.writer.cleanup(urls);\n }\n }\n\n /**\n * Convert a resolved image URL to a Codex input item.\n */\n private mapImageUrl(mediaType: string, data: URL): CodexTurnInputItem | null\n {\n if (!mediaType.startsWith(\"image/\"))\n {\n return null;\n }\n\n if (data.protocol === \"file:\")\n {\n return { type: \"localImage\", path: fileURLToPath(data) };\n }\n\n return { type: \"image\", url: data.href };\n }\n\n /**\n * Resolve a single file part: write inline data via the writer, then\n * convert to a Codex input item. Text files are decoded and returned\n * as text items. Returns `null` for unsupported media types.\n */\n private async resolveFilePart(\n part: LanguageModelV3FilePart,\n ): Promise<CodexTurnInputItem | null>\n {\n const { mediaType, data } = part;\n\n // Text files → decode and inline as text.\n // URL text files pass through as the URL string — we don't fetch remote\n // content; the URL itself serves as a reference for the model.\n if (mediaType.startsWith(\"text/\"))\n {\n if (data instanceof URL)\n {\n return textItem(data.href);\n }\n\n const text = typeof data === \"string\"\n ? Buffer.from(data, \"base64\").toString(\"utf-8\")\n : new TextDecoder().decode(data);\n return textItem(text);\n }\n\n // Images with inline data → write via writer, then map the URL.\n if (mediaType.startsWith(\"image/\") && !(data instanceof URL))\n {\n const url = await this.writer.write(data, mediaType);\n this.written.push(url);\n return this.mapImageUrl(mediaType, url);\n }\n\n // Images that already have a URL → map directly.\n if (data instanceof URL)\n {\n return this.mapImageUrl(mediaType, data);\n }\n\n return null;\n }\n\n /**\n * Resume path: extract parts from the last user message individually.\n */\n private async resolveResumed(\n prompt: LanguageModelV3Prompt,\n ): Promise<CodexTurnInputItem[]>\n {\n for (let i = prompt.length - 1; i >= 0; i--)\n {\n const message = prompt[i];\n\n if (message?.role === \"user\")\n {\n const items: CodexTurnInputItem[] = [];\n\n for (const part of message.content)\n {\n if (part.type === \"text\")\n {\n const text = part.text.trim();\n if (text.length > 0)\n {\n items.push(textItem(text));\n }\n }\n else if (part.type === \"file\")\n {\n const mapped = await this.resolveFilePart(part);\n if (mapped)\n {\n items.push(mapped);\n }\n }\n }\n\n return items;\n }\n }\n\n return [];\n }\n\n /**\n * Fresh thread path: accumulate text chunks across all user messages,\n * flushing before each image to preserve ordering.\n */\n private async resolveFresh(\n prompt: LanguageModelV3Prompt,\n ): Promise<CodexTurnInputItem[]>\n {\n const items: CodexTurnInputItem[] = [];\n const textChunks: string[] = [];\n\n const flushText = (): void =>\n {\n if (textChunks.length > 0)\n {\n items.push(textItem(textChunks.join(\"\\n\\n\")));\n textChunks.length = 0;\n }\n };\n\n for (const message of prompt)\n {\n if (message.role === \"user\")\n {\n for (const part of message.content)\n {\n if (part.type === \"text\")\n {\n const text = part.text.trim();\n if (text.length > 0)\n {\n textChunks.push(text);\n }\n }\n else if (part.type === \"file\")\n {\n const mapped = await this.resolveFilePart(part);\n if (mapped)\n {\n if (mapped.type === \"text\")\n {\n textChunks.push(mapped.text);\n }\n else\n {\n flushText();\n items.push(mapped);\n }\n }\n }\n }\n }\n }\n\n flushText();\n return items;\n }\n}\n","import type {\n LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3Content,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamPart,\n LanguageModelV3StreamResult,\n LanguageModelV3Usage,\n} from \"@ai-sdk/provider\";\n\nimport { ApprovalsDispatcher } from \"./approvals\";\nimport { AppServerClient } from \"./client/app-server-client\";\nimport { PersistentTransport } from \"./client/transport-persistent\";\nimport { StdioTransport } from \"./client/transport-stdio\";\nimport { WebSocketTransport } from \"./client/transport-websocket\";\nimport { DynamicToolsDispatcher } from \"./dynamic-tools\";\nimport { CodexProviderError } from \"./errors\";\nimport { PACKAGE_NAME, PACKAGE_VERSION } from \"./package-info\";\nimport type { JsonValue } from \"./protocol/app-server-protocol/serde_json/JsonValue\";\nimport type { ThreadResumeResponse } from \"./protocol/app-server-protocol/v2/ThreadResumeResponse\";\nimport { CodexEventMapper } from \"./protocol/event-mapper\";\nimport { CODEX_PROVIDER_ID, withProviderMetadata } from \"./protocol/provider-metadata\";\nimport type {\n CodexInitializeParams,\n CodexInitializeResult,\n CodexThreadCompactStartParams,\n CodexThreadCompactStartResult,\n CodexThreadResumeParams,\n CodexThreadStartParams,\n CodexThreadStartResult,\n CodexToolCallRequestParams,\n CodexToolCallResult,\n CodexToolResultContentItem,\n CodexTurnInterruptParams,\n CodexTurnInterruptResult,\n CodexTurnStartParams,\n CodexTurnStartResult,\n} from \"./protocol/types\";\nimport type { CodexCompactionOnResumeContext, CodexProviderSettings } from \"./provider-settings\";\nimport { CodexSessionImpl } from \"./session\";\nimport { stripUndefined } from \"./utils/object\";\nimport { mapSystemPrompt, PromptFileResolver } from \"./utils/prompt-file-resolver\";\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface CodexLanguageModelSettings\n{\n // intentionally empty — settings will be added as the API evolves\n}\n\nexport type { CodexThreadDefaults, CodexTurnDefaults } from \"./provider-settings\";\n\nexport interface CodexModelConfig\n{\n provider: string;\n providerSettings: Readonly<CodexProviderSettings>;\n}\n\ninterface ThreadStartResultLike extends CodexThreadStartResult\n{\n thread?: {\n id?: string;\n };\n}\n\ninterface TurnStartResultLike extends CodexTurnStartResult\n{\n turn?: {\n id?: string;\n };\n}\n\ntype PassThroughStreamContentPart = Extract<\n LanguageModelV3StreamPart,\n { type: \"tool-call\" | \"tool-result\" | \"file\" | \"source\" | \"tool-approval-request\" }\n>;\n\nfunction createEmptyUsage(): LanguageModelV3Usage \n{\n return {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n };\n}\n\nfunction extractThreadId(result: ThreadStartResultLike): string \n{\n const threadId = result.threadId ?? result.thread?.id;\n if (!threadId) \n {\n throw new CodexProviderError(\"thread/start response does not include a thread id.\");\n }\n return threadId;\n}\n\nfunction extractTurnId(result: TurnStartResultLike): string \n{\n const turnId = result.turnId ?? result.turn?.id;\n if (!turnId) \n {\n throw new CodexProviderError(\"turn/start response does not include a turn id.\");\n }\n return turnId;\n}\n\nfunction extractThreadIdFromProviderOptions(\n providerOptions: Record<string, unknown> | undefined,\n): string | undefined\n{\n const meta = providerOptions?.[CODEX_PROVIDER_ID];\n if (meta && typeof meta === \"object\" && \"threadId\" in meta && typeof (meta as Record<string, unknown>)[\"threadId\"] === \"string\")\n {\n return (meta as Record<string, unknown>)[\"threadId\"] as string;\n }\n return undefined;\n}\n\nfunction extractResumeThreadId(prompt: LanguageModelV3CallOptions[\"prompt\"]): string | undefined\n{\n for (let i = prompt.length - 1; i >= 0; i--)\n {\n const message = prompt[i];\n if (message?.role === \"assistant\")\n {\n // Check message-level providerOptions\n const messageThreadId = extractThreadIdFromProviderOptions(\n message.providerOptions as Record<string, unknown> | undefined,\n );\n if (messageThreadId)\n {\n return messageThreadId;\n }\n\n // Check content-part-level providerOptions\n if (Array.isArray(message.content))\n {\n for (const part of message.content)\n {\n const partThreadId = extractThreadIdFromProviderOptions(\n (part as { providerOptions?: Record<string, unknown> }).providerOptions,\n );\n if (partThreadId)\n {\n return partThreadId;\n }\n }\n }\n }\n }\n return undefined;\n}\n\nfunction extractToolResults(\n prompt: LanguageModelV3CallOptions[\"prompt\"],\n callId?: string,\n): CodexToolCallResult | undefined\n{\n for (let i = prompt.length - 1; i >= 0; i--)\n {\n const message = prompt[i];\n if (message?.role === \"tool\")\n {\n const contentItems: CodexToolResultContentItem[] = [];\n let success = true;\n\n for (const part of message.content)\n {\n if (part.type === \"tool-result\")\n {\n if (callId && part.toolCallId !== callId)\n {\n continue;\n }\n\n if (part.output.type === \"text\")\n {\n contentItems.push({ type: \"inputText\", text: part.output.value });\n }\n else if (part.output.type === \"json\")\n {\n contentItems.push({ type: \"inputText\", text: JSON.stringify(part.output.value) });\n }\n else if (part.output.type === \"execution-denied\")\n {\n success = false;\n contentItems.push({\n type: \"inputText\",\n text: part.output.reason ?? \"Tool execution was denied.\",\n });\n }\n }\n }\n\n if (contentItems.length > 0)\n {\n return { success, contentItems };\n }\n\n if (callId)\n {\n // A matching callId was requested, so don't consume unrelated\n // tool results from older prompt entries.\n return undefined;\n }\n }\n }\n return undefined;\n}\n\nfunction sdkToolsToCodexDynamicTools(\n tools: NonNullable<LanguageModelV3CallOptions[\"tools\"]>,\n): { name: string; description?: string; inputSchema: Record<string, unknown> }[]\n{\n return tools\n .filter((t): t is Extract<typeof t, { type: \"function\" }> => t.type === \"function\")\n .map((t) => stripUndefined({\n name: t.name,\n description: t.description,\n inputSchema: t.inputSchema as Record<string, unknown>,\n }));\n}\n\nfunction isPassThroughContentPart(\n part: LanguageModelV3StreamPart,\n): part is PassThroughStreamContentPart \n{\n switch (part.type) \n {\n case \"tool-call\":\n case \"tool-result\":\n case \"file\":\n case \"source\":\n case \"tool-approval-request\":\n return true;\n default:\n return false;\n }\n}\n\nexport class CodexLanguageModel implements LanguageModelV3 \n{\n readonly specificationVersion = \"v3\" as const;\n readonly provider: string;\n readonly modelId: string;\n readonly supportedUrls: Record<string, RegExp[]> = {};\n\n private readonly settings: CodexLanguageModelSettings;\n private readonly config: CodexModelConfig;\n\n constructor(\n modelId: string,\n settings: CodexLanguageModelSettings,\n config: CodexModelConfig,\n ) \n {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n this.provider = config.provider;\n }\n\n async doGenerate(options: LanguageModelV3CallOptions): Promise<LanguageModelV3GenerateResult> \n {\n void this.settings;\n\n const streamResult = await this.doStream(options);\n const reader = streamResult.stream.getReader();\n\n const textOrder: string[] = [];\n const textById = new Map<string, string>();\n const passThroughContent: LanguageModelV3Content[] = [];\n\n let warnings: LanguageModelV3GenerateResult[\"warnings\"] = [];\n let finishReason: LanguageModelV3GenerateResult[\"finishReason\"] = {\n unified: \"other\",\n raw: undefined,\n };\n let usage: LanguageModelV3Usage = createEmptyUsage();\n let providerMetadata: LanguageModelV3GenerateResult[\"providerMetadata\"];\n\n while (true) \n {\n const { value, done } = await reader.read();\n if (done) \n {\n break;\n }\n\n if (value.type === \"stream-start\") \n {\n warnings = value.warnings;\n continue;\n }\n\n if (value.type === \"text-start\") \n {\n if (!textById.has(value.id)) \n {\n textOrder.push(value.id);\n textById.set(value.id, \"\");\n }\n continue;\n }\n\n if (value.type === \"text-delta\") \n {\n if (!textById.has(value.id)) \n {\n textOrder.push(value.id);\n textById.set(value.id, value.delta);\n }\n else \n {\n textById.set(value.id, `${textById.get(value.id) ?? \"\"}${value.delta}`);\n }\n continue;\n }\n\n if (value.type === \"finish\")\n {\n finishReason = value.finishReason;\n usage = value.usage;\n providerMetadata = value.providerMetadata;\n continue;\n }\n\n if (value.type === \"error\") \n {\n if (value.error instanceof Error) \n {\n throw value.error;\n }\n\n throw new CodexProviderError(\"Generation stream emitted an error.\", {\n cause: value.error,\n });\n }\n\n if (isPassThroughContentPart(value)) \n {\n passThroughContent.push(value);\n }\n }\n\n const textContent: LanguageModelV3Content[] = textOrder\n .map((id) => \n {\n const text = textById.get(id) ?? \"\";\n if (text.length === 0) \n {\n return null;\n }\n\n return {\n type: \"text\" as const,\n text,\n };\n })\n .filter((part): part is Extract<LanguageModelV3Content, { type: \"text\" }> => part !== null);\n\n return stripUndefined({\n content: [...textContent, ...passThroughContent],\n finishReason,\n usage,\n warnings,\n providerMetadata,\n request: streamResult.request,\n });\n }\n\n private registerCrossCallToolHandler(\n client: AppServerClient,\n controller: ReadableStreamDefaultController<LanguageModelV3StreamPart>,\n persistentTransport: PersistentTransport,\n threadId: string,\n closeSuccessfully: () => Promise<void>,\n ): void\n {\n client.onToolCallRequest((params: CodexToolCallRequestParams, request) =>\n {\n const toolName = params.tool ?? params.toolName ?? \"unknown\";\n const callId = params.callId ?? `call_${Date.now()}`;\n const args = params.arguments ?? params.input ?? {};\n\n const withMeta = <T extends LanguageModelV3StreamPart>(part: T): T => withProviderMetadata(part, threadId);\n\n // Park the tool call on the worker for cross-call resumption.\n // Return a never-resolving promise so AppServerClient does NOT\n // auto-send a JSON-RPC response — we respond manually on the\n // next doStream() via persistentTransport.respondToToolCall().\n persistentTransport.parkToolCall({\n requestId: request.id,\n callId,\n toolName,\n args,\n threadId,\n });\n\n controller.enqueue(withMeta({\n type: \"tool-call\",\n toolCallId: callId,\n toolName,\n input: typeof args === \"string\" ? args : JSON.stringify(args),\n }));\n\n controller.enqueue(withMeta({\n type: \"finish\",\n finishReason: { unified: \"tool-calls\", raw: \"tool-calls\" },\n usage: createEmptyUsage(),\n }));\n\n void closeSuccessfully();\n\n // Return a never-resolving promise to prevent auto-response\n return new Promise<CodexToolCallResult>(() => { });\n });\n }\n\n doStream(options: LanguageModelV3CallOptions): Promise<LanguageModelV3StreamResult>\n {\n const resumeThreadId = extractResumeThreadId(options.prompt);\n\n const transport = this.config.providerSettings.transportFactory\n ? this.config.providerSettings.transportFactory(options.abortSignal, resumeThreadId)\n : this.config.providerSettings.transport?.type === \"websocket\"\n ? new WebSocketTransport(this.config.providerSettings.transport.websocket)\n : new StdioTransport(this.config.providerSettings.transport?.stdio);\n\n const packetLogger = this.config.providerSettings.debug?.logPackets === true\n ? this.config.providerSettings.debug.logger\n ?? ((packet: { direction: \"inbound\" | \"outbound\"; message: unknown }) =>\n {\n if (packet.direction === \"inbound\")\n {\n console.debug(\"[codex packet]\", packet.message);\n }\n })\n : undefined;\n\n const toolLogger = this.config.providerSettings.debug?.logToolCalls === true\n ? this.config.providerSettings.debug.toolLogger\n ?? ((event: { event: string; data?: unknown }) =>\n {\n console.debug(\"[codex tool]\", event.event, event.data);\n })\n : undefined;\n\n const debugLog = packetLogger\n ? (direction: \"inbound\" | \"outbound\", label: string, data?: unknown) =>\n {\n packetLogger({ direction, message: { debug: label, data } });\n }\n : undefined;\n\n const client = new AppServerClient(transport, stripUndefined({\n onPacket: packetLogger,\n }));\n\n const mapper = new CodexEventMapper(stripUndefined({\n emitPlanUpdates: this.config.providerSettings.emitPlanUpdates,\n }));\n\n let activeThreadId: string | undefined;\n let activeTurnId: string | undefined;\n let session: CodexSessionImpl | undefined;\n\n const interruptTimeoutMs = this.config.providerSettings.interruptTimeoutMs ?? 10_000;\n\n const interruptTurnIfPossible = async () =>\n {\n if (!activeThreadId || !activeTurnId)\n {\n return;\n }\n\n const interruptParams: CodexTurnInterruptParams = {\n threadId: activeThreadId,\n turnId: activeTurnId,\n };\n debugLog?.(\"outbound\", \"turn/interrupt\", interruptParams);\n await client.request<CodexTurnInterruptResult>(\"turn/interrupt\", interruptParams, interruptTimeoutMs);\n };\n\n const fileResolver = new PromptFileResolver();\n\n const stream = new ReadableStream<LanguageModelV3StreamPart>({\n start: (controller) =>\n {\n let closed = false;\n\n const closeWithError = async (error: unknown) =>\n {\n if (closed)\n {\n return;\n }\n\n session?.markInactive();\n controller.enqueue({ type: \"error\", error });\n closed = true;\n\n try\n {\n controller.close();\n }\n finally\n {\n await fileResolver.cleanup();\n await client.disconnect();\n }\n };\n\n const closeSuccessfully = async () =>\n {\n if (closed)\n {\n return;\n }\n\n session?.markInactive();\n closed = true;\n\n try\n {\n controller.close();\n }\n finally\n {\n await fileResolver.cleanup();\n await client.disconnect();\n }\n };\n\n const abortHandler = () => \n {\n void (async () =>\n {\n try\n {\n await interruptTurnIfPossible();\n }\n catch\n {\n // Best-effort only: always close/disconnect even if interrupt fails.\n }\n\n await closeWithError(new DOMException(\"Aborted\", \"AbortError\"));\n })();\n };\n\n if (options.abortSignal) \n {\n if (options.abortSignal.aborted) \n {\n abortHandler();\n return;\n }\n options.abortSignal.addEventListener(\"abort\", abortHandler, { once: true });\n }\n\n void (async () =>\n {\n try\n {\n await client.connect();\n\n // ── Tool-result continuation (cross-call) ──\n // If the transport has a pending tool call from a previous\n // doStream(), respond with the tool results and let Codex continue.\n const persistentTransport = transport instanceof PersistentTransport\n ? transport\n : null;\n const pendingToolCall = persistentTransport?.getPendingToolCall() ?? null;\n\n if (pendingToolCall && persistentTransport)\n {\n toolLogger?.({\n event: \"cross-call-resume\",\n data: {\n threadId: pendingToolCall.threadId,\n callId: pendingToolCall.callId,\n toolName: pendingToolCall.toolName,\n },\n });\n const toolResult = extractToolResults(options.prompt, pendingToolCall.callId);\n toolLogger?.({\n event: \"cross-call-result-extracted\",\n data: {\n callId: pendingToolCall.callId,\n found: !!toolResult,\n success: toolResult?.success,\n contentItemsCount: toolResult?.contentItems.length ?? 0,\n },\n });\n mapper.setThreadId(pendingToolCall.threadId);\n\n client.onAnyNotification((method, params) =>\n {\n const parts = mapper.map({ method, params });\n for (const part of parts)\n {\n controller.enqueue(part);\n if (part.type === \"finish\")\n {\n void closeSuccessfully();\n }\n }\n });\n\n // Register cross-call handler again for chained tool calls\n this.registerCrossCallToolHandler(\n client, controller, persistentTransport,\n pendingToolCall.threadId, closeSuccessfully,\n );\n\n const approvalsDispatcher = new ApprovalsDispatcher(stripUndefined({\n onCommandApproval: this.config.providerSettings.approvals?.onCommandApproval,\n onFileChangeApproval: this.config.providerSettings.approvals?.onFileChangeApproval,\n }));\n approvalsDispatcher.attach(client);\n\n const result = toolResult ?? {\n success: false,\n contentItems: [{\n type: \"inputText\",\n text: `Missing tool result for pending callId \"${pendingToolCall.callId}\".`,\n }],\n };\n\n await persistentTransport.respondToToolCall(result);\n\n toolLogger?.({\n event: \"cross-call-result-sent\",\n data: {\n callId: pendingToolCall.callId,\n found: !!toolResult,\n success: result.success,\n contentItemsCount: result.contentItems.length ?? 0,\n },\n });\n\n return;\n }\n\n // ── Normal flow ──\n const dynamicToolsEnabled =\n this.config.providerSettings.experimentalApi === true;\n if (dynamicToolsEnabled)\n {\n const dispatcher = new DynamicToolsDispatcher(stripUndefined({\n tools: this.config.providerSettings.tools,\n handlers: this.config.providerSettings.toolHandlers,\n timeoutMs: this.config.providerSettings.toolTimeoutMs,\n onDebugEvent: toolLogger,\n }));\n dispatcher.attach(client);\n }\n\n const approvalsDispatcher = new ApprovalsDispatcher(stripUndefined({\n onCommandApproval: this.config.providerSettings.approvals?.onCommandApproval,\n onFileChangeApproval: this.config.providerSettings.approvals?.onFileChangeApproval,\n }));\n approvalsDispatcher.attach(client);\n\n client.onAnyNotification((method, params) =>\n {\n const parts = mapper.map({ method, params });\n\n // Sync turnId from mapper after it processes turn/started\n const mappedTurnId = mapper.getTurnId();\n if (mappedTurnId && mappedTurnId !== activeTurnId)\n {\n activeTurnId = mappedTurnId;\n session?.setTurnId(mappedTurnId);\n }\n\n for (const part of parts)\n {\n controller.enqueue(part);\n\n if (part.type === \"finish\")\n {\n void closeSuccessfully();\n }\n }\n });\n\n // Merge provider-level tools with SDK tools from options\n const providerToolDefs = this.config.providerSettings.tools;\n const providerDynamicTools = providerToolDefs\n ? Object.entries(providerToolDefs).map(([name, def]) => ({\n name,\n description: def.description,\n inputSchema: def.inputSchema,\n }))\n : [];\n\n const sdkDynamicTools = options.tools\n ? sdkToolsToCodexDynamicTools(options.tools)\n : [];\n\n const allDynamicTools = [...providerDynamicTools, ...sdkDynamicTools];\n const dynamicTools = allDynamicTools.length > 0 ? allDynamicTools : undefined;\n toolLogger?.({\n event: \"dynamic-tools-advertised\",\n data: {\n providerTools: providerDynamicTools.map((t) => t.name),\n sdkTools: sdkDynamicTools.map((t) => t.name),\n total: allDynamicTools.length,\n },\n });\n\n const hasSdkTools = sdkDynamicTools.length > 0;\n\n // Auto-enable experimentalApi when any dynamic tools are present\n const needsExperimentalApi =\n this.config.providerSettings.experimentalApi === true || dynamicTools !== undefined;\n\n const initializeParams: CodexInitializeParams = stripUndefined({\n clientInfo: this.config.providerSettings.clientInfo ?? {\n name: PACKAGE_NAME,\n version: PACKAGE_VERSION,\n },\n capabilities: needsExperimentalApi ? { experimentalApi: true } : undefined,\n });\n\n await client.request<CodexInitializeResult>(\"initialize\", initializeParams);\n await client.notification(\"initialized\");\n\n debugLog?.(\"inbound\", \"prompt\", options.prompt);\n\n debugLog?.(\"inbound\", \"extractResumeThreadId\", { resumeThreadId });\n\n const developerInstructions = mapSystemPrompt(options.prompt);\n\n let threadId: string;\n\n if (resumeThreadId)\n {\n const resumeParams: CodexThreadResumeParams = stripUndefined({\n threadId: resumeThreadId,\n persistExtendedHistory: false,\n developerInstructions,\n });\n debugLog?.(\"outbound\", \"thread/resume\", resumeParams);\n const resumeResult = await client.request<ThreadResumeResponse>(\n \"thread/resume\",\n resumeParams,\n );\n threadId = resumeResult.thread.id;\n\n const strictCompaction = this.config.providerSettings.compaction?.strict === true;\n const shouldCompactOnResume = this.config.providerSettings.compaction?.shouldCompactOnResume;\n let shouldCompact = false;\n\n if (typeof shouldCompactOnResume === \"boolean\")\n {\n shouldCompact = shouldCompactOnResume;\n }\n else if (typeof shouldCompactOnResume === \"function\")\n {\n const compactionContext: CodexCompactionOnResumeContext = {\n threadId,\n resumeThreadId,\n resumeResult,\n prompt: options.prompt,\n };\n\n try\n {\n shouldCompact = await shouldCompactOnResume(compactionContext);\n }\n catch (error)\n {\n debugLog?.(\"inbound\", \"thread/compact/start:decision-error\", {\n message: error instanceof Error ? error.message : String(error),\n });\n\n if (strictCompaction)\n {\n throw error;\n }\n }\n }\n\n if (shouldCompact)\n {\n const compactParams: CodexThreadCompactStartParams = { threadId };\n debugLog?.(\"outbound\", \"thread/compact/start\", compactParams);\n if (strictCompaction)\n {\n await client.request<CodexThreadCompactStartResult>(\n \"thread/compact/start\",\n compactParams,\n );\n }\n else\n {\n try\n {\n await client.request<CodexThreadCompactStartResult>(\n \"thread/compact/start\",\n compactParams,\n );\n }\n catch (error)\n {\n debugLog?.(\"inbound\", \"thread/compact/start:error\", {\n message: error instanceof Error ? error.message : String(error),\n });\n }\n }\n }\n }\n else\n {\n const mcpServers = this.config.providerSettings.mcpServers;\n const config = mcpServers\n ? { mcp_servers: mcpServers } as CodexThreadStartParams[\"config\"]\n : undefined;\n\n const threadStartParams: CodexThreadStartParams = stripUndefined({\n model: this.config.providerSettings.defaultModel ?? this.modelId,\n dynamicTools,\n developerInstructions,\n config,\n cwd: this.config.providerSettings.defaultThreadSettings?.cwd,\n approvalPolicy: this.config.providerSettings.defaultThreadSettings?.approvalPolicy,\n sandbox: this.config.providerSettings.defaultThreadSettings?.sandbox,\n });\n debugLog?.(\"outbound\", \"thread/start\", threadStartParams);\n const threadStartResult = await client.request<ThreadStartResultLike>(\n \"thread/start\",\n threadStartParams,\n );\n threadId = extractThreadId(threadStartResult);\n }\n\n activeThreadId = threadId;\n mapper.setThreadId(threadId);\n\n // Register cross-call tool handler for SDK tools\n if (hasSdkTools && persistentTransport)\n {\n this.registerCrossCallToolHandler(\n client, controller, persistentTransport,\n threadId, closeSuccessfully,\n );\n }\n\n const turnInput = await fileResolver.resolve(options.prompt, !!resumeThreadId);\n const turnStartParams: CodexTurnStartParams = stripUndefined({\n threadId,\n input: turnInput,\n cwd: this.config.providerSettings.defaultTurnSettings?.cwd,\n approvalPolicy: this.config.providerSettings.defaultTurnSettings?.approvalPolicy,\n sandboxPolicy: this.config.providerSettings.defaultTurnSettings?.sandboxPolicy,\n model: this.config.providerSettings.defaultTurnSettings?.model,\n effort: this.config.providerSettings.defaultTurnSettings?.effort,\n summary: this.config.providerSettings.defaultTurnSettings?.summary,\n outputSchema: options.responseFormat?.type === \"json\"\n ? options.responseFormat.schema as JsonValue | undefined\n : undefined,\n });\n\n debugLog?.(\"outbound\", \"turn/start\", turnStartParams);\n\n const turnStartResult = await client.request<TurnStartResultLike>(\"turn/start\", turnStartParams);\n\n activeTurnId = extractTurnId(turnStartResult);\n\n session = new CodexSessionImpl({\n client,\n threadId: activeThreadId,\n turnId: activeTurnId,\n interruptTimeoutMs,\n });\n this.config.providerSettings.onSessionCreated?.(session);\n }\n catch (error)\n {\n await closeWithError(error);\n }\n })();\n },\n cancel: async () =>\n {\n session?.markInactive();\n\n try\n {\n await interruptTurnIfPossible();\n }\n catch\n {\n // Best-effort only: always disconnect to release resources.\n }\n await fileResolver.cleanup();\n await client.disconnect();\n },\n });\n\n return Promise.resolve({ stream });\n }\n}\n","import type { CodexTransport } from \"./transport\";\nimport { CodexWorkerPool } from \"./worker-pool\";\n\nexport interface PersistentPoolAcquireSettings {\n scope: \"provider\" | \"global\";\n key?: string;\n poolSize: number;\n idleTimeoutMs: number;\n transportFactory: () => CodexTransport;\n}\n\nexport interface PersistentPoolHandle {\n pool: CodexWorkerPool;\n release(): Promise<void>;\n}\n\ninterface GlobalPoolEntry {\n pool: CodexWorkerPool;\n refCount: number;\n poolSize: number;\n idleTimeoutMs: number;\n}\n\nconst GLOBAL_PERSISTENT_POOL_DEFAULT_KEY = \"default\";\nconst globalPersistentPools = new Map<string, GlobalPoolEntry>();\n\nexport function acquirePersistentPool(\n settings: PersistentPoolAcquireSettings,\n): PersistentPoolHandle\n{\n if (settings.scope === \"provider\")\n {\n const pool = new CodexWorkerPool({\n poolSize: settings.poolSize,\n transportFactory: settings.transportFactory,\n idleTimeoutMs: settings.idleTimeoutMs,\n });\n\n let released = false;\n return {\n pool,\n async release(): Promise<void>\n {\n if (released)\n {\n return;\n }\n released = true;\n await pool.shutdown();\n },\n };\n }\n\n const key = settings.key ?? GLOBAL_PERSISTENT_POOL_DEFAULT_KEY;\n const existing = globalPersistentPools.get(key);\n\n if (existing)\n {\n if (\n existing.poolSize !== settings.poolSize\n || existing.idleTimeoutMs !== settings.idleTimeoutMs\n )\n {\n throw new Error(\n `Global persistent pool \"${key}\" already exists with different settings.`,\n );\n }\n\n existing.refCount++;\n let released = false;\n return {\n pool: existing.pool,\n async release(): Promise<void>\n {\n if (released)\n {\n return;\n }\n released = true;\n\n const entry = globalPersistentPools.get(key);\n if (!entry)\n {\n return;\n }\n\n entry.refCount--;\n if (entry.refCount <= 0)\n {\n globalPersistentPools.delete(key);\n await entry.pool.shutdown();\n }\n },\n };\n }\n\n const pool = new CodexWorkerPool({\n poolSize: settings.poolSize,\n transportFactory: settings.transportFactory,\n idleTimeoutMs: settings.idleTimeoutMs,\n });\n\n globalPersistentPools.set(key, {\n pool,\n refCount: 1,\n poolSize: settings.poolSize,\n idleTimeoutMs: settings.idleTimeoutMs,\n });\n\n let released = false;\n return {\n pool,\n async release(): Promise<void>\n {\n if (released)\n {\n return;\n }\n released = true;\n\n const entry = globalPersistentPools.get(key);\n if (!entry)\n {\n return;\n }\n\n entry.refCount--;\n if (entry.refCount <= 0)\n {\n globalPersistentPools.delete(key);\n await entry.pool.shutdown();\n }\n },\n };\n}\n","import { NoSuchModelError, type ProviderV3 } from \"@ai-sdk/provider\";\n\nimport { AppServerClient } from \"./client/app-server-client\";\nimport { acquirePersistentPool, type PersistentPoolHandle } from \"./client/persistent-pool-registry\";\nimport { PersistentTransport } from \"./client/transport-persistent\";\nimport { StdioTransport } from \"./client/transport-stdio\";\nimport { WebSocketTransport } from \"./client/transport-websocket\";\nimport { CodexLanguageModel, type CodexLanguageModelSettings } from \"./model\";\nimport { PACKAGE_NAME, PACKAGE_VERSION } from \"./package-info\";\nimport type { Model } from \"./protocol/app-server-protocol/v2/Model\";\nimport type { ModelListParams } from \"./protocol/app-server-protocol/v2/ModelListParams\";\nimport type { ModelListResponse } from \"./protocol/app-server-protocol/v2/ModelListResponse\";\nimport { CODEX_PROVIDER_ID } from \"./protocol/provider-metadata\";\nimport type { CodexInitializeParams, CodexInitializeResult } from \"./protocol/types\";\nimport type { CodexProviderSettings } from \"./provider-settings\";\nimport { stripUndefined } from \"./utils/object\";\nexport type { Model as CodexModel } from \"./protocol/app-server-protocol/v2/Model\";\nexport type { CodexProviderSettings, McpServerConfig } from \"./provider-settings\";\n\nexport interface CodexProvider extends ProviderV3\n{\n (modelId: string, settings?: CodexLanguageModelSettings): CodexLanguageModel;\n chat(modelId: string, settings?: CodexLanguageModelSettings): CodexLanguageModel;\n listModels(params?: ModelListParams): Promise<Model[]>;\n readonly settings: Readonly<CodexProviderSettings>;\n shutdown(): Promise<void>;\n}\n\n// Auto-release leaked pool handles when a provider is garbage-collected\n// without an explicit shutdown() call. The handle's release() is\n// idempotent, so an explicit shutdown() followed by GC is harmless.\nconst poolHandleCleanup = new FinalizationRegistry<PersistentPoolHandle>(\n (handle) => { void handle.release().catch(() => { }); },\n);\n\nfunction createNoSuchModelError(\n modelId: string,\n modelType: \"embeddingModel\" | \"imageModel\",\n): NoSuchModelError\n{\n return new NoSuchModelError({ modelId, modelType });\n}\n\nexport function createCodexAppServer(\n settings: CodexProviderSettings = {},\n): CodexProvider \n{\n let persistentPoolHandle: PersistentPoolHandle | null = null;\n\n const baseTransportFactory = settings.transportFactory;\n\n if (settings.persistent)\n {\n const scope = settings.persistent.scope ?? \"provider\";\n const poolSize = settings.persistent.poolSize ?? 1;\n const idleTimeoutMs = settings.persistent.idleTimeoutMs ?? 300_000;\n const poolTransportFactory = baseTransportFactory\n ?? (settings.transport?.type === \"websocket\"\n ? () => new WebSocketTransport(settings.transport?.websocket)\n : () => new StdioTransport(settings.transport?.stdio));\n\n persistentPoolHandle = acquirePersistentPool({\n scope,\n ...stripUndefined({ key: settings.persistent.key }),\n poolSize,\n idleTimeoutMs,\n transportFactory: poolTransportFactory,\n });\n }\n\n const persistentPool = persistentPoolHandle?.pool ?? null;\n const effectiveTransportFactory = persistentPool\n ? (signal?: AbortSignal, threadId?: string) =>\n new PersistentTransport(stripUndefined({ pool: persistentPool, signal, threadId }))\n : baseTransportFactory;\n\n const resolvedSettings: Readonly<CodexProviderSettings> = Object.freeze(stripUndefined({\n defaultModel: settings.defaultModel,\n experimentalApi: settings.experimentalApi,\n clientInfo: settings.clientInfo\n ? stripUndefined({\n name: settings.clientInfo.name,\n version: settings.clientInfo.version,\n title: settings.clientInfo.title,\n })\n : undefined,\n transport: settings.transport\n ? stripUndefined({\n type: settings.transport.type,\n stdio: settings.transport.stdio\n ? { ...settings.transport.stdio }\n : undefined,\n websocket: settings.transport.websocket\n ? { ...settings.transport.websocket }\n : undefined,\n })\n : undefined,\n defaultThreadSettings: settings.defaultThreadSettings\n ? { ...settings.defaultThreadSettings }\n : undefined,\n defaultTurnSettings: settings.defaultTurnSettings\n ? { ...settings.defaultTurnSettings }\n : undefined,\n compaction: settings.compaction\n ? { ...settings.compaction }\n : undefined,\n transportFactory: effectiveTransportFactory,\n mcpServers: settings.mcpServers ? { ...settings.mcpServers } : undefined,\n tools: settings.tools ? { ...settings.tools } : undefined,\n toolHandlers: settings.toolHandlers ? { ...settings.toolHandlers } : undefined,\n toolTimeoutMs: settings.toolTimeoutMs,\n interruptTimeoutMs: settings.interruptTimeoutMs,\n approvals: settings.approvals ? { ...settings.approvals } : undefined,\n debug: settings.debug ? { ...settings.debug } : undefined,\n emitPlanUpdates: settings.emitPlanUpdates,\n onSessionCreated: settings.onSessionCreated,\n }));\n\n const createLanguageModel = (\n modelId: string,\n modelSettings: CodexLanguageModelSettings = {},\n ): CodexLanguageModel =>\n new CodexLanguageModel(modelId, modelSettings, {\n provider: CODEX_PROVIDER_ID,\n providerSettings: resolvedSettings,\n });\n\n const providerFn = (\n (modelId: string, modelSettings: CodexLanguageModelSettings = {}) =>\n createLanguageModel(modelId, modelSettings)\n );\n\n const provider = Object.assign(providerFn, {\n specificationVersion: \"v3\" as const,\n settings: resolvedSettings,\n languageModel(modelId: string): CodexLanguageModel\n {\n return createLanguageModel(modelId);\n },\n chat(\n modelId: string,\n modelSettings: CodexLanguageModelSettings = {},\n ): CodexLanguageModel\n {\n return createLanguageModel(modelId, modelSettings);\n },\n embeddingModel(modelId: string)\n {\n throw createNoSuchModelError(modelId, \"embeddingModel\");\n },\n imageModel(modelId: string)\n {\n throw createNoSuchModelError(modelId, \"imageModel\");\n },\n async listModels(params?: ModelListParams): Promise<Model[]>\n {\n const transport = effectiveTransportFactory\n ? effectiveTransportFactory()\n : resolvedSettings.transport?.type === \"websocket\"\n ? new WebSocketTransport(resolvedSettings.transport.websocket)\n : new StdioTransport(resolvedSettings.transport?.stdio);\n\n const client = new AppServerClient(transport);\n\n try\n {\n await client.connect();\n\n const initializeParams: CodexInitializeParams = stripUndefined({\n clientInfo: resolvedSettings.clientInfo ?? {\n name: PACKAGE_NAME,\n version: PACKAGE_VERSION,\n },\n });\n\n await client.request<CodexInitializeResult>(\"initialize\", initializeParams);\n await client.notification(\"initialized\");\n\n const models: Model[] = [];\n let cursor: string | undefined;\n\n do\n {\n const response = await client.request<ModelListResponse>(\"model/list\", stripUndefined({ ...params, cursor }));\n models.push(...response.data);\n cursor = response.nextCursor ?? undefined;\n }\n while (cursor);\n\n return models;\n }\n finally\n {\n await client.disconnect();\n }\n },\n async shutdown(): Promise<void>\n {\n if (!persistentPoolHandle)\n {\n return;\n }\n\n poolHandleCleanup.unregister(provider);\n const handle = persistentPoolHandle;\n persistentPoolHandle = null;\n await handle.release();\n },\n });\n\n if (persistentPoolHandle)\n {\n poolHandleCleanup.register(provider, persistentPoolHandle, provider);\n }\n\n return provider as CodexProvider;\n}\n\nexport const codexAppServer = createCodexAppServer();\n\n/**\n * Backward-compatible alias kept during migration from scaffold naming.\n */\nexport const createCodexProvider = createCodexAppServer;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/object.ts","../src/approvals.ts","../src/errors.ts","../src/client/app-server-client.ts","../src/client/transport-persistent.ts","../src/client/transport-stdio.ts","../src/client/transport-websocket.ts","../src/client/worker.ts","../src/client/worker-pool.ts","../src/dynamic-tools.ts","../package.json","../src/package-info.ts","../src/protocol/provider-metadata.ts","../src/protocol/event-mapper.ts","../src/session.ts","../src/utils/prompt-file-resolver.ts","../src/model.ts","../src/client/persistent-pool-registry.ts","../src/provider.ts"],"names":["waiter","approvalsDispatcher","pool","released"],"mappings":"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","file":"index.js","sourcesContent":["// Converts `foo: T | undefined` into `foo?: T` while keeping non-undefined keys required.\ntype StripUndefined<T extends Record<string, unknown>> = {\n [K in keyof T as undefined extends T[K] ? never : K]: T[K];\n} & {\n [K in keyof T as undefined extends T[K] ? K : never]?: Exclude<T[K], undefined>;\n};\n\n// Runtime helper that drops `undefined` values and returns the narrowed object type above.\nexport function stripUndefined<T extends Record<string, unknown>>(obj: T): StripUndefined<T>\n{\n return Object.fromEntries(\n Object.entries(obj).filter(([, value]) => value !== undefined),\n ) as StripUndefined<T>;\n}\n","import type { AppServerClient } from \"./client/app-server-client\";\nimport type { JsonRpcRequest } from \"./client/transport\";\nimport type {\n CommandExecutionApprovalDecision,\n CommandExecutionRequestApprovalParams,\n CommandExecutionRequestApprovalResponse,\n FileChangeApprovalDecision,\n FileChangeRequestApprovalParams,\n FileChangeRequestApprovalResponse,\n} from \"./protocol/types\";\nimport { stripUndefined } from \"./utils/object\";\n\nexport interface CodexCommandApprovalRequest {\n threadId: string;\n turnId: string;\n itemId: string;\n approvalId?: string | null;\n reason?: string | null;\n networkApprovalContext?: CommandExecutionRequestApprovalParams[\"networkApprovalContext\"];\n command?: string | null;\n cwd?: string | null;\n commandActions?: CommandExecutionRequestApprovalParams[\"commandActions\"];\n additionalPermissions?: CommandExecutionRequestApprovalParams[\"additionalPermissions\"];\n proposedExecpolicyAmendment?: CommandExecutionRequestApprovalParams[\"proposedExecpolicyAmendment\"];\n proposedNetworkPolicyAmendments?: CommandExecutionRequestApprovalParams[\"proposedNetworkPolicyAmendments\"];\n}\n\nexport interface CodexFileChangeApprovalRequest {\n threadId: string;\n turnId: string;\n itemId: string;\n reason?: string | null;\n grantRoot?: string | null;\n}\n\nexport type CommandApprovalHandler = (\n request: CodexCommandApprovalRequest,\n) => CommandExecutionApprovalDecision | Promise<CommandExecutionApprovalDecision>;\n\nexport type FileChangeApprovalHandler = (\n request: CodexFileChangeApprovalRequest,\n) => FileChangeApprovalDecision | Promise<FileChangeApprovalDecision>;\n\nexport interface ApprovalsDispatcherSettings {\n onCommandApproval?: CommandApprovalHandler;\n onFileChangeApproval?: FileChangeApprovalHandler;\n}\n\nexport class ApprovalsDispatcher\n{\n private readonly onCommandApproval: CommandApprovalHandler;\n private readonly onFileChangeApproval: FileChangeApprovalHandler;\n\n constructor(settings: ApprovalsDispatcherSettings = {})\n {\n this.onCommandApproval = settings.onCommandApproval ?? (() => \"decline\");\n this.onFileChangeApproval = settings.onFileChangeApproval ?? (() => \"decline\");\n }\n\n attach(client: AppServerClient): () => void\n {\n const unsubCommand = client.onRequest(\n \"item/commandExecution/requestApproval\",\n async (params: unknown, _request: JsonRpcRequest) =>\n {\n const p = params as CommandExecutionRequestApprovalParams;\n const request: CodexCommandApprovalRequest = stripUndefined({\n threadId: p.threadId,\n turnId: p.turnId,\n itemId: p.itemId,\n approvalId: p.approvalId,\n reason: p.reason,\n networkApprovalContext: p.networkApprovalContext,\n command: p.command,\n cwd: p.cwd,\n commandActions: p.commandActions,\n additionalPermissions: p.additionalPermissions,\n proposedExecpolicyAmendment: p.proposedExecpolicyAmendment,\n proposedNetworkPolicyAmendments: p.proposedNetworkPolicyAmendments,\n });\n\n const decision = await this.onCommandApproval(request);\n return { decision } satisfies CommandExecutionRequestApprovalResponse;\n },\n );\n\n const unsubFileChange = client.onRequest(\n \"item/fileChange/requestApproval\",\n async (params: unknown, _request: JsonRpcRequest) =>\n {\n const p = params as FileChangeRequestApprovalParams;\n const request: CodexFileChangeApprovalRequest = stripUndefined({\n threadId: p.threadId,\n turnId: p.turnId,\n itemId: p.itemId,\n reason: p.reason,\n grantRoot: p.grantRoot,\n });\n\n const decision = await this.onFileChangeApproval(request);\n return { decision } satisfies FileChangeRequestApprovalResponse;\n },\n );\n\n return () =>\n {\n unsubCommand();\n unsubFileChange();\n };\n }\n}\n","/** Base error type for this provider package. */\nexport class CodexProviderError extends Error \n{\n constructor(message: string, options?: { cause?: unknown }) \n {\n super(message, options);\n this.name = \"CodexProviderError\";\n }\n}\n\n/** Error used for methods intentionally left as stubs in early PRs. */\nexport class CodexNotImplementedError extends CodexProviderError \n{\n constructor(method: string) \n {\n super(`Codex provider method not implemented yet: ${method}`);\n this.name = \"CodexNotImplementedError\";\n }\n}\n","import { CodexProviderError } from \"../errors\";\nimport type {\n CodexToolCallRequestParams,\n CodexToolCallResult,\n} from \"../protocol/types\";\nimport { stripUndefined } from \"../utils/object\";\nimport type {\n CodexTransport,\n JsonRpcErrorResponse,\n JsonRpcId,\n JsonRpcMessage,\n JsonRpcRequest,\n JsonRpcResponse,\n JsonRpcSuccessResponse,\n} from \"./transport\";\n\nexport class JsonRpcError extends CodexProviderError \n{\n readonly code: number;\n readonly data?: unknown;\n\n constructor(error: { code: number; message: string; data?: unknown }) \n {\n super(error.message);\n this.name = \"JsonRpcError\";\n this.code = error.code;\n this.data = error.data;\n }\n}\n\nexport interface AppServerClientSettings\n{\n requestTimeoutMs?: number;\n onPacket?: (packet: {\n direction: \"inbound\" | \"outbound\";\n message: JsonRpcMessage;\n }) => void;\n}\n\ntype NotificationHandler = (params: unknown) => void | Promise<void>;\ntype AnyNotificationHandler = (\n method: string,\n params: unknown,\n) => void | Promise<void>;\ntype RequestHandler = (\n params: unknown,\n request: JsonRpcRequest,\n) => unknown;\ntype ToolCallRequestHandler = (\n params: CodexToolCallRequestParams,\n request: JsonRpcRequest,\n) => CodexToolCallResult | Promise<CodexToolCallResult>;\n\nfunction isResponse(message: JsonRpcMessage): message is JsonRpcResponse \n{\n return (\n \"id\" in message &&\n message.id !== undefined &&\n (\"result\" in message || \"error\" in message) &&\n !(\"method\" in message)\n );\n}\n\nfunction isRequestOrNotification(\n message: JsonRpcMessage,\n): message is JsonRpcRequest | { method: string; params?: unknown } \n{\n return \"method\" in message && typeof message.method === \"string\";\n}\n\nexport class AppServerClient \n{\n private readonly transport: CodexTransport;\n private readonly requestTimeoutMs: number;\n private readonly onPacket?: AppServerClientSettings[\"onPacket\"];\n private nextId = 1;\n\n private readonly pendingRequests = new Map<\n JsonRpcId,\n {\n resolve: (value: unknown) => void;\n reject: (reason?: unknown) => void;\n timer: NodeJS.Timeout;\n }\n >();\n\n private readonly notificationHandlers = new Map<string, Set<NotificationHandler>>();\n private readonly anyNotificationHandlers = new Set<AnyNotificationHandler>();\n private readonly requestHandlers = new Map<string, RequestHandler>();\n\n private removeMessageListener: (() => void) | null = null;\n private removeErrorListener: (() => void) | null = null;\n\n constructor(transport: CodexTransport, settings: AppServerClientSettings = {}) \n {\n this.transport = transport;\n this.requestTimeoutMs = settings.requestTimeoutMs ?? 30_000;\n this.onPacket = settings.onPacket;\n }\n\n async connect(): Promise<void> \n {\n await this.transport.connect();\n\n this.removeMessageListener = this.transport.on(\"message\", (message) => \n {\n void this.handleMessage(message).catch(() => \n {\n // Inbound requests can race with disconnect; ignore transport write failures.\n });\n });\n\n this.removeErrorListener = this.transport.on(\"error\", (error) => \n {\n for (const pending of this.pendingRequests.values()) \n {\n clearTimeout(pending.timer);\n pending.reject(error);\n }\n this.pendingRequests.clear();\n });\n }\n\n async disconnect(): Promise<void> \n {\n if (this.removeMessageListener) \n {\n this.removeMessageListener();\n this.removeMessageListener = null;\n }\n\n if (this.removeErrorListener) \n {\n this.removeErrorListener();\n this.removeErrorListener = null;\n }\n\n for (const pending of this.pendingRequests.values()) \n {\n clearTimeout(pending.timer);\n pending.reject(new CodexProviderError(\"Client disconnected.\"));\n }\n this.pendingRequests.clear();\n\n await this.transport.disconnect();\n }\n\n async request<TResult>(\n method: string,\n params?: unknown,\n timeoutMs = this.requestTimeoutMs,\n ): Promise<TResult> \n {\n const id = this.nextId++;\n\n const message: JsonRpcRequest =\n params === undefined ? { id, method } : { id, method, params };\n\n const promise = new Promise<TResult>((resolve, reject) => \n {\n const timer = setTimeout(() => \n {\n this.pendingRequests.delete(id);\n reject(new CodexProviderError(`Request timed out: ${method}`));\n }, timeoutMs);\n\n this.pendingRequests.set(id, {\n resolve: (value) => resolve(value as TResult),\n reject,\n timer,\n });\n });\n\n this.onPacket?.({ direction: \"outbound\", message });\n await this.transport.sendMessage(message);\n return promise;\n }\n\n async notification(method: string, params?: unknown): Promise<void> \n {\n const message = stripUndefined({ method, params });\n this.onPacket?.({ direction: \"outbound\", message });\n await this.transport.sendNotification(method, params);\n }\n\n onNotification(method: string, handler: NotificationHandler): () => void \n {\n const handlers = this.notificationHandlers.get(method) ?? new Set();\n handlers.add(handler);\n this.notificationHandlers.set(method, handlers);\n\n return () => \n {\n handlers.delete(handler);\n if (handlers.size === 0) \n {\n this.notificationHandlers.delete(method);\n }\n };\n }\n\n onAnyNotification(handler: AnyNotificationHandler): () => void \n {\n this.anyNotificationHandlers.add(handler);\n return () => \n {\n this.anyNotificationHandlers.delete(handler);\n };\n }\n\n onRequest(method: string, handler: RequestHandler): () => void \n {\n this.requestHandlers.set(method, handler);\n\n return () => \n {\n this.requestHandlers.delete(method);\n };\n }\n\n onToolCallRequest(handler: ToolCallRequestHandler): () => void \n {\n return this.onRequest(\"item/tool/call\", async (params, request) =>\n handler((params ?? {}) as CodexToolCallRequestParams, request),\n );\n }\n\n private async handleMessage(message: JsonRpcMessage): Promise<void> \n {\n this.onPacket?.({ direction: \"inbound\", message });\n\n if (isResponse(message)) \n {\n this.handleResponse(message);\n return;\n }\n\n if (!isRequestOrNotification(message)) \n {\n return;\n }\n\n const hasRequestId = \"id\" in message && message.id !== undefined;\n\n if (hasRequestId) \n {\n await this.handleInboundRequest(message);\n return;\n }\n\n await this.handleNotification(message.method, message.params);\n }\n\n private handleResponse(message: JsonRpcResponse): void \n {\n const pending = this.pendingRequests.get(message.id);\n if (!pending) \n {\n return;\n }\n\n clearTimeout(pending.timer);\n this.pendingRequests.delete(message.id);\n\n if (\"error\" in message) \n {\n pending.reject(new JsonRpcError(message.error));\n return;\n }\n\n pending.resolve((message).result);\n }\n\n private async handleNotification(method: string, params: unknown): Promise<void> \n {\n const handlers = this.notificationHandlers.get(method);\n if (handlers) \n {\n for (const handler of handlers) \n {\n await handler(params);\n }\n }\n\n for (const handler of this.anyNotificationHandlers) \n {\n await handler(method, params);\n }\n }\n\n private async handleInboundRequest(request: JsonRpcRequest): Promise<void> \n {\n const handler = this.requestHandlers.get(request.method);\n\n if (!handler) \n {\n const notFoundResponse = {\n id: request.id,\n error: {\n code: -32601,\n message: `Method not found: ${request.method}`,\n },\n } as JsonRpcErrorResponse;\n this.onPacket?.({ direction: \"outbound\", message: notFoundResponse });\n await this.transport.sendMessage(notFoundResponse);\n return;\n }\n\n try \n {\n const result = await handler(request.params, request);\n const response = {\n id: request.id,\n result,\n } as JsonRpcSuccessResponse;\n this.onPacket?.({ direction: \"outbound\", message: response });\n await this.transport.sendMessage(response);\n }\n catch (error) \n {\n try \n {\n const errorResponse = {\n id: request.id,\n error: {\n code: -32000,\n message: error instanceof Error ? error.message : \"Request handler failed\",\n },\n } as JsonRpcErrorResponse;\n this.onPacket?.({ direction: \"outbound\", message: errorResponse });\n await this.transport.sendMessage(errorResponse);\n }\n catch \n {\n // Ignore transport errors while replying to inbound requests during shutdown.\n }\n }\n }\n}\n","import type { CodexToolCallResult } from \"../protocol/types\";\nimport { stripUndefined } from \"../utils/object\";\nimport type {\n CodexTransport,\n CodexTransportEventMap,\n JsonRpcMessage,\n JsonRpcSuccessResponse,\n} from \"./transport\";\nimport type { PendingToolCall } from \"./worker\";\nimport type { CodexWorker } from \"./worker\";\nimport type { CodexWorkerPool } from \"./worker-pool\";\n\nexport interface PersistentTransportSettings {\n pool: CodexWorkerPool;\n signal?: AbortSignal;\n threadId?: string;\n}\n\nexport class PersistentTransport implements CodexTransport\n{\n private readonly pool: CodexWorkerPool;\n private readonly signal: AbortSignal | undefined;\n private readonly threadId: string | undefined;\n private worker: CodexWorker | null = null;\n private pendingInitializeId: string | number | null = null;\n private initializeIntercepted = false;\n\n private readonly messageListeners = new Set<(message: JsonRpcMessage) => void>();\n private readonly errorListeners = new Set<(error: unknown) => void>();\n private readonly closeListeners = new Set<\n (code: number | null, signal: NodeJS.Signals | null) => void\n >();\n\n constructor(settings: PersistentTransportSettings)\n {\n this.pool = settings.pool;\n this.signal = settings.signal;\n this.threadId = settings.threadId;\n }\n\n async connect(): Promise<void>\n {\n this.worker = await this.pool.acquire(stripUndefined({ signal: this.signal, threadId: this.threadId }));\n await this.worker.ensureConnected();\n }\n\n disconnect(): Promise<void>\n {\n if (this.worker)\n {\n const w = this.worker;\n this.worker = null;\n this.messageListeners.clear();\n this.errorListeners.clear();\n this.closeListeners.clear();\n this.pool.release(w);\n }\n return Promise.resolve();\n }\n\n async sendMessage(message: JsonRpcMessage): Promise<void>\n {\n if (!this.worker)\n {\n throw new Error(\"PersistentTransport is not connected.\");\n }\n\n if (isInitializeRequest(message))\n {\n if (this.worker.initialized)\n {\n this.initializeIntercepted = true;\n const requestId = message.id;\n const cachedResult = this.worker.initializeResult;\n\n queueMicrotask(() =>\n {\n for (const listener of this.messageListeners)\n {\n listener({ id: requestId, result: cachedResult });\n }\n });\n return;\n }\n\n this.initializeIntercepted = false;\n this.pendingInitializeId = message.id;\n }\n\n await this.worker.sendMessage(message);\n }\n\n async sendNotification(method: string, params?: unknown): Promise<void>\n {\n if (!this.worker)\n {\n throw new Error(\"PersistentTransport is not connected.\");\n }\n\n if (method === \"initialized\" && this.initializeIntercepted)\n {\n return;\n }\n\n await this.worker.sendNotification(method, params);\n }\n\n on<K extends keyof CodexTransportEventMap>(\n event: K,\n listener: CodexTransportEventMap[K],\n ): () => void\n {\n if (!this.worker)\n {\n throw new Error(\"PersistentTransport is not connected.\");\n }\n\n if (event === \"message\")\n {\n const msgListener = listener as (message: JsonRpcMessage) => void;\n\n const wrappedListener = ((incoming: JsonRpcMessage) =>\n {\n if (\n this.pendingInitializeId !== null &&\n \"id\" in incoming &&\n incoming.id === this.pendingInitializeId &&\n \"result\" in incoming\n )\n {\n this.worker?.markInitialized(incoming.result);\n this.pendingInitializeId = null;\n }\n msgListener(incoming);\n }) as CodexTransportEventMap[K];\n\n const workerUnsub = this.worker.onSession(event, wrappedListener);\n this.messageListeners.add(msgListener);\n\n return () =>\n {\n workerUnsub();\n this.messageListeners.delete(msgListener);\n };\n }\n\n if (event === \"error\")\n {\n const errListener = listener as (error: unknown) => void;\n const workerUnsub = this.worker.onSession(event, listener);\n this.errorListeners.add(errListener);\n\n return () =>\n {\n workerUnsub();\n this.errorListeners.delete(errListener);\n };\n }\n\n if (event === \"close\")\n {\n const closeListener = listener as (\n code: number | null,\n signal: NodeJS.Signals | null,\n ) => void;\n const workerUnsub = this.worker.onSession(event, listener);\n this.closeListeners.add(closeListener);\n\n return () =>\n {\n workerUnsub();\n this.closeListeners.delete(closeListener);\n };\n }\n\n return this.worker.onSession(event, listener);\n }\n\n getPendingToolCall(): PendingToolCall | null\n {\n return this.worker?.pendingToolCall ?? null;\n }\n\n async respondToToolCall(result: CodexToolCallResult): Promise<void>\n {\n if (!this.worker?.pendingToolCall)\n {\n throw new Error(\"No pending tool call to respond to.\");\n }\n\n const { requestId } = this.worker.pendingToolCall;\n this.worker.pendingToolCall = null;\n\n await this.worker.sendMessage({\n id: requestId,\n result,\n } as JsonRpcSuccessResponse);\n }\n\n parkToolCall(pending: PendingToolCall): void\n {\n if (!this.worker)\n {\n throw new Error(\"PersistentTransport is not connected.\");\n }\n this.worker.pendingToolCall = pending;\n }\n}\n\nfunction isInitializeRequest(\n message: JsonRpcMessage,\n): message is { id: string | number; method: \"initialize\"; params?: unknown }\n{\n return \"id\" in message && \"method\" in message && message.method === \"initialize\";\n}\n","import { type ChildProcessWithoutNullStreams, spawn, type SpawnOptionsWithoutStdio } from \"node:child_process\";\n\nimport type {\n CodexTransport,\n CodexTransportEventMap,\n JsonRpcMessage,\n} from \"./transport\";\n\nexport interface StdioTransportSettings {\n command?: string;\n args?: string[];\n cwd?: string;\n env?: NodeJS.ProcessEnv;\n}\n\ntype ListenerStore = {\n [K in keyof CodexTransportEventMap]: Set<CodexTransportEventMap[K]>;\n};\n\nconst DEFAULT_COMMAND = \"codex\";\nconst DEFAULT_ARGS = [\"app-server\", \"--listen\", \"stdio://\"];\n\nexport class StdioTransport implements CodexTransport \n{\n private readonly settings: StdioTransportSettings;\n private process: ChildProcessWithoutNullStreams | null = null;\n private readonly listeners: ListenerStore = {\n message: new Set(),\n error: new Set(),\n close: new Set(),\n };\n private stdoutBuffer = \"\";\n\n constructor(settings: StdioTransportSettings = {}) \n {\n this.settings = settings;\n }\n\n connect(): Promise<void>\n {\n if (this.process !== null)\n {\n return Promise.resolve();\n }\n\n const options: SpawnOptionsWithoutStdio = {\n cwd: this.settings.cwd,\n env: this.settings.env,\n stdio: \"pipe\",\n };\n\n const child = spawn(\n this.settings.command ?? DEFAULT_COMMAND,\n this.settings.args ?? DEFAULT_ARGS,\n options,\n );\n\n this.process = child;\n\n child.stdout.setEncoding(\"utf8\");\n child.stdout.on(\"data\", (chunk: string | Buffer) => \n {\n this.handleStdoutChunk(typeof chunk === \"string\" ? chunk : chunk.toString(\"utf8\"));\n });\n\n child.stderr.setEncoding(\"utf8\");\n child.stderr.on(\"data\", (chunk: string | Buffer) => \n {\n this.emit(\"error\", new Error(`codex stderr: ${typeof chunk === \"string\" ? chunk : chunk.toString(\"utf8\")}`));\n });\n\n child.on(\"error\", (error) => \n {\n this.emit(\"error\", error);\n });\n\n child.on(\"close\", (code, signal) =>\n {\n this.process = null;\n this.emit(\"close\", code, signal);\n });\n\n return Promise.resolve();\n }\n\n async disconnect(): Promise<void> \n {\n if (this.process === null) \n {\n return;\n }\n\n const child = this.process;\n this.process = null;\n\n await new Promise<void>((resolve) => \n {\n let finished = false;\n const finish = () => \n {\n if (!finished) \n {\n finished = true;\n resolve();\n }\n };\n\n child.once(\"close\", () => finish());\n child.once(\"exit\", () => finish());\n\n if (!child.killed) \n {\n child.kill();\n }\n\n setTimeout(finish, 250);\n });\n }\n\n async sendMessage(message: JsonRpcMessage): Promise<void> \n {\n if (this.process === null || this.process.stdin.destroyed) \n {\n throw new Error(\"StdioTransport is not connected.\");\n }\n\n const payload = `${JSON.stringify(message)}\\n`;\n\n await new Promise<void>((resolve, reject) => \n {\n this.process?.stdin.write(payload, (error) => \n {\n if (error) \n {\n reject(error);\n return;\n }\n resolve();\n });\n });\n }\n\n async sendNotification(method: string, params?: unknown): Promise<void> \n {\n await this.sendMessage(\n params === undefined ? { method } : { method, params },\n );\n }\n\n on<K extends keyof CodexTransportEventMap>(\n event: K,\n listener: CodexTransportEventMap[K],\n ): () => void \n {\n const listeners = this.listeners[event] as Set<CodexTransportEventMap[K]>;\n listeners.add(listener);\n\n return () => \n {\n listeners.delete(listener);\n };\n }\n\n private handleStdoutChunk(chunk: string): void \n {\n this.stdoutBuffer += chunk;\n\n let lineBreakIndex = this.stdoutBuffer.indexOf(\"\\n\");\n\n while (lineBreakIndex >= 0) \n {\n const line = this.stdoutBuffer.slice(0, lineBreakIndex).trim();\n this.stdoutBuffer = this.stdoutBuffer.slice(lineBreakIndex + 1);\n\n if (line.length > 0) \n {\n try \n {\n const message = JSON.parse(line) as JsonRpcMessage;\n this.emit(\"message\", message);\n }\n catch (error) \n {\n this.emit(\"error\", error);\n }\n }\n\n lineBreakIndex = this.stdoutBuffer.indexOf(\"\\n\");\n }\n }\n\n private emit<K extends keyof CodexTransportEventMap>(\n event: K,\n ...args: Parameters<CodexTransportEventMap[K]>\n ): void \n {\n const listeners = this.listeners[event] as Set<(...handlerArgs: Parameters<CodexTransportEventMap[K]>) => void>;\n\n for (const listener of listeners) \n {\n listener(...args);\n }\n }\n}\n","import type {\n CodexTransport,\n CodexTransportEventMap,\n JsonRpcMessage,\n} from \"./transport\";\n\nexport interface WebSocketTransportSettings {\n url?: string;\n headers?: Record<string, string>;\n}\n\ntype ListenerStore = {\n [K in keyof CodexTransportEventMap]: Set<CodexTransportEventMap[K]>;\n};\n\nconst DEFAULT_WS_URL = \"ws://localhost:3000\";\n\ntype WebSocketConstructor = new (\n url: string,\n protocols?: string | string[],\n init?: { headers?: Record<string, string> },\n) => WebSocket;\n\nexport class WebSocketTransport implements CodexTransport \n{\n private readonly settings: WebSocketTransportSettings;\n private socket: WebSocket | null = null;\n private readonly listeners: ListenerStore = {\n message: new Set(),\n error: new Set(),\n close: new Set(),\n };\n\n constructor(settings: WebSocketTransportSettings = {}) \n {\n this.settings = settings;\n }\n\n async connect(): Promise<void> \n {\n if (this.socket && this.socket.readyState === this.socket.OPEN) \n {\n return;\n }\n\n const WebSocketCtor = (globalThis as { WebSocket?: WebSocketConstructor }).WebSocket;\n if (!WebSocketCtor) \n {\n throw new Error(\"WebSocket is not available in this runtime.\");\n }\n\n const socket = new WebSocketCtor(\n this.settings.url ?? DEFAULT_WS_URL,\n undefined,\n this.settings.headers ? { headers: this.settings.headers } : undefined,\n );\n\n this.socket = socket;\n\n socket.addEventListener(\"message\", (event) => \n {\n this.handleIncomingMessage(event.data);\n });\n\n socket.addEventListener(\"error\", (event) => \n {\n this.emit(\"error\", event);\n });\n\n socket.addEventListener(\"close\", (event) => \n {\n this.socket = null;\n this.emit(\"close\", event.code, null);\n });\n\n await new Promise<void>((resolve, reject) => \n {\n const onOpen = () => \n {\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n resolve();\n };\n\n const onError = (event: Event) => \n {\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n reject(new Error(`WebSocket connection failed: ${String(event.type)}`));\n };\n\n socket.addEventListener(\"open\", onOpen, { once: true });\n socket.addEventListener(\"error\", onError, { once: true });\n });\n }\n\n async disconnect(): Promise<void> \n {\n if (!this.socket) \n {\n return;\n }\n\n const socket = this.socket;\n\n await new Promise<void>((resolve) => \n {\n let finished = false;\n const finish = () => \n {\n if (!finished) \n {\n finished = true;\n resolve();\n }\n };\n\n socket.addEventListener(\"close\", () => finish(), { once: true });\n socket.close();\n setTimeout(finish, 250);\n });\n\n this.socket = null;\n }\n\n sendMessage(message: JsonRpcMessage): Promise<void>\n {\n if (!this.socket || this.socket.readyState !== this.socket.OPEN)\n {\n return Promise.reject(new Error(\"WebSocketTransport is not connected.\"));\n }\n\n this.socket.send(JSON.stringify(message));\n\n return Promise.resolve();\n }\n\n async sendNotification(method: string, params?: unknown): Promise<void> \n {\n await this.sendMessage(\n params === undefined ? { method } : { method, params },\n );\n }\n\n on<K extends keyof CodexTransportEventMap>(\n event: K,\n listener: CodexTransportEventMap[K],\n ): () => void \n {\n const listeners = this.listeners[event] as Set<CodexTransportEventMap[K]>;\n listeners.add(listener);\n\n return () => \n {\n listeners.delete(listener);\n };\n }\n\n private handleIncomingMessage(raw: unknown): void \n {\n try \n {\n if (typeof raw !== \"string\") \n {\n return;\n }\n\n const message = JSON.parse(raw) as JsonRpcMessage;\n this.emit(\"message\", message);\n }\n catch (error) \n {\n this.emit(\"error\", error);\n }\n }\n\n private emit<K extends keyof CodexTransportEventMap>(\n event: K,\n ...args: Parameters<CodexTransportEventMap[K]>\n ): void \n {\n const listeners = this.listeners[event] as Set<(...handlerArgs: Parameters<CodexTransportEventMap[K]>) => void>;\n\n for (const listener of listeners) \n {\n listener(...args);\n }\n }\n}\n","import type {\n CodexTransport,\n CodexTransportEventMap,\n JsonRpcId,\n JsonRpcMessage,\n} from \"./transport\";\n\nexport interface CodexWorkerSettings {\n transportFactory: () => CodexTransport;\n idleTimeoutMs: number;\n}\n\nexport interface PendingToolCall {\n requestId: JsonRpcId;\n callId: string;\n toolName: string;\n args: unknown;\n threadId: string;\n}\n\ntype SessionListenerEntry<K extends keyof CodexTransportEventMap> = {\n event: K;\n listener: CodexTransportEventMap[K];\n unsubscribe: () => void;\n};\n\nexport class CodexWorker\n{\n state: \"idle\" | \"busy\" | \"disconnected\" = \"disconnected\";\n initialized = false;\n initializeResult: unknown = undefined;\n pendingToolCall: PendingToolCall | null = null;\n\n private inner: CodexTransport | null = null;\n private readonly settings: CodexWorkerSettings;\n private idleTimer: ReturnType<typeof setTimeout> | null = null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private sessionListeners: SessionListenerEntry<any>[] = [];\n\n constructor(settings: CodexWorkerSettings)\n {\n this.settings = settings;\n }\n\n async ensureConnected(): Promise<void>\n {\n if (this.inner)\n {\n return;\n }\n\n this.inner = this.settings.transportFactory();\n\n this.inner.on(\"close\", () =>\n {\n this.initialized = false;\n this.initializeResult = undefined;\n this.inner = null;\n this.state = \"disconnected\";\n });\n\n this.inner.on(\"error\", () =>\n {\n this.initialized = false;\n this.initializeResult = undefined;\n this.inner = null;\n this.state = \"disconnected\";\n });\n\n await this.inner.connect();\n }\n\n acquire(): void\n {\n this.clearSessionListeners();\n if (this.idleTimer)\n {\n clearTimeout(this.idleTimer);\n this.idleTimer = null;\n }\n this.state = \"busy\";\n }\n\n release(): void\n {\n this.clearSessionListeners();\n this.state = \"idle\";\n\n if (this.settings.idleTimeoutMs > 0)\n {\n this.idleTimer = setTimeout(() =>\n {\n void this.shutdown();\n }, this.settings.idleTimeoutMs);\n }\n }\n\n markInitialized(result: unknown): void\n {\n this.initialized = true;\n this.initializeResult = result;\n }\n\n onSession<K extends keyof CodexTransportEventMap>(\n event: K,\n listener: CodexTransportEventMap[K],\n ): () => void\n {\n if (!this.inner)\n {\n throw new Error(\"Worker has no active transport.\");\n }\n\n const unsubscribe = this.inner.on(event, listener);\n this.sessionListeners.push({ event, listener, unsubscribe });\n return unsubscribe;\n }\n\n clearSessionListeners(): void\n {\n for (const entry of this.sessionListeners)\n {\n entry.unsubscribe();\n }\n this.sessionListeners = [];\n }\n\n async sendMessage(message: JsonRpcMessage): Promise<void>\n {\n if (!this.inner)\n {\n throw new Error(\"Worker has no active transport.\");\n }\n await this.inner.sendMessage(message);\n }\n\n async sendNotification(method: string, params?: unknown): Promise<void>\n {\n if (!this.inner)\n {\n throw new Error(\"Worker has no active transport.\");\n }\n await this.inner.sendNotification(method, params);\n }\n\n async shutdown(): Promise<void>\n {\n if (this.idleTimer)\n {\n clearTimeout(this.idleTimer);\n this.idleTimer = null;\n }\n\n this.clearSessionListeners();\n\n if (this.inner)\n {\n const transport = this.inner;\n this.inner = null;\n this.initialized = false;\n this.initializeResult = undefined;\n this.state = \"disconnected\";\n await transport.disconnect();\n }\n else\n {\n this.state = \"disconnected\";\n }\n }\n}\n","import { CodexProviderError } from \"../errors\";\nimport type { CodexTransport } from \"./transport\";\nimport { CodexWorker } from \"./worker\";\n\nexport interface CodexWorkerPoolSettings\n{\n poolSize?: number;\n transportFactory: () => CodexTransport;\n idleTimeoutMs?: number;\n}\n\ninterface AcquireOptions\n{\n threadId?: string;\n signal?: AbortSignal;\n}\n\ninterface AcquireWaiter\n{\n threadId: string | undefined;\n resolve: (worker: CodexWorker) => void;\n reject: (error: Error) => void;\n signal: AbortSignal | undefined;\n abortHandler: (() => void) | undefined;\n}\n\nexport class CodexWorkerPool\n{\n private readonly workers: CodexWorker[];\n private shutdownCalled = false;\n private readonly waiters: AcquireWaiter[] = [];\n\n constructor(settings: CodexWorkerPoolSettings)\n {\n const size = settings.poolSize ?? 1;\n const idleTimeoutMs = settings.idleTimeoutMs ?? 300_000;\n\n this.workers = Array.from({ length: size }, () =>\n new CodexWorker({\n transportFactory: settings.transportFactory,\n idleTimeoutMs,\n }),\n );\n }\n\n async acquire(options?: AcquireOptions): Promise<CodexWorker>\n {\n if (this.shutdownCalled)\n {\n throw new CodexProviderError(\"Worker pool has been shut down.\");\n }\n\n // 1. Exact match: worker reserved for this thread's pending tool call\n if (options?.threadId)\n {\n const reserved = this.workers.find(\n (w) => (w.state === \"idle\" || w.state === \"disconnected\")\n && w.pendingToolCall?.threadId === options.threadId,\n );\n\n if (reserved)\n {\n reserved.acquire();\n return reserved;\n }\n }\n\n // 2. Any unreserved worker (no pending tool call from another thread)\n const worker = this.workers.find(\n (w) => (w.state === \"idle\" || w.state === \"disconnected\")\n && !w.pendingToolCall,\n );\n\n if (!worker)\n {\n if (options?.signal?.aborted)\n {\n throw new CodexProviderError(\"Worker acquisition aborted while waiting.\");\n }\n\n return new Promise<CodexWorker>((resolve, reject) =>\n {\n const waiter: AcquireWaiter = {\n threadId: options?.threadId,\n resolve,\n reject,\n signal: options?.signal,\n abortHandler: undefined,\n };\n\n if (waiter.signal)\n {\n waiter.abortHandler = () =>\n {\n this.removeWaiter(waiter);\n waiter.reject(new CodexProviderError(\"Worker acquisition aborted while waiting.\"));\n };\n waiter.signal.addEventListener(\"abort\", waiter.abortHandler, { once: true });\n }\n\n this.waiters.push(waiter);\n });\n }\n\n worker.acquire();\n return worker;\n }\n\n release(worker: CodexWorker): void\n {\n // Always clear session listeners from the previous session before\n // reuse, even during direct FIFO handoff. Without this, stale\n // listeners can leak onto the underlying transport when the\n // higher-level disconnect path didn't (or couldn't) clean up.\n worker.clearSessionListeners();\n\n // An aborted waiter can never appear here: the abort handler\n // synchronously removes it from the queue via removeWaiter(),\n // so shift() will only ever return live (non-aborted) waiters.\n\n // Try to match a waiter that needs this specific worker's pending tool call\n if (worker.pendingToolCall)\n {\n const idx = this.waiters.findIndex(w => w.threadId === worker.pendingToolCall?.threadId);\n if (idx >= 0)\n {\n const [waiter] = this.waiters.splice(idx, 1);\n this.clearWaiterAbortHandler(waiter!);\n waiter!.resolve(worker);\n return;\n }\n }\n\n // Otherwise: existing FIFO behavior\n const waiter = this.waiters.shift();\n if (waiter)\n {\n this.clearWaiterAbortHandler(waiter); // prevent stale abort handler from firing after resolve\n waiter.resolve(worker);\n }\n else\n {\n worker.release();\n }\n }\n\n async shutdown(): Promise<void>\n {\n this.shutdownCalled = true;\n while (this.waiters.length > 0)\n {\n const waiter = this.waiters.shift()!;\n this.clearWaiterAbortHandler(waiter);\n waiter.reject(new CodexProviderError(\"Worker pool has been shut down.\"));\n }\n await Promise.all(this.workers.map((w) => w.shutdown()));\n }\n\n private removeWaiter(target: AcquireWaiter): void\n {\n const index = this.waiters.indexOf(target);\n if (index >= 0)\n {\n this.waiters.splice(index, 1);\n }\n }\n\n /** Remove the abort listener so it doesn't fire after the waiter is already served. */\n private clearWaiterAbortHandler(waiter: AcquireWaiter): void\n {\n if (!waiter.signal || !waiter.abortHandler)\n {\n return;\n }\n waiter.signal.removeEventListener(\"abort\", waiter.abortHandler);\n waiter.abortHandler = undefined;\n }\n}\n","import type { AppServerClient } from \"./client/app-server-client\";\nimport { CodexProviderError } from \"./errors\";\nimport type {\n CodexToolCallRequestParams,\n CodexToolCallResult,\n CodexToolResultContentItem,\n} from \"./protocol/types\";\nimport { stripUndefined } from \"./utils/object\";\n\nexport interface DynamicToolExecutionContext\n{\n threadId?: string;\n turnId?: string;\n callId?: string;\n toolName: string;\n}\n\nexport type DynamicToolHandler = (\n args: unknown,\n context: DynamicToolExecutionContext,\n) => Promise<CodexToolCallResult>;\n\n/** Full tool definition: schema advertised to Codex + local execution handler. */\nexport interface DynamicToolDefinition\n{\n description: string;\n inputSchema: Record<string, unknown>;\n execute: DynamicToolHandler;\n}\n\nexport interface DynamicToolsDispatcherSettings\n{\n /** Tools with full schema advertised to Codex. Handlers are registered automatically. */\n tools?: Record<string, DynamicToolDefinition>;\n /** Legacy handler-only registration (no schema). Tools are not advertised to Codex. */\n handlers?: Record<string, DynamicToolHandler>;\n timeoutMs?: number;\n onDebugEvent?: (event: {\n event: string;\n data?: unknown;\n }) => void;\n}\n\nfunction toTextResult(message: string, success: boolean): CodexToolCallResult \n{\n const contentItems: CodexToolResultContentItem[] = [{ type: \"inputText\", text: message }];\n return { success, contentItems };\n}\n\nfunction withTimeout<T>(promise: Promise<T>, timeoutMs: number): Promise<T> \n{\n return new Promise<T>((resolve, reject) => \n {\n const timer = setTimeout(() => \n {\n reject(new CodexProviderError(`Dynamic tool execution timed out after ${timeoutMs}ms.`));\n }, timeoutMs);\n\n promise\n .then((value) => \n {\n clearTimeout(timer);\n resolve(value);\n })\n .catch((error) =>\n {\n clearTimeout(timer);\n reject(error instanceof Error ? error : new Error(String(error)));\n });\n });\n}\n\nexport class DynamicToolsDispatcher \n{\n private readonly handlers = new Map<string, DynamicToolHandler>();\n private readonly timeoutMs: number;\n private readonly onDebugEvent?: DynamicToolsDispatcherSettings[\"onDebugEvent\"];\n\n constructor(settings: DynamicToolsDispatcherSettings = {})\n {\n this.timeoutMs = settings.timeoutMs ?? 30_000;\n this.onDebugEvent = settings.onDebugEvent;\n\n if (settings.tools)\n {\n for (const [name, def] of Object.entries(settings.tools))\n {\n this.register(name, def.execute);\n this.onDebugEvent?.({\n event: \"dynamic-tool-registered\",\n data: { name, source: \"tools\" },\n });\n }\n }\n\n if (settings.handlers)\n {\n for (const [name, handler] of Object.entries(settings.handlers))\n {\n this.register(name, handler);\n this.onDebugEvent?.({\n event: \"dynamic-tool-registered\",\n data: { name, source: \"handlers\" },\n });\n }\n }\n }\n\n register(name: string, handler: DynamicToolHandler): void \n {\n this.handlers.set(name, handler);\n }\n\n attach(client: AppServerClient): () => void \n {\n return client.onToolCallRequest(async (params) => this.dispatch(params));\n }\n\n async dispatch(params: CodexToolCallRequestParams): Promise<CodexToolCallResult> \n {\n const toolName = params.tool ?? params.toolName;\n\n if (!toolName) \n {\n this.onDebugEvent?.({\n event: \"dynamic-tool-missing-name\",\n data: {\n callId: params.callId,\n threadId: params.threadId,\n turnId: params.turnId,\n },\n });\n return toTextResult(\"Dynamic tool call is missing the tool name.\", false);\n }\n\n const handler = this.handlers.get(toolName);\n\n if (!handler) \n {\n this.onDebugEvent?.({\n event: \"dynamic-tool-missing-handler\",\n data: {\n toolName,\n callId: params.callId,\n threadId: params.threadId,\n turnId: params.turnId,\n },\n });\n return toTextResult(`No dynamic tool handler registered for \"${toolName}\".`, false);\n }\n\n const context: DynamicToolExecutionContext = stripUndefined({\n toolName,\n threadId: params.threadId,\n turnId: params.turnId,\n callId: params.callId,\n });\n\n const args = params.arguments ?? params.input;\n const startedAt = Date.now();\n\n this.onDebugEvent?.({\n event: \"dynamic-tool-dispatch-start\",\n data: {\n toolName,\n callId: params.callId,\n threadId: params.threadId,\n turnId: params.turnId,\n hasArguments: args !== undefined,\n },\n });\n\n try \n {\n const result = await withTimeout(handler(args, context), this.timeoutMs);\n\n this.onDebugEvent?.({\n event: \"dynamic-tool-dispatch-success\",\n data: {\n toolName,\n callId: params.callId,\n durationMs: Date.now() - startedAt,\n success: result.success,\n contentItemsCount: result.contentItems.length,\n },\n });\n\n return result;\n }\n catch (error) \n {\n const message = error instanceof Error ? error.message : \"Dynamic tool execution failed.\";\n\n this.onDebugEvent?.({\n event: \"dynamic-tool-dispatch-error\",\n data: {\n toolName,\n callId: params.callId,\n durationMs: Date.now() - startedAt,\n message,\n },\n });\n\n return toTextResult(message, false);\n }\n }\n}\n","{\n \"name\": \"@janole/ai-sdk-provider-codex-asp\",\n \"version\": \"0.3.2\",\n \"description\": \"Vercel AI SDK v6 custom provider for the Codex App Server Protocol.\",\n \"license\": \"MIT\",\n \"author\": \"Jan Ole Suhr\",\n \"type\": \"module\",\n \"sideEffects\": false,\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n }\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"engines\": {\n \"node\": \">=20\"\n },\n \"scripts\": {\n \"codex:generate-types\": \"codex app-server generate-ts --experimental -o src/protocol/app-server-protocol\",\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"clean\": \"rimraf dist\",\n \"lint\": \"eslint .\",\n \"lint:fix\": \"eslint . --fix\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"typecheck\": \"tsc --noEmit\",\n \"qa\": \"npm run lint && npm run typecheck && npm run test\",\n \"ok\": \"npm run lint:fix && npm run typecheck && npm run test\",\n \"prepublishOnly\": \"npm run clean && npm run build && npm run qa\"\n },\n \"keywords\": [\n \"ai\",\n \"sdk\",\n \"vercel\",\n \"provider\",\n \"typescript\",\n \"codex\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/janole/ai-sdk-provider-codex-asp.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/janole/ai-sdk-provider-codex-asp/issues\"\n },\n \"homepage\": \"https://github.com/janole/ai-sdk-provider-codex-asp#readme\",\n \"peerDependencies\": {\n \"ai\": \"^6.0.0\"\n },\n \"devDependencies\": {\n \"@stylistic/eslint-plugin\": \"^5.9.0\",\n \"@types/node\": \"^22.13.10\",\n \"@typescript-eslint/eslint-plugin\": \"^8.25.0\",\n \"@typescript-eslint/parser\": \"^8.25.0\",\n \"eslint\": \"^9.21.0\",\n \"eslint-plugin-simple-import-sort\": \"^12.1.1\",\n \"eslint-plugin-unicorn\": \"^63.0.0\",\n \"rimraf\": \"^6.0.1\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"^5.8.2\",\n \"vitest\": \"^3.0.7\"\n },\n \"dependencies\": {\n \"@ai-sdk/provider\": \"^3.0.8\",\n \"@ai-sdk/provider-utils\": \"^4.0.15\"\n }\n}\n","import pkg from \"../package.json\" with { type: \"json\" };\n\n/** Package name from package.json. */\nexport const PACKAGE_NAME: string = pkg.name;\n\n/** Package version from package.json. */\nexport const PACKAGE_VERSION: string = pkg.version;\n","import type { LanguageModelV3StreamPart } from \"@ai-sdk/provider\";\n\nimport { stripUndefined } from \"../utils/object\";\n\nexport const CODEX_PROVIDER_ID = \"@janole/ai-sdk-provider-codex-asp\";\n\nexport function codexProviderMetadata(threadId: string | undefined, turnId?: string)\n{\n if (!threadId)\n {\n return undefined;\n }\n\n return { [CODEX_PROVIDER_ID]: stripUndefined({ threadId, turnId }) };\n}\n\nexport function withProviderMetadata<T extends LanguageModelV3StreamPart>(\n part: T,\n threadId: string | undefined,\n turnId?: string,\n): T\n{\n const meta = codexProviderMetadata(threadId, turnId);\n return meta ? { ...part, providerMetadata: meta } : part;\n}\n","import type {\n LanguageModelV3FinishReason,\n LanguageModelV3StreamPart,\n LanguageModelV3Usage,\n} from \"@ai-sdk/provider\";\n\nimport type { AgentMessageDeltaNotification } from \"./app-server-protocol/v2/AgentMessageDeltaNotification\";\nimport type { CommandExecutionOutputDeltaNotification } from \"./app-server-protocol/v2/CommandExecutionOutputDeltaNotification\";\nimport type { ItemCompletedNotification } from \"./app-server-protocol/v2/ItemCompletedNotification\";\nimport type { ItemStartedNotification } from \"./app-server-protocol/v2/ItemStartedNotification\";\nimport type { McpToolCallProgressNotification } from \"./app-server-protocol/v2/McpToolCallProgressNotification\";\nimport type { ReasoningSummaryPartAddedNotification } from \"./app-server-protocol/v2/ReasoningSummaryPartAddedNotification\";\nimport type { ThreadTokenUsageUpdatedNotification } from \"./app-server-protocol/v2/ThreadTokenUsageUpdatedNotification\";\nimport type { TurnCompletedNotification } from \"./app-server-protocol/v2/TurnCompletedNotification\";\nimport type { TurnStartedNotification } from \"./app-server-protocol/v2/TurnStartedNotification\";\nimport type { TurnStatus } from \"./app-server-protocol/v2/TurnStatus\";\nimport { withProviderMetadata } from \"./provider-metadata\";\n\nexport interface CodexEventMapperInput\n{\n method: string;\n params?: unknown;\n}\n\n/** Shared shape for reasoning/plan/fileChange delta params. */\ninterface DeltaParams\n{\n itemId?: string;\n delta?: string;\n}\n\nconst EMPTY_USAGE: LanguageModelV3Usage = {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n};\n\nfunction toFinishReason(status: TurnStatus | undefined): LanguageModelV3FinishReason\n{\n switch (status)\n {\n case \"completed\":\n return { unified: \"stop\", raw: \"completed\" };\n case \"failed\":\n return { unified: \"error\", raw: \"failed\" };\n case \"interrupted\":\n return { unified: \"other\", raw: \"interrupted\" };\n default:\n return { unified: \"other\", raw: undefined };\n }\n}\n\nexport interface CodexEventMapperOptions\n{\n /** Emit plan updates as tool-call/tool-result parts. Default: true. */\n emitPlanUpdates?: boolean;\n}\n\n/**\n * Extract threadId from notification params. All codex protocol notifications\n * include threadId as a top-level field. Returns undefined for notifications\n * that don't carry a threadId (e.g. codex/event/* wrappers, account events).\n */\nexport function extractNotificationThreadId(params: unknown): string | undefined\n{\n if (params && typeof params === \"object\" && \"threadId\" in params)\n {\n const val = (params as Record<string, unknown>)[\"threadId\"];\n return typeof val === \"string\" ? val : undefined;\n }\n return undefined;\n}\n\nexport class CodexEventMapper\n{\n private readonly options: Required<CodexEventMapperOptions>;\n private streamStarted = false;\n private readonly openTextParts = new Set<string>();\n private readonly textDeltaReceived = new Set<string>();\n private readonly openReasoningParts = new Set<string>();\n private readonly openToolCalls = new Map<string, { toolName: string; output: string }>();\n private readonly planSequenceByTurnId = new Map<string, number>();\n private threadId: string | undefined;\n private turnId: string | undefined;\n private latestUsage: LanguageModelV3Usage | undefined;\n\n constructor(options?: CodexEventMapperOptions)\n {\n this.options = {\n emitPlanUpdates: options?.emitPlanUpdates ?? true,\n };\n }\n\n setThreadId(threadId: string): void\n {\n this.threadId = threadId;\n }\n\n setTurnId(turnId: string): void\n {\n this.turnId = turnId;\n }\n\n getTurnId(): string | undefined\n {\n return this.turnId;\n }\n\n private nextPlanSequence(turnId: string): number\n {\n const next = (this.planSequenceByTurnId.get(turnId) ?? 0) + 1;\n this.planSequenceByTurnId.set(turnId, next);\n return next;\n }\n\n map(event: CodexEventMapperInput): LanguageModelV3StreamPart[]\n {\n const parts: LanguageModelV3StreamPart[] = [];\n\n const withMeta = <T extends LanguageModelV3StreamPart>(part: T): T =>\n withProviderMetadata(part, this.threadId, this.turnId);\n\n const pushStreamStart = () =>\n {\n if (!this.streamStarted)\n {\n parts.push({ type: \"stream-start\", warnings: [] });\n this.streamStarted = true;\n }\n };\n\n const pushReasoningDelta = (id: string, delta: string) =>\n {\n pushStreamStart();\n\n if (!this.openReasoningParts.has(id))\n {\n this.openReasoningParts.add(id);\n parts.push(withMeta({ type: \"reasoning-start\", id }));\n }\n\n if (!delta)\n {\n return;\n }\n\n parts.push(withMeta({ type: \"reasoning-delta\", id, delta }));\n };\n\n switch (event.method)\n {\n case \"turn/started\": {\n const turnStartedParams = event.params as TurnStartedNotification | undefined;\n if (turnStartedParams?.turn?.id)\n {\n this.turnId = turnStartedParams.turn.id;\n }\n pushStreamStart();\n break;\n }\n\n case \"item/started\": {\n const params = (event.params ?? {}) as ItemStartedNotification;\n const item = params.item;\n if (!item?.id)\n {\n break;\n }\n\n switch (item.type)\n {\n case \"agentMessage\": {\n pushStreamStart();\n this.openTextParts.add(item.id);\n parts.push(withMeta({ type: \"text-start\", id: item.id }));\n break;\n }\n case \"commandExecution\": {\n pushStreamStart();\n const toolName = \"codex_command_execution\";\n this.openToolCalls.set(item.id, { toolName, output: \"\" });\n parts.push(withMeta({\n type: \"tool-call\",\n toolCallId: item.id,\n toolName,\n input: JSON.stringify({ command: item.command, cwd: item.cwd }),\n providerExecuted: true,\n dynamic: true,\n }));\n break;\n }\n case \"reasoning\":\n case \"plan\":\n case \"fileChange\":\n case \"mcpToolCall\":\n case \"collabAgentToolCall\":\n case \"webSearch\":\n case \"imageView\":\n case \"contextCompaction\":\n case \"enteredReviewMode\":\n case \"exitedReviewMode\": {\n pushReasoningDelta(item.id, \"\");\n break;\n }\n default:\n break;\n }\n break;\n }\n\n case \"item/agentMessage/delta\": {\n const delta = (event.params ?? {}) as AgentMessageDeltaNotification;\n if (!delta.itemId || !delta.delta)\n {\n break;\n }\n\n pushStreamStart();\n\n if (!this.openTextParts.has(delta.itemId))\n {\n this.openTextParts.add(delta.itemId);\n parts.push(withMeta({ type: \"text-start\", id: delta.itemId }));\n }\n\n parts.push(withMeta({ type: \"text-delta\", id: delta.itemId, delta: delta.delta }));\n this.textDeltaReceived.add(delta.itemId);\n break;\n }\n\n case \"item/completed\": {\n const params = (event.params ?? {}) as ItemCompletedNotification;\n const item = params.item;\n if (!item?.id)\n {\n break;\n }\n\n if (item.type === \"agentMessage\")\n {\n // Fallback: if no deltas were streamed for this item,\n // emit the full text from the completed event so the\n // message isn't silently lost.\n if (!this.textDeltaReceived.has(item.id) && item.text)\n {\n pushStreamStart();\n\n if (!this.openTextParts.has(item.id))\n {\n this.openTextParts.add(item.id);\n parts.push(withMeta({ type: \"text-start\", id: item.id }));\n }\n\n parts.push(withMeta({ type: \"text-delta\", id: item.id, delta: item.text }));\n }\n\n if (this.openTextParts.has(item.id))\n {\n parts.push(withMeta({ type: \"text-end\", id: item.id }));\n this.openTextParts.delete(item.id);\n }\n }\n else if (item.type === \"commandExecution\" && this.openToolCalls.has(item.id))\n {\n const tracked = this.openToolCalls.get(item.id)!;\n const output = item.aggregatedOutput ?? tracked.output;\n const exitCode = item.exitCode;\n const status = item.status;\n\n parts.push(withMeta({\n type: \"tool-result\",\n toolCallId: item.id,\n toolName: tracked.toolName,\n result: { output, exitCode, status },\n }));\n this.openToolCalls.delete(item.id);\n }\n else if (this.openReasoningParts.has(item.id))\n {\n parts.push(withMeta({ type: \"reasoning-end\", id: item.id }));\n this.openReasoningParts.delete(item.id);\n }\n break;\n }\n\n case \"item/reasoning/textDelta\":\n case \"item/reasoning/summaryTextDelta\":\n case \"item/plan/delta\":\n case \"item/fileChange/outputDelta\": {\n const delta = (event.params ?? {}) as DeltaParams;\n if (delta.itemId && delta.delta)\n {\n pushReasoningDelta(delta.itemId, delta.delta);\n }\n break;\n }\n\n case \"item/reasoning/summaryPartAdded\": {\n const params = (event.params ?? {}) as ReasoningSummaryPartAddedNotification;\n if (params.itemId)\n {\n pushReasoningDelta(params.itemId, \"\\n\\n\");\n }\n break;\n }\n\n // codex/event/agent_reasoning mirrors canonical reasoning summary\n // stream events in current logs. Ignore wrapper to avoid duplicate\n // reasoning text in consumers.\n case \"codex/event/agent_reasoning\":\n break;\n\n // codex/event/agent_reasoning_section_break is the wrapper form of\n // item/reasoning/summaryPartAdded (identical 1:1). Handled by the\n // canonical event above — skip the wrapper to avoid double \"\\n\\n\".\n case \"codex/event/agent_reasoning_section_break\":\n break;\n\n case \"turn/plan/updated\": {\n if (!this.options.emitPlanUpdates)\n {\n break;\n }\n\n const params = (event.params ?? {}) as {\n turnId?: string;\n explanation?: string | null;\n plan?: Array<{ step: string; status: string }>;\n };\n const turnId = params.turnId;\n const plan = params.plan;\n if (turnId && plan)\n {\n pushStreamStart();\n const planSequence = this.nextPlanSequence(turnId);\n const toolCallId = `plan:${turnId}:${planSequence}`;\n const toolName = \"codex_plan_update\";\n\n parts.push(withMeta({\n type: \"tool-call\",\n toolCallId,\n toolName,\n input: JSON.stringify({}),\n providerExecuted: true,\n dynamic: true,\n }));\n\n parts.push(withMeta({\n type: \"tool-result\",\n toolCallId,\n toolName,\n result: { plan, explanation: params.explanation ?? undefined },\n }));\n }\n break;\n }\n\n // codex/event/plan_update is the wrapper form of turn/plan/updated (1:1).\n case \"codex/event/plan_update\":\n break;\n\n // NOTE: turn/diff/updated and codex/event/turn_diff are intentionally\n // NOT mapped. They carry full unified diffs (often 50-100 KB) which,\n // when emitted as reasoning deltas, crash or freeze the frontend\n // markdown renderer. If these need to surface in the UI, they should\n // use a dedicated part type with lazy/collapsed rendering — not\n // reasoning text.\n case \"turn/diff/updated\":\n case \"codex/event/turn_diff\":\n break;\n\n case \"item/commandExecution/outputDelta\": {\n const delta = (event.params ?? {}) as CommandExecutionOutputDeltaNotification;\n if (delta.itemId && delta.delta && this.openToolCalls.has(delta.itemId))\n {\n const tracked = this.openToolCalls.get(delta.itemId)!;\n tracked.output += delta.delta;\n parts.push(withMeta({\n type: \"tool-result\",\n toolCallId: delta.itemId,\n toolName: tracked.toolName,\n result: { output: tracked.output },\n preliminary: true,\n }));\n }\n break;\n }\n\n case \"codex/event/mcp_tool_call_begin\": {\n const params = (event.params ?? {}) as {\n msg?: {\n call_id?: string;\n invocation?: { server?: string; tool?: string; arguments?: unknown };\n };\n };\n const callId = params.msg?.call_id;\n const inv = params.msg?.invocation;\n if (callId && inv)\n {\n pushStreamStart();\n const toolName = `mcp:${inv.server}/${inv.tool}`;\n this.openToolCalls.set(callId, { toolName, output: \"\" });\n parts.push(withMeta({\n type: \"tool-call\",\n toolCallId: callId,\n toolName,\n input: JSON.stringify(inv.arguments ?? {}),\n providerExecuted: true,\n dynamic: true,\n }));\n }\n break;\n }\n\n case \"codex/event/mcp_tool_call_end\": {\n const params = (event.params ?? {}) as {\n msg?: {\n call_id?: string;\n result?: { Ok?: { content?: Array<{ type: string; text?: string }> }; Err?: unknown };\n };\n };\n const callId = params.msg?.call_id;\n if (callId && this.openToolCalls.has(callId))\n {\n const tracked = this.openToolCalls.get(callId)!;\n const result = params.msg?.result;\n const textParts = result?.Ok?.content?.filter(c => c.type === \"text\").map(c => c.text) ?? [];\n const output = textParts.join(\"\\n\") || (result?.Err ? JSON.stringify(result.Err) : \"\");\n\n parts.push(withMeta({\n type: \"tool-result\",\n toolCallId: callId,\n toolName: tracked.toolName,\n result: { output },\n }));\n this.openToolCalls.delete(callId);\n }\n break;\n }\n\n case \"item/mcpToolCall/progress\": {\n const params = (event.params ?? {}) as McpToolCallProgressNotification;\n if (params.itemId && params.message)\n {\n pushReasoningDelta(params.itemId, params.message);\n }\n break;\n }\n\n case \"item/tool/callStarted\": {\n const params = (event.params ?? {}) as { callId?: string; tool?: string };\n if (params.callId && params.tool)\n {\n pushStreamStart();\n parts.push(withMeta({ type: \"tool-input-start\", id: params.callId, toolName: params.tool, dynamic: true }));\n }\n break;\n }\n\n case \"item/tool/callDelta\": {\n const params = (event.params ?? {}) as { callId?: string; delta?: string };\n if (params.callId && params.delta)\n {\n parts.push(withMeta({ type: \"tool-input-delta\", id: params.callId, delta: params.delta }));\n }\n break;\n }\n\n case \"item/tool/callFinished\": {\n const params = (event.params ?? {}) as { callId?: string };\n if (params.callId)\n {\n parts.push(withMeta({ type: \"tool-input-end\", id: params.callId }));\n }\n break;\n }\n\n case \"thread/tokenUsage/updated\": {\n const params = (event.params ?? {}) as ThreadTokenUsageUpdatedNotification;\n const last = params.tokenUsage?.last;\n if (last)\n {\n this.latestUsage = {\n inputTokens: {\n total: last.inputTokens,\n noCache: undefined,\n cacheRead: last.cachedInputTokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: last.outputTokens,\n text: undefined,\n reasoning: last.reasoningOutputTokens,\n },\n };\n }\n break;\n }\n\n case \"turn/completed\": {\n pushStreamStart();\n\n for (const itemId of this.openTextParts)\n {\n parts.push(withMeta({ type: \"text-end\", id: itemId }));\n }\n this.openTextParts.clear();\n\n for (const itemId of this.openReasoningParts)\n {\n parts.push(withMeta({ type: \"reasoning-end\", id: itemId }));\n }\n this.openReasoningParts.clear();\n\n for (const [itemId, tracked] of this.openToolCalls)\n {\n parts.push(withMeta({\n type: \"tool-result\",\n toolCallId: itemId,\n toolName: tracked.toolName,\n result: { output: tracked.output },\n }));\n }\n this.openToolCalls.clear();\n\n const completed = (event.params ?? {}) as TurnCompletedNotification;\n if (completed.turn?.id)\n {\n this.planSequenceByTurnId.delete(completed.turn.id);\n }\n const usage = this.latestUsage ?? EMPTY_USAGE;\n parts.push(withMeta({ type: \"finish\", finishReason: toFinishReason(completed.turn?.status), usage }));\n break;\n }\n\n default:\n break;\n }\n\n return parts;\n }\n}\n","import type { AppServerClient } from \"./client/app-server-client\";\nimport type { UserInput } from \"./protocol/app-server-protocol/v2/UserInput\";\nimport type {\n CodexTurnInterruptParams,\n CodexTurnInterruptResult,\n CodexTurnStartParams,\n CodexTurnStartResult,\n} from \"./protocol/types\";\n\nexport interface CodexSession\n{\n readonly threadId: string;\n readonly turnId: string | undefined;\n isActive(): boolean;\n injectMessage(input: string | UserInput[]): Promise<void>;\n interrupt(): Promise<void>;\n}\n\nexport class CodexSessionImpl implements CodexSession\n{\n private readonly _threadId: string;\n private _turnId: string | undefined;\n private _active = true;\n private readonly client: AppServerClient;\n private readonly interruptTimeoutMs: number;\n\n constructor(opts: {\n client: AppServerClient;\n threadId: string;\n turnId: string | undefined;\n interruptTimeoutMs: number;\n })\n {\n this.client = opts.client;\n this._threadId = opts.threadId;\n this._turnId = opts.turnId;\n this.interruptTimeoutMs = opts.interruptTimeoutMs;\n }\n\n get threadId(): string\n {\n return this._threadId;\n }\n\n get turnId(): string | undefined\n {\n return this._turnId;\n }\n\n /** @internal Called by the model when turn/started arrives with a turnId. */\n setTurnId(turnId: string): void\n {\n this._turnId = turnId;\n }\n\n /** @internal Called by the model when the turn completes or the stream closes. */\n markInactive(): void\n {\n this._active = false;\n }\n\n isActive(): boolean\n {\n return this._active;\n }\n\n /**\n * Inject follow-up input into the current thread.\n *\n * Uses turn/start which the app-server routes through steer_input when a\n * turn is already active, or starts a new turn otherwise. This avoids the\n * strict timing requirements of turn/steer (which needs codex/event/task_started\n * before it accepts input). We may revisit turn/steer in the future.\n */\n async injectMessage(input: string | UserInput[]): Promise<void>\n {\n if (!this._active)\n {\n throw new Error(\"Session is no longer active.\");\n }\n\n const userInput: UserInput[] = typeof input === \"string\"\n ? [{ type: \"text\", text: input, text_elements: [] }]\n : input;\n\n const turnStartParams: CodexTurnStartParams = {\n threadId: this._threadId,\n input: userInput,\n };\n\n const result = await this.client.request<CodexTurnStartResult & { turn?: { id?: string } }>(\"turn/start\", turnStartParams);\n\n // Update turnId if the server started a new turn\n const newTurnId = result.turnId ?? result.turn?.id;\n if (newTurnId)\n {\n this._turnId = newTurnId;\n }\n }\n\n async interrupt(): Promise<void>\n {\n if (!this._active || !this._turnId)\n {\n return;\n }\n\n const interruptParams: CodexTurnInterruptParams = {\n threadId: this._threadId,\n turnId: this._turnId,\n };\n\n await this.client.request<CodexTurnInterruptResult>(\n \"turn/interrupt\",\n interruptParams,\n this.interruptTimeoutMs,\n );\n }\n}\n","import { randomUUID } from \"node:crypto\";\nimport { unlink, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\n\nimport type { LanguageModelV3FilePart, LanguageModelV3Prompt } from \"@ai-sdk/provider\";\n\nimport type { CodexTurnInputItem, CodexTurnInputText } from \"../protocol/types\";\n\n/**\n * Extracts system messages from the prompt and concatenates them into a single\n * string suitable for `developerInstructions` on `thread/start` or\n * `thread/resume`. Returns `undefined` when no system content is present.\n */\nexport function mapSystemPrompt(prompt: LanguageModelV3Prompt): string | undefined\n{\n const chunks: string[] = [];\n\n for (const message of prompt)\n {\n if (message.role === \"system\")\n {\n const text = message.content.trim();\n if (text.length > 0)\n {\n chunks.push(text);\n }\n }\n }\n\n return chunks.length > 0 ? chunks.join(\"\\n\\n\") : undefined;\n}\n\nfunction textItem(text: string): CodexTurnInputText\n{\n return { type: \"text\", text, text_elements: [] };\n}\n\n/**\n * Pluggable backend for persisting inline binary data so that the Codex\n * protocol can reference it by URL.\n *\n * Implement this interface to use a different storage backend (e.g. S3, GCS).\n *\n * - A `file:` URL maps to `{ type: \"localImage\", path }` in the Codex protocol.\n * - An `http(s):` URL maps to `{ type: \"image\", url }`.\n */\nexport interface FileWriter\n{\n /** Persist `data` and return a URL that Codex can use to access it. */\n write(data: Uint8Array | string, mediaType: string): Promise<URL>;\n\n /**\n * Remove previously written files. Best-effort — implementations should\n * never throw.\n */\n cleanup(urls: URL[]): Promise<void>;\n}\n\nconst MEDIA_TYPE_TO_EXT: Record<string, string> = {\n \"image/png\": \".png\",\n \"image/jpeg\": \".jpg\",\n \"image/gif\": \".gif\",\n \"image/webp\": \".webp\",\n \"image/svg+xml\": \".svg\",\n \"image/bmp\": \".bmp\",\n \"image/tiff\": \".tiff\",\n};\n\nfunction extensionForMediaType(mediaType: string): string\n{\n return MEDIA_TYPE_TO_EXT[mediaType] ?? \".bin\";\n}\n\n/**\n * A {@link FileWriter} that writes to `os.tmpdir()` and returns `file:` URLs.\n */\nexport class LocalFileWriter implements FileWriter\n{\n async write(data: Uint8Array | string, mediaType: string): Promise<URL>\n {\n const ext = extensionForMediaType(mediaType);\n const filename = `codex-ai-sdk-${randomUUID()}${ext}`;\n const filepath = join(tmpdir(), filename);\n\n const buffer = typeof data === \"string\"\n ? Buffer.from(data, \"base64\")\n : data;\n\n await writeFile(filepath, buffer);\n return pathToFileURL(filepath);\n }\n\n async cleanup(urls: URL[]): Promise<void>\n {\n await Promise.allSettled(\n urls\n .filter((u) => u.protocol === \"file:\")\n .map((u) => unlink(u)),\n );\n }\n}\n\n/**\n * Resolves inline binary data in AI SDK prompts and maps user content to\n * {@link CodexTurnInputItem} arrays ready for `turn/start`.\n *\n * Instantiate with an optional custom {@link FileWriter} for non-local storage\n * (e.g. S3). Tracks all written URLs so that {@link cleanup} can remove them\n * after the turn completes.\n *\n * @example\n * ```ts\n * const fileResolver = new PromptFileResolver();\n * const turnInput = await fileResolver.resolve(prompt, isResume);\n * // … after the turn …\n * await fileResolver.cleanup();\n * ```\n */\nexport class PromptFileResolver\n{\n private readonly writer: FileWriter;\n private readonly written: URL[] = [];\n\n constructor(writer?: FileWriter)\n {\n this.writer = writer ?? new LocalFileWriter();\n }\n\n /**\n * Resolve inline file data and map user content to Codex input items.\n *\n * - Inline image data (base64 / Uint8Array) is written via the\n * {@link FileWriter} and converted to `localImage` or `image` items.\n * - URL-based image file parts are converted directly.\n * - Inline text file data is decoded and inlined as text.\n * - Unsupported media types are silently skipped.\n *\n * @param isResume - When true only the last user message is extracted.\n * When false (fresh thread) all user text is accumulated with images\n * flushing the text buffer to preserve ordering.\n */\n async resolve(\n prompt: LanguageModelV3Prompt,\n isResume: boolean = false,\n ): Promise<CodexTurnInputItem[]>\n {\n if (isResume)\n {\n return this.resolveResumed(prompt);\n }\n\n return this.resolveFresh(prompt);\n }\n\n /**\n * Remove all files created by previous {@link resolve} calls.\n * Best-effort — never throws.\n */\n async cleanup(): Promise<void>\n {\n const urls = this.written.splice(0);\n if (urls.length > 0)\n {\n await this.writer.cleanup(urls);\n }\n }\n\n /**\n * Convert a resolved image URL to a Codex input item.\n */\n private mapImageUrl(mediaType: string, data: URL): CodexTurnInputItem | null\n {\n if (!mediaType.startsWith(\"image/\"))\n {\n return null;\n }\n\n if (data.protocol === \"file:\")\n {\n return { type: \"localImage\", path: fileURLToPath(data) };\n }\n\n return { type: \"image\", url: data.href };\n }\n\n /**\n * Resolve a single file part: write inline data via the writer, then\n * convert to a Codex input item. Text files are decoded and returned\n * as text items. Returns `null` for unsupported media types.\n */\n private async resolveFilePart(\n part: LanguageModelV3FilePart,\n ): Promise<CodexTurnInputItem | null>\n {\n const { mediaType, data } = part;\n\n // Text files → decode and inline as text.\n // URL text files pass through as the URL string — we don't fetch remote\n // content; the URL itself serves as a reference for the model.\n if (mediaType.startsWith(\"text/\"))\n {\n if (data instanceof URL)\n {\n return textItem(data.href);\n }\n\n const text = typeof data === \"string\"\n ? Buffer.from(data, \"base64\").toString(\"utf-8\")\n : new TextDecoder().decode(data);\n return textItem(text);\n }\n\n // Images with inline data → write via writer, then map the URL.\n if (mediaType.startsWith(\"image/\") && !(data instanceof URL))\n {\n const url = await this.writer.write(data, mediaType);\n this.written.push(url);\n return this.mapImageUrl(mediaType, url);\n }\n\n // Images that already have a URL → map directly.\n if (data instanceof URL)\n {\n return this.mapImageUrl(mediaType, data);\n }\n\n return null;\n }\n\n /**\n * Resume path: extract parts from the last user message individually.\n */\n private async resolveResumed(\n prompt: LanguageModelV3Prompt,\n ): Promise<CodexTurnInputItem[]>\n {\n for (let i = prompt.length - 1; i >= 0; i--)\n {\n const message = prompt[i];\n\n if (message?.role === \"user\")\n {\n const items: CodexTurnInputItem[] = [];\n\n for (const part of message.content)\n {\n if (part.type === \"text\")\n {\n const text = part.text.trim();\n if (text.length > 0)\n {\n items.push(textItem(text));\n }\n }\n else if (part.type === \"file\")\n {\n const mapped = await this.resolveFilePart(part);\n if (mapped)\n {\n items.push(mapped);\n }\n }\n }\n\n return items;\n }\n }\n\n return [];\n }\n\n /**\n * Fresh thread path: accumulate text chunks across all user messages,\n * flushing before each image to preserve ordering.\n */\n private async resolveFresh(\n prompt: LanguageModelV3Prompt,\n ): Promise<CodexTurnInputItem[]>\n {\n const items: CodexTurnInputItem[] = [];\n const textChunks: string[] = [];\n\n const flushText = (): void =>\n {\n if (textChunks.length > 0)\n {\n items.push(textItem(textChunks.join(\"\\n\\n\")));\n textChunks.length = 0;\n }\n };\n\n for (const message of prompt)\n {\n if (message.role === \"user\")\n {\n for (const part of message.content)\n {\n if (part.type === \"text\")\n {\n const text = part.text.trim();\n if (text.length > 0)\n {\n textChunks.push(text);\n }\n }\n else if (part.type === \"file\")\n {\n const mapped = await this.resolveFilePart(part);\n if (mapped)\n {\n if (mapped.type === \"text\")\n {\n textChunks.push(mapped.text);\n }\n else\n {\n flushText();\n items.push(mapped);\n }\n }\n }\n }\n }\n }\n\n flushText();\n return items;\n }\n}\n","import type {\n LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3Content,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamPart,\n LanguageModelV3StreamResult,\n LanguageModelV3Usage,\n} from \"@ai-sdk/provider\";\n\nimport { ApprovalsDispatcher } from \"./approvals\";\nimport { AppServerClient } from \"./client/app-server-client\";\nimport { PersistentTransport } from \"./client/transport-persistent\";\nimport { StdioTransport } from \"./client/transport-stdio\";\nimport { WebSocketTransport } from \"./client/transport-websocket\";\nimport { DynamicToolsDispatcher } from \"./dynamic-tools\";\nimport { CodexProviderError } from \"./errors\";\nimport { PACKAGE_NAME, PACKAGE_VERSION } from \"./package-info\";\nimport type { JsonValue } from \"./protocol/app-server-protocol/serde_json/JsonValue\";\nimport type { ThreadResumeResponse } from \"./protocol/app-server-protocol/v2/ThreadResumeResponse\";\nimport { CodexEventMapper } from \"./protocol/event-mapper\";\nimport { CODEX_PROVIDER_ID, withProviderMetadata } from \"./protocol/provider-metadata\";\nimport type {\n CodexInitializeParams,\n CodexInitializeResult,\n CodexThreadCompactStartParams,\n CodexThreadCompactStartResult,\n CodexThreadResumeParams,\n CodexThreadStartParams,\n CodexThreadStartResult,\n CodexToolCallRequestParams,\n CodexToolCallResult,\n CodexToolResultContentItem,\n CodexTurnInterruptParams,\n CodexTurnInterruptResult,\n CodexTurnStartParams,\n CodexTurnStartResult,\n} from \"./protocol/types\";\nimport type { CodexCompactionOnResumeContext, CodexProviderSettings } from \"./provider-settings\";\nimport { CodexSessionImpl } from \"./session\";\nimport { stripUndefined } from \"./utils/object\";\nimport { mapSystemPrompt, PromptFileResolver } from \"./utils/prompt-file-resolver\";\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface CodexLanguageModelSettings\n{\n // intentionally empty — settings will be added as the API evolves\n}\n\nexport type { CodexThreadDefaults, CodexTurnDefaults } from \"./provider-settings\";\n\nexport interface CodexModelConfig\n{\n provider: string;\n providerSettings: Readonly<CodexProviderSettings>;\n}\n\ninterface ThreadStartResultLike extends CodexThreadStartResult\n{\n thread?: {\n id?: string;\n };\n}\n\ninterface TurnStartResultLike extends CodexTurnStartResult\n{\n turn?: {\n id?: string;\n };\n}\n\ntype PassThroughStreamContentPart = Extract<\n LanguageModelV3StreamPart,\n { type: \"tool-call\" | \"tool-result\" | \"file\" | \"source\" | \"tool-approval-request\" }\n>;\n\nfunction createEmptyUsage(): LanguageModelV3Usage \n{\n return {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n };\n}\n\nfunction extractThreadId(result: ThreadStartResultLike): string \n{\n const threadId = result.threadId ?? result.thread?.id;\n if (!threadId) \n {\n throw new CodexProviderError(\"thread/start response does not include a thread id.\");\n }\n return threadId;\n}\n\nfunction extractTurnId(result: TurnStartResultLike): string \n{\n const turnId = result.turnId ?? result.turn?.id;\n if (!turnId) \n {\n throw new CodexProviderError(\"turn/start response does not include a turn id.\");\n }\n return turnId;\n}\n\nfunction extractThreadIdFromProviderOptions(\n providerOptions: Record<string, unknown> | undefined,\n): string | undefined\n{\n const meta = providerOptions?.[CODEX_PROVIDER_ID];\n if (meta && typeof meta === \"object\" && \"threadId\" in meta && typeof (meta as Record<string, unknown>)[\"threadId\"] === \"string\")\n {\n return (meta as Record<string, unknown>)[\"threadId\"] as string;\n }\n return undefined;\n}\n\nfunction extractResumeThreadId(prompt: LanguageModelV3CallOptions[\"prompt\"]): string | undefined\n{\n for (let i = prompt.length - 1; i >= 0; i--)\n {\n const message = prompt[i];\n if (message?.role === \"assistant\")\n {\n // Check message-level providerOptions\n const messageThreadId = extractThreadIdFromProviderOptions(\n message.providerOptions as Record<string, unknown> | undefined,\n );\n if (messageThreadId)\n {\n return messageThreadId;\n }\n\n // Check content-part-level providerOptions\n if (Array.isArray(message.content))\n {\n for (const part of message.content)\n {\n const partThreadId = extractThreadIdFromProviderOptions(\n (part as { providerOptions?: Record<string, unknown> }).providerOptions,\n );\n if (partThreadId)\n {\n return partThreadId;\n }\n }\n }\n }\n }\n return undefined;\n}\n\nfunction extractToolResults(\n prompt: LanguageModelV3CallOptions[\"prompt\"],\n callId?: string,\n): CodexToolCallResult | undefined\n{\n for (let i = prompt.length - 1; i >= 0; i--)\n {\n const message = prompt[i];\n if (message?.role === \"tool\")\n {\n const contentItems: CodexToolResultContentItem[] = [];\n let success = true;\n\n for (const part of message.content)\n {\n if (part.type === \"tool-result\")\n {\n if (callId && part.toolCallId !== callId)\n {\n continue;\n }\n\n if (part.output.type === \"text\")\n {\n contentItems.push({ type: \"inputText\", text: part.output.value });\n }\n else if (part.output.type === \"json\")\n {\n contentItems.push({ type: \"inputText\", text: JSON.stringify(part.output.value) });\n }\n else if (part.output.type === \"execution-denied\")\n {\n success = false;\n contentItems.push({\n type: \"inputText\",\n text: part.output.reason ?? \"Tool execution was denied.\",\n });\n }\n }\n }\n\n if (contentItems.length > 0)\n {\n return { success, contentItems };\n }\n\n if (callId)\n {\n // A matching callId was requested, so don't consume unrelated\n // tool results from older prompt entries.\n return undefined;\n }\n }\n }\n return undefined;\n}\n\nfunction sdkToolsToCodexDynamicTools(\n tools: NonNullable<LanguageModelV3CallOptions[\"tools\"]>,\n): { name: string; description?: string; inputSchema: Record<string, unknown> }[]\n{\n return tools\n .filter((t): t is Extract<typeof t, { type: \"function\" }> => t.type === \"function\")\n .map((t) => stripUndefined({\n name: t.name,\n description: t.description,\n inputSchema: t.inputSchema as Record<string, unknown>,\n }));\n}\n\nfunction isPassThroughContentPart(\n part: LanguageModelV3StreamPart,\n): part is PassThroughStreamContentPart \n{\n switch (part.type) \n {\n case \"tool-call\":\n case \"tool-result\":\n case \"file\":\n case \"source\":\n case \"tool-approval-request\":\n return true;\n default:\n return false;\n }\n}\n\nexport class CodexLanguageModel implements LanguageModelV3 \n{\n readonly specificationVersion = \"v3\" as const;\n readonly provider: string;\n readonly modelId: string;\n readonly supportedUrls: Record<string, RegExp[]> = {};\n\n private readonly settings: CodexLanguageModelSettings;\n private readonly config: CodexModelConfig;\n\n constructor(\n modelId: string,\n settings: CodexLanguageModelSettings,\n config: CodexModelConfig,\n ) \n {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n this.provider = config.provider;\n }\n\n async doGenerate(options: LanguageModelV3CallOptions): Promise<LanguageModelV3GenerateResult> \n {\n void this.settings;\n\n const streamResult = await this.doStream(options);\n const reader = streamResult.stream.getReader();\n\n const textOrder: string[] = [];\n const textById = new Map<string, string>();\n const passThroughContent: LanguageModelV3Content[] = [];\n\n let warnings: LanguageModelV3GenerateResult[\"warnings\"] = [];\n let finishReason: LanguageModelV3GenerateResult[\"finishReason\"] = {\n unified: \"other\",\n raw: undefined,\n };\n let usage: LanguageModelV3Usage = createEmptyUsage();\n let providerMetadata: LanguageModelV3GenerateResult[\"providerMetadata\"];\n\n while (true) \n {\n const { value, done } = await reader.read();\n if (done) \n {\n break;\n }\n\n if (value.type === \"stream-start\") \n {\n warnings = value.warnings;\n continue;\n }\n\n if (value.type === \"text-start\") \n {\n if (!textById.has(value.id)) \n {\n textOrder.push(value.id);\n textById.set(value.id, \"\");\n }\n continue;\n }\n\n if (value.type === \"text-delta\") \n {\n if (!textById.has(value.id)) \n {\n textOrder.push(value.id);\n textById.set(value.id, value.delta);\n }\n else \n {\n textById.set(value.id, `${textById.get(value.id) ?? \"\"}${value.delta}`);\n }\n continue;\n }\n\n if (value.type === \"finish\")\n {\n finishReason = value.finishReason;\n usage = value.usage;\n providerMetadata = value.providerMetadata;\n continue;\n }\n\n if (value.type === \"error\") \n {\n if (value.error instanceof Error) \n {\n throw value.error;\n }\n\n throw new CodexProviderError(\"Generation stream emitted an error.\", {\n cause: value.error,\n });\n }\n\n if (isPassThroughContentPart(value)) \n {\n passThroughContent.push(value);\n }\n }\n\n const textContent: LanguageModelV3Content[] = textOrder\n .map((id) => \n {\n const text = textById.get(id) ?? \"\";\n if (text.length === 0) \n {\n return null;\n }\n\n return stripUndefined({\n type: \"text\" as const,\n text,\n providerMetadata,\n });\n })\n .filter((part): part is Extract<LanguageModelV3Content, { type: \"text\" }> => part !== null);\n\n return stripUndefined({\n content: [...textContent, ...passThroughContent],\n finishReason,\n usage,\n warnings,\n providerMetadata,\n request: streamResult.request,\n });\n }\n\n private registerCrossCallToolHandler(\n client: AppServerClient,\n controller: ReadableStreamDefaultController<LanguageModelV3StreamPart>,\n persistentTransport: PersistentTransport,\n threadId: string,\n closeSuccessfully: () => Promise<void>,\n ): void\n {\n client.onToolCallRequest((params: CodexToolCallRequestParams, request) =>\n {\n const toolName = params.tool ?? params.toolName ?? \"unknown\";\n const callId = params.callId ?? `call_${Date.now()}`;\n const args = params.arguments ?? params.input ?? {};\n\n const withMeta = <T extends LanguageModelV3StreamPart>(part: T): T => withProviderMetadata(part, threadId);\n\n // Park the tool call on the worker for cross-call resumption.\n // Return a never-resolving promise so AppServerClient does NOT\n // auto-send a JSON-RPC response — we respond manually on the\n // next doStream() via persistentTransport.respondToToolCall().\n persistentTransport.parkToolCall({\n requestId: request.id,\n callId,\n toolName,\n args,\n threadId,\n });\n\n controller.enqueue(withMeta({\n type: \"tool-call\",\n toolCallId: callId,\n toolName,\n input: typeof args === \"string\" ? args : JSON.stringify(args),\n }));\n\n controller.enqueue(withMeta({\n type: \"finish\",\n finishReason: { unified: \"tool-calls\", raw: \"tool-calls\" },\n usage: createEmptyUsage(),\n }));\n\n void closeSuccessfully();\n\n // Return a never-resolving promise to prevent auto-response\n return new Promise<CodexToolCallResult>(() => { });\n });\n }\n\n doStream(options: LanguageModelV3CallOptions): Promise<LanguageModelV3StreamResult>\n {\n const resumeThreadId = extractResumeThreadId(options.prompt);\n\n const transport = this.config.providerSettings.transportFactory\n ? this.config.providerSettings.transportFactory(options.abortSignal, resumeThreadId)\n : this.config.providerSettings.transport?.type === \"websocket\"\n ? new WebSocketTransport(this.config.providerSettings.transport.websocket)\n : new StdioTransport(this.config.providerSettings.transport?.stdio);\n\n const packetLogger = this.config.providerSettings.debug?.logPackets === true\n ? this.config.providerSettings.debug.logger\n ?? ((packet: { direction: \"inbound\" | \"outbound\"; message: unknown }) =>\n {\n if (packet.direction === \"inbound\")\n {\n console.debug(\"[codex packet]\", packet.message);\n }\n })\n : undefined;\n\n const toolLogger = this.config.providerSettings.debug?.logToolCalls === true\n ? this.config.providerSettings.debug.toolLogger\n ?? ((event: { event: string; data?: unknown }) =>\n {\n console.debug(\"[codex tool]\", event.event, event.data);\n })\n : undefined;\n\n const debugLog = packetLogger\n ? (direction: \"inbound\" | \"outbound\", label: string, data?: unknown) =>\n {\n packetLogger({ direction, message: { debug: label, data } });\n }\n : undefined;\n\n const client = new AppServerClient(transport, stripUndefined({\n onPacket: packetLogger,\n }));\n\n const mapper = new CodexEventMapper(stripUndefined({\n emitPlanUpdates: this.config.providerSettings.emitPlanUpdates,\n }));\n\n let activeThreadId: string | undefined;\n let activeTurnId: string | undefined;\n let session: CodexSessionImpl | undefined;\n\n const interruptTimeoutMs = this.config.providerSettings.interruptTimeoutMs ?? 10_000;\n\n const interruptTurnIfPossible = async () =>\n {\n if (!activeThreadId || !activeTurnId)\n {\n return;\n }\n\n const interruptParams: CodexTurnInterruptParams = {\n threadId: activeThreadId,\n turnId: activeTurnId,\n };\n debugLog?.(\"outbound\", \"turn/interrupt\", interruptParams);\n await client.request<CodexTurnInterruptResult>(\"turn/interrupt\", interruptParams, interruptTimeoutMs);\n };\n\n const fileResolver = new PromptFileResolver();\n\n const stream = new ReadableStream<LanguageModelV3StreamPart>({\n start: (controller) =>\n {\n let closed = false;\n\n const closeWithError = async (error: unknown) =>\n {\n if (closed)\n {\n return;\n }\n\n session?.markInactive();\n controller.enqueue({ type: \"error\", error });\n closed = true;\n\n try\n {\n controller.close();\n }\n finally\n {\n await fileResolver.cleanup();\n await client.disconnect();\n }\n };\n\n const closeSuccessfully = async () =>\n {\n if (closed)\n {\n return;\n }\n\n session?.markInactive();\n closed = true;\n\n try\n {\n controller.close();\n }\n finally\n {\n await fileResolver.cleanup();\n await client.disconnect();\n }\n };\n\n const abortHandler = () => \n {\n void (async () =>\n {\n try\n {\n await interruptTurnIfPossible();\n }\n catch\n {\n // Best-effort only: always close/disconnect even if interrupt fails.\n }\n\n await closeWithError(new DOMException(\"Aborted\", \"AbortError\"));\n })();\n };\n\n if (options.abortSignal) \n {\n if (options.abortSignal.aborted) \n {\n abortHandler();\n return;\n }\n options.abortSignal.addEventListener(\"abort\", abortHandler, { once: true });\n }\n\n void (async () =>\n {\n try\n {\n await client.connect();\n\n // ── Tool-result continuation (cross-call) ──\n // If the transport has a pending tool call from a previous\n // doStream(), respond with the tool results and let Codex continue.\n const persistentTransport = transport instanceof PersistentTransport\n ? transport\n : null;\n const pendingToolCall = persistentTransport?.getPendingToolCall() ?? null;\n\n if (pendingToolCall && persistentTransport)\n {\n toolLogger?.({\n event: \"cross-call-resume\",\n data: {\n threadId: pendingToolCall.threadId,\n callId: pendingToolCall.callId,\n toolName: pendingToolCall.toolName,\n },\n });\n const toolResult = extractToolResults(options.prompt, pendingToolCall.callId);\n toolLogger?.({\n event: \"cross-call-result-extracted\",\n data: {\n callId: pendingToolCall.callId,\n found: !!toolResult,\n success: toolResult?.success,\n contentItemsCount: toolResult?.contentItems.length ?? 0,\n },\n });\n mapper.setThreadId(pendingToolCall.threadId);\n\n client.onAnyNotification((method, params) =>\n {\n const parts = mapper.map({ method, params });\n for (const part of parts)\n {\n controller.enqueue(part);\n if (part.type === \"finish\")\n {\n void closeSuccessfully();\n }\n }\n });\n\n // Register cross-call handler again for chained tool calls\n this.registerCrossCallToolHandler(\n client, controller, persistentTransport,\n pendingToolCall.threadId, closeSuccessfully,\n );\n\n const approvalsDispatcher = new ApprovalsDispatcher(stripUndefined({\n onCommandApproval: this.config.providerSettings.approvals?.onCommandApproval,\n onFileChangeApproval: this.config.providerSettings.approvals?.onFileChangeApproval,\n }));\n approvalsDispatcher.attach(client);\n\n const result = toolResult ?? {\n success: false,\n contentItems: [{\n type: \"inputText\",\n text: `Missing tool result for pending callId \"${pendingToolCall.callId}\".`,\n }],\n };\n\n await persistentTransport.respondToToolCall(result);\n\n toolLogger?.({\n event: \"cross-call-result-sent\",\n data: {\n callId: pendingToolCall.callId,\n found: !!toolResult,\n success: result.success,\n contentItemsCount: result.contentItems.length ?? 0,\n },\n });\n\n return;\n }\n\n // ── Normal flow ──\n const dynamicToolsEnabled =\n this.config.providerSettings.experimentalApi === true;\n if (dynamicToolsEnabled)\n {\n const dispatcher = new DynamicToolsDispatcher(stripUndefined({\n tools: this.config.providerSettings.tools,\n handlers: this.config.providerSettings.toolHandlers,\n timeoutMs: this.config.providerSettings.toolTimeoutMs,\n onDebugEvent: toolLogger,\n }));\n dispatcher.attach(client);\n }\n\n const approvalsDispatcher = new ApprovalsDispatcher(stripUndefined({\n onCommandApproval: this.config.providerSettings.approvals?.onCommandApproval,\n onFileChangeApproval: this.config.providerSettings.approvals?.onFileChangeApproval,\n }));\n approvalsDispatcher.attach(client);\n\n client.onAnyNotification((method, params) =>\n {\n const parts = mapper.map({ method, params });\n\n // Sync turnId from mapper after it processes turn/started\n const mappedTurnId = mapper.getTurnId();\n if (mappedTurnId && mappedTurnId !== activeTurnId)\n {\n activeTurnId = mappedTurnId;\n session?.setTurnId(mappedTurnId);\n }\n\n for (const part of parts)\n {\n controller.enqueue(part);\n\n if (part.type === \"finish\")\n {\n void closeSuccessfully();\n }\n }\n });\n\n // Merge provider-level tools with SDK tools from options\n const providerToolDefs = this.config.providerSettings.tools;\n const providerDynamicTools = providerToolDefs\n ? Object.entries(providerToolDefs).map(([name, def]) => ({\n name,\n description: def.description,\n inputSchema: def.inputSchema,\n }))\n : [];\n\n const sdkDynamicTools = options.tools\n ? sdkToolsToCodexDynamicTools(options.tools)\n : [];\n\n const allDynamicTools = [...providerDynamicTools, ...sdkDynamicTools];\n const dynamicTools = allDynamicTools.length > 0 ? allDynamicTools : undefined;\n toolLogger?.({\n event: \"dynamic-tools-advertised\",\n data: {\n providerTools: providerDynamicTools.map((t) => t.name),\n sdkTools: sdkDynamicTools.map((t) => t.name),\n total: allDynamicTools.length,\n },\n });\n\n const hasSdkTools = sdkDynamicTools.length > 0;\n\n // Auto-enable experimentalApi when any dynamic tools are present\n const needsExperimentalApi =\n this.config.providerSettings.experimentalApi === true || dynamicTools !== undefined;\n\n const initializeParams: CodexInitializeParams = stripUndefined({\n clientInfo: this.config.providerSettings.clientInfo ?? {\n name: PACKAGE_NAME,\n version: PACKAGE_VERSION,\n },\n capabilities: needsExperimentalApi ? { experimentalApi: true } : undefined,\n });\n\n await client.request<CodexInitializeResult>(\"initialize\", initializeParams);\n await client.notification(\"initialized\");\n\n debugLog?.(\"inbound\", \"prompt\", options.prompt);\n\n debugLog?.(\"inbound\", \"extractResumeThreadId\", { resumeThreadId });\n\n const developerInstructions = mapSystemPrompt(options.prompt);\n\n let threadId: string;\n\n if (resumeThreadId)\n {\n const resumeParams: CodexThreadResumeParams = stripUndefined({\n threadId: resumeThreadId,\n persistExtendedHistory: false,\n developerInstructions,\n });\n debugLog?.(\"outbound\", \"thread/resume\", resumeParams);\n const resumeResult = await client.request<ThreadResumeResponse>(\n \"thread/resume\",\n resumeParams,\n );\n threadId = resumeResult.thread.id;\n\n const strictCompaction = this.config.providerSettings.compaction?.strict === true;\n const shouldCompactOnResume = this.config.providerSettings.compaction?.shouldCompactOnResume;\n let shouldCompact = false;\n\n if (typeof shouldCompactOnResume === \"boolean\")\n {\n shouldCompact = shouldCompactOnResume;\n }\n else if (typeof shouldCompactOnResume === \"function\")\n {\n const compactionContext: CodexCompactionOnResumeContext = {\n threadId,\n resumeThreadId,\n resumeResult,\n prompt: options.prompt,\n };\n\n try\n {\n shouldCompact = await shouldCompactOnResume(compactionContext);\n }\n catch (error)\n {\n debugLog?.(\"inbound\", \"thread/compact/start:decision-error\", {\n message: error instanceof Error ? error.message : String(error),\n });\n\n if (strictCompaction)\n {\n throw error;\n }\n }\n }\n\n if (shouldCompact)\n {\n const compactParams: CodexThreadCompactStartParams = { threadId };\n debugLog?.(\"outbound\", \"thread/compact/start\", compactParams);\n if (strictCompaction)\n {\n await client.request<CodexThreadCompactStartResult>(\n \"thread/compact/start\",\n compactParams,\n );\n }\n else\n {\n try\n {\n await client.request<CodexThreadCompactStartResult>(\n \"thread/compact/start\",\n compactParams,\n );\n }\n catch (error)\n {\n debugLog?.(\"inbound\", \"thread/compact/start:error\", {\n message: error instanceof Error ? error.message : String(error),\n });\n }\n }\n }\n }\n else\n {\n const mcpServers = this.config.providerSettings.mcpServers;\n const config = mcpServers\n ? { mcp_servers: mcpServers } as CodexThreadStartParams[\"config\"]\n : undefined;\n\n const threadStartParams: CodexThreadStartParams = stripUndefined({\n model: this.config.providerSettings.defaultModel ?? this.modelId,\n dynamicTools,\n developerInstructions,\n config,\n cwd: this.config.providerSettings.defaultThreadSettings?.cwd,\n approvalPolicy: this.config.providerSettings.defaultThreadSettings?.approvalPolicy,\n sandbox: this.config.providerSettings.defaultThreadSettings?.sandbox,\n });\n debugLog?.(\"outbound\", \"thread/start\", threadStartParams);\n const threadStartResult = await client.request<ThreadStartResultLike>(\n \"thread/start\",\n threadStartParams,\n );\n threadId = extractThreadId(threadStartResult);\n }\n\n activeThreadId = threadId;\n mapper.setThreadId(threadId);\n\n // Register cross-call tool handler for SDK tools\n if (hasSdkTools && persistentTransport)\n {\n this.registerCrossCallToolHandler(\n client, controller, persistentTransport,\n threadId, closeSuccessfully,\n );\n }\n\n const turnInput = await fileResolver.resolve(options.prompt, !!resumeThreadId);\n const turnStartParams: CodexTurnStartParams = stripUndefined({\n threadId,\n input: turnInput,\n cwd: this.config.providerSettings.defaultTurnSettings?.cwd,\n approvalPolicy: this.config.providerSettings.defaultTurnSettings?.approvalPolicy,\n sandboxPolicy: this.config.providerSettings.defaultTurnSettings?.sandboxPolicy,\n model: this.config.providerSettings.defaultTurnSettings?.model,\n effort: this.config.providerSettings.defaultTurnSettings?.effort,\n summary: this.config.providerSettings.defaultTurnSettings?.summary,\n outputSchema: options.responseFormat?.type === \"json\"\n ? options.responseFormat.schema as JsonValue | undefined\n : undefined,\n });\n\n debugLog?.(\"outbound\", \"turn/start\", turnStartParams);\n\n const turnStartResult = await client.request<TurnStartResultLike>(\"turn/start\", turnStartParams);\n\n activeTurnId = extractTurnId(turnStartResult);\n\n session = new CodexSessionImpl({\n client,\n threadId: activeThreadId,\n turnId: activeTurnId,\n interruptTimeoutMs,\n });\n this.config.providerSettings.onSessionCreated?.(session);\n }\n catch (error)\n {\n await closeWithError(error);\n }\n })();\n },\n cancel: async () =>\n {\n session?.markInactive();\n\n try\n {\n await interruptTurnIfPossible();\n }\n catch\n {\n // Best-effort only: always disconnect to release resources.\n }\n await fileResolver.cleanup();\n await client.disconnect();\n },\n });\n\n return Promise.resolve({ stream });\n }\n}\n","import type { CodexTransport } from \"./transport\";\nimport { CodexWorkerPool } from \"./worker-pool\";\n\nexport interface PersistentPoolAcquireSettings {\n scope: \"provider\" | \"global\";\n key?: string;\n poolSize: number;\n idleTimeoutMs: number;\n transportFactory: () => CodexTransport;\n}\n\nexport interface PersistentPoolHandle {\n pool: CodexWorkerPool;\n release(): Promise<void>;\n}\n\ninterface GlobalPoolEntry {\n pool: CodexWorkerPool;\n refCount: number;\n poolSize: number;\n idleTimeoutMs: number;\n}\n\nconst GLOBAL_PERSISTENT_POOL_DEFAULT_KEY = \"default\";\nconst globalPersistentPools = new Map<string, GlobalPoolEntry>();\n\nexport function acquirePersistentPool(\n settings: PersistentPoolAcquireSettings,\n): PersistentPoolHandle\n{\n if (settings.scope === \"provider\")\n {\n const pool = new CodexWorkerPool({\n poolSize: settings.poolSize,\n transportFactory: settings.transportFactory,\n idleTimeoutMs: settings.idleTimeoutMs,\n });\n\n let released = false;\n return {\n pool,\n async release(): Promise<void>\n {\n if (released)\n {\n return;\n }\n released = true;\n await pool.shutdown();\n },\n };\n }\n\n const key = settings.key ?? GLOBAL_PERSISTENT_POOL_DEFAULT_KEY;\n const existing = globalPersistentPools.get(key);\n\n if (existing)\n {\n if (\n existing.poolSize !== settings.poolSize\n || existing.idleTimeoutMs !== settings.idleTimeoutMs\n )\n {\n throw new Error(\n `Global persistent pool \"${key}\" already exists with different settings.`,\n );\n }\n\n existing.refCount++;\n let released = false;\n return {\n pool: existing.pool,\n async release(): Promise<void>\n {\n if (released)\n {\n return;\n }\n released = true;\n\n const entry = globalPersistentPools.get(key);\n if (!entry)\n {\n return;\n }\n\n entry.refCount--;\n if (entry.refCount <= 0)\n {\n globalPersistentPools.delete(key);\n await entry.pool.shutdown();\n }\n },\n };\n }\n\n const pool = new CodexWorkerPool({\n poolSize: settings.poolSize,\n transportFactory: settings.transportFactory,\n idleTimeoutMs: settings.idleTimeoutMs,\n });\n\n globalPersistentPools.set(key, {\n pool,\n refCount: 1,\n poolSize: settings.poolSize,\n idleTimeoutMs: settings.idleTimeoutMs,\n });\n\n let released = false;\n return {\n pool,\n async release(): Promise<void>\n {\n if (released)\n {\n return;\n }\n released = true;\n\n const entry = globalPersistentPools.get(key);\n if (!entry)\n {\n return;\n }\n\n entry.refCount--;\n if (entry.refCount <= 0)\n {\n globalPersistentPools.delete(key);\n await entry.pool.shutdown();\n }\n },\n };\n}\n","import { NoSuchModelError, type ProviderV3 } from \"@ai-sdk/provider\";\n\nimport { AppServerClient } from \"./client/app-server-client\";\nimport { acquirePersistentPool, type PersistentPoolHandle } from \"./client/persistent-pool-registry\";\nimport { PersistentTransport } from \"./client/transport-persistent\";\nimport { StdioTransport } from \"./client/transport-stdio\";\nimport { WebSocketTransport } from \"./client/transport-websocket\";\nimport { CodexLanguageModel, type CodexLanguageModelSettings } from \"./model\";\nimport { PACKAGE_NAME, PACKAGE_VERSION } from \"./package-info\";\nimport type { Model } from \"./protocol/app-server-protocol/v2/Model\";\nimport type { ModelListParams } from \"./protocol/app-server-protocol/v2/ModelListParams\";\nimport type { ModelListResponse } from \"./protocol/app-server-protocol/v2/ModelListResponse\";\nimport { CODEX_PROVIDER_ID } from \"./protocol/provider-metadata\";\nimport type { CodexInitializeParams, CodexInitializeResult } from \"./protocol/types\";\nimport type { CodexProviderSettings } from \"./provider-settings\";\nimport { stripUndefined } from \"./utils/object\";\nexport type { Model as CodexModel } from \"./protocol/app-server-protocol/v2/Model\";\nexport type { CodexProviderSettings, McpServerConfig } from \"./provider-settings\";\n\nexport interface CodexProvider extends ProviderV3\n{\n (modelId: string, settings?: CodexLanguageModelSettings): CodexLanguageModel;\n chat(modelId: string, settings?: CodexLanguageModelSettings): CodexLanguageModel;\n listModels(params?: ModelListParams): Promise<Model[]>;\n readonly settings: Readonly<CodexProviderSettings>;\n shutdown(): Promise<void>;\n}\n\n// Auto-release leaked pool handles when a provider is garbage-collected\n// without an explicit shutdown() call. The handle's release() is\n// idempotent, so an explicit shutdown() followed by GC is harmless.\nconst poolHandleCleanup = new FinalizationRegistry<PersistentPoolHandle>(\n (handle) => { void handle.release().catch(() => { }); },\n);\n\nfunction createNoSuchModelError(\n modelId: string,\n modelType: \"embeddingModel\" | \"imageModel\",\n): NoSuchModelError\n{\n return new NoSuchModelError({ modelId, modelType });\n}\n\nexport function createCodexAppServer(\n settings: CodexProviderSettings = {},\n): CodexProvider \n{\n let persistentPoolHandle: PersistentPoolHandle | null = null;\n\n const baseTransportFactory = settings.transportFactory;\n\n if (settings.persistent)\n {\n const scope = settings.persistent.scope ?? \"provider\";\n const poolSize = settings.persistent.poolSize ?? 1;\n const idleTimeoutMs = settings.persistent.idleTimeoutMs ?? 300_000;\n const poolTransportFactory = baseTransportFactory\n ?? (settings.transport?.type === \"websocket\"\n ? () => new WebSocketTransport(settings.transport?.websocket)\n : () => new StdioTransport(settings.transport?.stdio));\n\n persistentPoolHandle = acquirePersistentPool({\n scope,\n ...stripUndefined({ key: settings.persistent.key }),\n poolSize,\n idleTimeoutMs,\n transportFactory: poolTransportFactory,\n });\n }\n\n const persistentPool = persistentPoolHandle?.pool ?? null;\n const effectiveTransportFactory = persistentPool\n ? (signal?: AbortSignal, threadId?: string) =>\n new PersistentTransport(stripUndefined({ pool: persistentPool, signal, threadId }))\n : baseTransportFactory;\n\n const resolvedSettings: Readonly<CodexProviderSettings> = Object.freeze(stripUndefined({\n defaultModel: settings.defaultModel,\n experimentalApi: settings.experimentalApi,\n clientInfo: settings.clientInfo\n ? stripUndefined({\n name: settings.clientInfo.name,\n version: settings.clientInfo.version,\n title: settings.clientInfo.title,\n })\n : undefined,\n transport: settings.transport\n ? stripUndefined({\n type: settings.transport.type,\n stdio: settings.transport.stdio\n ? { ...settings.transport.stdio }\n : undefined,\n websocket: settings.transport.websocket\n ? { ...settings.transport.websocket }\n : undefined,\n })\n : undefined,\n defaultThreadSettings: settings.defaultThreadSettings\n ? { ...settings.defaultThreadSettings }\n : undefined,\n defaultTurnSettings: settings.defaultTurnSettings\n ? { ...settings.defaultTurnSettings }\n : undefined,\n compaction: settings.compaction\n ? { ...settings.compaction }\n : undefined,\n transportFactory: effectiveTransportFactory,\n mcpServers: settings.mcpServers ? { ...settings.mcpServers } : undefined,\n tools: settings.tools ? { ...settings.tools } : undefined,\n toolHandlers: settings.toolHandlers ? { ...settings.toolHandlers } : undefined,\n toolTimeoutMs: settings.toolTimeoutMs,\n interruptTimeoutMs: settings.interruptTimeoutMs,\n approvals: settings.approvals ? { ...settings.approvals } : undefined,\n debug: settings.debug ? { ...settings.debug } : undefined,\n emitPlanUpdates: settings.emitPlanUpdates,\n onSessionCreated: settings.onSessionCreated,\n }));\n\n const createLanguageModel = (\n modelId: string,\n modelSettings: CodexLanguageModelSettings = {},\n ): CodexLanguageModel =>\n new CodexLanguageModel(modelId, modelSettings, {\n provider: CODEX_PROVIDER_ID,\n providerSettings: resolvedSettings,\n });\n\n const providerFn = (\n (modelId: string, modelSettings: CodexLanguageModelSettings = {}) =>\n createLanguageModel(modelId, modelSettings)\n );\n\n const provider = Object.assign(providerFn, {\n specificationVersion: \"v3\" as const,\n settings: resolvedSettings,\n languageModel(modelId: string): CodexLanguageModel\n {\n return createLanguageModel(modelId);\n },\n chat(\n modelId: string,\n modelSettings: CodexLanguageModelSettings = {},\n ): CodexLanguageModel\n {\n return createLanguageModel(modelId, modelSettings);\n },\n embeddingModel(modelId: string)\n {\n throw createNoSuchModelError(modelId, \"embeddingModel\");\n },\n imageModel(modelId: string)\n {\n throw createNoSuchModelError(modelId, \"imageModel\");\n },\n async listModels(params?: ModelListParams): Promise<Model[]>\n {\n const transport = effectiveTransportFactory\n ? effectiveTransportFactory()\n : resolvedSettings.transport?.type === \"websocket\"\n ? new WebSocketTransport(resolvedSettings.transport.websocket)\n : new StdioTransport(resolvedSettings.transport?.stdio);\n\n const client = new AppServerClient(transport);\n\n try\n {\n await client.connect();\n\n const initializeParams: CodexInitializeParams = stripUndefined({\n clientInfo: resolvedSettings.clientInfo ?? {\n name: PACKAGE_NAME,\n version: PACKAGE_VERSION,\n },\n });\n\n await client.request<CodexInitializeResult>(\"initialize\", initializeParams);\n await client.notification(\"initialized\");\n\n const models: Model[] = [];\n let cursor: string | undefined;\n\n do\n {\n const response = await client.request<ModelListResponse>(\"model/list\", stripUndefined({ ...params, cursor }));\n models.push(...response.data);\n cursor = response.nextCursor ?? undefined;\n }\n while (cursor);\n\n return models;\n }\n finally\n {\n await client.disconnect();\n }\n },\n async shutdown(): Promise<void>\n {\n if (!persistentPoolHandle)\n {\n return;\n }\n\n poolHandleCleanup.unregister(provider);\n const handle = persistentPoolHandle;\n persistentPoolHandle = null;\n await handle.release();\n },\n });\n\n if (persistentPoolHandle)\n {\n poolHandleCleanup.register(provider, persistentPoolHandle, provider);\n }\n\n return provider as CodexProvider;\n}\n\nexport const codexAppServer = createCodexAppServer();\n\n/**\n * Backward-compatible alias kept during migration from scaffold naming.\n */\nexport const createCodexProvider = createCodexAppServer;\n"]}
|