ai-sdk-provider-codex-cli 1.1.0 → 1.2.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.
package/README.md CHANGED
@@ -10,7 +10,7 @@
10
10
  [![PRs welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/ben-vargas/ai-sdk-provider-codex-cli/issues)
11
11
  [![Latest Release](https://img.shields.io/github/v/release/ben-vargas/ai-sdk-provider-codex-cli?display_name=tag)](https://github.com/ben-vargas/ai-sdk-provider-codex-cli/releases/latest)
12
12
 
13
- A community provider for Vercel AI SDK v6 that integrates OpenAI's Codex CLI with GPT‑5.1 / GPT‑5.2 class models (`gpt-5.1`, `gpt-5.2`, the Codex-specific `gpt-5.3-codex` / `gpt-5.2-codex`, the flagship `*-codex-max`, and the lightweight `*-codex-mini` slugs) using your ChatGPT Plus/Pro subscription.
13
+ A community provider for Vercel AI SDK v6 that integrates OpenAI's Codex CLI with current GPT models such as `gpt-5.5`, `gpt-5.2`, and `gpt-5.1`, plus Codex-specific slugs like `gpt-5.3-codex`, `gpt-5.2-codex`, `*-codex-max`, and `*-codex-mini`, using your ChatGPT Plus/Pro subscription.
14
14
 
15
15
  This package ships two provider modes:
16
16
 
@@ -54,7 +54,7 @@ npm i ai ai-sdk-provider-codex-cli
54
54
  npm i ai@^5.0.0 ai-sdk-provider-codex-cli@ai-sdk-v5
55
55
  ```
56
56
 
57
- > **⚠️ Codex CLI Version**: Requires Codex CLI **>= 0.105.0** for full support of both provider modes (`codexExec` and `codexAppServer`). If you supply your own Codex CLI (global install or custom `codexPath`), check it with `codex --version` and upgrade if needed. The optional dependency `@openai/codex` in this package pulls a compatible version automatically.
57
+ > **⚠️ Codex CLI Version**: Requires the current stable Codex CLI **0.130.x** for full support of both provider modes (`codexExec` and `codexAppServer`). This package pins its optional `@openai/codex` dependency to `^0.130.0`, the latest non-alpha release validated for this maintenance update. If you supply your own Codex CLI (global install or custom `codexPath`), check it with `codex --version` and upgrade if needed.
58
58
  >
59
59
  > ```bash
60
60
  > npm i -g @openai/codex@latest
@@ -68,7 +68,7 @@ npm i ai@^5.0.0 ai-sdk-provider-codex-cli@ai-sdk-v5
68
68
  import { generateText } from 'ai';
69
69
  import { codexExec } from 'ai-sdk-provider-codex-cli';
70
70
 
71
- const model = codexExec('gpt-5.3-codex', {
71
+ const model = codexExec('gpt-5.5', {
72
72
  allowNpx: true,
73
73
  skipGitRepoCheck: true,
74
74
  approvalMode: 'on-failure',
@@ -90,14 +90,14 @@ import { createCodexAppServer } from 'ai-sdk-provider-codex-cli';
90
90
 
91
91
  const provider = createCodexAppServer({
92
92
  defaultSettings: {
93
- minCodexVersion: '0.105.0',
93
+ minCodexVersion: '0.130.0',
94
94
  autoApprove: false,
95
95
  personality: 'pragmatic',
96
96
  },
97
97
  });
98
98
 
99
99
  const { textStream } = await streamText({
100
- model: provider('gpt-5.3-codex'),
100
+ model: provider('gpt-5.5'),
101
101
  prompt: 'Write two short lines of encouragement.',
102
102
  });
103
103
  for await (const chunk of textStream) process.stdout.write(chunk);
@@ -107,7 +107,7 @@ await provider.close();
107
107
 
108
108
  ### App-server stateful threads (optional)
109
109
 
110
- By default, `codexAppServer` is stateless (new ephemeral thread per call). To continue a prior conversation, pass `threadId` in `providerOptions['codex-app-server']`.
110
+ By default, `codexAppServer` is stateless (new ephemeral thread per call). To continue a prior conversation across calls, start a persistent thread and then pass its `threadId` in `providerOptions['codex-app-server']`.
111
111
 
112
112
  ```js
113
113
  import { generateText } from 'ai';
@@ -116,14 +116,17 @@ import { createCodexAppServer } from 'ai-sdk-provider-codex-cli';
116
116
  const provider = createCodexAppServer();
117
117
 
118
118
  const first = await generateText({
119
- model: provider('gpt-5.3-codex'),
119
+ model: provider('gpt-5.5'),
120
120
  prompt: 'Start a migration checklist.',
121
+ providerOptions: {
122
+ 'codex-app-server': { threadMode: 'persistent' },
123
+ },
121
124
  });
122
125
 
123
126
  const threadId = first.providerMetadata?.['codex-app-server']?.threadId;
124
127
 
125
128
  const second = await generateText({
126
- model: provider('gpt-5.3-codex'),
129
+ model: provider('gpt-5.5'),
127
130
  prompt: 'Continue from step 2.',
128
131
  providerOptions: {
129
132
  'codex-app-server': { threadId },
@@ -142,7 +145,7 @@ import { codexExec } from 'ai-sdk-provider-codex-cli';
142
145
 
143
146
  const schema = z.object({ name: z.string(), age: z.number().int() });
144
147
  const { object } = await generateObject({
145
- model: codexExec('gpt-5.3-codex', { allowNpx: true, skipGitRepoCheck: true }),
148
+ model: codexExec('gpt-5.5', { allowNpx: true, skipGitRepoCheck: true }),
146
149
  schema,
147
150
  prompt: 'Generate a small user profile.',
148
151
  });
@@ -175,7 +178,7 @@ import { generateText } from 'ai';
175
178
  import { codexExec } from 'ai-sdk-provider-codex-cli';
176
179
  import { readFileSync } from 'fs';
177
180
 
178
- const model = codexExec('gpt-5.3-codex', { allowNpx: true, skipGitRepoCheck: true });
181
+ const model = codexExec('gpt-5.5', { allowNpx: true, skipGitRepoCheck: true });
179
182
  const imageBuffer = readFileSync('./screenshot.png');
180
183
 
181
184
  const { text } = await generateText({
@@ -217,7 +220,7 @@ import { streamText } from 'ai';
217
220
  import { codexExec } from 'ai-sdk-provider-codex-cli';
218
221
 
219
222
  const result = await streamText({
220
- model: codexExec('gpt-5.3-codex', { allowNpx: true, skipGitRepoCheck: true }),
223
+ model: codexExec('gpt-5.5', { allowNpx: true, skipGitRepoCheck: true }),
221
224
  prompt: 'List files and count lines in the largest one',
222
225
  });
223
226
 
@@ -253,20 +256,20 @@ Control logging verbosity and integrate with your observability stack:
253
256
  import { codexExec } from 'ai-sdk-provider-codex-cli';
254
257
 
255
258
  // Default: warn/error only (clean production output)
256
- const model = codexExec('gpt-5.3-codex', {
259
+ const model = codexExec('gpt-5.5', {
257
260
  allowNpx: true,
258
261
  skipGitRepoCheck: true,
259
262
  });
260
263
 
261
264
  // Verbose mode: enable debug/info logs for troubleshooting
262
- const verboseModel = codexExec('gpt-5.3-codex', {
265
+ const verboseModel = codexExec('gpt-5.5', {
263
266
  allowNpx: true,
264
267
  skipGitRepoCheck: true,
265
268
  verbose: true, // Shows all log levels
266
269
  });
267
270
 
268
271
  // Custom logger: integrate with Winston, Pino, Datadog, etc.
269
- const customModel = codexExec('gpt-5.3-codex', {
272
+ const customModel = codexExec('gpt-5.5', {
270
273
  allowNpx: true,
271
274
  skipGitRepoCheck: true,
272
275
  verbose: true,
@@ -279,7 +282,7 @@ const customModel = codexExec('gpt-5.3-codex', {
279
282
  });
280
283
 
281
284
  // Silent: disable all logging
282
- const silentModel = codexExec('gpt-5.3-codex', {
285
+ const silentModel = codexExec('gpt-5.5', {
283
286
  allowNpx: true,
284
287
  skipGitRepoCheck: true,
285
288
  logger: false, // No logs at all
@@ -388,7 +391,7 @@ Control reasoning effort, verbosity, and advanced Codex features at model creati
388
391
  ```ts
389
392
  import { codexExec } from 'ai-sdk-provider-codex-cli';
390
393
 
391
- const model = codexExec('gpt-5.3-codex', {
394
+ const model = codexExec('gpt-5.5', {
392
395
  allowNpx: true,
393
396
  skipGitRepoCheck: true,
394
397
  addDirs: ['../shared'],
@@ -442,7 +445,7 @@ values take precedence over constructor defaults while leaving other settings in
442
445
  import { generateText } from 'ai';
443
446
  import { codexExec } from 'ai-sdk-provider-codex-cli';
444
447
 
445
- const model = codexExec('gpt-5.3-codex', {
448
+ const model = codexExec('gpt-5.5', {
446
449
  allowNpx: true,
447
450
  reasoningEffort: 'medium',
448
451
  modelVerbosity: 'medium',
@@ -482,7 +485,7 @@ import { createCodexAppServer } from 'ai-sdk-provider-codex-cli';
482
485
  const appServerProvider = createCodexAppServer();
483
486
 
484
487
  const response = await generateText({
485
- model: appServerProvider('gpt-5.3-codex'),
488
+ model: appServerProvider('gpt-5.5'),
486
489
  prompt: 'Continue this task.',
487
490
  providerOptions: {
488
491
  'codex-app-server': {
package/dist/index.cjs CHANGED
@@ -1056,6 +1056,25 @@ function mergeStringRecord(base, override) {
1056
1056
  if (base) return { ...base };
1057
1057
  return void 0;
1058
1058
  }
1059
+ function omitAuthorizationHeader(headers) {
1060
+ if (headers === void 0) return void 0;
1061
+ return Object.fromEntries(
1062
+ Object.entries(headers).filter(([key]) => key.toLowerCase() !== "authorization")
1063
+ );
1064
+ }
1065
+ function mcpHttpHeadersWithBearerToken(server) {
1066
+ const headers = server.httpHeaders ? { ...server.httpHeaders } : void 0;
1067
+ if (server.bearerToken === void 0) {
1068
+ return headers;
1069
+ }
1070
+ const hasAuthorizationHeader = Object.keys(headers ?? {}).some(
1071
+ (key) => key.toLowerCase() === "authorization"
1072
+ );
1073
+ return {
1074
+ ...headers ?? {},
1075
+ ...hasAuthorizationHeader ? {} : { Authorization: `Bearer ${server.bearerToken}` }
1076
+ };
1077
+ }
1059
1078
  function mergeSingleMcpServer(existing, incoming) {
1060
1079
  if (!existing || existing.transport !== incoming.transport) {
1061
1080
  return { ...incoming };
@@ -1080,12 +1099,13 @@ function mergeSingleMcpServer(existing, incoming) {
1080
1099
  const hasIncomingAuth = incoming.bearerToken !== void 0 || incoming.bearerTokenEnvVar !== void 0;
1081
1100
  const bearerToken = hasIncomingAuth ? incoming.bearerToken : baseHttp.bearerToken;
1082
1101
  const bearerTokenEnvVar = hasIncomingAuth ? incoming.bearerTokenEnvVar : baseHttp.bearerTokenEnvVar;
1102
+ const baseHttpHeaders = hasIncomingAuth ? omitAuthorizationHeader(baseHttp.httpHeaders) : baseHttp.httpHeaders;
1083
1103
  const result = {
1084
1104
  transport: "http",
1085
1105
  url: incoming.url,
1086
1106
  bearerToken,
1087
1107
  bearerTokenEnvVar,
1088
- httpHeaders: mergeStringRecord(baseHttp.httpHeaders, incoming.httpHeaders),
1108
+ httpHeaders: mergeStringRecord(baseHttpHeaders, incoming.httpHeaders),
1089
1109
  envHttpHeaders: mergeStringRecord(baseHttp.envHttpHeaders, incoming.envHttpHeaders),
1090
1110
  enabled: incoming.enabled ?? existing.enabled,
1091
1111
  startupTimeoutSec: incoming.startupTimeoutSec ?? existing.startupTimeoutSec,
@@ -1171,13 +1191,11 @@ function mcpServersToConfigOverrides(mcpServers, rmcpClient) {
1171
1191
  if (server.cwd) setOverride(`${prefix}.cwd`, server.cwd);
1172
1192
  } else {
1173
1193
  setOverride(`${prefix}.url`, server.url);
1174
- if (server.bearerToken !== void 0)
1175
- setOverride(`${prefix}.bearer_token`, server.bearerToken);
1176
1194
  if (server.bearerTokenEnvVar !== void 0) {
1177
1195
  setOverride(`${prefix}.bearer_token_env_var`, server.bearerTokenEnvVar);
1178
1196
  }
1179
- if (server.httpHeaders !== void 0)
1180
- setOverride(`${prefix}.http_headers`, server.httpHeaders);
1197
+ const httpHeaders = mcpHttpHeadersWithBearerToken(server);
1198
+ if (httpHeaders !== void 0) setOverride(`${prefix}.http_headers`, httpHeaders);
1181
1199
  if (server.envHttpHeaders !== void 0) {
1182
1200
  setOverride(`${prefix}.env_http_headers`, server.envHttpHeaders);
1183
1201
  }
@@ -1418,12 +1436,11 @@ var ExecLanguageModel = class {
1418
1436
  if (server.cwd) this.addConfigOverride(args, `${prefix}.cwd`, server.cwd);
1419
1437
  } else {
1420
1438
  this.addConfigOverride(args, `${prefix}.url`, server.url);
1421
- if (server.bearerToken !== void 0)
1422
- this.addConfigOverride(args, `${prefix}.bearer_token`, server.bearerToken);
1423
1439
  if (server.bearerTokenEnvVar)
1424
1440
  this.addConfigOverride(args, `${prefix}.bearer_token_env_var`, server.bearerTokenEnvVar);
1425
- if (server.httpHeaders !== void 0)
1426
- this.addConfigOverride(args, `${prefix}.http_headers`, server.httpHeaders);
1441
+ const httpHeaders = mcpHttpHeadersWithBearerToken(server);
1442
+ if (httpHeaders !== void 0)
1443
+ this.addConfigOverride(args, `${prefix}.http_headers`, httpHeaders);
1427
1444
  if (server.envHttpHeaders !== void 0)
1428
1445
  this.addConfigOverride(args, `${prefix}.env_http_headers`, server.envHttpHeaders);
1429
1446
  }
@@ -2612,6 +2629,8 @@ var AppServerStreamEmitter = class {
2612
2629
  this.options = options;
2613
2630
  this.jsonModeLastTextBlockOnly = Boolean(options.jsonModeLastTextBlockOnly);
2614
2631
  }
2632
+ controller;
2633
+ options;
2615
2634
  textId;
2616
2635
  reasoningId;
2617
2636
  jsonModeLastTextBlockOnly;
@@ -2848,6 +2867,7 @@ var TurnStreamController = class {
2848
2867
  constructor(options) {
2849
2868
  this.options = options;
2850
2869
  }
2870
+ options;
2851
2871
  state = "created";
2852
2872
  usage = createEmptyCodexUsage();
2853
2873
  turnId;
@@ -3305,7 +3325,7 @@ async function createLocalMcpServer(options) {
3305
3325
  }
3306
3326
 
3307
3327
  // src/tools/sdk-mcp-server.ts
3308
- var SDK_MCP_SERVER_MARKER = Symbol.for("ai-sdk-provider-codex-cli.sdkMcpServer");
3328
+ var SDK_MCP_SERVER_MARKER = /* @__PURE__ */ Symbol.for("ai-sdk-provider-codex-cli.sdkMcpServer");
3309
3329
  function createSdkMcpServer(options) {
3310
3330
  const { name, cacheKey, tools } = options;
3311
3331
  let server;
@@ -4617,7 +4637,7 @@ var AppServerRpcClient = class extends events.EventEmitter {
4617
4637
  if (this.serverCapabilities?.modelList === false) {
4618
4638
  throw new UnsupportedFeatureError({
4619
4639
  feature: "model/list",
4620
- minCodexVersion: this.settings.minCodexVersion ?? "0.105.0",
4640
+ minCodexVersion: this.settings.minCodexVersion ?? "0.130.0",
4621
4641
  serverVersion: this.serverVersion
4622
4642
  });
4623
4643
  }
@@ -4630,7 +4650,7 @@ var AppServerRpcClient = class extends events.EventEmitter {
4630
4650
  if (error instanceof JsonRpcRequestError && error.code === -32601) {
4631
4651
  throw new UnsupportedFeatureError({
4632
4652
  feature: "model/list",
4633
- minCodexVersion: this.settings.minCodexVersion ?? "0.105.0",
4653
+ minCodexVersion: this.settings.minCodexVersion ?? "0.130.0",
4634
4654
  serverVersion: this.serverVersion
4635
4655
  });
4636
4656
  }
@@ -4787,7 +4807,7 @@ var AppServerRpcClient = class extends events.EventEmitter {
4787
4807
  const message = String(error?.message ?? error);
4788
4808
  if (message.includes("ENOENT") || message.includes("unknown subcommand")) {
4789
4809
  throw new Error(
4790
- "codex app-server requires codex CLI >= 0.105.0. Run 'codex --version' to check."
4810
+ "codex app-server requires codex CLI >= 0.130.0. Run 'codex --version' to check."
4791
4811
  );
4792
4812
  }
4793
4813
  throw createAPICallError({
@@ -4809,7 +4829,7 @@ var AppServerRpcClient = class extends events.EventEmitter {
4809
4829
  return;
4810
4830
  }
4811
4831
  this.serverVersion = detected;
4812
- const minVersion = this.settings.minCodexVersion ?? "0.105.0";
4832
+ const minVersion = this.settings.minCodexVersion ?? "0.130.0";
4813
4833
  const compared = compareSemver(detected, minVersion);
4814
4834
  if (compared === void 0) {
4815
4835
  this.logger.warn(
package/dist/index.d.cts CHANGED
@@ -13,7 +13,7 @@ interface Logger {
13
13
  /**
14
14
  * Known Codex-capable model IDs with string fallback for forward compatibility.
15
15
  */
16
- type CodexModelId = 'gpt-5.3-codex' | 'gpt-5.2-codex' | 'gpt-5.2-codex-max' | 'gpt-5.2-codex-mini' | 'gpt-5.1' | 'gpt-5.2' | (string & {});
16
+ type CodexModelId = 'gpt-5.5' | 'gpt-5.3-codex' | 'gpt-5.2-codex' | 'gpt-5.2-codex-max' | 'gpt-5.2-codex-mini' | 'gpt-5.1' | 'gpt-5.2' | (string & {});
17
17
  type ApprovalMode = 'untrusted' | 'on-failure' | 'on-request' | 'never';
18
18
  type SandboxMode = 'read-only' | 'workspace-write' | 'danger-full-access';
19
19
  type ReasoningEffort = 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh';
@@ -687,7 +687,7 @@ interface CodexAppServerProvider extends ProviderV3 {
687
687
  * @example
688
688
  * ```ts
689
689
  * const provider = createCodexAppServer({
690
- * defaultSettings: { minCodexVersion: '0.105.0-alpha.0' },
690
+ * defaultSettings: { minCodexVersion: '0.130.0' },
691
691
  * });
692
692
  *
693
693
  * try {
package/dist/index.d.ts CHANGED
@@ -13,7 +13,7 @@ interface Logger {
13
13
  /**
14
14
  * Known Codex-capable model IDs with string fallback for forward compatibility.
15
15
  */
16
- type CodexModelId = 'gpt-5.3-codex' | 'gpt-5.2-codex' | 'gpt-5.2-codex-max' | 'gpt-5.2-codex-mini' | 'gpt-5.1' | 'gpt-5.2' | (string & {});
16
+ type CodexModelId = 'gpt-5.5' | 'gpt-5.3-codex' | 'gpt-5.2-codex' | 'gpt-5.2-codex-max' | 'gpt-5.2-codex-mini' | 'gpt-5.1' | 'gpt-5.2' | (string & {});
17
17
  type ApprovalMode = 'untrusted' | 'on-failure' | 'on-request' | 'never';
18
18
  type SandboxMode = 'read-only' | 'workspace-write' | 'danger-full-access';
19
19
  type ReasoningEffort = 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh';
@@ -687,7 +687,7 @@ interface CodexAppServerProvider extends ProviderV3 {
687
687
  * @example
688
688
  * ```ts
689
689
  * const provider = createCodexAppServer({
690
- * defaultSettings: { minCodexVersion: '0.105.0-alpha.0' },
690
+ * defaultSettings: { minCodexVersion: '0.130.0' },
691
691
  * });
692
692
  *
693
693
  * try {
package/dist/index.js CHANGED
@@ -1048,6 +1048,25 @@ function mergeStringRecord(base, override) {
1048
1048
  if (base) return { ...base };
1049
1049
  return void 0;
1050
1050
  }
1051
+ function omitAuthorizationHeader(headers) {
1052
+ if (headers === void 0) return void 0;
1053
+ return Object.fromEntries(
1054
+ Object.entries(headers).filter(([key]) => key.toLowerCase() !== "authorization")
1055
+ );
1056
+ }
1057
+ function mcpHttpHeadersWithBearerToken(server) {
1058
+ const headers = server.httpHeaders ? { ...server.httpHeaders } : void 0;
1059
+ if (server.bearerToken === void 0) {
1060
+ return headers;
1061
+ }
1062
+ const hasAuthorizationHeader = Object.keys(headers ?? {}).some(
1063
+ (key) => key.toLowerCase() === "authorization"
1064
+ );
1065
+ return {
1066
+ ...headers ?? {},
1067
+ ...hasAuthorizationHeader ? {} : { Authorization: `Bearer ${server.bearerToken}` }
1068
+ };
1069
+ }
1051
1070
  function mergeSingleMcpServer(existing, incoming) {
1052
1071
  if (!existing || existing.transport !== incoming.transport) {
1053
1072
  return { ...incoming };
@@ -1072,12 +1091,13 @@ function mergeSingleMcpServer(existing, incoming) {
1072
1091
  const hasIncomingAuth = incoming.bearerToken !== void 0 || incoming.bearerTokenEnvVar !== void 0;
1073
1092
  const bearerToken = hasIncomingAuth ? incoming.bearerToken : baseHttp.bearerToken;
1074
1093
  const bearerTokenEnvVar = hasIncomingAuth ? incoming.bearerTokenEnvVar : baseHttp.bearerTokenEnvVar;
1094
+ const baseHttpHeaders = hasIncomingAuth ? omitAuthorizationHeader(baseHttp.httpHeaders) : baseHttp.httpHeaders;
1075
1095
  const result = {
1076
1096
  transport: "http",
1077
1097
  url: incoming.url,
1078
1098
  bearerToken,
1079
1099
  bearerTokenEnvVar,
1080
- httpHeaders: mergeStringRecord(baseHttp.httpHeaders, incoming.httpHeaders),
1100
+ httpHeaders: mergeStringRecord(baseHttpHeaders, incoming.httpHeaders),
1081
1101
  envHttpHeaders: mergeStringRecord(baseHttp.envHttpHeaders, incoming.envHttpHeaders),
1082
1102
  enabled: incoming.enabled ?? existing.enabled,
1083
1103
  startupTimeoutSec: incoming.startupTimeoutSec ?? existing.startupTimeoutSec,
@@ -1163,13 +1183,11 @@ function mcpServersToConfigOverrides(mcpServers, rmcpClient) {
1163
1183
  if (server.cwd) setOverride(`${prefix}.cwd`, server.cwd);
1164
1184
  } else {
1165
1185
  setOverride(`${prefix}.url`, server.url);
1166
- if (server.bearerToken !== void 0)
1167
- setOverride(`${prefix}.bearer_token`, server.bearerToken);
1168
1186
  if (server.bearerTokenEnvVar !== void 0) {
1169
1187
  setOverride(`${prefix}.bearer_token_env_var`, server.bearerTokenEnvVar);
1170
1188
  }
1171
- if (server.httpHeaders !== void 0)
1172
- setOverride(`${prefix}.http_headers`, server.httpHeaders);
1189
+ const httpHeaders = mcpHttpHeadersWithBearerToken(server);
1190
+ if (httpHeaders !== void 0) setOverride(`${prefix}.http_headers`, httpHeaders);
1173
1191
  if (server.envHttpHeaders !== void 0) {
1174
1192
  setOverride(`${prefix}.env_http_headers`, server.envHttpHeaders);
1175
1193
  }
@@ -1410,12 +1428,11 @@ var ExecLanguageModel = class {
1410
1428
  if (server.cwd) this.addConfigOverride(args, `${prefix}.cwd`, server.cwd);
1411
1429
  } else {
1412
1430
  this.addConfigOverride(args, `${prefix}.url`, server.url);
1413
- if (server.bearerToken !== void 0)
1414
- this.addConfigOverride(args, `${prefix}.bearer_token`, server.bearerToken);
1415
1431
  if (server.bearerTokenEnvVar)
1416
1432
  this.addConfigOverride(args, `${prefix}.bearer_token_env_var`, server.bearerTokenEnvVar);
1417
- if (server.httpHeaders !== void 0)
1418
- this.addConfigOverride(args, `${prefix}.http_headers`, server.httpHeaders);
1433
+ const httpHeaders = mcpHttpHeadersWithBearerToken(server);
1434
+ if (httpHeaders !== void 0)
1435
+ this.addConfigOverride(args, `${prefix}.http_headers`, httpHeaders);
1419
1436
  if (server.envHttpHeaders !== void 0)
1420
1437
  this.addConfigOverride(args, `${prefix}.env_http_headers`, server.envHttpHeaders);
1421
1438
  }
@@ -2604,6 +2621,8 @@ var AppServerStreamEmitter = class {
2604
2621
  this.options = options;
2605
2622
  this.jsonModeLastTextBlockOnly = Boolean(options.jsonModeLastTextBlockOnly);
2606
2623
  }
2624
+ controller;
2625
+ options;
2607
2626
  textId;
2608
2627
  reasoningId;
2609
2628
  jsonModeLastTextBlockOnly;
@@ -2840,6 +2859,7 @@ var TurnStreamController = class {
2840
2859
  constructor(options) {
2841
2860
  this.options = options;
2842
2861
  }
2862
+ options;
2843
2863
  state = "created";
2844
2864
  usage = createEmptyCodexUsage();
2845
2865
  turnId;
@@ -3297,7 +3317,7 @@ async function createLocalMcpServer(options) {
3297
3317
  }
3298
3318
 
3299
3319
  // src/tools/sdk-mcp-server.ts
3300
- var SDK_MCP_SERVER_MARKER = Symbol.for("ai-sdk-provider-codex-cli.sdkMcpServer");
3320
+ var SDK_MCP_SERVER_MARKER = /* @__PURE__ */ Symbol.for("ai-sdk-provider-codex-cli.sdkMcpServer");
3301
3321
  function createSdkMcpServer(options) {
3302
3322
  const { name, cacheKey, tools } = options;
3303
3323
  let server;
@@ -4609,7 +4629,7 @@ var AppServerRpcClient = class extends EventEmitter {
4609
4629
  if (this.serverCapabilities?.modelList === false) {
4610
4630
  throw new UnsupportedFeatureError({
4611
4631
  feature: "model/list",
4612
- minCodexVersion: this.settings.minCodexVersion ?? "0.105.0",
4632
+ minCodexVersion: this.settings.minCodexVersion ?? "0.130.0",
4613
4633
  serverVersion: this.serverVersion
4614
4634
  });
4615
4635
  }
@@ -4622,7 +4642,7 @@ var AppServerRpcClient = class extends EventEmitter {
4622
4642
  if (error instanceof JsonRpcRequestError && error.code === -32601) {
4623
4643
  throw new UnsupportedFeatureError({
4624
4644
  feature: "model/list",
4625
- minCodexVersion: this.settings.minCodexVersion ?? "0.105.0",
4645
+ minCodexVersion: this.settings.minCodexVersion ?? "0.130.0",
4626
4646
  serverVersion: this.serverVersion
4627
4647
  });
4628
4648
  }
@@ -4779,7 +4799,7 @@ var AppServerRpcClient = class extends EventEmitter {
4779
4799
  const message = String(error?.message ?? error);
4780
4800
  if (message.includes("ENOENT") || message.includes("unknown subcommand")) {
4781
4801
  throw new Error(
4782
- "codex app-server requires codex CLI >= 0.105.0. Run 'codex --version' to check."
4802
+ "codex app-server requires codex CLI >= 0.130.0. Run 'codex --version' to check."
4783
4803
  );
4784
4804
  }
4785
4805
  throw createAPICallError({
@@ -4801,7 +4821,7 @@ var AppServerRpcClient = class extends EventEmitter {
4801
4821
  return;
4802
4822
  }
4803
4823
  this.serverVersion = detected;
4804
- const minVersion = this.settings.minCodexVersion ?? "0.105.0";
4824
+ const minVersion = this.settings.minCodexVersion ?? "0.130.0";
4805
4825
  const compared = compareSemver(detected, minVersion);
4806
4826
  if (compared === void 0) {
4807
4827
  this.logger.warn(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-sdk-provider-codex-cli",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "AI SDK v6 provider for OpenAI Codex CLI (use ChatGPT Plus/Pro subscription)",
5
5
  "keywords": [
6
6
  "ai-sdk",
@@ -10,7 +10,7 @@
10
10
  "language-model",
11
11
  "gpt-5",
12
12
  "gpt-5.1",
13
- "gpt-5.3-codex",
13
+ "gpt-5.5",
14
14
  "gpt-5.2-codex-max",
15
15
  "provider"
16
16
  ],
@@ -67,16 +67,16 @@
67
67
  "jsonc-parser": "^3.3.1"
68
68
  },
69
69
  "optionalDependencies": {
70
- "@openai/codex": "^0.105.0"
70
+ "@openai/codex": "^0.130.0"
71
71
  },
72
72
  "devDependencies": {
73
73
  "@eslint/js": "^9.14.0",
74
- "@types/node": "20.19.6",
74
+ "@types/node": "20.19.41",
75
75
  "@vitest/coverage-v8": "^3.2.4",
76
76
  "ai": "^6.0.3",
77
77
  "eslint": "^9.14.0",
78
78
  "prettier": "^3.3.3",
79
- "tsup": "8.5.0",
79
+ "tsup": "8.5.1",
80
80
  "typescript": "5.6.3",
81
81
  "vitest": "^3.2.4",
82
82
  "typescript-eslint": "^8.6.0",