codex-multi-auth 2.1.3 → 2.1.4

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.
@@ -10,6 +10,7 @@ const VALID_SOURCES = new Set([
10
10
  const VALID_OPERATIONS = new Set([
11
11
  "responses",
12
12
  "models",
13
+ "thread-goal",
13
14
  "auth-refresh",
14
15
  "diagnostic",
15
16
  "unknown",
@@ -1 +1 @@
1
- {"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../../lib/usage/redaction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../../lib/usage/redaction.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  export type UsageLedgerSource = "runtime-proxy" | "plugin-host" | "local-bridge" | "cli" | "unknown";
2
- export type UsageLedgerOperation = "responses" | "models" | "auth-refresh" | "diagnostic" | "unknown";
2
+ export type UsageLedgerOperation = "responses" | "models" | "thread-goal" | "auth-refresh" | "diagnostic" | "unknown";
3
3
  export type UsageLedgerOutcome = "success" | "failure" | "blocked" | "cancelled";
4
4
  export interface UsageTokenCounts {
5
5
  inputTokens: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../lib/usage/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../lib/usage/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codex-multi-auth",
3
- "version": "2.1.3",
3
+ "version": "2.1.4",
4
4
  "description": "Multi-account OAuth manager and codex auth wrapper for the official @openai/codex CLI, with switching, health checks, and recovery tools",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -79,7 +79,7 @@
79
79
  "lint:fix": "npm run lint:ts:fix && npm run lint:scripts:fix",
80
80
  "lint:ts:fix": "eslint . --ext .ts --fix",
81
81
  "lint:scripts:fix": "eslint scripts --ext .js,.mjs --fix",
82
- "test": "vitest run",
82
+ "test": "vitest run --maxWorkers=1",
83
83
  "test:watch": "vitest",
84
84
  "test:ui": "vitest --ui",
85
85
  "test:model-matrix": "node scripts/test-model-matrix.js",
@@ -93,8 +93,8 @@
93
93
  "bench:edit-formats:render": "node scripts/benchmark-render-dashboard.mjs",
94
94
  "bench:runtime-path": "npm run build && node scripts/benchmark-runtime-path.mjs",
95
95
  "bench:runtime-path:quick": "node scripts/benchmark-runtime-path.mjs",
96
- "test:coverage": "vitest run --coverage",
97
- "coverage": "npm run build && vitest run --coverage",
96
+ "test:coverage": "vitest run --coverage --maxWorkers=1",
97
+ "coverage": "npm run build && vitest run --coverage --maxWorkers=1",
98
98
  "audit:prod": "npm audit --omit=dev --audit-level=high",
99
99
  "audit:all": "npm audit --audit-level=high",
100
100
  "audit:dev:allowlist": "node scripts/audit-dev-allowlist.js",
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node
2
2
 
3
3
  // @ts-check
4
4
 
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node
2
2
 
3
3
  // @ts-check
4
4
 
@@ -21,6 +21,10 @@ function resolveCliVersion() {
21
21
  return "";
22
22
  }
23
23
 
24
+ /**
25
+ * @param {string[]} args
26
+ * @returns {string[]}
27
+ */
24
28
  function normalizeStandaloneArgs(args) {
25
29
  if (args[0] === "auth") return args;
26
30
  const firstArg = args[0] ?? "";
@@ -26,6 +26,10 @@ const AUTH_SUBCOMMANDS = new Set([
26
26
  "debug",
27
27
  ]);
28
28
 
29
+ /**
30
+ * @param {string[]} args
31
+ * @returns {string[]}
32
+ */
29
33
  export function normalizeAuthAlias(args) {
30
34
  if (args.length >= 2 && args[0] === "multi" && args[1] === "auth") {
31
35
  return ["auth", ...args.slice(2)];
@@ -36,6 +40,10 @@ export function normalizeAuthAlias(args) {
36
40
  return args;
37
41
  }
38
42
 
43
+ /**
44
+ * @param {string[]} args
45
+ * @returns {boolean}
46
+ */
39
47
  export function shouldHandleMultiAuthAuth(args) {
40
48
  if (args[0] !== "auth") return false;
41
49
  if (args.length === 1) return true;
package/scripts/codex.js CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node
2
2
 
3
3
  import { spawn } from "node:child_process";
4
4
  import { createHash, randomBytes } from "node:crypto";
@@ -89,6 +89,7 @@ const shadowHomeCleanupRetryMarkerDir =
89
89
  (process.env.CODEX_MULTI_AUTH_TEST_SHADOW_RETRY_MARKER_DIR ?? "").trim();
90
90
  let warnedInvalidRuntimeRotationProxyEnv = false;
91
91
  let warnedPendingAccountReadIdOverflow = false;
92
+ let warnedShadowHomeSqliteLinkFailure = false;
92
93
 
93
94
  async function loadRuntimeConstants() {
94
95
  const fallback = {
@@ -1902,6 +1903,25 @@ function mirrorFileIntoShadowHome(sourcePath, destinationPath, tightenFile) {
1902
1903
  tightenFile(destinationPath);
1903
1904
  }
1904
1905
 
1906
+ function shouldMaterializeFileIntoShadowHome(name) {
1907
+ return /\.sqlite(?:-(?:shm|wal))?$/i.test(name);
1908
+ }
1909
+
1910
+ function materializeFileIntoShadowHome(sourcePath, destinationPath) {
1911
+ try {
1912
+ linkSync(sourcePath, destinationPath);
1913
+ return true;
1914
+ } catch {
1915
+ if (!warnedShadowHomeSqliteLinkFailure) {
1916
+ warnedShadowHomeSqliteLinkFailure = true;
1917
+ console.error(
1918
+ "codex-multi-auth: skipped SQLite shadow-home materialization because hard-linking failed; refusing to copy active SQLite state.",
1919
+ );
1920
+ }
1921
+ }
1922
+ return false;
1923
+ }
1924
+
1905
1925
  function collectShadowHomeSyncFileNames(shadowCodexHome, syncFileNames) {
1906
1926
  try {
1907
1927
  for (const entry of readdirSync(shadowCodexHome, { withFileTypes: true })) {
@@ -2075,6 +2095,7 @@ function createShadowHomeMirror(
2075
2095
  continue;
2076
2096
  }
2077
2097
  const isKnownStateFile = SHADOW_HOME_STATE_FILE_SET.has(name);
2098
+ const shouldMaterializeFile = shouldMaterializeFileIntoShadowHome(name);
2078
2099
  const sourcePath = join(originalCodexHome, name);
2079
2100
  const destinationPath = join(shadowCodexHome, name);
2080
2101
  if (existsSync(destinationPath)) {
@@ -2103,6 +2124,8 @@ function createShadowHomeMirror(
2103
2124
  if (isKnownStateFile) {
2104
2125
  copyFileSync(sourcePath, destinationPath);
2105
2126
  tightenFile(destinationPath);
2127
+ } else if (shouldMaterializeFile) {
2128
+ materializeFileIntoShadowHome(sourcePath, destinationPath);
2106
2129
  } else {
2107
2130
  mirrorFileIntoShadowHome(sourcePath, destinationPath, tightenFile);
2108
2131
  }
@@ -2266,6 +2289,16 @@ function resolveRuntimeRotationProxyOriginalCodexHome(baseEnv) {
2266
2289
  return override || resolveCodexHomeDir(baseEnv);
2267
2290
  }
2268
2291
 
2292
+ function createRuntimeRotationShadowHome(originalCodexHome) {
2293
+ const shadowRoot = join(
2294
+ originalCodexHome,
2295
+ "multi-auth",
2296
+ "runtime-shadow-homes",
2297
+ );
2298
+ mkdirSync(shadowRoot, { recursive: true });
2299
+ return mkdtempSync(join(shadowRoot, "codex-multi-auth-runtime-home-"));
2300
+ }
2301
+
2269
2302
  function createRuntimeRotationProxyCodexHome(
2270
2303
  baseEnv,
2271
2304
  proxyBaseUrl,
@@ -2273,7 +2306,7 @@ function createRuntimeRotationProxyCodexHome(
2273
2306
  configTomlModule,
2274
2307
  ) {
2275
2308
  const originalCodexHome = resolveRuntimeRotationProxyOriginalCodexHome(baseEnv);
2276
- const shadowCodexHome = mkdtempSync(join(tmpdir(), "codex-multi-auth-runtime-home-"));
2309
+ const shadowCodexHome = createRuntimeRotationShadowHome(originalCodexHome);
2277
2310
  let syncShadowHomeStateBack = () => {};
2278
2311
  const cleanup = () => {
2279
2312
  try {
@@ -2841,7 +2874,11 @@ function startRuntimeRotationAppHelper(baseContext) {
2841
2874
  });
2842
2875
  }
2843
2876
 
2844
- async function createRuntimeRotationAppHelperContext(baseContext, configTomlModule) {
2877
+ async function createRuntimeRotationAppHelperContext(
2878
+ baseContext,
2879
+ configTomlModule,
2880
+ options = {},
2881
+ ) {
2845
2882
  const startedAt = Date.now();
2846
2883
  const { helper, message } = await startRuntimeRotationAppHelper(baseContext);
2847
2884
  const helperEnv = message.env ?? {};
@@ -2849,7 +2886,7 @@ async function createRuntimeRotationAppHelperContext(baseContext, configTomlModu
2849
2886
 
2850
2887
  const cleanup = async ({ exitCode } = {}) => {
2851
2888
  const livedMs = Date.now() - startedAt;
2852
- if (exitCode === 0 && livedMs < detachGraceMs) {
2889
+ if (exitCode === 0 && (options.detachOnExit === true || livedMs < detachGraceMs)) {
2853
2890
  helper.stdout?.destroy();
2854
2891
  helper.stderr?.destroy();
2855
2892
  helper.unref();
@@ -2898,6 +2935,11 @@ async function createRuntimeRotationProxyContextIfEnabled(
2898
2935
  if (isCodexAppCommand(rawArgs)) {
2899
2936
  return createRuntimeRotationAppHelperContext(baseContext, configTomlModule);
2900
2937
  }
2938
+ if (isCodexInteractiveTuiCommand(rawArgs)) {
2939
+ return createRuntimeRotationAppHelperContext(baseContext, configTomlModule, {
2940
+ detachOnExit: true,
2941
+ });
2942
+ }
2901
2943
 
2902
2944
  const proxyModule = await loadRuntimeRotationProxyModule();
2903
2945
  if (!proxyModule) {
@@ -3092,6 +3134,10 @@ function isCodexAppServerCommand(rawArgs) {
3092
3134
  return findForwardedCommand(rawArgs)?.command === "app-server";
3093
3135
  }
3094
3136
 
3137
+ function isCodexInteractiveTuiCommand(rawArgs) {
3138
+ return findForwardedCommand(rawArgs) === null;
3139
+ }
3140
+
3095
3141
  function shouldUseRuntimeRoutingForForwardedArgs(rawArgs) {
3096
3142
  if (!Array.isArray(rawArgs) || rawArgs.length === 0) {
3097
3143
  return true;
@@ -110,6 +110,7 @@ function printUsage() {
110
110
  " --plugin=dist|package Load plugin from local dist URI or package name (default: dist)",
111
111
  " --max-cases=N Hard cap number of cases per scenario",
112
112
  " --report-json=PATH Write JSON report to PATH (relative to repo root)",
113
+ " --strict-capabilities Fail unsupported account/model capabilities instead of skipping them",
113
114
  " --no-restore Keep generated local config files after run",
114
115
  " -h, --help Show help",
115
116
  ].join("\n"),
@@ -148,6 +149,15 @@ function runQuiet(command, commandArgs) {
148
149
  }
149
150
  }
150
151
 
152
+ function runQuietWindowsTaskkill(pid) {
153
+ runQuiet("cmd.exe", [
154
+ "/d",
155
+ "/s",
156
+ "/c",
157
+ `taskkill /F /T /PID ${pid}`,
158
+ ]);
159
+ }
160
+
151
161
  export function registerSpawnedCodex(pid) {
152
162
  if (!Number.isInteger(pid) || pid <= 0) return;
153
163
  spawnedCodexPids.add(pid);
@@ -171,18 +181,67 @@ export function resolveMatrixTimeoutMs(smoke = false) {
171
181
  return parsedTimeout;
172
182
  }
173
183
 
174
- function hasCompletedSuccessfully(output, token) {
184
+ function parseNdjsonEvents(output) {
185
+ const events = [];
186
+ for (const line of output.split(/\r?\n/)) {
187
+ const trimmed = line.trim();
188
+ if (!trimmed.startsWith("{")) {
189
+ continue;
190
+ }
191
+ try {
192
+ events.push(JSON.parse(trimmed));
193
+ } catch {
194
+ // Ignore wrapper noise and partial lines.
195
+ }
196
+ }
197
+ return events;
198
+ }
199
+
200
+ function findLastIndex(items, predicate) {
201
+ for (let index = items.length - 1; index >= 0; index -= 1) {
202
+ if (predicate(items[index], index)) {
203
+ return index;
204
+ }
205
+ }
206
+ return -1;
207
+ }
208
+
209
+ function hasTerminalFailure(events) {
210
+ const lastCompletedIndex = findLastIndex(
211
+ events,
212
+ (event) =>
213
+ event?.type === "turn.completed" || event?.type === "response.completed",
214
+ );
175
215
  return (
176
- output.includes(token) ||
177
- output.includes('"type":"turn.completed"') ||
178
- output.includes('"type":"response.completed"')
216
+ findLastIndex(
217
+ events,
218
+ (event, index) =>
219
+ index > lastCompletedIndex &&
220
+ (event?.type === "error" ||
221
+ event?.type === "turn.failed" ||
222
+ event?.type === "response.failed" ||
223
+ event?.type === "response.error" ||
224
+ event?.type === "response.incomplete"),
225
+ ) >= 0
179
226
  );
180
227
  }
181
228
 
182
- function getSmokeSkipReason(exitCode, output) {
183
- if (exitCode === 124) {
184
- return "timed-out";
229
+ function hasCompletedSuccessfully(output, token) {
230
+ const events = parseNdjsonEvents(output);
231
+ if (events.length > 0) {
232
+ if (hasTerminalFailure(events)) {
233
+ return false;
234
+ }
235
+ return events.some(
236
+ (event) =>
237
+ event?.type === "turn.completed" ||
238
+ event?.type === "response.completed",
239
+ );
185
240
  }
241
+ return output.includes(token);
242
+ }
243
+
244
+ function getCapabilitySkipReason(exitCode, output, smoke) {
186
245
  if (/not supported when using codex with a chatgpt account/i.test(output)) {
187
246
  return "unsupported-model";
188
247
  }
@@ -192,14 +251,26 @@ function getSmokeSkipReason(exitCode, output) {
192
251
  ) {
193
252
  return "unsupported-reasoning";
194
253
  }
254
+ if (smoke && exitCode === 124) {
255
+ return "timed-out";
256
+ }
195
257
  return null;
196
258
  }
197
259
 
198
- function finalizeModelCaseResult(caseInfo, exitCode, output, token, smoke) {
260
+ function finalizeModelCaseResult(
261
+ caseInfo,
262
+ exitCode,
263
+ output,
264
+ token,
265
+ { smoke, strictCapabilities } = {},
266
+ ) {
199
267
  const hasToken = output.includes(token);
200
268
  const completed = hasCompletedSuccessfully(output, token);
201
269
  const ok = exitCode === 0 && completed;
202
- const skipReason = !ok && smoke ? getSmokeSkipReason(exitCode, output) : null;
270
+ const skipReason =
271
+ !ok && strictCapabilities !== true
272
+ ? getCapabilitySkipReason(exitCode, output, smoke === true)
273
+ : null;
203
274
 
204
275
  return {
205
276
  ...caseInfo,
@@ -219,8 +290,12 @@ export function __finalizeModelCaseResultForTests(
219
290
  output,
220
291
  token,
221
292
  smoke = false,
293
+ strictCapabilities = false,
222
294
  ) {
223
- return finalizeModelCaseResult(caseInfo, exitCode, output, token, smoke);
295
+ return finalizeModelCaseResult(caseInfo, exitCode, output, token, {
296
+ smoke,
297
+ strictCapabilities,
298
+ });
224
299
  }
225
300
 
226
301
  function stopCodexServersInternal() {
@@ -228,7 +303,7 @@ function stopCodexServersInternal() {
228
303
  spawnedCodexPids.clear();
229
304
  for (const pid of tracked) {
230
305
  if (process.platform === "win32") {
231
- runQuiet("taskkill", ["/F", "/T", "/PID", String(pid)]);
306
+ runQuietWindowsTaskkill(pid);
232
307
  continue;
233
308
  }
234
309
  runQuiet("kill", ["-9", String(pid)]);
@@ -352,7 +427,10 @@ function executeModelCase(caseInfo, index) {
352
427
  124,
353
428
  `Timed out after ${timeoutMs}ms`,
354
429
  token,
355
- caseInfo.smoke === true,
430
+ {
431
+ smoke: caseInfo.smoke === true,
432
+ strictCapabilities: caseInfo.strictCapabilities === true,
433
+ },
356
434
  );
357
435
  }
358
436
 
@@ -364,7 +442,10 @@ function executeModelCase(caseInfo, index) {
364
442
  exitCode,
365
443
  combinedOutput,
366
444
  token,
367
- caseInfo.smoke === true,
445
+ {
446
+ smoke: caseInfo.smoke === true,
447
+ strictCapabilities: caseInfo.strictCapabilities === true,
448
+ },
368
449
  );
369
450
  }
370
451
 
@@ -442,6 +523,7 @@ async function runScenario(scenario, options) {
442
523
  (caseInfo) => ({
443
524
  ...caseInfo,
444
525
  smoke: options.smoke,
526
+ strictCapabilities: options.strictCapabilities,
445
527
  }),
446
528
  );
447
529
  console.log(`\n=== ${scenario.toUpperCase()} (${cases.length} cases) ===`);
@@ -483,6 +565,7 @@ async function main() {
483
565
  const scenarioValue =
484
566
  parseArgValue(args, "--scenario") ?? (smoke ? "modern" : "all");
485
567
  const pluginMode = parseArgValue(args, "--plugin") ?? "dist";
568
+ const strictCapabilities = args.includes("--strict-capabilities");
486
569
  const noRestore = args.includes("--no-restore");
487
570
  const maxCasesRaw = parseArgValue(args, "--max-cases");
488
571
  const maxCases = maxCasesRaw ? Number.parseInt(maxCasesRaw, 10) : 0;
@@ -530,6 +613,7 @@ async function main() {
530
613
  smoke,
531
614
  maxCases,
532
615
  pluginRef,
616
+ strictCapabilities,
533
617
  });
534
618
  allResults.push(
535
619
  ...scenarioResults.map((item) => ({ ...item, scenario })),