@janole/ai-sdk-provider-codex-asp 0.1.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../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/protocol/prompt-mapper.ts","../src/model.ts","../src/client/persistent-pool-registry.ts","../src/provider.ts"],"names":["spawn","approvalsDispatcher","pool","released","NoSuchModelError"],"mappings":"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","file":"index.cjs","sourcesContent":["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\";\n\nexport interface CodexCommandApprovalRequest {\n threadId: string;\n turnId: string;\n itemId: string;\n approvalId?: string | null;\n reason?: string | null;\n command?: string | null;\n cwd?: string | null;\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 ?? (() => \"accept\");\n this.onFileChangeApproval = settings.onFileChangeApproval ?? (() => \"accept\");\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 = {\n threadId: p.threadId,\n turnId: p.turnId,\n itemId: p.itemId,\n ...(p.approvalId !== undefined ? { approvalId: p.approvalId } : {}),\n ...(p.reason !== undefined ? { reason: p.reason } : {}),\n ...(p.command !== undefined ? { command: p.command } : {}),\n ...(p.cwd !== undefined ? { cwd: p.cwd } : {}),\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 = {\n threadId: p.threadId,\n turnId: p.turnId,\n itemId: p.itemId,\n ...(p.reason !== undefined ? { reason: p.reason } : {}),\n ...(p.grantRoot !== undefined ? { 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 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 requestTimeoutMs?: number;\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 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 }\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 await this.transport.sendMessage(message);\n return promise;\n }\n\n async notification(method: string, params?: unknown): Promise<void> \n {\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 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 await this.transport.sendMessage({\n id: request.id,\n error: {\n code: -32601,\n message: `Method not found: ${request.method}`,\n },\n } as JsonRpcErrorResponse);\n return;\n }\n\n try \n {\n const result = await handler(request.params, request);\n await this.transport.sendMessage({\n id: request.id,\n result,\n } as JsonRpcSuccessResponse);\n }\n catch (error) \n {\n try \n {\n await this.transport.sendMessage({\n id: request.id,\n error: {\n code: -32000,\n message: error instanceof Error ? error.message : \"Request handler failed\",\n },\n } as JsonRpcErrorResponse);\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 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}\n\nexport class PersistentTransport implements CodexTransport\n{\n private readonly pool: CodexWorkerPool;\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 }\n\n async connect(): Promise<void>\n {\n this.worker = this.pool.acquire();\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 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 poolSize?: number;\n transportFactory: () => CodexTransport;\n idleTimeoutMs?: number;\n}\n\nexport class CodexWorkerPool\n{\n private readonly workers: CodexWorker[];\n private shutdownCalled = false;\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 acquire(): CodexWorker\n {\n if (this.shutdownCalled)\n {\n throw new CodexProviderError(\"Worker pool has been shut down.\");\n }\n\n const worker = this.workers.find(\n (w) => w.state === \"idle\" || w.state === \"disconnected\",\n );\n\n if (!worker)\n {\n throw new CodexProviderError(\n \"All workers are busy. Try again later or increase poolSize.\",\n );\n }\n\n worker.acquire();\n return worker;\n }\n\n release(worker: CodexWorker): void\n {\n worker.release();\n }\n\n async shutdown(): Promise<void>\n {\n this.shutdownCalled = true;\n await Promise.all(this.workers.map((w) => w.shutdown()));\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\";\n\nexport interface DynamicToolExecutionContext {\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 description: string;\n inputSchema: Record<string, unknown>;\n execute: DynamicToolHandler;\n}\n\nexport interface DynamicToolsDispatcherSettings {\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}\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\n constructor(settings: DynamicToolsDispatcherSettings = {})\n {\n this.timeoutMs = settings.timeoutMs ?? 30_000;\n\n if (settings.tools)\n {\n for (const [name, def] of Object.entries(settings.tools))\n {\n this.register(name, def.execute);\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 }\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 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 return toTextResult(`No dynamic tool handler registered for \"${toolName}\".`, false);\n }\n\n const context: DynamicToolExecutionContext = {\n toolName,\n ...(params.threadId ? { threadId: params.threadId } : {}),\n ...(params.turnId ? { turnId: params.turnId } : {}),\n ...(params.callId ? { callId: params.callId } : {}),\n };\n\n const args = params.arguments ?? params.input;\n\n try \n {\n return await withTimeout(handler(args, context), this.timeoutMs);\n }\n catch (error) \n {\n const message = error instanceof Error ? error.message : \"Dynamic tool execution failed.\";\n return toTextResult(message, false);\n }\n }\n}\n","{\n \"name\": \"@janole/ai-sdk-provider-codex-asp\",\n \"version\": \"0.1.0\",\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\": \"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\nexport const CODEX_PROVIDER_ID = \"codex-app-server\";\n\nexport function codexProviderMetadata(threadId: string | undefined)\n{\n if (!threadId)\n {\n return undefined;\n }\n\n return { [CODEX_PROVIDER_ID]: { threadId } };\n}\n\nexport function withProviderMetadata<T extends LanguageModelV3StreamPart>(\n part: T,\n threadId: string | undefined,\n): T\n{\n const meta = codexProviderMetadata(threadId);\n return meta ? { ...part, providerMetadata: meta } : part;\n}\n","import type {\n LanguageModelV3FinishReason,\n LanguageModelV3StreamPart,\n LanguageModelV3Usage,\n} from \"@ai-sdk/provider\";\n\nimport { withProviderMetadata } from \"./provider-metadata\";\n\nexport interface CodexEventMapperInput\n{\n method: string;\n params?: unknown;\n}\n\ninterface ItemLike\n{\n itemId?: string;\n itemType?: string;\n}\n\ninterface DeltaLike\n{\n itemId?: string;\n delta?: string;\n}\n\ninterface TurnCompletedLike\n{\n status?: \"completed\" | \"interrupted\" | \"failed\";\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: TurnCompletedLike[\"status\"]): 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 class CodexEventMapper\n{\n private streamStarted = false;\n private readonly openTextParts = new Set<string>();\n private threadId: string | undefined;\n\n setThreadId(threadId: string): void\n {\n this.threadId = threadId;\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);\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 switch (event.method) \n {\n case \"turn/started\": {\n pushStreamStart();\n break;\n }\n\n case \"item/started\": {\n const item = (event.params ?? {}) as ItemLike;\n if (item.itemType === \"assistantMessage\" && item.itemId) \n {\n pushStreamStart();\n this.openTextParts.add(item.itemId);\n parts.push(withMeta({ type: \"text-start\", id: item.itemId }));\n }\n break;\n }\n\n case \"item/agentMessage/delta\": {\n const delta = (event.params ?? {}) as DeltaLike;\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 break;\n }\n\n case \"item/completed\": {\n const item = (event.params ?? {}) as ItemLike;\n if (item.itemType === \"assistantMessage\" && item.itemId && this.openTextParts.has(item.itemId)) \n {\n parts.push(withMeta({ type: \"text-end\", id: item.itemId }));\n this.openTextParts.delete(item.itemId);\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 \"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 const completed = (event.params ?? {}) as TurnCompletedLike;\n parts.push(withMeta({ type: \"finish\", finishReason: toFinishReason(completed.status), usage: EMPTY_USAGE }));\n break;\n }\n\n default:\n break;\n }\n\n return parts;\n }\n}\n","import type { LanguageModelV3Prompt } from \"@ai-sdk/provider\";\n\nimport type { CodexTurnInputItem } from \"./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\n/**\n * Maps the prompt to the `input` array for a `turn/start` request.\n *\n * System messages are **not** included here — they are routed to\n * `developerInstructions` via {@link mapSystemPrompt} instead.\n *\n * @param isResume - When true the thread already holds the full history on\n * disk, so only the last user message is extracted and sent. When false\n * (fresh thread) all user text is folded into a single item.\n */\nexport function mapPromptToTurnInput(\n prompt: LanguageModelV3Prompt,\n isResume: boolean = false,\n): CodexTurnInputItem[]\n{\n if (isResume)\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({ type: \"text\", text, text_elements: [] });\n }\n }\n }\n\n return items;\n }\n }\n\n return [];\n }\n\n // Fresh thread: flatten all user text into one item.\n const chunks: string[] = [];\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 chunks.push(text);\n }\n }\n }\n }\n }\n\n return [{ type: \"text\", text: chunks.join(\"\\n\\n\"), text_elements: [] }];\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, type CommandApprovalHandler, type FileChangeApprovalHandler } from \"./approvals\";\nimport { AppServerClient } from \"./client/app-server-client\";\nimport type { CodexTransport } from \"./client/transport\";\nimport { PersistentTransport } from \"./client/transport-persistent\";\nimport { StdioTransport, type StdioTransportSettings } from \"./client/transport-stdio\";\nimport { WebSocketTransport, type WebSocketTransportSettings } from \"./client/transport-websocket\";\nimport { type DynamicToolDefinition, type DynamicToolHandler, DynamicToolsDispatcher } from \"./dynamic-tools\";\nimport { CodexProviderError } from \"./errors\";\nimport { PACKAGE_NAME, PACKAGE_VERSION } from \"./package-info\";\nimport { CodexEventMapper } from \"./protocol/event-mapper\";\nimport { mapPromptToTurnInput, mapSystemPrompt } from \"./protocol/prompt-mapper\";\nimport { withProviderMetadata } from \"./protocol/provider-metadata\";\nimport type {\n AskForApproval,\n CodexInitializeParams,\n CodexInitializeResult,\n CodexThreadResumeParams,\n CodexThreadResumeResult,\n CodexThreadStartParams,\n CodexThreadStartResult,\n CodexToolCallRequestParams,\n CodexToolCallResult,\n CodexToolResultContentItem,\n CodexTurnStartResult,\n SandboxMode,\n} from \"./protocol/types\";\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 interface CodexThreadDefaults\n{\n cwd?: string;\n approvalPolicy?: AskForApproval;\n sandbox?: SandboxMode;\n}\n\nexport interface CodexModelConfig\n{\n provider: string;\n providerSettings: {\n defaultModel?: string;\n clientInfo?: {\n name: string;\n version: string;\n title?: string;\n };\n experimentalApi?: boolean;\n transport?: {\n type?: \"stdio\" | \"websocket\";\n stdio?: StdioTransportSettings;\n websocket?: WebSocketTransportSettings;\n };\n defaultThreadSettings?: CodexThreadDefaults;\n transportFactory?: () => CodexTransport;\n tools?: Record<string, DynamicToolDefinition>;\n toolHandlers?: Record<string, DynamicToolHandler>;\n toolTimeoutMs?: number;\n approvals?: {\n onCommandApproval?: CommandApprovalHandler;\n onFileChangeApproval?: FileChangeApprovalHandler;\n };\n };\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 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 const meta = message.providerOptions?.[\"codex-app-server\"];\n if (meta && typeof meta[\"threadId\"] === \"string\")\n {\n return meta[\"threadId\"];\n }\n }\n }\n return undefined;\n}\n\nfunction extractToolResults(\n prompt: LanguageModelV3CallOptions[\"prompt\"],\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 (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 }\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) => ({\n name: t.name,\n ...(t.description ? { 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 {\n content: [...textContent, ...passThroughContent],\n finishReason,\n usage,\n warnings,\n ...(providerMetadata ? { providerMetadata } : {}),\n ...(streamResult.request ? { 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 transport = this.config.providerSettings.transportFactory\n ? this.config.providerSettings.transportFactory()\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 client = new AppServerClient(transport);\n const mapper = new CodexEventMapper();\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 controller.enqueue({ type: \"error\", error });\n closed = true;\n\n try \n {\n controller.close();\n }\n finally \n {\n await client.disconnect();\n }\n };\n\n const closeSuccessfully = async () => \n {\n if (closed) \n {\n return;\n }\n\n closed = true;\n\n try \n {\n controller.close();\n }\n finally \n {\n await client.disconnect();\n }\n };\n\n const abortHandler = () => \n {\n void closeWithError(new DOMException(\"Aborted\", \"AbortError\"));\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 const toolResult = extractToolResults(options.prompt);\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({\n ...(this.config.providerSettings.approvals?.onCommandApproval\n ? { onCommandApproval: this.config.providerSettings.approvals.onCommandApproval }\n : {}),\n ...(this.config.providerSettings.approvals?.onFileChangeApproval\n ? { onFileChangeApproval: this.config.providerSettings.approvals.onFileChangeApproval }\n : {}),\n });\n approvalsDispatcher.attach(client);\n\n await persistentTransport.respondToToolCall(\n toolResult ?? { success: true, contentItems: [] },\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({\n ...(this.config.providerSettings.tools\n ? { tools: this.config.providerSettings.tools }\n : {}),\n ...(this.config.providerSettings.toolHandlers\n ? { handlers: this.config.providerSettings.toolHandlers }\n : {}),\n ...(this.config.providerSettings.toolTimeoutMs !== undefined\n ? { timeoutMs: this.config.providerSettings.toolTimeoutMs }\n : {}),\n });\n dispatcher.attach(client);\n }\n\n const approvalsDispatcher = new ApprovalsDispatcher({\n ...(this.config.providerSettings.approvals?.onCommandApproval\n ? { onCommandApproval: this.config.providerSettings.approvals.onCommandApproval }\n : {}),\n ...(this.config.providerSettings.approvals?.onFileChangeApproval\n ? { onFileChangeApproval: this.config.providerSettings.approvals.onFileChangeApproval }\n : {}),\n });\n approvalsDispatcher.attach(client);\n\n client.onAnyNotification((method, params) =>\n {\n const parts = mapper.map({ method, params });\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\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 = {\n clientInfo: this.config.providerSettings.clientInfo ?? {\n name: PACKAGE_NAME,\n version: PACKAGE_VERSION,\n },\n ...(needsExperimentalApi\n ? { capabilities: { experimentalApi: true } }\n : {}),\n };\n\n await client.request<CodexInitializeResult>(\"initialize\", initializeParams);\n await client.notification(\"initialized\");\n\n const resumeThreadId = extractResumeThreadId(options.prompt);\n const developerInstructions = mapSystemPrompt(options.prompt);\n\n let threadId: string;\n\n if (resumeThreadId)\n {\n const resumeParams: CodexThreadResumeParams = {\n threadId: resumeThreadId,\n persistExtendedHistory: false,\n ...(developerInstructions ? { developerInstructions } : {}),\n };\n const resumeResult = await client.request<CodexThreadResumeResult>(\n \"thread/resume\",\n resumeParams,\n );\n threadId = resumeResult.threadId ?? resumeResult.thread?.id ?? resumeThreadId;\n }\n else\n {\n const threadStartParams: CodexThreadStartParams = {\n model: this.config.providerSettings.defaultModel ?? this.modelId,\n ...(dynamicTools ? { dynamicTools } : {}),\n ...(developerInstructions ? { developerInstructions } : {}),\n ...(this.config.providerSettings.defaultThreadSettings?.cwd\n ? { cwd: this.config.providerSettings.defaultThreadSettings.cwd }\n : {}),\n ...(this.config.providerSettings.defaultThreadSettings?.approvalPolicy\n ? {\n approvalPolicy:\n this.config.providerSettings.defaultThreadSettings.approvalPolicy,\n }\n : {}),\n ...(this.config.providerSettings.defaultThreadSettings?.sandbox\n ? {\n sandbox:\n this.config.providerSettings.defaultThreadSettings.sandbox,\n }\n : {}),\n };\n const threadStartResult = await client.request<ThreadStartResultLike>(\n \"thread/start\",\n threadStartParams,\n );\n threadId = extractThreadId(threadStartResult);\n }\n\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 turnStartResult = await client.request<TurnStartResultLike>(\"turn/start\", {\n threadId,\n input: mapPromptToTurnInput(options.prompt, !!resumeThreadId),\n });\n\n extractTurnId(turnStartResult);\n }\n catch (error)\n {\n await closeWithError(error);\n }\n })();\n },\n cancel: async () => \n {\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 type { CommandApprovalHandler, FileChangeApprovalHandler } from \"./approvals\";\nimport {\n acquirePersistentPool,\n type PersistentPoolHandle,\n} from \"./client/persistent-pool-registry\";\nimport type { CodexTransport } from \"./client/transport\";\nimport { PersistentTransport } from \"./client/transport-persistent\";\nimport { StdioTransport, type StdioTransportSettings } from \"./client/transport-stdio\";\nimport type { WebSocketTransportSettings } from \"./client/transport-websocket\";\nimport { WebSocketTransport } from \"./client/transport-websocket\";\nimport type { DynamicToolDefinition, DynamicToolHandler } from \"./dynamic-tools\";\nimport { CodexLanguageModel, type CodexLanguageModelSettings, type CodexThreadDefaults } from \"./model\";\n\nconst PROVIDER_ID = \"codex-app-server\" as const;\n\nexport interface CodexProviderSettings {\n defaultModel?: string;\n clientInfo?: {\n name: string;\n version: string;\n title?: string;\n };\n experimentalApi?: boolean;\n transport?: {\n type?: \"stdio\" | \"websocket\";\n stdio?: StdioTransportSettings;\n websocket?: WebSocketTransportSettings;\n };\n defaultThreadSettings?: CodexThreadDefaults;\n transportFactory?: () => CodexTransport;\n /** Tools with schema (description + inputSchema) advertised to Codex + local handlers. */\n tools?: Record<string, DynamicToolDefinition>;\n /** Legacy: handler-only tools, not advertised to Codex. Use `tools` for full schema support. */\n toolHandlers?: Record<string, DynamicToolHandler>;\n toolTimeoutMs?: number;\n approvals?: {\n onCommandApproval?: CommandApprovalHandler;\n onFileChangeApproval?: FileChangeApprovalHandler;\n };\n persistent?: {\n poolSize?: number;\n idleTimeoutMs?: number;\n scope?: \"provider\" | \"global\";\n key?: string;\n };\n}\n\nexport interface CodexProvider extends ProviderV3 {\n (\n modelId: string,\n settings?: CodexLanguageModelSettings,\n ): CodexLanguageModel;\n chat(modelId: string, settings?: CodexLanguageModelSettings): CodexLanguageModel;\n readonly settings: Readonly<CodexProviderSettings>;\n shutdown(): Promise<void>;\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 ...(settings.persistent.key !== undefined\n ? { key: settings.persistent.key }\n : {}),\n poolSize,\n idleTimeoutMs,\n transportFactory: poolTransportFactory,\n });\n }\n\n const persistentPool = persistentPoolHandle?.pool ?? null;\n const effectiveTransportFactory = persistentPool\n ? () => new PersistentTransport({ pool: persistentPool })\n : baseTransportFactory;\n\n const resolvedSettings: Readonly<CodexProviderSettings> = Object.freeze({\n ...(settings.defaultModel ? { defaultModel: settings.defaultModel } : {}),\n ...(settings.experimentalApi !== undefined\n ? { experimentalApi: settings.experimentalApi }\n : {}),\n ...(settings.clientInfo\n ? {\n clientInfo: {\n ...settings.clientInfo,\n },\n }\n : {}),\n ...(settings.transport\n ? {\n transport: {\n ...(settings.transport.type ? { type: settings.transport.type } : {}),\n ...(settings.transport.stdio\n ? { stdio: { ...settings.transport.stdio } }\n : {}),\n ...(settings.transport.websocket\n ? { websocket: { ...settings.transport.websocket } }\n : {}),\n },\n }\n : {}),\n ...(settings.defaultThreadSettings\n ? { defaultThreadSettings: { ...settings.defaultThreadSettings } }\n : {}),\n ...(effectiveTransportFactory\n ? { transportFactory: effectiveTransportFactory }\n : {}),\n ...(settings.tools\n ? { tools: { ...settings.tools } }\n : {}),\n ...(settings.toolHandlers\n ? { toolHandlers: { ...settings.toolHandlers } }\n : {}),\n ...(settings.toolTimeoutMs !== undefined\n ? { toolTimeoutMs: settings.toolTimeoutMs }\n : {}),\n ...(settings.approvals\n ? { approvals: { ...settings.approvals } }\n : {}),\n });\n\n const createLanguageModel = (\n modelId: string,\n modelSettings: CodexLanguageModelSettings = {},\n ): CodexLanguageModel =>\n new CodexLanguageModel(modelId, modelSettings, {\n provider: 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 shutdown(): Promise<void>\n {\n if (!persistentPoolHandle)\n {\n return;\n }\n\n const handle = persistentPoolHandle;\n persistentPoolHandle = null;\n await handle.release();\n },\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"]}