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.
- package/README.md +4 -3
- package/dist/lib/auto-update-checker.d.ts.map +1 -1
- package/dist/lib/auto-update-checker.js +6 -1
- package/dist/lib/auto-update-checker.js.map +1 -1
- package/dist/lib/request/fetch-helpers.d.ts.map +1 -1
- package/dist/lib/request/fetch-helpers.js +13 -5
- package/dist/lib/request/fetch-helpers.js.map +1 -1
- package/dist/lib/runtime/config-toml.d.ts +2 -0
- package/dist/lib/runtime/config-toml.d.ts.map +1 -1
- package/dist/lib/runtime/config-toml.js +57 -4
- package/dist/lib/runtime/config-toml.js.map +1 -1
- package/dist/lib/runtime-rotation-proxy.d.ts.map +1 -1
- package/dist/lib/runtime-rotation-proxy.js +199 -8
- package/dist/lib/runtime-rotation-proxy.js.map +1 -1
- package/dist/lib/usage/ledger.d.ts.map +1 -1
- package/dist/lib/usage/ledger.js +1 -0
- package/dist/lib/usage/ledger.js.map +1 -1
- package/dist/lib/usage/redaction.d.ts.map +1 -1
- package/dist/lib/usage/redaction.js +1 -0
- package/dist/lib/usage/redaction.js.map +1 -1
- package/dist/lib/usage/types.d.ts +1 -1
- package/dist/lib/usage/types.d.ts.map +1 -1
- package/package.json +4 -4
- package/scripts/codex-app-launcher.js +1 -1
- package/scripts/codex-multi-auth.js +5 -1
- package/scripts/codex-routing.js +8 -0
- package/scripts/codex.js +50 -4
- package/scripts/test-model-matrix.js +97 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../../lib/usage/redaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAUrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAoB;IAChD,eAAe;IACf,aAAa;IACb,cAAc;IACd,KAAK;IACL,SAAS;CACT,CAAC,CAAC;AACH,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAuB;IACtD,WAAW;IACX,QAAQ;IACR,cAAc;IACd,YAAY;IACZ,SAAS;CACT,CAAC,CAAC;AACH,MAAM,cAAc,GAAG,IAAI,GAAG,CAAqB;IAClD,SAAS;IACT,SAAS;IACT,SAAS;IACT,WAAW;CACX,CAAC,CAAC;AAEH,SAAS,qBAAqB,CAAC,KAAc;IAC5C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3E,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAc;IAClD,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5C,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IAC1C,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO,UAAU,IAAI,GAAG,IAAI,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AACnE,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IAC1C,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,aAAa,CAAC,GAAG,CAAC,KAA0B,CAAC;QAChF,CAAC,CAAE,KAA2B;QAC9B,CAAC,CAAC,SAAS,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACzC,OAAO,OAAO,KAAK,KAAK,QAAQ;QAC/B,gBAAgB,CAAC,GAAG,CAAC,KAA6B,CAAC;QACnD,CAAC,CAAE,KAA8B;QACjC,CAAC,CAAC,SAAS,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACvC,IACC,OAAO,KAAK,KAAK,QAAQ;QACzB,cAAc,CAAC,GAAG,CAAC,KAA2B,CAAC,EAC9C,CAAC;QACF,OAAO,KAA2B,CAAC;IACpC,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAChD,OAAO,UAAU,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAIrC;IACA,MAAM,SAAS,GAAG,uBAAuB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,IAAI,IAAI,CAAC;IAC1E,MAAM,KAAK,GACV,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ;QACtC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC;QACpC,KAAK,CAAC,YAAY,IAAI,CAAC;QACtB,CAAC,CAAC,KAAK,CAAC,YAAY;QACpB,CAAC,CAAC,IAAI,CAAC;IACT,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACb,CAAC;IAED,OAAO;QACN,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;QACnE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;QACzD,KAAK,EAAE,KAAK,IAAI,SAAS;KACzB,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAA6B;IACrD,MAAM,WAAW,GAAG,2BAA2B,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,2BAA2B,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACrE,MAAM,iBAAiB,GAAG,2BAA2B,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC/E,MAAM,eAAe,GAAG,2BAA2B,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC3E,MAAM,aAAa,GAAG,qBAAqB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC/D,MAAM,aAAa,GAAG,WAAW,GAAG,YAAY,GAAG,eAAe,CAAC;IAEnE,OAAO;QACN,WAAW;QACX,YAAY;QACZ,iBAAiB;QACjB,eAAe;QACf,WAAW,EACV,aAAa,KAAK,IAAI;YACrB,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;KAC1C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CACtC,KAA6B;IAE7B,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAE1D,OAAO;QACN,OAAO,EAAE,CAAC;QACV,EAAE,EAAE,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,UAAU,EAAE;QACrD,SAAS,EACR,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE;QACrD,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC;QACrC,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC;QAC9C,OAAO,EAAE,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC;QACxC,KAAK;QACL,UAAU,EAAE,uBAAuB,CAAC,KAAK,CAAC,UAAU,CAAC;QACrD,OAAO,EAAE,qBAAqB,CAAC,KAAK,CAAC;QACrC,SAAS,EAAE,uBAAuB,CAAC,KAAK,CAAC,SAAS,CAAC;QACnD,UAAU,EAAE,mBAAmB,CAAC,KAAK,CAAC,UAAU,CAAC;QACjD,SAAS,EAAE,uBAAuB,CAAC,KAAK,CAAC,SAAS,CAAC;QACnD,UAAU,EAAE,mBAAmB,CAAC,KAAK,CAAC,UAAU,CAAC;QACjD,MAAM;QACN,OAAO,EACN,YAAY,KAAK,IAAI;YACpB,CAAC,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC;YACrC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC;KAC7B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAmB;IACrD,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACnC,CAAC"}
|
|
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
|
+
"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
|
|
|
@@ -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] ?? "";
|
package/scripts/codex-routing.js
CHANGED
|
@@ -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 =
|
|
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(
|
|
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
|
|
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
|
-
|
|
177
|
-
|
|
178
|
-
|
|
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
|
|
183
|
-
|
|
184
|
-
|
|
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(
|
|
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 =
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 })),
|