@codeworksh/aikit 0.4.1-dev.20260531052349 → 0.5.1-dev.20260613074656

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,"file":"openai-codex-CZrBnLAJ.mjs","names":[],"sources":["../../src/providers/openai-codex/codex-error.ts","../../src/providers/openai-codex/codex-prompt.ts","../../src/providers/openai-codex/codex-sse.ts","../../src/providers/openai-codex/codex-tools.ts","../../src/providers/openai-codex/codex-usage.ts","../../src/providers/openai-codex/codex-language-model.ts","../../src/providers/openai-codex/codex-provider.ts"],"sourcesContent":["import { APICallError } from \"@ai-sdk/provider\";\n\ntype OpenAICodexErrorPayload = {\n\terror?: {\n\t\tcode?: string;\n\t\ttype?: string;\n\t\tmessage?: string;\n\t\tplan_type?: string;\n\t\tresets_at?: number;\n\t};\n};\n\n/**\n * Turn a Codex error payload into a human-friendly message. ChatGPT plan usage\n * limits deserve a clearer message than the raw backend error.\n */\nexport function openAICodexErrorMessage(status: number, body: string, statusText?: string): string {\n\tlet message = body || statusText || \"OpenAI Codex request failed\";\n\n\ttry {\n\t\tconst parsed = JSON.parse(body) as OpenAICodexErrorPayload;\n\t\tconst error = parsed?.error;\n\t\tif (error) {\n\t\t\tconst code = error.code ?? error.type ?? \"\";\n\t\t\tif (/usage_limit_reached|usage_not_included|rate_limit_exceeded/i.test(code) || status === 429) {\n\t\t\t\tconst plan = error.plan_type ? ` (${error.plan_type.toLowerCase()} plan)` : \"\";\n\t\t\t\tconst minutes = error.resets_at\n\t\t\t\t\t? Math.max(0, Math.round((error.resets_at * 1000 - Date.now()) / 60000))\n\t\t\t\t\t: undefined;\n\t\t\t\tconst when = minutes === undefined ? \"\" : ` Try again in ~${minutes} min.`;\n\t\t\t\treturn `You have hit your ChatGPT usage limit${plan}.${when}`.trim();\n\t\t\t}\n\t\t\tmessage = error.message || message;\n\t\t}\n\t} catch {\n\t\t// Not JSON; keep the raw body as the message.\n\t}\n\n\treturn message;\n}\n\nexport async function createOpenAICodexAPICallError(args: {\n\tresponse: Response;\n\turl: string;\n\trequestBodyValues: unknown;\n}): Promise<APICallError> {\n\tconst { response, url, requestBodyValues } = args;\n\tconst responseBody = await response.text().catch(() => \"\");\n\tconst responseHeaders: Record<string, string> = {};\n\tresponse.headers.forEach((value, key) => {\n\t\tresponseHeaders[key] = value;\n\t});\n\n\treturn new APICallError({\n\t\tmessage: openAICodexErrorMessage(response.status, responseBody, response.statusText),\n\t\turl,\n\t\trequestBodyValues,\n\t\tstatusCode: response.status,\n\t\tresponseHeaders,\n\t\tresponseBody,\n\t\tisRetryable: response.status === 408 || response.status === 409 || response.status >= 500,\n\t});\n}\n","import type { LanguageModelV3FilePart, LanguageModelV3Prompt, LanguageModelV3ToolResultOutput } from \"@ai-sdk/provider\";\n\n/**\n * OpenAI Responses API input item types accepted by the Codex backend.\n */\nexport type OpenAICodexInputItem =\n\t| {\n\t\t\trole: \"user\";\n\t\t\tcontent: Array<\n\t\t\t\t{ type: \"input_text\"; text: string } | { type: \"input_image\"; image_url: string; detail?: string }\n\t\t\t>;\n\t }\n\t| {\n\t\t\ttype: \"message\";\n\t\t\trole: \"assistant\";\n\t\t\tid: string;\n\t\t\tcontent: Array<{ type: \"output_text\"; text: string; annotations: unknown[] }>;\n\t\t\tstatus: \"completed\";\n\t }\n\t| {\n\t\t\ttype: \"function_call\";\n\t\t\tid: string;\n\t\t\tcall_id: string;\n\t\t\tname: string;\n\t\t\targuments: string;\n\t }\n\t| {\n\t\t\ttype: \"function_call_output\";\n\t\t\tcall_id: string;\n\t\t\toutput: string;\n\t };\n\nexport type OpenAICodexPrompt = {\n\tinstructions: string;\n\tinput: OpenAICodexInputItem[];\n};\n\nconst DEFAULT_INSTRUCTIONS = \"You are a helpful assistant.\";\n\n// Tool call ids round-trip through the AI SDK as `call_id|item_id` because the\n// Responses API needs both halves: `call_id` to pair function_call_output and\n// `id` for the function_call item itself.\nexport function splitToolCallId(toolCallId: string): { callId: string; itemId: string } {\n\tconst separator = toolCallId.indexOf(\"|\");\n\tif (separator === -1) return { callId: toolCallId, itemId: toolCallId };\n\treturn { callId: toolCallId.slice(0, separator), itemId: toolCallId.slice(separator + 1) };\n}\n\nexport function joinToolCallId(callId: string, itemId: string): string {\n\treturn `${callId}|${itemId}`;\n}\n\nfunction uint8ArrayToBase64(bytes: Uint8Array): string {\n\tlet binary = \"\";\n\tfor (const byte of bytes) {\n\t\tbinary += String.fromCharCode(byte);\n\t}\n\treturn btoa(binary);\n}\n\nfunction imageUrlFromFilePart(part: LanguageModelV3FilePart): string | undefined {\n\tconst data = part.data;\n\tif (data instanceof URL) return data.toString();\n\tif (typeof data === \"string\") {\n\t\tif (data.startsWith(\"data:\") || data.startsWith(\"http://\") || data.startsWith(\"https://\")) return data;\n\t\treturn `data:${part.mediaType};base64,${data}`;\n\t}\n\tif (data instanceof Uint8Array) {\n\t\treturn `data:${part.mediaType};base64,${uint8ArrayToBase64(data)}`;\n\t}\n\treturn undefined;\n}\n\nfunction toolResultOutputToText(output: LanguageModelV3ToolResultOutput): string {\n\tswitch (output.type) {\n\t\tcase \"text\":\n\t\tcase \"error-text\":\n\t\t\treturn output.value;\n\t\tcase \"json\":\n\t\tcase \"error-json\":\n\t\t\treturn JSON.stringify(output.value);\n\t\tcase \"execution-denied\":\n\t\t\treturn output.reason ?? \"Tool execution denied\";\n\t\tcase \"content\":\n\t\t\treturn output.value\n\t\t\t\t.filter((part): part is Extract<typeof part, { type: \"text\" }> => part.type === \"text\")\n\t\t\t\t.map((part) => part.text)\n\t\t\t\t.join(\"\\n\");\n\t\tdefault:\n\t\t\treturn JSON.stringify(output);\n\t}\n}\n\n/**\n * Convert an AI SDK V3 prompt into the Codex Responses request shape.\n * System messages become `instructions`; everything else maps to `input` items.\n */\nexport function convertToOpenAICodexPrompt(prompt: LanguageModelV3Prompt): OpenAICodexPrompt {\n\tlet instructions: string | undefined;\n\tconst input: OpenAICodexInputItem[] = [];\n\tlet syntheticMessageCounter = 0;\n\n\tfor (const message of prompt) {\n\t\tswitch (message.role) {\n\t\t\tcase \"system\": {\n\t\t\t\tinstructions = instructions == null ? message.content : `${instructions}\\n\\n${message.content}`;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"user\": {\n\t\t\t\tconst content: Extract<OpenAICodexInputItem, { role: \"user\" }>[\"content\"] = [];\n\t\t\t\tfor (const part of message.content) {\n\t\t\t\t\tif (part.type === \"text\") {\n\t\t\t\t\t\tcontent.push({ type: \"input_text\", text: part.text });\n\t\t\t\t\t} else if (part.type === \"file\" && part.mediaType.startsWith(\"image/\")) {\n\t\t\t\t\t\tconst imageUrl = imageUrlFromFilePart(part);\n\t\t\t\t\t\tif (imageUrl) content.push({ type: \"input_image\", image_url: imageUrl, detail: \"auto\" });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (content.length > 0) {\n\t\t\t\t\tinput.push({ role: \"user\", content });\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"assistant\": {\n\t\t\t\tconst textParts: string[] = [];\n\t\t\t\tfor (const part of message.content) {\n\t\t\t\t\tif (part.type === \"text\") {\n\t\t\t\t\t\ttextParts.push(part.text);\n\t\t\t\t\t} else if (part.type === \"tool-call\") {\n\t\t\t\t\t\tconst { callId, itemId } = splitToolCallId(part.toolCallId);\n\t\t\t\t\t\tinput.push({\n\t\t\t\t\t\t\ttype: \"function_call\",\n\t\t\t\t\t\t\tid: itemId,\n\t\t\t\t\t\t\tcall_id: callId,\n\t\t\t\t\t\t\tname: part.toolName,\n\t\t\t\t\t\t\targuments: typeof part.input === \"string\" ? part.input : JSON.stringify(part.input ?? {}),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t// Reasoning parts are not replayed: the Codex backend regenerates\n\t\t\t\t\t// reasoning server-side and rejects unsigned reasoning items.\n\t\t\t\t}\n\t\t\t\tif (textParts.length > 0) {\n\t\t\t\t\tsyntheticMessageCounter++;\n\t\t\t\t\tinput.push({\n\t\t\t\t\t\ttype: \"message\",\n\t\t\t\t\t\trole: \"assistant\",\n\t\t\t\t\t\tid: `msg_${Date.now()}_${syntheticMessageCounter}`,\n\t\t\t\t\t\tcontent: [{ type: \"output_text\", text: textParts.join(\"\\n\"), annotations: [] }],\n\t\t\t\t\t\tstatus: \"completed\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"tool\": {\n\t\t\t\tfor (const part of message.content) {\n\t\t\t\t\tif (part.type !== \"tool-result\") continue;\n\t\t\t\t\tconst { callId } = splitToolCallId(part.toolCallId);\n\t\t\t\t\tinput.push({\n\t\t\t\t\t\ttype: \"function_call_output\",\n\t\t\t\t\t\tcall_id: callId,\n\t\t\t\t\t\toutput: toolResultOutputToText(part.output),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { instructions: instructions || DEFAULT_INSTRUCTIONS, input };\n}\n","/**\n * Minimal SSE parsing for the Codex Responses endpoint. Each event is a JSON\n * payload on `data:` lines; `[DONE]` terminates the stream.\n */\nexport function parseOpenAICodexSSEStream(body: ReadableStream<Uint8Array>): ReadableStream<Record<string, unknown>> {\n\tconst decoder = new TextDecoder();\n\tlet buffer = \"\";\n\n\tconst parseChunk = (chunk: string, controller: TransformStreamDefaultController<Record<string, unknown>>) => {\n\t\tconst dataLines = chunk\n\t\t\t.split(\"\\n\")\n\t\t\t.filter((line) => line.startsWith(\"data:\"))\n\t\t\t.map((line) => line.slice(5).trim());\n\t\tif (dataLines.length === 0) return;\n\n\t\tconst data = dataLines.join(\"\\n\").trim();\n\t\tif (!data || data === \"[DONE]\") return;\n\n\t\ttry {\n\t\t\tcontroller.enqueue(JSON.parse(data) as Record<string, unknown>);\n\t\t} catch (cause) {\n\t\t\tcontroller.error(new Error(`Invalid OpenAI Codex SSE JSON: ${data.slice(0, 200)}`, { cause }));\n\t\t}\n\t};\n\n\treturn body.pipeThrough(\n\t\tnew TransformStream<Uint8Array, Record<string, unknown>>({\n\t\t\ttransform(value, controller) {\n\t\t\t\tbuffer += decoder.decode(value, { stream: true });\n\n\t\t\t\tlet index = buffer.indexOf(\"\\n\\n\");\n\t\t\t\twhile (index !== -1) {\n\t\t\t\t\tconst chunk = buffer.slice(0, index);\n\t\t\t\t\tbuffer = buffer.slice(index + 2);\n\t\t\t\t\tparseChunk(chunk, controller);\n\t\t\t\t\tindex = buffer.indexOf(\"\\n\\n\");\n\t\t\t\t}\n\t\t\t},\n\t\t\tflush(controller) {\n\t\t\t\tbuffer += decoder.decode();\n\t\t\t\tif (buffer.trim()) parseChunk(buffer, controller);\n\t\t\t},\n\t\t}),\n\t);\n}\n","import type { LanguageModelV3CallOptions, LanguageModelV3ToolChoice, SharedV3Warning } from \"@ai-sdk/provider\";\n\nexport type OpenAICodexTool = {\n\ttype: \"function\";\n\tname: string;\n\tdescription?: string;\n\tparameters: Record<string, unknown>;\n\tstrict?: boolean | null;\n};\n\nexport type OpenAICodexToolChoice = \"auto\" | \"none\" | \"required\";\n\nexport function prepareOpenAICodexTools({\n\ttools,\n\ttoolChoice,\n}: {\n\ttools: LanguageModelV3CallOptions[\"tools\"];\n\ttoolChoice: LanguageModelV3ToolChoice | undefined;\n}): {\n\tcodexTools: OpenAICodexTool[] | undefined;\n\tcodexToolChoice: OpenAICodexToolChoice | undefined;\n\twarnings: SharedV3Warning[];\n} {\n\tconst warnings: SharedV3Warning[] = [];\n\n\tif (!tools || tools.length === 0) {\n\t\treturn { codexTools: undefined, codexToolChoice: undefined, warnings };\n\t}\n\n\tconst codexTools: OpenAICodexTool[] = [];\n\tfor (const tool of tools) {\n\t\tif (tool.type !== \"function\") {\n\t\t\twarnings.push({\n\t\t\t\ttype: \"unsupported\",\n\t\t\t\tfeature: `tool type ${tool.type}`,\n\t\t\t\tdetails: `OpenAI Codex only supports function tools; ignoring ${tool.name}.`,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tcodexTools.push({\n\t\t\ttype: \"function\",\n\t\t\tname: tool.name,\n\t\t\tdescription: tool.description,\n\t\t\tparameters: tool.inputSchema as Record<string, unknown>,\n\t\t\tstrict: null,\n\t\t});\n\t}\n\n\tlet codexToolChoice: OpenAICodexToolChoice | undefined;\n\tswitch (toolChoice?.type) {\n\t\tcase undefined:\n\t\t\tbreak;\n\t\tcase \"auto\":\n\t\tcase \"none\":\n\t\tcase \"required\":\n\t\t\tcodexToolChoice = toolChoice.type;\n\t\t\tbreak;\n\t\tcase \"tool\":\n\t\t\twarnings.push({\n\t\t\t\ttype: \"unsupported\",\n\t\t\t\tfeature: \"toolChoice tool name\",\n\t\t\t\tdetails: \"OpenAI Codex does not support forcing a specific tool; using 'required' instead.\",\n\t\t\t});\n\t\t\tcodexToolChoice = \"required\";\n\t\t\tbreak;\n\t}\n\n\treturn {\n\t\tcodexTools: codexTools.length > 0 ? codexTools : undefined,\n\t\tcodexToolChoice,\n\t\twarnings,\n\t};\n}\n","import type { JSONObject, LanguageModelV3FinishReason, LanguageModelV3Usage } from \"@ai-sdk/provider\";\n\nexport type OpenAICodexUsage = {\n\tinput_tokens?: number;\n\toutput_tokens?: number;\n\ttotal_tokens?: number;\n\tinput_tokens_details?: { cached_tokens?: number };\n\toutput_tokens_details?: { reasoning_tokens?: number };\n};\n\nexport function convertOpenAICodexUsage(usage: OpenAICodexUsage | undefined): LanguageModelV3Usage {\n\tconst inputTotal = usage?.input_tokens;\n\tconst cachedTokens = usage?.input_tokens_details?.cached_tokens ?? 0;\n\tconst outputTotal = usage?.output_tokens;\n\tconst reasoningTokens = usage?.output_tokens_details?.reasoning_tokens ?? 0;\n\n\treturn {\n\t\tinputTokens: {\n\t\t\ttotal: inputTotal,\n\t\t\tnoCache: inputTotal === undefined ? undefined : inputTotal - cachedTokens,\n\t\t\tcacheRead: inputTotal === undefined ? undefined : cachedTokens,\n\t\t\tcacheWrite: inputTotal === undefined ? undefined : 0,\n\t\t},\n\t\toutputTokens: {\n\t\t\ttotal: outputTotal,\n\t\t\ttext: outputTotal === undefined ? undefined : outputTotal - reasoningTokens,\n\t\t\treasoning: outputTotal === undefined ? undefined : reasoningTokens,\n\t\t},\n\t\t...(usage ? { raw: usage as JSONObject } : {}),\n\t};\n}\n\nexport function mapOpenAICodexFinishReason(\n\tstatus: string | undefined,\n\thasToolCalls: boolean,\n): LanguageModelV3FinishReason {\n\tswitch (status) {\n\t\tcase \"completed\":\n\t\t\treturn { unified: hasToolCalls ? \"tool-calls\" : \"stop\", raw: status };\n\t\tcase \"incomplete\":\n\t\t\treturn { unified: \"length\", raw: status };\n\t\tcase \"failed\":\n\t\tcase \"cancelled\":\n\t\t\treturn { unified: \"error\", raw: status };\n\t\tcase undefined:\n\t\t\treturn { unified: \"other\", raw: undefined };\n\t\tdefault:\n\t\t\treturn { unified: \"stop\", raw: status };\n\t}\n}\n","import type {\n\tLanguageModelV3,\n\tLanguageModelV3CallOptions,\n\tLanguageModelV3Content,\n\tLanguageModelV3FinishReason,\n\tLanguageModelV3GenerateResult,\n\tLanguageModelV3StreamPart,\n\tLanguageModelV3StreamResult,\n\tLanguageModelV3Usage,\n\tSharedV3Warning,\n} from \"@ai-sdk/provider\";\nimport { createOpenAICodexAPICallError } from \"./codex-error\";\nimport { convertToOpenAICodexPrompt, joinToolCallId } from \"./codex-prompt\";\nimport { parseOpenAICodexSSEStream } from \"./codex-sse\";\nimport { prepareOpenAICodexTools } from \"./codex-tools\";\nimport { convertOpenAICodexUsage, mapOpenAICodexFinishReason, type OpenAICodexUsage } from \"./codex-usage\";\n\nexport const OPENAI_CODEX_DEFAULT_BASE_URL = \"https://chatgpt.com/backend-api\";\n\nexport type OpenAICodexModelId = \"gpt-5.3-codex-spark\" | \"gpt-5.4\" | \"gpt-5.4-mini\" | \"gpt-5.5\" | (string & {});\n\nexport type OpenAICodexServiceTier = \"auto\" | \"default\" | \"flex\" | \"scale\" | \"priority\";\n\n/**\n * Per-call options, passed via `providerOptions[\"openai-codex\"]`.\n */\nexport type OpenAICodexLanguageModelOptions = {\n\t/** Reasoning effort forwarded as `reasoning.effort`. */\n\treasoningEffort?: \"none\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | (string & {});\n\t/** Reasoning summary verbosity; defaults to `auto` when an effort is set. */\n\treasoningSummary?: \"auto\" | \"concise\" | \"detailed\";\n\t/** Output text verbosity; defaults to `low`. */\n\ttextVerbosity?: \"low\" | \"medium\" | \"high\";\n\tserviceTier?: OpenAICodexServiceTier;\n\t/** Prompt cache key; defaults to the provider `sessionId`. */\n\tpromptCacheKey?: string;\n\t/** `include` fields; defaults to `[\"reasoning.encrypted_content\"]`. */\n\tinclude?: string[];\n\t/** The Codex backend requires `store: false`; override only for testing. */\n\tstore?: boolean;\n};\n\nexport type OpenAICodexLanguageModelConfig = {\n\tprovider: string;\n\tbaseURL: string;\n\theaders: () => PromiseLike<Record<string, string | undefined>> | Record<string, string | undefined>;\n\tfetch?: typeof globalThis.fetch;\n\tsessionId?: string;\n\tserviceTier?: OpenAICodexServiceTier;\n};\n\n/**\n * Resolve the Codex responses endpoint from a base URL that may already\n * include the `/codex` or `/codex/responses` suffix.\n */\nexport function resolveOpenAICodexUrl(baseUrl?: string): string {\n\tconst raw = baseUrl?.trim() ? baseUrl : OPENAI_CODEX_DEFAULT_BASE_URL;\n\tconst normalized = raw.replace(/\\/+$/, \"\");\n\tif (normalized.endsWith(\"/codex/responses\")) return normalized;\n\tif (normalized.endsWith(\"/codex\")) return `${normalized}/responses`;\n\treturn `${normalized}/codex/responses`;\n}\n\ntype CodexEvent = Record<string, unknown>;\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value) ? (value as CodexEvent) : undefined;\n}\n\nfunction asString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" ? value : undefined;\n}\n\nfunction cleanHeaders(headers: Record<string, string | undefined>): Record<string, string> {\n\tconst result: Record<string, string> = {};\n\tfor (const [key, value] of Object.entries(headers)) {\n\t\tif (value !== undefined) result[key] = value;\n\t}\n\treturn result;\n}\n\nexport class OpenAICodexLanguageModel implements LanguageModelV3 {\n\treadonly specificationVersion = \"v3\" as const;\n\treadonly modelId: OpenAICodexModelId;\n\n\tprivate readonly config: OpenAICodexLanguageModelConfig;\n\n\tconstructor(modelId: OpenAICodexModelId, config: OpenAICodexLanguageModelConfig) {\n\t\tthis.modelId = modelId;\n\t\tthis.config = config;\n\t}\n\n\tget provider(): string {\n\t\treturn this.config.provider;\n\t}\n\n\tget supportedUrls(): Record<string, RegExp[]> {\n\t\treturn {};\n\t}\n\n\tprivate getArgs(options: LanguageModelV3CallOptions): {\n\t\targs: Record<string, unknown>;\n\t\twarnings: SharedV3Warning[];\n\t} {\n\t\tconst warnings: SharedV3Warning[] = [];\n\n\t\tif (options.topP != null) warnings.push({ type: \"unsupported\", feature: \"topP\" });\n\t\tif (options.topK != null) warnings.push({ type: \"unsupported\", feature: \"topK\" });\n\t\tif (options.presencePenalty != null) warnings.push({ type: \"unsupported\", feature: \"presencePenalty\" });\n\t\tif (options.frequencyPenalty != null) warnings.push({ type: \"unsupported\", feature: \"frequencyPenalty\" });\n\t\tif (options.seed != null) warnings.push({ type: \"unsupported\", feature: \"seed\" });\n\t\tif (options.stopSequences != null) warnings.push({ type: \"unsupported\", feature: \"stopSequences\" });\n\t\tif (options.maxOutputTokens != null) {\n\t\t\t// The ChatGPT Codex backend rejects max_output_tokens with a 400.\n\t\t\twarnings.push({ type: \"unsupported\", feature: \"maxOutputTokens\" });\n\t\t}\n\t\tif (options.responseFormat && options.responseFormat.type !== \"text\") {\n\t\t\twarnings.push({ type: \"unsupported\", feature: \"responseFormat\" });\n\t\t}\n\n\t\tconst codexOptions = (options.providerOptions?.[\"openai-codex\"] ?? {}) as OpenAICodexLanguageModelOptions;\n\t\tconst { instructions, input } = convertToOpenAICodexPrompt(options.prompt);\n\t\tconst tools = prepareOpenAICodexTools({ tools: options.tools, toolChoice: options.toolChoice });\n\t\twarnings.push(...tools.warnings);\n\n\t\tconst args: Record<string, unknown> = {\n\t\t\tmodel: this.modelId,\n\t\t\t// The ChatGPT backend rejects stored responses for Codex subscriptions.\n\t\t\tstore: codexOptions.store ?? false,\n\t\t\tinstructions,\n\t\t\tinput,\n\t\t\ttool_choice: tools.codexToolChoice ?? \"auto\",\n\t\t\tparallel_tool_calls: true,\n\t\t\tinclude: codexOptions.include ?? [\"reasoning.encrypted_content\"],\n\t\t\ttext: { verbosity: codexOptions.textVerbosity ?? \"low\" },\n\t\t};\n\n\t\tif (tools.codexTools) args.tools = tools.codexTools;\n\t\tif (options.temperature != null) args.temperature = options.temperature;\n\n\t\tconst promptCacheKey = codexOptions.promptCacheKey ?? this.config.sessionId;\n\t\tif (promptCacheKey) args.prompt_cache_key = promptCacheKey;\n\n\t\tconst serviceTier = codexOptions.serviceTier ?? this.config.serviceTier;\n\t\tif (serviceTier) args.service_tier = serviceTier;\n\n\t\tif (codexOptions.reasoningEffort) {\n\t\t\targs.reasoning = {\n\t\t\t\teffort: codexOptions.reasoningEffort,\n\t\t\t\tsummary: codexOptions.reasoningSummary ?? \"auto\",\n\t\t\t};\n\t\t}\n\n\t\treturn { args, warnings };\n\t}\n\n\tasync doGenerate(options: LanguageModelV3CallOptions): Promise<LanguageModelV3GenerateResult> {\n\t\tconst { stream, request, response } = await this.doStream(options);\n\n\t\tconst content: LanguageModelV3Content[] = [];\n\t\tconst textBlocks = new Map<string, { type: \"text\"; text: string }>();\n\t\tconst reasoningBlocks = new Map<string, { type: \"reasoning\"; text: string }>();\n\t\tconst warnings: SharedV3Warning[] = [];\n\t\tlet finishReason: LanguageModelV3FinishReason = { unified: \"other\", raw: undefined };\n\t\tlet usage: LanguageModelV3Usage = convertOpenAICodexUsage(undefined);\n\t\tlet responseId: string | undefined;\n\t\tlet responseModelId: string | undefined;\n\n\t\tconst reader = stream.getReader();\n\t\twhile (true) {\n\t\t\tconst { done, value } = await reader.read();\n\t\t\tif (done) break;\n\n\t\t\tswitch (value.type) {\n\t\t\t\tcase \"stream-start\":\n\t\t\t\t\twarnings.push(...value.warnings);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"response-metadata\":\n\t\t\t\t\tresponseId = value.id;\n\t\t\t\t\tresponseModelId = value.modelId;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"text-start\": {\n\t\t\t\t\tconst block = { type: \"text\" as const, text: \"\" };\n\t\t\t\t\ttextBlocks.set(value.id, block);\n\t\t\t\t\tcontent.push(block);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"text-delta\": {\n\t\t\t\t\tconst block = textBlocks.get(value.id);\n\t\t\t\t\tif (block) block.text += value.delta;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"reasoning-start\": {\n\t\t\t\t\tconst block = { type: \"reasoning\" as const, text: \"\" };\n\t\t\t\t\treasoningBlocks.set(value.id, block);\n\t\t\t\t\tcontent.push(block);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"reasoning-delta\": {\n\t\t\t\t\tconst block = reasoningBlocks.get(value.id);\n\t\t\t\t\tif (block) block.text += value.delta;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"tool-call\":\n\t\t\t\t\tcontent.push(value);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"finish\":\n\t\t\t\t\tfinishReason = value.finishReason;\n\t\t\t\t\tusage = value.usage;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"error\":\n\t\t\t\t\tthrow value.error instanceof Error ? value.error : new Error(String(value.error));\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tcontent: content.filter((part) =>\n\t\t\t\tpart.type === \"text\" || part.type === \"reasoning\" ? part.text !== \"\" : true,\n\t\t\t),\n\t\t\tfinishReason,\n\t\t\tusage,\n\t\t\trequest,\n\t\t\tresponse: { ...response, id: responseId, modelId: responseModelId },\n\t\t\twarnings,\n\t\t};\n\t}\n\n\tasync doStream(options: LanguageModelV3CallOptions): Promise<LanguageModelV3StreamResult> {\n\t\tconst { args, warnings } = this.getArgs(options);\n\t\tconst body = { ...args, stream: true };\n\t\tconst url = resolveOpenAICodexUrl(this.config.baseURL);\n\n\t\tconst headers = cleanHeaders({\n\t\t\t...(await this.config.headers()),\n\t\t\t...options.headers,\n\t\t});\n\n\t\tconst fetchImpl = this.config.fetch ?? globalThis.fetch;\n\t\tconst response = await fetchImpl(url, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders,\n\t\t\tbody: JSON.stringify(body),\n\t\t\tsignal: options.abortSignal,\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrow await createOpenAICodexAPICallError({ response, url, requestBodyValues: body });\n\t\t}\n\t\tif (!response.body) {\n\t\t\tthrow new Error(\"OpenAI Codex response has no body\");\n\t\t}\n\n\t\tconst responseHeaders: Record<string, string> = {};\n\t\tresponse.headers.forEach((value, key) => {\n\t\t\tresponseHeaders[key] = value;\n\t\t});\n\n\t\treturn {\n\t\t\tstream: parseOpenAICodexSSEStream(response.body).pipeThrough(\n\t\t\t\tthis.createTransformStream(warnings, options.includeRawChunks ?? false),\n\t\t\t),\n\t\t\trequest: { body },\n\t\t\tresponse: { headers: responseHeaders },\n\t\t};\n\t}\n\n\tprivate createTransformStream(\n\t\twarnings: SharedV3Warning[],\n\t\tincludeRawChunks: boolean,\n\t): TransformStream<CodexEvent, LanguageModelV3StreamPart> {\n\t\tlet finishReason: LanguageModelV3FinishReason = { unified: \"other\", raw: undefined };\n\t\tlet usage: OpenAICodexUsage | undefined;\n\t\tlet hasToolCalls = false;\n\t\t// function_call argument deltas arrive keyed by item id; tool parts use the\n\t\t// composite `call_id|item_id` so multi-turn replay can recover both halves.\n\t\tconst toolCallIdsByItemId = new Map<string, string>();\n\n\t\tconst handleOutputItemAdded = (\n\t\t\titem: CodexEvent,\n\t\t\tcontroller: TransformStreamDefaultController<LanguageModelV3StreamPart>,\n\t\t) => {\n\t\t\tconst itemType = asString(item.type);\n\t\t\tconst itemId = asString(item.id);\n\t\t\tif (!itemType || !itemId) return;\n\n\t\t\tif (itemType === \"message\") {\n\t\t\t\tcontroller.enqueue({ type: \"text-start\", id: itemId });\n\t\t\t} else if (itemType === \"reasoning\") {\n\t\t\t\tcontroller.enqueue({ type: \"reasoning-start\", id: itemId });\n\t\t\t} else if (itemType === \"function_call\") {\n\t\t\t\tconst toolCallId = joinToolCallId(asString(item.call_id) ?? itemId, itemId);\n\t\t\t\ttoolCallIdsByItemId.set(itemId, toolCallId);\n\t\t\t\thasToolCalls = true;\n\t\t\t\tcontroller.enqueue({\n\t\t\t\t\ttype: \"tool-input-start\",\n\t\t\t\t\tid: toolCallId,\n\t\t\t\t\ttoolName: asString(item.name) ?? \"\",\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tconst handleOutputItemDone = (\n\t\t\titem: CodexEvent,\n\t\t\tcontroller: TransformStreamDefaultController<LanguageModelV3StreamPart>,\n\t\t) => {\n\t\t\tconst itemType = asString(item.type);\n\t\t\tconst itemId = asString(item.id);\n\t\t\tif (!itemType || !itemId) return;\n\n\t\t\tif (itemType === \"message\") {\n\t\t\t\tcontroller.enqueue({ type: \"text-end\", id: itemId });\n\t\t\t} else if (itemType === \"reasoning\") {\n\t\t\t\tcontroller.enqueue({ type: \"reasoning-end\", id: itemId });\n\t\t\t} else if (itemType === \"function_call\") {\n\t\t\t\tconst toolCallId =\n\t\t\t\t\ttoolCallIdsByItemId.get(itemId) ?? joinToolCallId(asString(item.call_id) ?? itemId, itemId);\n\t\t\t\thasToolCalls = true;\n\t\t\t\tcontroller.enqueue({ type: \"tool-input-end\", id: toolCallId });\n\t\t\t\tcontroller.enqueue({\n\t\t\t\t\ttype: \"tool-call\",\n\t\t\t\t\ttoolCallId,\n\t\t\t\t\ttoolName: asString(item.name) ?? \"\",\n\t\t\t\t\tinput: asString(item.arguments) ?? \"\",\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\treturn new TransformStream<CodexEvent, LanguageModelV3StreamPart>({\n\t\t\tstart(controller) {\n\t\t\t\tcontroller.enqueue({ type: \"stream-start\", warnings });\n\t\t\t},\n\n\t\t\ttransform(event, controller) {\n\t\t\t\tif (includeRawChunks) {\n\t\t\t\t\tcontroller.enqueue({ type: \"raw\", rawValue: event });\n\t\t\t\t}\n\n\t\t\t\tconst type = asString(event.type);\n\t\t\t\tif (!type) return;\n\n\t\t\t\tswitch (type) {\n\t\t\t\t\tcase \"response.created\": {\n\t\t\t\t\t\tconst response = asRecord(event.response);\n\t\t\t\t\t\tcontroller.enqueue({\n\t\t\t\t\t\t\ttype: \"response-metadata\",\n\t\t\t\t\t\t\tid: asString(response?.id),\n\t\t\t\t\t\t\tmodelId: asString(response?.model),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase \"response.output_item.added\": {\n\t\t\t\t\t\tconst item = asRecord(event.item);\n\t\t\t\t\t\tif (item) handleOutputItemAdded(item, controller);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase \"response.output_text.delta\": {\n\t\t\t\t\t\tconst itemId = asString(event.item_id);\n\t\t\t\t\t\tconst delta = asString(event.delta);\n\t\t\t\t\t\tif (itemId && delta) controller.enqueue({ type: \"text-delta\", id: itemId, delta });\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase \"response.reasoning_text.delta\":\n\t\t\t\t\tcase \"response.reasoning_summary_text.delta\": {\n\t\t\t\t\t\tconst itemId = asString(event.item_id);\n\t\t\t\t\t\tconst delta = asString(event.delta);\n\t\t\t\t\t\tif (itemId && delta) controller.enqueue({ type: \"reasoning-delta\", id: itemId, delta });\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase \"response.function_call_arguments.delta\": {\n\t\t\t\t\t\tconst itemId = asString(event.item_id);\n\t\t\t\t\t\tconst delta = asString(event.delta);\n\t\t\t\t\t\tconst toolCallId = itemId ? toolCallIdsByItemId.get(itemId) : undefined;\n\t\t\t\t\t\tif (toolCallId && delta) controller.enqueue({ type: \"tool-input-delta\", id: toolCallId, delta });\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase \"response.output_item.done\": {\n\t\t\t\t\t\tconst item = asRecord(event.item);\n\t\t\t\t\t\tif (item) handleOutputItemDone(item, controller);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase \"response.completed\":\n\t\t\t\t\tcase \"response.done\":\n\t\t\t\t\tcase \"response.incomplete\": {\n\t\t\t\t\t\tconst response = asRecord(event.response);\n\t\t\t\t\t\tusage = (response?.usage as OpenAICodexUsage | undefined) ?? usage;\n\t\t\t\t\t\tconst status =\n\t\t\t\t\t\t\tasString(response?.status) ?? (type === \"response.incomplete\" ? \"incomplete\" : \"completed\");\n\t\t\t\t\t\tfinishReason = mapOpenAICodexFinishReason(status, hasToolCalls);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase \"response.failed\": {\n\t\t\t\t\t\tconst response = asRecord(event.response);\n\t\t\t\t\t\tconst error = asRecord(response?.error);\n\t\t\t\t\t\tfinishReason = { unified: \"error\", raw: \"failed\" };\n\t\t\t\t\t\tcontroller.enqueue({\n\t\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\t\terror: new Error(asString(error?.message) ?? \"OpenAI Codex response failed\"),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase \"error\": {\n\t\t\t\t\t\tconst code = asString(event.code);\n\t\t\t\t\t\tconst message = asString(event.message);\n\t\t\t\t\t\tfinishReason = { unified: \"error\", raw: code ?? \"error\" };\n\t\t\t\t\t\tcontroller.enqueue({\n\t\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\t\terror: new Error(\n\t\t\t\t\t\t\t\t`OpenAI Codex error${code ? ` ${code}` : \"\"}: ${message ?? JSON.stringify(event)}`,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// Ignore lifecycle events we do not surface (content_part, in_progress, ...).\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tflush(controller) {\n\t\t\t\tcontroller.enqueue({\n\t\t\t\t\ttype: \"finish\",\n\t\t\t\t\tfinishReason,\n\t\t\t\t\tusage: convertOpenAICodexUsage(usage),\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n}\n","import { LoadAPIKeyError, NoSuchModelError, type LanguageModelV3, type ProviderV3 } from \"@ai-sdk/provider\";\nimport { getOpenAICodexAccountId } from \"../../oauth/openai/codex\";\nimport {\n\tOPENAI_CODEX_DEFAULT_BASE_URL,\n\tOpenAICodexLanguageModel,\n\ttype OpenAICodexModelId,\n\ttype OpenAICodexServiceTier,\n} from \"./codex-language-model\";\n\nexport const OPENAI_CODEX_API_KEY_ENV = \"OPENAI_CODEX_API_KEY\";\n\nconst DEFAULT_ORIGINATOR = \"codework\";\n\nexport interface OpenAICodexProvider extends ProviderV3 {\n\t(modelId: OpenAICodexModelId): LanguageModelV3;\n\n\tlanguageModel(modelId: OpenAICodexModelId): LanguageModelV3;\n\n\t/** Alias for `languageModel`; the Codex API only speaks the Responses protocol. */\n\tresponses(modelId: OpenAICodexModelId): LanguageModelV3;\n}\n\nexport interface OpenAICodexProviderSettings {\n\t/**\n\t * Base URL for the Codex backend.\n\t * Defaults to `https://chatgpt.com/backend-api`.\n\t */\n\tbaseURL?: string;\n\n\t/**\n\t * ChatGPT OAuth access token (JWT) used as the API key.\n\t * Defaults to the `OPENAI_CODEX_API_KEY` environment variable.\n\t * A function can be passed to resolve a fresh token per request.\n\t */\n\tapiKey?: string | (() => string | PromiseLike<string>);\n\n\t/**\n\t * ChatGPT account id sent as the `chatgpt-account-id` header.\n\t * Extracted from the JWT access token when omitted.\n\t */\n\taccountId?: string;\n\n\t/** Custom headers merged into every request. */\n\theaders?: Record<string, string>;\n\n\t/** Custom fetch implementation. */\n\tfetch?: typeof globalThis.fetch;\n\n\t/** Session id used for the `session-id` header and the default prompt cache key. */\n\tsessionId?: string;\n\n\t/** Default service tier for requests. */\n\tserviceTier?: OpenAICodexServiceTier;\n\n\t/** `originator` header value; defaults to `codework`. */\n\toriginator?: string;\n}\n\nasync function resolveApiKey(settings: OpenAICodexProviderSettings): Promise<string> {\n\tconst apiKey =\n\t\ttypeof settings.apiKey === \"function\"\n\t\t\t? await settings.apiKey()\n\t\t\t: (settings.apiKey ?? (typeof process === \"undefined\" ? undefined : process.env[OPENAI_CODEX_API_KEY_ENV]));\n\n\tif (!apiKey) {\n\t\tthrow new LoadAPIKeyError({\n\t\t\tmessage: `OpenAI Codex API key is missing. Pass it using the 'apiKey' option or the ${OPENAI_CODEX_API_KEY_ENV} environment variable.`,\n\t\t});\n\t}\n\n\treturn apiKey;\n}\n\nfunction resolveAccountId(settings: OpenAICodexProviderSettings, apiKey: string): string {\n\tconst accountId = settings.accountId ?? getOpenAICodexAccountId(apiKey);\n\tif (!accountId) {\n\t\tthrow new LoadAPIKeyError({\n\t\t\tmessage:\n\t\t\t\t\"Failed to extract the ChatGPT account id from the OpenAI Codex access token. \" +\n\t\t\t\t\"Provide it using the 'accountId' option or pass a valid ChatGPT OAuth JWT as the API key.\",\n\t\t});\n\t}\n\treturn accountId;\n}\n\nexport function createOpenAICodex(options: OpenAICodexProviderSettings = {}): OpenAICodexProvider {\n\tconst baseURL = options.baseURL?.replace(/\\/+$/, \"\") || OPENAI_CODEX_DEFAULT_BASE_URL;\n\n\tconst getHeaders = async (): Promise<Record<string, string | undefined>> => {\n\t\tconst apiKey = await resolveApiKey(options);\n\t\tconst accountId = resolveAccountId(options, apiKey);\n\n\t\treturn {\n\t\t\tAuthorization: `Bearer ${apiKey}`,\n\t\t\t\"chatgpt-account-id\": accountId,\n\t\t\t\"OpenAI-Beta\": \"responses=experimental\",\n\t\t\toriginator: options.originator ?? DEFAULT_ORIGINATOR,\n\t\t\taccept: \"text/event-stream\",\n\t\t\t\"content-type\": \"application/json\",\n\t\t\t...(options.sessionId ? { \"session-id\": options.sessionId, \"x-client-request-id\": options.sessionId } : {}),\n\t\t\t...options.headers,\n\t\t};\n\t};\n\n\tconst createLanguageModel = (modelId: OpenAICodexModelId) =>\n\t\tnew OpenAICodexLanguageModel(modelId, {\n\t\t\tprovider: \"openai-codex\",\n\t\t\tbaseURL,\n\t\t\theaders: getHeaders,\n\t\t\tfetch: options.fetch,\n\t\t\tsessionId: options.sessionId,\n\t\t\tserviceTier: options.serviceTier,\n\t\t});\n\n\tconst provider = function (modelId: OpenAICodexModelId) {\n\t\tif (new.target) {\n\t\t\tthrow new Error(\"The OpenAI Codex model function cannot be called with the new keyword.\");\n\t\t}\n\t\treturn createLanguageModel(modelId);\n\t};\n\n\tprovider.specificationVersion = \"v3\" as const;\n\tprovider.languageModel = createLanguageModel;\n\tprovider.responses = createLanguageModel;\n\n\tprovider.embeddingModel = (modelId: string) => {\n\t\tthrow new NoSuchModelError({ modelId, modelType: \"embeddingModel\" });\n\t};\n\tprovider.textEmbeddingModel = (modelId: string) => {\n\t\tthrow new NoSuchModelError({ modelId, modelType: \"embeddingModel\" });\n\t};\n\tprovider.imageModel = (modelId: string) => {\n\t\tthrow new NoSuchModelError({ modelId, modelType: \"imageModel\" });\n\t};\n\n\treturn provider as OpenAICodexProvider;\n}\n\n/**\n * Default provider instance using `OPENAI_CODEX_API_KEY`.\n */\nexport const openaiCodex = createOpenAICodex();\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { n as createOpenAICodex } from "./openai-codex-CZrBnLAJ.mjs";
2
+ export { createOpenAICodex };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codeworksh/aikit",
3
- "version": "0.4.1-dev.20260531052349",
3
+ "version": "0.5.1-dev.20260613074656",
4
4
  "description": "Toolkit for building AI agents and agent harness.",
5
5
  "keywords": [
6
6
  "agent",
@@ -58,6 +58,7 @@
58
58
  "@ai-sdk/google-vertex": "^4.0.137",
59
59
  "@ai-sdk/openai": "^3.0.65",
60
60
  "@ai-sdk/openai-compatible": "^2.0.48",
61
+ "@ai-sdk/provider": "^3.0.10",
61
62
  "@ai-sdk/xai": "^3.0.92",
62
63
  "@openrouter/ai-sdk-provider": "^2.9.0",
63
64
  "ai": "^6.0.191",
@@ -4840,6 +4840,7 @@ let ModelCatalog;
4840
4840
  googleVertexAnthropic: "google-vertex-anthropic",
4841
4841
  openai: "openai",
4842
4842
  openaiCompatible: "openai-compatible",
4843
+ openaiCodex: "openai-codex",
4843
4844
  openrouter: "openrouter",
4844
4845
  xai: "xai"
4845
4846
  };
@@ -4850,6 +4851,7 @@ let ModelCatalog;
4850
4851
  Type.Literal(KnownProviderEnum.googleVertexAnthropic),
4851
4852
  Type.Literal(KnownProviderEnum.openai),
4852
4853
  Type.Literal(KnownProviderEnum.openaiCompatible),
4854
+ Type.Literal(KnownProviderEnum.openaiCodex),
4853
4855
  Type.Literal(KnownProviderEnum.openrouter),
4854
4856
  Type.Literal(KnownProviderEnum.xai)
4855
4857
  ]);
