codex-multi-auth 2.0.0 → 2.0.2

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.
Files changed (102) hide show
  1. package/README.md +13 -10
  2. package/config/README.md +4 -4
  3. package/config/codex-legacy.json +45 -120
  4. package/config/codex-modern.json +36 -52
  5. package/config/minimal-codex.json +1 -1
  6. package/dist/index.d.ts +1 -1
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +85 -14
  9. package/dist/index.js.map +1 -1
  10. package/dist/lib/auth/device-auth.d.ts +46 -0
  11. package/dist/lib/auth/device-auth.d.ts.map +1 -0
  12. package/dist/lib/auth/device-auth.js +325 -0
  13. package/dist/lib/auth/device-auth.js.map +1 -0
  14. package/dist/lib/auth/index.d.ts +2 -0
  15. package/dist/lib/auth/index.d.ts.map +1 -1
  16. package/dist/lib/auth/index.js +1 -0
  17. package/dist/lib/auth/index.js.map +1 -1
  18. package/dist/lib/auto-update-checker.d.ts +23 -1
  19. package/dist/lib/auto-update-checker.d.ts.map +1 -1
  20. package/dist/lib/auto-update-checker.js +481 -8
  21. package/dist/lib/auto-update-checker.js.map +1 -1
  22. package/dist/lib/cli.d.ts +5 -0
  23. package/dist/lib/cli.d.ts.map +1 -1
  24. package/dist/lib/cli.js.map +1 -1
  25. package/dist/lib/codex-manager/commands/best.js +1 -1
  26. package/dist/lib/codex-manager/commands/best.js.map +1 -1
  27. package/dist/lib/codex-manager/commands/forecast.js +3 -3
  28. package/dist/lib/codex-manager/commands/forecast.js.map +1 -1
  29. package/dist/lib/codex-manager/commands/report.js +3 -3
  30. package/dist/lib/codex-manager/commands/report.js.map +1 -1
  31. package/dist/lib/codex-manager/commands/rotation.d.ts +4 -0
  32. package/dist/lib/codex-manager/commands/rotation.d.ts.map +1 -1
  33. package/dist/lib/codex-manager/commands/rotation.js +37 -11
  34. package/dist/lib/codex-manager/commands/rotation.js.map +1 -1
  35. package/dist/lib/codex-manager/commands/status.d.ts +6 -0
  36. package/dist/lib/codex-manager/commands/status.d.ts.map +1 -1
  37. package/dist/lib/codex-manager/commands/status.js +26 -3
  38. package/dist/lib/codex-manager/commands/status.js.map +1 -1
  39. package/dist/lib/codex-manager/forecast-report-commands.js +4 -4
  40. package/dist/lib/codex-manager/forecast-report-commands.js.map +1 -1
  41. package/dist/lib/codex-manager/help.d.ts +1 -0
  42. package/dist/lib/codex-manager/help.d.ts.map +1 -1
  43. package/dist/lib/codex-manager/help.js +20 -3
  44. package/dist/lib/codex-manager/help.js.map +1 -1
  45. package/dist/lib/codex-manager/rate-limit-markers.d.ts +2 -0
  46. package/dist/lib/codex-manager/rate-limit-markers.d.ts.map +1 -0
  47. package/dist/lib/codex-manager/rate-limit-markers.js +4 -0
  48. package/dist/lib/codex-manager/rate-limit-markers.js.map +1 -0
  49. package/dist/lib/codex-manager/repair-commands.js +3 -3
  50. package/dist/lib/codex-manager/repair-commands.js.map +1 -1
  51. package/dist/lib/codex-manager.d.ts.map +1 -1
  52. package/dist/lib/codex-manager.js +78 -91
  53. package/dist/lib/codex-manager.js.map +1 -1
  54. package/dist/lib/config.js +2 -2
  55. package/dist/lib/config.js.map +1 -1
  56. package/dist/lib/prompts/codex.d.ts +1 -1
  57. package/dist/lib/prompts/codex.d.ts.map +1 -1
  58. package/dist/lib/prompts/codex.js +3 -3
  59. package/dist/lib/prompts/codex.js.map +1 -1
  60. package/dist/lib/quota-probe.js +1 -1
  61. package/dist/lib/quota-probe.js.map +1 -1
  62. package/dist/lib/quota-readiness.d.ts +16 -0
  63. package/dist/lib/quota-readiness.d.ts.map +1 -0
  64. package/dist/lib/quota-readiness.js +82 -0
  65. package/dist/lib/quota-readiness.js.map +1 -0
  66. package/dist/lib/request/fetch-helpers.d.ts.map +1 -1
  67. package/dist/lib/request/fetch-helpers.js +19 -8
  68. package/dist/lib/request/fetch-helpers.js.map +1 -1
  69. package/dist/lib/request/helpers/model-map.d.ts +2 -1
  70. package/dist/lib/request/helpers/model-map.d.ts.map +1 -1
  71. package/dist/lib/request/helpers/model-map.js +52 -60
  72. package/dist/lib/request/helpers/model-map.js.map +1 -1
  73. package/dist/lib/request/request-transformer.d.ts +2 -2
  74. package/dist/lib/request/request-transformer.js +4 -3
  75. package/dist/lib/request/request-transformer.js.map +1 -1
  76. package/dist/lib/runtime/login-menu-accounts.d.ts +5 -0
  77. package/dist/lib/runtime/login-menu-accounts.d.ts.map +1 -1
  78. package/dist/lib/runtime/login-menu-accounts.js +7 -2
  79. package/dist/lib/runtime/login-menu-accounts.js.map +1 -1
  80. package/dist/lib/runtime/quota-probe.js +1 -1
  81. package/dist/lib/runtime/quota-probe.js.map +1 -1
  82. package/dist/lib/runtime/runtime-current-account.d.ts +52 -0
  83. package/dist/lib/runtime/runtime-current-account.d.ts.map +1 -0
  84. package/dist/lib/runtime/runtime-current-account.js +252 -0
  85. package/dist/lib/runtime/runtime-current-account.js.map +1 -0
  86. package/dist/lib/runtime-rotation-proxy.js +1 -1
  87. package/dist/lib/runtime-rotation-proxy.js.map +1 -1
  88. package/dist/lib/schemas.d.ts +3 -0
  89. package/dist/lib/schemas.d.ts.map +1 -1
  90. package/dist/lib/schemas.js +1 -0
  91. package/dist/lib/schemas.js.map +1 -1
  92. package/dist/lib/ui/auth-menu.d.ts +6 -1
  93. package/dist/lib/ui/auth-menu.d.ts.map +1 -1
  94. package/dist/lib/ui/auth-menu.js +22 -2
  95. package/dist/lib/ui/auth-menu.js.map +1 -1
  96. package/package.json +1 -1
  97. package/scripts/bench-format/codex-host.mjs +142 -142
  98. package/scripts/bench-format/models.mjs +20 -22
  99. package/scripts/benchmark-edit-formats.mjs +9 -9
  100. package/scripts/codex-app-router.js +121 -121
  101. package/scripts/codex.js +3636 -3473
  102. package/scripts/postinstall.js +120 -14
