codex-multi-auth 1.3.2 → 2.0.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 +39 -26
- package/config/README.md +3 -3
- package/dist/lib/codex-manager/commands/rotation.d.ts +22 -0
- package/dist/lib/codex-manager/commands/rotation.d.ts.map +1 -0
- package/dist/lib/codex-manager/commands/rotation.js +287 -0
- package/dist/lib/codex-manager/commands/rotation.js.map +1 -0
- package/dist/lib/codex-manager/commands/status.d.ts.map +1 -1
- package/dist/lib/codex-manager/commands/status.js +38 -7
- package/dist/lib/codex-manager/commands/status.js.map +1 -1
- package/dist/lib/codex-manager/help.d.ts.map +1 -1
- package/dist/lib/codex-manager/help.js +1 -0
- package/dist/lib/codex-manager/help.js.map +1 -1
- package/dist/lib/codex-manager.d.ts.map +1 -1
- package/dist/lib/codex-manager.js +59 -1
- package/dist/lib/codex-manager.js.map +1 -1
- package/dist/lib/config.d.ts +1 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +9 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/constants.d.ts +2 -0
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +2 -0
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/fs-retry.d.ts +7 -0
- package/dist/lib/fs-retry.d.ts.map +1 -0
- package/dist/lib/fs-retry.js +35 -0
- package/dist/lib/fs-retry.js.map +1 -0
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +1 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +1 -0
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/runtime/app-bind.d.ts +74 -0
- package/dist/lib/runtime/app-bind.d.ts.map +1 -0
- package/dist/lib/runtime/app-bind.js +620 -0
- package/dist/lib/runtime/app-bind.js.map +1 -0
- package/dist/lib/runtime/config-toml.d.ts +10 -0
- package/dist/lib/runtime/config-toml.d.ts.map +1 -0
- package/dist/lib/runtime/config-toml.js +128 -0
- package/dist/lib/runtime/config-toml.js.map +1 -0
- package/dist/lib/runtime/runtime-observability.d.ts +5 -0
- package/dist/lib/runtime/runtime-observability.d.ts.map +1 -1
- package/dist/lib/runtime/runtime-observability.js +5 -0
- package/dist/lib/runtime/runtime-observability.js.map +1 -1
- package/dist/lib/runtime-constants.d.ts +3 -0
- package/dist/lib/runtime-constants.d.ts.map +1 -0
- package/dist/lib/runtime-constants.js +3 -0
- package/dist/lib/runtime-constants.js.map +1 -0
- package/dist/lib/runtime-rotation-proxy.d.ts +36 -0
- package/dist/lib/runtime-rotation-proxy.d.ts.map +1 -0
- package/dist/lib/runtime-rotation-proxy.js +828 -0
- package/dist/lib/runtime-rotation-proxy.js.map +1 -0
- package/dist/lib/schemas.d.ts +1 -0
- package/dist/lib/schemas.d.ts.map +1 -1
- package/dist/lib/schemas.js +1 -0
- package/dist/lib/schemas.js.map +1 -1
- package/package.json +13 -11
- package/scripts/bench-format/codex-host.mjs +142 -73
- package/scripts/bench-format/models.mjs +17 -16
- package/scripts/benchmark-edit-formats.mjs +8 -6
- package/scripts/check-pack-budget-lib.js +49 -6
- package/scripts/codex-app-launcher.js +653 -0
- package/scripts/codex-app-router.js +322 -0
- package/scripts/codex-multi-auth.js +3 -1
- package/scripts/codex-routing.js +6 -0
- package/scripts/codex.js +3390 -1570
- package/scripts/postinstall.js +237 -0
|
@@ -0,0 +1,620 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { createHash, randomBytes } from "node:crypto";
|
|
3
|
+
import { closeSync, existsSync, mkdirSync, openSync } from "node:fs";
|
|
4
|
+
import { mkdir, open, readFile, rename, unlink } from "node:fs/promises";
|
|
5
|
+
import { homedir } from "node:os";
|
|
6
|
+
import { basename, dirname, join } from "node:path";
|
|
7
|
+
import process from "node:process";
|
|
8
|
+
import { fileURLToPath } from "node:url";
|
|
9
|
+
import { withFileOperationRetry } from "../fs-retry.js";
|
|
10
|
+
import { getCodexMultiAuthDir } from "../runtime-paths.js";
|
|
11
|
+
import { restoreConfigTomlFromRuntimeRotationProvider, rewriteConfigTomlForRuntimeRotationProvider, } from "./config-toml.js";
|
|
12
|
+
const APP_BIND_DIR_NAME = "app-bind";
|
|
13
|
+
const APP_BIND_STATE_FILE = "runtime-rotation-app-bind.json";
|
|
14
|
+
const APP_BIND_BACKUP_FILE = "codex-config-backup.json";
|
|
15
|
+
const APP_BIND_STATUS_FILE = "runtime-rotation-app-bind-status.json";
|
|
16
|
+
const WINDOWS_STARTUP_FILE = "Codex Multi Auth Runtime Router.cmd";
|
|
17
|
+
const MACOS_LAUNCH_AGENT_ID = "com.ndycode.codex-multi-auth.runtime-router";
|
|
18
|
+
const DEFAULT_ROUTER_READY_TIMEOUT_MS = 15_000;
|
|
19
|
+
const ROUTER_STATUS_POLL_INTERVAL_MS = 100;
|
|
20
|
+
const APP_ROUTER_MAX_LOG_BYTES = 1024 * 1024;
|
|
21
|
+
const appBindLocks = new Map();
|
|
22
|
+
async function withAppBindLock(key, operation) {
|
|
23
|
+
const previous = appBindLocks.get(key) ?? Promise.resolve();
|
|
24
|
+
let releaseCurrent = () => undefined;
|
|
25
|
+
const current = new Promise((resolve) => {
|
|
26
|
+
releaseCurrent = resolve;
|
|
27
|
+
});
|
|
28
|
+
const tail = previous.catch(() => undefined).then(() => current);
|
|
29
|
+
appBindLocks.set(key, tail);
|
|
30
|
+
await previous.catch(() => undefined);
|
|
31
|
+
try {
|
|
32
|
+
return await operation();
|
|
33
|
+
}
|
|
34
|
+
finally {
|
|
35
|
+
releaseCurrent();
|
|
36
|
+
if (appBindLocks.get(key) === tail) {
|
|
37
|
+
appBindLocks.delete(key);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export function rewriteConfigTomlForAppBind(rawConfig, baseUrl, clientApiKey = "") {
|
|
42
|
+
return rewriteConfigTomlForRuntimeRotationProvider(rawConfig, baseUrl, clientApiKey);
|
|
43
|
+
}
|
|
44
|
+
export function restoreConfigTomlFromAppBind(currentConfig, originalConfig) {
|
|
45
|
+
return restoreConfigTomlFromRuntimeRotationProvider(currentConfig, originalConfig);
|
|
46
|
+
}
|
|
47
|
+
function sha256(value) {
|
|
48
|
+
return createHash("sha256").update(value).digest("hex");
|
|
49
|
+
}
|
|
50
|
+
function createAppBindClientApiKey() {
|
|
51
|
+
return randomBytes(32).toString("hex");
|
|
52
|
+
}
|
|
53
|
+
function parseJsonRecord(value) {
|
|
54
|
+
try {
|
|
55
|
+
const parsed = JSON.parse(value);
|
|
56
|
+
return typeof parsed === "object" && parsed !== null
|
|
57
|
+
? parsed
|
|
58
|
+
: null;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function readString(record, key) {
|
|
65
|
+
const value = record[key];
|
|
66
|
+
return typeof value === "string" && value.trim().length > 0
|
|
67
|
+
? value.trim()
|
|
68
|
+
: null;
|
|
69
|
+
}
|
|
70
|
+
function readNumber(record, key) {
|
|
71
|
+
const value = record[key];
|
|
72
|
+
return typeof value === "number" && Number.isFinite(value) ? value : null;
|
|
73
|
+
}
|
|
74
|
+
async function syncDirectoryBestEffort(path) {
|
|
75
|
+
let handle = null;
|
|
76
|
+
try {
|
|
77
|
+
handle = await open(path, "r");
|
|
78
|
+
await handle.sync();
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// Directory fsync is not portable; the file-level fsync still guards contents.
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
await handle?.close().catch(() => undefined);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
async function atomicWriteFile(target, content, mode = 0o600) {
|
|
88
|
+
await withFileOperationRetry(async () => {
|
|
89
|
+
await mkdir(dirname(target), { recursive: true });
|
|
90
|
+
const tempPath = join(dirname(target), [
|
|
91
|
+
`.${basename(target)}`,
|
|
92
|
+
String(process.pid),
|
|
93
|
+
String(Date.now()),
|
|
94
|
+
randomBytes(4).toString("hex"),
|
|
95
|
+
"tmp",
|
|
96
|
+
].join("."));
|
|
97
|
+
let moved = false;
|
|
98
|
+
let handle = null;
|
|
99
|
+
try {
|
|
100
|
+
handle = await open(tempPath, "w", mode);
|
|
101
|
+
await handle.writeFile(content, "utf8");
|
|
102
|
+
await handle.sync();
|
|
103
|
+
await handle.close();
|
|
104
|
+
handle = null;
|
|
105
|
+
await rename(tempPath, target);
|
|
106
|
+
moved = true;
|
|
107
|
+
await syncDirectoryBestEffort(dirname(target));
|
|
108
|
+
}
|
|
109
|
+
finally {
|
|
110
|
+
await handle?.close().catch(() => undefined);
|
|
111
|
+
if (!moved) {
|
|
112
|
+
await unlink(tempPath).catch(() => undefined);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
async function unlinkIfExists(path) {
|
|
118
|
+
try {
|
|
119
|
+
await withFileOperationRetry(() => unlink(path));
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
if (error instanceof Error && "code" in error && error.code === "ENOENT") {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
throw error;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
function readAppBindStateRecord(record) {
|
|
129
|
+
const port = readNumber(record, "port");
|
|
130
|
+
const host = readString(record, "host");
|
|
131
|
+
const baseUrl = readString(record, "baseUrl");
|
|
132
|
+
const configPath = readString(record, "configPath");
|
|
133
|
+
const backupPath = readString(record, "backupPath");
|
|
134
|
+
const statePath = readString(record, "statePath");
|
|
135
|
+
const statusPath = readString(record, "statusPath");
|
|
136
|
+
const logPath = readString(record, "logPath");
|
|
137
|
+
const nodePath = readString(record, "nodePath");
|
|
138
|
+
const routerScriptPath = readString(record, "routerScriptPath");
|
|
139
|
+
const clientApiKey = readString(record, "clientApiKey");
|
|
140
|
+
const boundConfigHash = readString(record, "boundConfigHash");
|
|
141
|
+
const updatedAt = readNumber(record, "updatedAt");
|
|
142
|
+
const platformValue = readString(record, "platform");
|
|
143
|
+
if (port === null ||
|
|
144
|
+
!host ||
|
|
145
|
+
!baseUrl ||
|
|
146
|
+
!configPath ||
|
|
147
|
+
!statePath ||
|
|
148
|
+
!backupPath ||
|
|
149
|
+
!statusPath ||
|
|
150
|
+
!logPath ||
|
|
151
|
+
!nodePath ||
|
|
152
|
+
!routerScriptPath ||
|
|
153
|
+
!clientApiKey ||
|
|
154
|
+
!boundConfigHash ||
|
|
155
|
+
updatedAt === null) {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
version: 1,
|
|
160
|
+
platform: platformValue ? platformValue : process.platform,
|
|
161
|
+
host,
|
|
162
|
+
port,
|
|
163
|
+
baseUrl,
|
|
164
|
+
configPath,
|
|
165
|
+
statePath,
|
|
166
|
+
backupPath,
|
|
167
|
+
statusPath,
|
|
168
|
+
logPath,
|
|
169
|
+
nodePath,
|
|
170
|
+
routerScriptPath,
|
|
171
|
+
clientApiKey,
|
|
172
|
+
startupPath: readString(record, "startupPath"),
|
|
173
|
+
launchAgentPath: readString(record, "launchAgentPath"),
|
|
174
|
+
boundConfigHash,
|
|
175
|
+
updatedAt,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
async function readJsonFile(path) {
|
|
179
|
+
try {
|
|
180
|
+
const raw = await readFile(path, "utf8");
|
|
181
|
+
return parseJsonRecord(raw);
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
async function readAppBindState(path) {
|
|
188
|
+
const record = await readJsonFile(path);
|
|
189
|
+
return record ? readAppBindStateRecord(record) : null;
|
|
190
|
+
}
|
|
191
|
+
async function readAppBindBackup(path) {
|
|
192
|
+
const record = await readJsonFile(path);
|
|
193
|
+
if (!record)
|
|
194
|
+
return null;
|
|
195
|
+
const configPath = readString(record, "configPath");
|
|
196
|
+
const content = typeof record.content === "string" ? record.content : null;
|
|
197
|
+
const createdAt = readNumber(record, "createdAt");
|
|
198
|
+
if (!configPath || content === null || createdAt === null)
|
|
199
|
+
return null;
|
|
200
|
+
return {
|
|
201
|
+
version: 1,
|
|
202
|
+
configPath,
|
|
203
|
+
existed: record.existed === true,
|
|
204
|
+
content,
|
|
205
|
+
createdAt,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
async function readRouterStatus(path) {
|
|
209
|
+
const record = await readJsonFile(path);
|
|
210
|
+
if (!record)
|
|
211
|
+
return null;
|
|
212
|
+
return {
|
|
213
|
+
state: readString(record, "state"),
|
|
214
|
+
pid: readNumber(record, "pid"),
|
|
215
|
+
baseUrl: readString(record, "baseUrl"),
|
|
216
|
+
totalRequests: readNumber(record, "totalRequests"),
|
|
217
|
+
lastAccountIndex: readNumber(record, "lastAccountIndex"),
|
|
218
|
+
lastAccountLabel: readString(record, "lastAccountLabel"),
|
|
219
|
+
lastAccountEmail: readString(record, "lastAccountEmail"),
|
|
220
|
+
lastAccountId: readString(record, "lastAccountId"),
|
|
221
|
+
updatedAt: readNumber(record, "updatedAt"),
|
|
222
|
+
lastError: readString(record, "lastError"),
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
function isProcessAlive(pid) {
|
|
226
|
+
if (!pid)
|
|
227
|
+
return false;
|
|
228
|
+
try {
|
|
229
|
+
process.kill(pid, 0);
|
|
230
|
+
return true;
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
const code = error && typeof error === "object" && "code" in error ? error.code : null;
|
|
234
|
+
return code === "EPERM";
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
function resolveWindowsStartupPath(env, home) {
|
|
238
|
+
const appData = (env.APPDATA ?? "").trim() || join(home, "AppData", "Roaming");
|
|
239
|
+
return join(appData, "Microsoft", "Windows", "Start Menu", "Programs", "Startup", WINDOWS_STARTUP_FILE);
|
|
240
|
+
}
|
|
241
|
+
function resolveMacLaunchAgentPath(home) {
|
|
242
|
+
return join(home, "Library", "LaunchAgents", `${MACOS_LAUNCH_AGENT_ID}.plist`);
|
|
243
|
+
}
|
|
244
|
+
function resolveRouterScriptPath(override, candidateOverride) {
|
|
245
|
+
if (override)
|
|
246
|
+
return override;
|
|
247
|
+
const candidates = candidateOverride ?? [
|
|
248
|
+
fileURLToPath(new URL("../../../scripts/codex-app-router.js", import.meta.url)),
|
|
249
|
+
fileURLToPath(new URL("../../scripts/codex-app-router.js", import.meta.url)),
|
|
250
|
+
];
|
|
251
|
+
for (const candidate of candidates) {
|
|
252
|
+
if (existsSync(candidate))
|
|
253
|
+
return candidate;
|
|
254
|
+
}
|
|
255
|
+
throw new Error(`codex-app-router.js not found; checked: ${candidates.join(", ")}`);
|
|
256
|
+
}
|
|
257
|
+
export function resolveAppBindPaths(options = {}) {
|
|
258
|
+
const env = options.env ?? process.env;
|
|
259
|
+
const platform = options.platform ?? process.platform;
|
|
260
|
+
const home = options.home ?? homedir();
|
|
261
|
+
const codexHome = (env.CODEX_MULTI_AUTH_APP_BIND_CODEX_HOME ?? "").trim() || join(home, ".codex");
|
|
262
|
+
const multiAuthDir = (env.CODEX_MULTI_AUTH_DIR ?? "").trim() || getCodexMultiAuthDir();
|
|
263
|
+
const bindDir = join(multiAuthDir, APP_BIND_DIR_NAME);
|
|
264
|
+
return {
|
|
265
|
+
codexHome,
|
|
266
|
+
configPath: join(codexHome, "config.toml"),
|
|
267
|
+
bindDir,
|
|
268
|
+
statePath: join(bindDir, APP_BIND_STATE_FILE),
|
|
269
|
+
backupPath: join(bindDir, APP_BIND_BACKUP_FILE),
|
|
270
|
+
statusPath: join(bindDir, APP_BIND_STATUS_FILE),
|
|
271
|
+
logPath: join(bindDir, "runtime-rotation-app-router.log"),
|
|
272
|
+
routerScriptPath: resolveRouterScriptPath(options.routerScriptPath, options.routerScriptCandidates),
|
|
273
|
+
startupPath: platform === "win32" ? resolveWindowsStartupPath(env, home) : null,
|
|
274
|
+
launchAgentPath: platform === "darwin" ? resolveMacLaunchAgentPath(home) : null,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
function formatBaseUrl(host, port) {
|
|
278
|
+
const normalizedHost = host.includes(":") && !host.startsWith("[") ? `[${host}]` : host;
|
|
279
|
+
return `http://${normalizedHost}:${port}`;
|
|
280
|
+
}
|
|
281
|
+
function readPortFromBaseUrl(baseUrl, fallback) {
|
|
282
|
+
if (!baseUrl)
|
|
283
|
+
return fallback;
|
|
284
|
+
try {
|
|
285
|
+
const port = Number.parseInt(new URL(baseUrl).port, 10);
|
|
286
|
+
return Number.isFinite(port) && port > 0 ? port : fallback;
|
|
287
|
+
}
|
|
288
|
+
catch {
|
|
289
|
+
return fallback;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
function escapeWindowsBatchPath(value) {
|
|
293
|
+
return value.replace(/%/g, "%%");
|
|
294
|
+
}
|
|
295
|
+
function createWindowsStartupCommand(state) {
|
|
296
|
+
const nodePath = escapeWindowsBatchPath(state.nodePath);
|
|
297
|
+
const routerScriptPath = escapeWindowsBatchPath(state.routerScriptPath);
|
|
298
|
+
const statusPath = escapeWindowsBatchPath(state.statusPath);
|
|
299
|
+
const statePath = escapeWindowsBatchPath(state.statePath);
|
|
300
|
+
const logPath = escapeWindowsBatchPath(state.logPath);
|
|
301
|
+
return [
|
|
302
|
+
"@echo off",
|
|
303
|
+
`"${nodePath}" "${routerScriptPath}" --port ${state.port} --status "${statusPath}" --state "${statePath}" --log "${logPath}" --max-log-bytes ${APP_ROUTER_MAX_LOG_BYTES} >> "${logPath}" 2>&1`,
|
|
304
|
+
"",
|
|
305
|
+
].join("\r\n");
|
|
306
|
+
}
|
|
307
|
+
function xmlEscape(value) {
|
|
308
|
+
return value
|
|
309
|
+
.replace(/&/g, "&")
|
|
310
|
+
.replace(/</g, "<")
|
|
311
|
+
.replace(/>/g, ">");
|
|
312
|
+
}
|
|
313
|
+
function createMacLaunchAgentPlist(state) {
|
|
314
|
+
const args = [
|
|
315
|
+
state.nodePath,
|
|
316
|
+
state.routerScriptPath,
|
|
317
|
+
"--port",
|
|
318
|
+
String(state.port),
|
|
319
|
+
"--status",
|
|
320
|
+
state.statusPath,
|
|
321
|
+
"--state",
|
|
322
|
+
state.statePath,
|
|
323
|
+
"--log",
|
|
324
|
+
state.logPath,
|
|
325
|
+
"--max-log-bytes",
|
|
326
|
+
String(APP_ROUTER_MAX_LOG_BYTES),
|
|
327
|
+
];
|
|
328
|
+
return [
|
|
329
|
+
'<?xml version="1.0" encoding="UTF-8"?>',
|
|
330
|
+
'<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">',
|
|
331
|
+
'<plist version="1.0">',
|
|
332
|
+
"<dict>",
|
|
333
|
+
" <key>Label</key>",
|
|
334
|
+
` <string>${MACOS_LAUNCH_AGENT_ID}</string>`,
|
|
335
|
+
" <key>ProgramArguments</key>",
|
|
336
|
+
" <array>",
|
|
337
|
+
...args.map((arg) => ` <string>${xmlEscape(arg)}</string>`),
|
|
338
|
+
" </array>",
|
|
339
|
+
" <key>RunAtLoad</key>",
|
|
340
|
+
" <true/>",
|
|
341
|
+
" <key>KeepAlive</key>",
|
|
342
|
+
" <true/>",
|
|
343
|
+
" <key>StandardOutPath</key>",
|
|
344
|
+
` <string>${xmlEscape(state.logPath)}</string>`,
|
|
345
|
+
" <key>StandardErrorPath</key>",
|
|
346
|
+
` <string>${xmlEscape(state.logPath)}</string>`,
|
|
347
|
+
"</dict>",
|
|
348
|
+
"</plist>",
|
|
349
|
+
"",
|
|
350
|
+
].join("\n");
|
|
351
|
+
}
|
|
352
|
+
async function writeAppBindStartup(state) {
|
|
353
|
+
if (state.platform === "win32" && state.startupPath) {
|
|
354
|
+
await mkdir(dirname(state.startupPath), { recursive: true });
|
|
355
|
+
await atomicWriteFile(state.startupPath, createWindowsStartupCommand(state));
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
if (state.platform === "darwin" && state.launchAgentPath) {
|
|
359
|
+
await mkdir(dirname(state.launchAgentPath), { recursive: true });
|
|
360
|
+
await atomicWriteFile(state.launchAgentPath, createMacLaunchAgentPlist(state));
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
async function removeAppBindStartup(state) {
|
|
364
|
+
const candidates = [state.startupPath, state.launchAgentPath].filter((path) => typeof path === "string" && path.length > 0);
|
|
365
|
+
for (const candidate of candidates) {
|
|
366
|
+
try {
|
|
367
|
+
await unlinkIfExists(candidate);
|
|
368
|
+
}
|
|
369
|
+
catch {
|
|
370
|
+
// Best-effort cleanup.
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
function spawnRouter(state) {
|
|
375
|
+
mkdirSync(dirname(state.logPath), { recursive: true });
|
|
376
|
+
const logFd = openSync(state.logPath, "a", 0o600);
|
|
377
|
+
try {
|
|
378
|
+
const child = spawn(state.nodePath, [
|
|
379
|
+
state.routerScriptPath,
|
|
380
|
+
"--port",
|
|
381
|
+
String(state.port),
|
|
382
|
+
"--status",
|
|
383
|
+
state.statusPath,
|
|
384
|
+
"--state",
|
|
385
|
+
state.statePath,
|
|
386
|
+
"--log",
|
|
387
|
+
state.logPath,
|
|
388
|
+
"--max-log-bytes",
|
|
389
|
+
String(APP_ROUTER_MAX_LOG_BYTES),
|
|
390
|
+
], {
|
|
391
|
+
detached: true,
|
|
392
|
+
stdio: ["ignore", logFd, logFd],
|
|
393
|
+
windowsHide: true,
|
|
394
|
+
});
|
|
395
|
+
child.unref();
|
|
396
|
+
}
|
|
397
|
+
finally {
|
|
398
|
+
closeSync(logFd);
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
async function maybeStartRouter(state, options) {
|
|
402
|
+
if (options.spawnDetached === false)
|
|
403
|
+
return false;
|
|
404
|
+
const router = await readRouterStatus(state.statusPath);
|
|
405
|
+
if (router && isProcessAlive(router.pid) && router.state === "running")
|
|
406
|
+
return false;
|
|
407
|
+
spawnRouter(state);
|
|
408
|
+
return true;
|
|
409
|
+
}
|
|
410
|
+
function resolveRouterReadyTimeoutMs(options) {
|
|
411
|
+
const value = options.routerReadyTimeoutMs;
|
|
412
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0
|
|
413
|
+
? value
|
|
414
|
+
: DEFAULT_ROUTER_READY_TIMEOUT_MS;
|
|
415
|
+
}
|
|
416
|
+
async function waitForRouterStatus(statusPath, timeoutMs) {
|
|
417
|
+
let latest = null;
|
|
418
|
+
const deadline = Date.now() + timeoutMs;
|
|
419
|
+
while (Date.now() < deadline) {
|
|
420
|
+
const router = await readRouterStatus(statusPath);
|
|
421
|
+
latest = router ?? latest;
|
|
422
|
+
if (router?.state === "error") {
|
|
423
|
+
const suffix = router.lastError ? `: ${router.lastError}` : "";
|
|
424
|
+
throw new Error(`Codex app runtime router failed to start${suffix}`);
|
|
425
|
+
}
|
|
426
|
+
if (router?.state === "running" && isProcessAlive(router.pid))
|
|
427
|
+
return router;
|
|
428
|
+
await new Promise((resolve) => setTimeout(resolve, ROUTER_STATUS_POLL_INTERVAL_MS));
|
|
429
|
+
}
|
|
430
|
+
const suffix = latest?.lastError ? `: ${latest.lastError}` : "";
|
|
431
|
+
throw new Error(`Codex app runtime router did not report ready${suffix}`);
|
|
432
|
+
}
|
|
433
|
+
async function stopRouter(router) {
|
|
434
|
+
if (!router?.pid || !isProcessAlive(router.pid))
|
|
435
|
+
return;
|
|
436
|
+
try {
|
|
437
|
+
process.kill(router.pid, "SIGTERM");
|
|
438
|
+
}
|
|
439
|
+
catch {
|
|
440
|
+
return;
|
|
441
|
+
}
|
|
442
|
+
for (let attempt = 0; attempt < 20; attempt += 1) {
|
|
443
|
+
if (!isProcessAlive(router.pid))
|
|
444
|
+
return;
|
|
445
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
async function readConfigIfExists(configPath) {
|
|
449
|
+
try {
|
|
450
|
+
return { existed: true, content: await readFile(configPath, "utf8") };
|
|
451
|
+
}
|
|
452
|
+
catch {
|
|
453
|
+
return { existed: false, content: "" };
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
export async function getAppBindStatus(options = {}) {
|
|
457
|
+
const paths = resolveAppBindPaths(options);
|
|
458
|
+
const state = await readAppBindState(paths.statePath);
|
|
459
|
+
const router = await readRouterStatus(paths.statusPath);
|
|
460
|
+
return {
|
|
461
|
+
bound: state !== null,
|
|
462
|
+
running: router !== null && router.state === "running" && isProcessAlive(router.pid),
|
|
463
|
+
state,
|
|
464
|
+
router,
|
|
465
|
+
paths,
|
|
466
|
+
};
|
|
467
|
+
}
|
|
468
|
+
export async function bindCodexAppRuntimeRotation(options = {}) {
|
|
469
|
+
const paths = resolveAppBindPaths(options);
|
|
470
|
+
return withAppBindLock(paths.bindDir, () => bindCodexAppRuntimeRotationLocked(options, paths));
|
|
471
|
+
}
|
|
472
|
+
async function bindCodexAppRuntimeRotationLocked(options, paths) {
|
|
473
|
+
const platform = options.platform ?? process.platform;
|
|
474
|
+
const now = options.now?.() ?? Date.now();
|
|
475
|
+
const existingState = await readAppBindState(paths.statePath);
|
|
476
|
+
const host = existingState?.host ?? "127.0.0.1";
|
|
477
|
+
let port = existingState && existingState.port > 0 ? existingState.port : 0;
|
|
478
|
+
let baseUrl = existingState?.baseUrl ?? formatBaseUrl(host, port);
|
|
479
|
+
const clientApiKey = existingState && existingState.clientApiKey.length > 0
|
|
480
|
+
? existingState.clientApiKey
|
|
481
|
+
: createAppBindClientApiKey();
|
|
482
|
+
const { existed, content } = await readConfigIfExists(paths.configPath);
|
|
483
|
+
const backup = (await readAppBindBackup(paths.backupPath)) ?? {
|
|
484
|
+
version: 1,
|
|
485
|
+
configPath: paths.configPath,
|
|
486
|
+
existed,
|
|
487
|
+
content,
|
|
488
|
+
createdAt: now,
|
|
489
|
+
};
|
|
490
|
+
let boundConfig = rewriteConfigTomlForAppBind(content, baseUrl, clientApiKey);
|
|
491
|
+
let state = {
|
|
492
|
+
version: 1,
|
|
493
|
+
platform,
|
|
494
|
+
host,
|
|
495
|
+
port,
|
|
496
|
+
baseUrl,
|
|
497
|
+
configPath: paths.configPath,
|
|
498
|
+
statePath: paths.statePath,
|
|
499
|
+
backupPath: paths.backupPath,
|
|
500
|
+
statusPath: paths.statusPath,
|
|
501
|
+
logPath: paths.logPath,
|
|
502
|
+
nodePath: options.nodePath ?? process.execPath,
|
|
503
|
+
routerScriptPath: paths.routerScriptPath,
|
|
504
|
+
clientApiKey,
|
|
505
|
+
startupPath: paths.startupPath,
|
|
506
|
+
launchAgentPath: paths.launchAgentPath,
|
|
507
|
+
boundConfigHash: sha256(boundConfig),
|
|
508
|
+
updatedAt: now,
|
|
509
|
+
};
|
|
510
|
+
await mkdir(paths.bindDir, { recursive: true });
|
|
511
|
+
await mkdir(dirname(paths.configPath), { recursive: true });
|
|
512
|
+
await atomicWriteFile(paths.backupPath, `${JSON.stringify(backup, null, 2)}\n`);
|
|
513
|
+
await atomicWriteFile(paths.statePath, `${JSON.stringify(state, null, 2)}\n`);
|
|
514
|
+
const startedRouter = await maybeStartRouter(state, options);
|
|
515
|
+
const router = startedRouter
|
|
516
|
+
? await waitForRouterStatus(state.statusPath, resolveRouterReadyTimeoutMs(options))
|
|
517
|
+
: await readRouterStatus(state.statusPath);
|
|
518
|
+
const routerBaseUrl = router?.baseUrl ?? null;
|
|
519
|
+
const routerIsUsable = !!routerBaseUrl &&
|
|
520
|
+
router !== null &&
|
|
521
|
+
(startedRouter || (router.state === "running" && isProcessAlive(router.pid)));
|
|
522
|
+
if (routerIsUsable) {
|
|
523
|
+
port = readPortFromBaseUrl(routerBaseUrl, port);
|
|
524
|
+
baseUrl = routerBaseUrl;
|
|
525
|
+
}
|
|
526
|
+
else if (existingState && existingState.port > 0) {
|
|
527
|
+
port = existingState.port;
|
|
528
|
+
baseUrl = existingState.baseUrl;
|
|
529
|
+
}
|
|
530
|
+
if (port <= 0) {
|
|
531
|
+
throw new Error("Codex app bind could not resolve a runtime router port; refusing to write config.toml with port=0.");
|
|
532
|
+
}
|
|
533
|
+
boundConfig = rewriteConfigTomlForAppBind(content, baseUrl, clientApiKey);
|
|
534
|
+
state = {
|
|
535
|
+
...state,
|
|
536
|
+
port,
|
|
537
|
+
baseUrl,
|
|
538
|
+
boundConfigHash: sha256(boundConfig),
|
|
539
|
+
updatedAt: options.now?.() ?? Date.now(),
|
|
540
|
+
};
|
|
541
|
+
if (startedRouter) {
|
|
542
|
+
options.log?.(`Codex app runtime router started on ${baseUrl}`);
|
|
543
|
+
}
|
|
544
|
+
await atomicWriteFile(paths.configPath, boundConfig);
|
|
545
|
+
await atomicWriteFile(paths.statePath, `${JSON.stringify(state, null, 2)}\n`);
|
|
546
|
+
await writeAppBindStartup(state);
|
|
547
|
+
const status = await getAppBindStatus(options);
|
|
548
|
+
return {
|
|
549
|
+
status,
|
|
550
|
+
message: `Bound Codex app config ${paths.configPath} to ${baseUrl}`,
|
|
551
|
+
};
|
|
552
|
+
}
|
|
553
|
+
export async function unbindCodexAppRuntimeRotation(options = {}) {
|
|
554
|
+
const paths = resolveAppBindPaths(options);
|
|
555
|
+
return withAppBindLock(paths.bindDir, () => unbindCodexAppRuntimeRotationLocked(options, paths));
|
|
556
|
+
}
|
|
557
|
+
async function unbindCodexAppRuntimeRotationLocked(options, paths) {
|
|
558
|
+
const state = await readAppBindState(paths.statePath);
|
|
559
|
+
const router = await readRouterStatus(paths.statusPath);
|
|
560
|
+
if (state) {
|
|
561
|
+
await stopRouter(router);
|
|
562
|
+
await removeAppBindStartup(state);
|
|
563
|
+
}
|
|
564
|
+
const backup = await readAppBindBackup(paths.backupPath);
|
|
565
|
+
if (backup) {
|
|
566
|
+
const current = await readConfigIfExists(backup.configPath);
|
|
567
|
+
if (state && current.existed && sha256(current.content) !== state.boundConfigHash) {
|
|
568
|
+
await atomicWriteFile(backup.configPath, restoreConfigTomlFromAppBind(current.content, backup.content));
|
|
569
|
+
}
|
|
570
|
+
else if (backup.existed) {
|
|
571
|
+
await mkdir(dirname(backup.configPath), { recursive: true });
|
|
572
|
+
await atomicWriteFile(backup.configPath, backup.content);
|
|
573
|
+
}
|
|
574
|
+
else {
|
|
575
|
+
await unlinkIfExists(backup.configPath);
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
else if (state) {
|
|
579
|
+
const current = await readConfigIfExists(state.configPath);
|
|
580
|
+
if (current.existed) {
|
|
581
|
+
await atomicWriteFile(state.configPath, restoreConfigTomlFromAppBind(current.content, ""));
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
for (const candidate of [
|
|
585
|
+
paths.statePath,
|
|
586
|
+
paths.backupPath,
|
|
587
|
+
paths.statusPath,
|
|
588
|
+
]) {
|
|
589
|
+
try {
|
|
590
|
+
await unlinkIfExists(candidate);
|
|
591
|
+
}
|
|
592
|
+
catch {
|
|
593
|
+
// Best-effort cleanup.
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
const status = await getAppBindStatus(options);
|
|
597
|
+
return {
|
|
598
|
+
status,
|
|
599
|
+
message: backup
|
|
600
|
+
? `Unbound Codex app config ${backup.configPath}`
|
|
601
|
+
: "Codex app bind was not configured",
|
|
602
|
+
};
|
|
603
|
+
}
|
|
604
|
+
export function formatAppBindStatus(status) {
|
|
605
|
+
if (!status.bound || !status.state)
|
|
606
|
+
return "Codex app bind: not configured";
|
|
607
|
+
const parts = [
|
|
608
|
+
status.running ? "running" : "configured but router not running",
|
|
609
|
+
`port=${status.state.port}`,
|
|
610
|
+
`config=${status.state.configPath}`,
|
|
611
|
+
];
|
|
612
|
+
if (status.router?.lastAccountLabel && !status.router.lastAccountLabel.includes("@")) {
|
|
613
|
+
parts.push(`lastAccount=${status.router.lastAccountLabel}`);
|
|
614
|
+
}
|
|
615
|
+
else if (status.router?.lastAccountIndex !== null && status.router?.lastAccountIndex !== undefined) {
|
|
616
|
+
parts.push(`lastAccount=Account ${status.router.lastAccountIndex + 1}`);
|
|
617
|
+
}
|
|
618
|
+
return `Codex app bind: ${parts.join(", ")}`;
|
|
619
|
+
}
|
|
620
|
+
//# sourceMappingURL=app-bind.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-bind.js","sourceRoot":"","sources":["../../../lib/runtime/app-bind.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare function tomlStringLiteral(value: string): string;
|
|
2
|
+
export declare function readTomlTableName(line: string): string | null;
|
|
3
|
+
export declare function removeRuntimeRotationProviderBlock(rawConfig: string): string;
|
|
4
|
+
export declare function rewriteTopLevelModelProvider(rawConfig: string): string;
|
|
5
|
+
export declare function restoreTopLevelModelProvider(currentConfig: string, originalConfig: string): string;
|
|
6
|
+
export declare function ensureTomlTrailingNewline(value: string): string;
|
|
7
|
+
export declare function createRuntimeRotationProviderBlock(baseUrl: string, clientApiKey?: string): string[];
|
|
8
|
+
export declare function rewriteConfigTomlForRuntimeRotationProvider(rawConfig: string, baseUrl: string, clientApiKey?: string): string;
|
|
9
|
+
export declare function restoreConfigTomlFromRuntimeRotationProvider(currentConfig: string, originalConfig: string): string;
|
|
10
|
+
//# sourceMappingURL=config-toml.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-toml.d.ts","sourceRoot":"","sources":["../../../lib/runtime/config-toml.ts"],"names":[],"mappings":"AAEA,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAqBvD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG7D;AAED,wBAAgB,kCAAkC,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAoB5E;AAED,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAuBtE;AAUD,wBAAgB,4BAA4B,CAC3C,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACpB,MAAM,CAoBR;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,kCAAkC,CACjD,OAAO,EAAE,MAAM,EACf,YAAY,SAAK,GACf,MAAM,EAAE,CAgBV;AAED,wBAAgB,2CAA2C,CAC1D,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,YAAY,SAAK,GACf,MAAM,CAeR;AAED,wBAAgB,4CAA4C,CAC3D,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACpB,MAAM,CAQR"}
|