@@ -4937,6 +4939,7 @@ let Model;
4937
4939
  googleVertexAnthropic: KnownProviderEnumSchema,
4938
4940
  openai: KnownProviderEnumSchema,
4939
4941
  openaiCompatible: KnownProviderEnumSchema,
4942
+ openaiCodex: KnownProviderEnumSchema,
4940
4943
  openrouter: KnownProviderEnumSchema,
4941
4944
  xai: KnownProviderEnumSchema
4942
4945
  }));
@@ -5074,7 +5077,7 @@ let Model;
5074
5077
  })(Model || (Model = {}));
5075
5078
  //#endregion
5076
5079
  //#region src/llm/registry.ts
5077
- const DEFAULT_AI_SDK_PACKAGE = "@ai-sdk/openai-compatible";
5080
+ const DEFAULT_AI_SDK_FALLBACK = "@ai-sdk/openai-compatible";
5078
5081
  const AI_SDK_PACKAGE_TO_PROTOCOL = {
5079
5082
  "@ai-sdk/anthropic": Model.KnownProviderEnum.anthropic,
5080
5083
  "@ai-sdk/google": Model.KnownProviderEnum.google,
@@ -5082,6 +5085,7 @@ const AI_SDK_PACKAGE_TO_PROTOCOL = {
5082
5085
  "@ai-sdk/google-vertex/anthropic": Model.KnownProviderEnum.googleVertexAnthropic,
5083
5086
  "@ai-sdk/openai": Model.KnownProviderEnum.openai,
5084
5087
  "@ai-sdk/openai-compatible": Model.KnownProviderEnum.openaiCompatible,
5088
+ "@codeworksh/ai-sdk-openai-codex": Model.KnownProviderEnum.openaiCodex,
5085
5089
  "@openrouter/ai-sdk-provider": Model.KnownProviderEnum.openrouter,
5086
5090
  "@ai-sdk/xai": Model.KnownProviderEnum.xai
5087
5091
  };
@@ -5093,23 +5097,24 @@ const PROVIDER_LOADERS = {
5093
5097
  "@ai-sdk/openai": () => import("@ai-sdk/openai").then((m) => m.createOpenAI),
5094
5098
  "@ai-sdk/openai-compatible": () => import("@ai-sdk/openai-compatible").then((m) => m.createOpenAICompatible),
5095
5099
  "@openrouter/ai-sdk-provider": () => import("@openrouter/ai-sdk-provider").then((m) => m.createOpenRouter),
5096
- "@ai-sdk/xai": () => import("@ai-sdk/xai").then((m) => m.createXai)
5100
+ "@ai-sdk/xai": () => import("@ai-sdk/xai").then((m) => m.createXai),
5101
+ "@codeworksh/ai-sdk-openai-codex": () => import("./openai-codex-bzfev3us.mjs").then((m) => m.createOpenAICodex)
5097
5102
  };
5098
5103
  function isAISDKPackage(value) {
5099
5104
  return value in AI_SDK_PACKAGE_TO_PROTOCOL;
5100
5105
  }
5101
5106
  function packageForModel(model) {
5102
5107
  const npm = model.npm ?? "@ai-sdk/openai-compatible";
5103
- return isAISDKPackage(npm) ? npm : DEFAULT_AI_SDK_PACKAGE;
5108
+ return isAISDKPackage(npm) ? npm : DEFAULT_AI_SDK_FALLBACK;
5104
5109
  }
5105
5110
  function protocolForPackage(npm) {
5106
- return AI_SDK_PACKAGE_TO_PROTOCOL[npm && isAISDKPackage(npm) ? npm : DEFAULT_AI_SDK_PACKAGE];
5111
+ return AI_SDK_PACKAGE_TO_PROTOCOL[npm && isAISDKPackage(npm) ? npm : DEFAULT_AI_SDK_FALLBACK];
5107
5112
  }
5108
5113
  async function loadProviderFactory(npm) {
5109
5114
  return PROVIDER_LOADERS[npm]();
5110
5115
  }
5111
5116
  function defaultMethodForModel(model) {
5112
- if (model.protocol === Model.KnownProviderEnum.openai || model.protocol === Model.KnownProviderEnum.xai) return Model.APIMethodEnum.responses;
5117
+ if (model.protocol === Model.KnownProviderEnum.openai || model.protocol === Model.KnownProviderEnum.openaiCodex || model.protocol === Model.KnownProviderEnum.xai) return Model.APIMethodEnum.responses;
5113
5118
  return Model.APIMethodEnum.languageModel;
5114
5119
  }
5115
5120
  function resolveLanguageModel(provider, model, methodOverride) {
@@ -5131,6 +5136,6 @@ function resolveLanguageModel(provider, model, methodOverride) {
5131
5136
  return callable(modelId);
5132
5137
  }
5133
5138
  //#endregion
5134
- export { protocolForPackage as a, ModelCatalog as c, NamedError as d, packageForModel as i, lazy as l, isAISDKPackage as n, resolveLanguageModel as o, loadProviderFactory as r, Model as s, DEFAULT_AI_SDK_PACKAGE as t, Filesystem as u };
5139
+ export { protocolForPackage as a, ModelCatalog as c, NamedError as d, packageForModel as i, lazy as l, isAISDKPackage as n, resolveLanguageModel as o, loadProviderFactory as r, Model as s, DEFAULT_AI_SDK_FALLBACK as t, Filesystem as u };
5135
5140
 
5136
- //# sourceMappingURL=registry-Cfdk78qk.mjs.map
5141
+ //# sourceMappingURL=registry-DUKrGxt4.mjs.map