@@ -145,6 +145,25 @@ export function shouldAutoBindCodexAppOnInstall(options) {
145
145
  );
146
146
  }
147
147
 
148
+ /**
149
+ * @param {{
150
+ * env?: NodeJS.ProcessEnv,
151
+ * rotationEnabled: boolean,
152
+ * }} options
153
+ */
154
+ export function shouldAutoInstallCodexAppLauncherOnInstall(options) {
155
+ const env = options.env ?? process.env;
156
+ if (isCiEnvironment(env)) return false;
157
+
158
+ const installOverride = readOptionalBoolean(
159
+ env.CODEX_MULTI_AUTH_APP_LAUNCHER_INSTALL,
160
+ );
161
+ if (installOverride !== null) return installOverride;
162
+
163
+ if (!isGlobalNpmInstall(env)) return false;
164
+ return options.rotationEnabled;
165
+ }
166
+
148
167
  async function loadConfigModule() {
149
168
  try {
150
169
  return await import("../dist/lib/config.js");
@@ -177,9 +196,13 @@ async function loadAppBindModule() {
177
196
  }
178
197
  }
179
198
 
180
- function resolveRotationEnabled(configModule) {
199
+ /**
200
+ * @param {unknown} configModule
201
+ * @param {NodeJS.ProcessEnv} [env]
202
+ */
203
+ export function resolveRotationEnabled(configModule, env = process.env) {
181
204
  const envOverride = readOptionalBoolean(
182
- process.env.CODEX_MULTI_AUTH_RUNTIME_ROTATION_PROXY,
205
+ env.CODEX_MULTI_AUTH_RUNTIME_ROTATION_PROXY,
183
206
  );
184
207
  if (envOverride !== null) return envOverride;
185
208
  if (
@@ -187,7 +210,7 @@ function resolveRotationEnabled(configModule) {
187
210
  typeof configModule.loadPluginConfig !== "function" ||
188
211
  typeof configModule.getCodexRuntimeRotationProxy !== "function"
189
212
  ) {
190
- return false;
213
+ return true;
191
214
  }
192
215
  return (
193
216
  configModule.getCodexRuntimeRotationProxy(configModule.loadPluginConfig()) ===
@@ -195,30 +218,109 @@ function resolveRotationEnabled(configModule) {
195
218
  );
196
219
  }
197
220
 
198
- async function main() {
221
+ function defaultPostinstallLog(message) {
222
+ console.error(`codex-multi-auth: ${message}`);
223
+ }
224
+
225
+ /**
226
+ * @param {boolean} rotationEnabled
227
+ */
228
+ async function maybeBindCodexAppOnInstall(rotationEnabled) {
199
229
  const appBindModule = await loadAppBindModule();
200
230
  if (!appBindModule || typeof appBindModule.bindCodexAppRuntimeRotation !== "function") {
201
- return 0;
231
+ return;
202
232
  }
203
233
 
204
- const configModule = await loadConfigModule();
205
- const rotationEnabled = resolveRotationEnabled(configModule);
206
234
  const currentStatus =
207
235
  typeof appBindModule.getAppBindStatus === "function"
208
236
  ? await appBindModule.getAppBindStatus().catch(() => null)
209
237
  : null;
210
238
  const appDetected = hasCodexDesktopApp() || currentStatus?.bound === true;
211
239
  if (!shouldAutoBindCodexAppOnInstall({ rotationEnabled, appDetected })) {
212
- return 0;
240
+ return;
213
241
  }
214
242
 
215
243
  const result = await appBindModule.bindCodexAppRuntimeRotation();
216
244
  if (result?.message) {
217
245
  console.error(`codex-multi-auth: ${result.message}`);
218
246
  }
247
+ }
248
+
249
+ /**
250
+ * @param {boolean} rotationEnabled
251
+ * @param {(message: string) => void} [log]
252
+ */
253
+ export async function maybeInstallCodexAppLauncherOnInstall(
254
+ rotationEnabled,
255
+ log = defaultPostinstallLog,
256
+ ) {
257
+ if (!shouldAutoInstallCodexAppLauncherOnInstall({ rotationEnabled })) {
258
+ return;
259
+ }
260
+
261
+ try {
262
+ const launcherModule = await import("./codex-app-launcher.js");
263
+ if (typeof launcherModule.installCodexAppLauncher !== "function") {
264
+ return;
265
+ }
266
+ await launcherModule.installCodexAppLauncher({
267
+ log,
268
+ });
269
+ } catch (error) {
270
+ log(
271
+ `app launcher postinstall skipped: ${error instanceof Error ? error.message : String(error)}`,
272
+ );
273
+ }
274
+ }
275
+
276
+ /**
277
+ * @param {{
278
+ * loadConfigModule?: () => Promise<unknown>,
279
+ * bindCodexApp?: (rotationEnabled: boolean) => Promise<void>,
280
+ * installLauncher?: (rotationEnabled: boolean) => Promise<void>,
281
+ * log?: (message: string) => void,
282
+ * env?: NodeJS.ProcessEnv,
283
+ * }} [deps]
284
+ */
285
+ export async function runPostinstallSelfHeal(deps = {}) {
286
+ const loadConfig = deps.loadConfigModule ?? loadConfigModule;
287
+ const bindCodexApp = deps.bindCodexApp ?? maybeBindCodexAppOnInstall;
288
+ const log = deps.log ?? defaultPostinstallLog;
289
+ const installLauncher =
290
+ deps.installLauncher ??
291
+ ((rotationEnabled) =>
292
+ maybeInstallCodexAppLauncherOnInstall(rotationEnabled, log));
293
+ const configModule = await loadConfig();
294
+ const rotationEnabled = resolveRotationEnabled(configModule, deps.env);
295
+
296
+ try {
297
+ await bindCodexApp(rotationEnabled);
298
+ } catch (error) {
299
+ log(
300
+ `app bind postinstall skipped: ${error instanceof Error ? error.message : String(error)}`,
301
+ );
302
+ }
303
+
304
+ try {
305
+ await installLauncher(rotationEnabled);
306
+ } catch (error) {
307
+ log(
308
+ `app launcher postinstall skipped: ${error instanceof Error ? error.message : String(error)}`,
309
+ );
310
+ }
219
311
  return 0;
220
312
  }
221
313
 
314
+ async function main() {
315
+ return runPostinstallSelfHeal();
316
+ }
317
+
318
+ function normalizePostinstallExitCode(exitCode) {
319
+ return Number.isInteger(exitCode) && exitCode >= 0 && exitCode <= 255
320
+ ? exitCode
321
+ : 0;
322
+ }
323
+
222
324
  const isDirectRun = (() => {
223
325
  try {
224
326
  return resolve(process.argv[1] ?? "") === fileURLToPath(import.meta.url);
@@ -228,10 +330,14 @@ const isDirectRun = (() => {
228
330
  })();
229
331
 
230
332
  if (isDirectRun) {
231
- main().catch((error) => {
232
- console.error(
233
- `codex-multi-auth: app bind postinstall skipped: ${error instanceof Error ? error.message : String(error)}`,
234
- );
235
- process.exitCode = 0;
236
- });
333
+ main()
334
+ .then((exitCode) => {
335
+ process.exitCode = normalizePostinstallExitCode(exitCode);
336
+ })
337
+ .catch((error) => {
338
+ defaultPostinstallLog(
339
+ `postinstall self-heal skipped: ${error instanceof Error ? error.message : String(error)}`,
340
+ );
341
+ process.exitCode = 0;
342
+ });
237
343
  }