codex-multi-auth 2.0.1 → 2.1.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.
Files changed (143) hide show
  1. package/README.md +22 -8
  2. package/config/README.md +4 -4
  3. package/config/codex-legacy.json +571 -571
  4. package/config/codex-modern.json +258 -258
  5. package/config/minimal-codex.json +1 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +91 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/lib/account-policy.d.ts +22 -0
  10. package/dist/lib/account-policy.d.ts.map +1 -0
  11. package/dist/lib/account-policy.js +159 -0
  12. package/dist/lib/account-policy.js.map +1 -0
  13. package/dist/lib/accounts.d.ts.map +1 -1
  14. package/dist/lib/accounts.js +2 -1
  15. package/dist/lib/accounts.js.map +1 -1
  16. package/dist/lib/auth/device-auth.d.ts +46 -0
  17. package/dist/lib/auth/device-auth.d.ts.map +1 -0
  18. package/dist/lib/auth/device-auth.js +325 -0
  19. package/dist/lib/auth/device-auth.js.map +1 -0
  20. package/dist/lib/auth/index.d.ts +2 -0
  21. package/dist/lib/auth/index.d.ts.map +1 -1
  22. package/dist/lib/auth/index.js +1 -0
  23. package/dist/lib/auth/index.js.map +1 -1
  24. package/dist/lib/budget-guard.d.ts +39 -0
  25. package/dist/lib/budget-guard.d.ts.map +1 -0
  26. package/dist/lib/budget-guard.js +201 -0
  27. package/dist/lib/budget-guard.js.map +1 -0
  28. package/dist/lib/codex-manager/commands/account.d.ts +13 -0
  29. package/dist/lib/codex-manager/commands/account.d.ts.map +1 -0
  30. package/dist/lib/codex-manager/commands/account.js +156 -0
  31. package/dist/lib/codex-manager/commands/account.js.map +1 -0
  32. package/dist/lib/codex-manager/commands/bridge.d.ts +6 -0
  33. package/dist/lib/codex-manager/commands/bridge.d.ts.map +1 -0
  34. package/dist/lib/codex-manager/commands/bridge.js +100 -0
  35. package/dist/lib/codex-manager/commands/bridge.js.map +1 -0
  36. package/dist/lib/codex-manager/commands/budget.d.ts +12 -0
  37. package/dist/lib/codex-manager/commands/budget.d.ts.map +1 -0
  38. package/dist/lib/codex-manager/commands/budget.js +123 -0
  39. package/dist/lib/codex-manager/commands/budget.js.map +1 -0
  40. package/dist/lib/codex-manager/commands/integrations.d.ts +6 -0
  41. package/dist/lib/codex-manager/commands/integrations.d.ts.map +1 -0
  42. package/dist/lib/codex-manager/commands/integrations.js +78 -0
  43. package/dist/lib/codex-manager/commands/integrations.js.map +1 -0
  44. package/dist/lib/codex-manager/commands/models.d.ts +14 -0
  45. package/dist/lib/codex-manager/commands/models.d.ts.map +1 -0
  46. package/dist/lib/codex-manager/commands/models.js +74 -0
  47. package/dist/lib/codex-manager/commands/models.js.map +1 -0
  48. package/dist/lib/codex-manager/commands/monitor.d.ts +22 -0
  49. package/dist/lib/codex-manager/commands/monitor.d.ts.map +1 -0
  50. package/dist/lib/codex-manager/commands/monitor.js +94 -0
  51. package/dist/lib/codex-manager/commands/monitor.js.map +1 -0
  52. package/dist/lib/codex-manager/commands/rotation.d.ts +1 -0
  53. package/dist/lib/codex-manager/commands/rotation.d.ts.map +1 -1
  54. package/dist/lib/codex-manager/commands/rotation.js +293 -10
  55. package/dist/lib/codex-manager/commands/rotation.js.map +1 -1
  56. package/dist/lib/codex-manager/commands/usage.d.ts +13 -0
  57. package/dist/lib/codex-manager/commands/usage.d.ts.map +1 -0
  58. package/dist/lib/codex-manager/commands/usage.js +347 -0
  59. package/dist/lib/codex-manager/commands/usage.js.map +1 -0
  60. package/dist/lib/codex-manager/help.d.ts +1 -0
  61. package/dist/lib/codex-manager/help.d.ts.map +1 -1
  62. package/dist/lib/codex-manager/help.js +26 -1
  63. package/dist/lib/codex-manager/help.js.map +1 -1
  64. package/dist/lib/codex-manager.d.ts.map +1 -1
  65. package/dist/lib/codex-manager.js +64 -7
  66. package/dist/lib/codex-manager.js.map +1 -1
  67. package/dist/lib/config.d.ts.map +1 -1
  68. package/dist/lib/config.js +2 -22
  69. package/dist/lib/config.js.map +1 -1
  70. package/dist/lib/constants.d.ts +1 -0
  71. package/dist/lib/constants.d.ts.map +1 -1
  72. package/dist/lib/constants.js +1 -0
  73. package/dist/lib/constants.js.map +1 -1
  74. package/dist/lib/env-parsing.d.ts +21 -0
  75. package/dist/lib/env-parsing.d.ts.map +1 -0
  76. package/dist/lib/env-parsing.js +34 -0
  77. package/dist/lib/env-parsing.js.map +1 -0
  78. package/dist/lib/index.d.ts +9 -0
  79. package/dist/lib/index.d.ts.map +1 -1
  80. package/dist/lib/index.js +9 -0
  81. package/dist/lib/index.js.map +1 -1
  82. package/dist/lib/integration-generators.d.ts +14 -0
  83. package/dist/lib/integration-generators.d.ts.map +1 -0
  84. package/dist/lib/integration-generators.js +93 -0
  85. package/dist/lib/integration-generators.js.map +1 -0
  86. package/dist/lib/local-bridge.d.ts +17 -0
  87. package/dist/lib/local-bridge.d.ts.map +1 -0
  88. package/dist/lib/local-bridge.js +249 -0
  89. package/dist/lib/local-bridge.js.map +1 -0
  90. package/dist/lib/local-client-tokens.d.ts +37 -0
  91. package/dist/lib/local-client-tokens.d.ts.map +1 -0
  92. package/dist/lib/local-client-tokens.js +200 -0
  93. package/dist/lib/local-client-tokens.js.map +1 -0
  94. package/dist/lib/model-capability-matrix.d.ts +38 -0
  95. package/dist/lib/model-capability-matrix.d.ts.map +1 -0
  96. package/dist/lib/model-capability-matrix.js +89 -0
  97. package/dist/lib/model-capability-matrix.js.map +1 -0
  98. package/dist/lib/policy/runtime-policy.d.ts +59 -0
  99. package/dist/lib/policy/runtime-policy.d.ts.map +1 -0
  100. package/dist/lib/policy/runtime-policy.js +156 -0
  101. package/dist/lib/policy/runtime-policy.js.map +1 -0
  102. package/dist/lib/proactive-refresh.js +4 -4
  103. package/dist/lib/proactive-refresh.js.map +1 -1
  104. package/dist/lib/refresh-lease.d.ts.map +1 -1
  105. package/dist/lib/refresh-lease.js +1 -10
  106. package/dist/lib/refresh-lease.js.map +1 -1
  107. package/dist/lib/routing-profiles.d.ts +36 -0
  108. package/dist/lib/routing-profiles.d.ts.map +1 -0
  109. package/dist/lib/routing-profiles.js +203 -0
  110. package/dist/lib/routing-profiles.js.map +1 -0
  111. package/dist/lib/runtime-rotation-proxy.d.ts.map +1 -1
  112. package/dist/lib/runtime-rotation-proxy.js +96 -6
  113. package/dist/lib/runtime-rotation-proxy.js.map +1 -1
  114. package/dist/lib/schemas.d.ts +3 -0
  115. package/dist/lib/schemas.d.ts.map +1 -1
  116. package/dist/lib/schemas.js +1 -0
  117. package/dist/lib/schemas.js.map +1 -1
  118. package/dist/lib/usage/index.d.ts +5 -0
  119. package/dist/lib/usage/index.d.ts.map +1 -0
  120. package/dist/lib/usage/index.js +5 -0
  121. package/dist/lib/usage/index.js.map +1 -0
  122. package/dist/lib/usage/ledger.d.ts +12 -0
  123. package/dist/lib/usage/ledger.d.ts.map +1 -0
  124. package/dist/lib/usage/ledger.js +493 -0
  125. package/dist/lib/usage/ledger.js.map +1 -0
  126. package/dist/lib/usage/pricing.d.ts +11 -0
  127. package/dist/lib/usage/pricing.d.ts.map +1 -0
  128. package/dist/lib/usage/pricing.js +67 -0
  129. package/dist/lib/usage/pricing.js.map +1 -0
  130. package/dist/lib/usage/redaction.d.ts +10 -0
  131. package/dist/lib/usage/redaction.d.ts.map +1 -0
  132. package/dist/lib/usage/redaction.js +129 -0
  133. package/dist/lib/usage/redaction.js.map +1 -0
  134. package/dist/lib/usage/types.d.ts +89 -0
  135. package/dist/lib/usage/types.d.ts.map +1 -0
  136. package/dist/lib/usage/types.js +2 -0
  137. package/dist/lib/usage/types.js.map +1 -0
  138. package/package.json +1 -1
  139. package/scripts/bench-format/codex-host.mjs +142 -142
  140. package/scripts/bench-format/models.mjs +23 -23
  141. package/scripts/benchmark-edit-formats.mjs +9 -9
  142. package/scripts/codex-app-router.js +121 -121
  143. package/scripts/codex.js +165 -165
@@ -0,0 +1,347 @@
1
+ import { promises as fs } from "node:fs";
2
+ import { dirname, resolve } from "node:path";
3
+ import { sleep } from "../../utils.js";
4
+ import { readUsageLedgerRows, rotateUsageLedger, summarizeUsageRows, summarizeUsageLedger, } from "../../usage/index.js";
5
+ const VALID_GROUPS = new Set([
6
+ "model",
7
+ "account",
8
+ "project",
9
+ "outcome",
10
+ "day",
11
+ ]);
12
+ const RETRYABLE_WRITE_CODES = new Set(["EBUSY", "EPERM"]);
13
+ function parsePositiveInteger(rawValue) {
14
+ if (!/^\d+$/.test(rawValue.trim()))
15
+ return null;
16
+ const parsed = Number.parseInt(rawValue, 10);
17
+ return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : null;
18
+ }
19
+ function parseSinceValue(value) {
20
+ const trimmed = value.trim();
21
+ const relative = /^(\d+)(m|h|d|w)$/i.exec(trimmed);
22
+ if (relative?.[1] && relative[2]) {
23
+ const amount = Number.parseInt(relative[1], 10);
24
+ const unit = relative[2].toLowerCase();
25
+ const multiplier = unit === "m"
26
+ ? 60_000
27
+ : unit === "h"
28
+ ? 3_600_000
29
+ : unit === "d"
30
+ ? 86_400_000
31
+ : 604_800_000;
32
+ return Date.now() - amount * multiplier;
33
+ }
34
+ if (/^\d+$/.test(trimmed)) {
35
+ return Number.parseInt(trimmed, 10);
36
+ }
37
+ return trimmed;
38
+ }
39
+ function printUsageCommandHelp(logInfo) {
40
+ logInfo([
41
+ "Usage:",
42
+ " codex auth usage [--since <time|duration>] [--by <model|account|project|outcome|day>] [--json|--csv] [--out <path>]",
43
+ " codex auth usage rotate [--if-larger-than-bytes <bytes>] [--json]",
44
+ "",
45
+ "Options:",
46
+ " --since Filter rows by timestamp, ISO date, or relative duration like 24h, 7d, 2w",
47
+ " --by Group summary output (default: model)",
48
+ " --json, -j Print machine-readable JSON output",
49
+ " --csv Print or write CSV bucket output",
50
+ " --out Write output to a file path",
51
+ "",
52
+ "Notes:",
53
+ " - Usage rows contain local metadata only, not prompts, tokens, auth headers, raw emails, or raw account ids.",
54
+ ].join("\n"));
55
+ }
56
+ function parseUsageArgs(args) {
57
+ const options = {
58
+ by: "model",
59
+ json: false,
60
+ csv: false,
61
+ };
62
+ for (let i = 0; i < args.length; i += 1) {
63
+ const arg = args[i];
64
+ if (!arg)
65
+ continue;
66
+ if (arg === "--json" || arg === "-j") {
67
+ options.json = true;
68
+ continue;
69
+ }
70
+ if (arg === "--csv") {
71
+ options.csv = true;
72
+ continue;
73
+ }
74
+ if (arg === "--since") {
75
+ const value = args[i + 1];
76
+ if (!value)
77
+ return { ok: false, message: "Missing value for --since" };
78
+ options.since = parseSinceValue(value);
79
+ i += 1;
80
+ continue;
81
+ }
82
+ if (arg.startsWith("--since=")) {
83
+ const value = arg.slice("--since=".length).trim();
84
+ if (!value)
85
+ return { ok: false, message: "Missing value for --since" };
86
+ options.since = parseSinceValue(value);
87
+ continue;
88
+ }
89
+ if (arg === "--by") {
90
+ const value = args[i + 1];
91
+ if (!value)
92
+ return { ok: false, message: "Missing value for --by" };
93
+ if (!VALID_GROUPS.has(value)) {
94
+ return { ok: false, message: `Unknown --by value: ${value}` };
95
+ }
96
+ options.by = value;
97
+ i += 1;
98
+ continue;
99
+ }
100
+ if (arg.startsWith("--by=")) {
101
+ const value = arg.slice("--by=".length).trim();
102
+ if (!VALID_GROUPS.has(value)) {
103
+ return { ok: false, message: `Unknown --by value: ${value}` };
104
+ }
105
+ options.by = value;
106
+ continue;
107
+ }
108
+ if (arg === "--out") {
109
+ const value = args[i + 1];
110
+ if (!value)
111
+ return { ok: false, message: "Missing value for --out" };
112
+ options.outPath = value;
113
+ i += 1;
114
+ continue;
115
+ }
116
+ if (arg.startsWith("--out=")) {
117
+ const value = arg.slice("--out=".length).trim();
118
+ if (!value)
119
+ return { ok: false, message: "Missing value for --out" };
120
+ options.outPath = value;
121
+ continue;
122
+ }
123
+ return { ok: false, message: `Unknown usage option: ${arg}` };
124
+ }
125
+ if (options.json && options.csv) {
126
+ return { ok: false, message: "Cannot combine --json and --csv" };
127
+ }
128
+ return { ok: true, options };
129
+ }
130
+ function parseRotateArgs(args) {
131
+ const options = { json: false };
132
+ for (let i = 0; i < args.length; i += 1) {
133
+ const arg = args[i];
134
+ if (!arg)
135
+ continue;
136
+ if (arg === "--json" || arg === "-j") {
137
+ options.json = true;
138
+ continue;
139
+ }
140
+ if (arg === "--if-larger-than-bytes") {
141
+ const value = args[i + 1];
142
+ if (!value) {
143
+ return {
144
+ ok: false,
145
+ message: "Missing value for --if-larger-than-bytes",
146
+ };
147
+ }
148
+ const parsed = parsePositiveInteger(value);
149
+ if (parsed === null) {
150
+ return {
151
+ ok: false,
152
+ message: "--if-larger-than-bytes must be a positive integer",
153
+ };
154
+ }
155
+ options.ifLargerThanBytes = parsed;
156
+ i += 1;
157
+ continue;
158
+ }
159
+ if (arg.startsWith("--if-larger-than-bytes=")) {
160
+ const parsed = parsePositiveInteger(arg.slice("--if-larger-than-bytes=".length));
161
+ if (parsed === null) {
162
+ return {
163
+ ok: false,
164
+ message: "--if-larger-than-bytes must be a positive integer",
165
+ };
166
+ }
167
+ options.ifLargerThanBytes = parsed;
168
+ continue;
169
+ }
170
+ return { ok: false, message: `Unknown usage rotate option: ${arg}` };
171
+ }
172
+ return { ok: true, options };
173
+ }
174
+ function formatCurrency(value) {
175
+ return `$${value.toFixed(6)}`;
176
+ }
177
+ function formatTextSummary(summary) {
178
+ const lines = [
179
+ `Usage summary by ${summary.by}`,
180
+ `Requests: ${summary.totals.requests} (${summary.totals.successes} success, ${summary.totals.failures} failed, ${summary.totals.blocked} blocked, ${summary.totals.cancelled} cancelled)`,
181
+ `Tokens: ${summary.totals.totalTokens} total (${summary.totals.inputTokens} input, ${summary.totals.outputTokens} output, ${summary.totals.cachedInputTokens} cached, ${summary.totals.reasoningTokens} reasoning)`,
182
+ `Estimated cost: ${formatCurrency(summary.totals.costUsd)}`,
183
+ ];
184
+ if (summary.buckets.length === 0) {
185
+ lines.push("No usage rows found.");
186
+ return lines.join("\n");
187
+ }
188
+ lines.push("");
189
+ for (const bucket of summary.buckets) {
190
+ lines.push(`${bucket.key}: ${bucket.requests} request(s), ${bucket.totalTokens} token(s), ${formatCurrency(bucket.costUsd)}`);
191
+ }
192
+ return lines.join("\n");
193
+ }
194
+ function csvEscape(value) {
195
+ const text = String(value);
196
+ return /[",\r\n]/.test(text) ? `"${text.replace(/"/g, '""')}"` : text;
197
+ }
198
+ function bucketToCsvRow(bucket) {
199
+ return [
200
+ bucket.key,
201
+ bucket.requests,
202
+ bucket.successes,
203
+ bucket.failures,
204
+ bucket.blocked,
205
+ bucket.cancelled,
206
+ bucket.inputTokens,
207
+ bucket.outputTokens,
208
+ bucket.cachedInputTokens,
209
+ bucket.reasoningTokens,
210
+ bucket.totalTokens,
211
+ bucket.costUsd.toFixed(8),
212
+ ]
213
+ .map(csvEscape)
214
+ .join(",");
215
+ }
216
+ function formatCsvSummary(summary) {
217
+ return [
218
+ "key,requests,successes,failures,blocked,cancelled,inputTokens,outputTokens,cachedInputTokens,reasoningTokens,totalTokens,costUsd",
219
+ ...summary.buckets.map(bucketToCsvRow),
220
+ ...(summary.buckets.length === 0 ? [bucketToCsvRow(summary.totals)] : []),
221
+ ].join("\n");
222
+ }
223
+ function rowsToJsonPayload(summary, rows) {
224
+ return JSON.stringify({
225
+ command: "usage",
226
+ summary,
227
+ rows,
228
+ }, null, 2);
229
+ }
230
+ function isRetryableWriteError(error) {
231
+ const code = error?.code;
232
+ return typeof code === "string" && RETRYABLE_WRITE_CODES.has(code);
233
+ }
234
+ async function defaultWriteFile(path, contents) {
235
+ await fs.mkdir(dirname(path), { recursive: true });
236
+ const tempPath = `${path}.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2, 8)}.tmp`;
237
+ let moved = false;
238
+ try {
239
+ await fs.writeFile(tempPath, contents, "utf-8");
240
+ for (let attempt = 0; attempt < 5; attempt += 1) {
241
+ try {
242
+ await fs.rename(tempPath, path);
243
+ moved = true;
244
+ return;
245
+ }
246
+ catch (error) {
247
+ if (!isRetryableWriteError(error) || attempt >= 4)
248
+ throw error;
249
+ await sleep(10 * 2 ** attempt);
250
+ }
251
+ }
252
+ }
253
+ finally {
254
+ if (!moved) {
255
+ try {
256
+ await fs.unlink(tempPath);
257
+ }
258
+ catch {
259
+ // Best-effort temp cleanup.
260
+ }
261
+ }
262
+ }
263
+ }
264
+ export async function runUsageCommand(args, deps = {}) {
265
+ const logInfo = deps.logInfo ?? console.log;
266
+ const logError = deps.logError ?? console.error;
267
+ if (args.includes("--help") || args.includes("-h")) {
268
+ printUsageCommandHelp(logInfo);
269
+ return 0;
270
+ }
271
+ const [subcommand, ...rest] = args;
272
+ if (subcommand === "rotate") {
273
+ const parsed = parseRotateArgs(rest);
274
+ if (!parsed.ok) {
275
+ logError(parsed.message);
276
+ return 1;
277
+ }
278
+ let rotatedPath;
279
+ try {
280
+ rotatedPath = await (deps.rotateLedger ?? rotateUsageLedger)({
281
+ ifLargerThanBytes: parsed.options.ifLargerThanBytes,
282
+ });
283
+ }
284
+ catch (error) {
285
+ logError(`Failed to rotate usage ledger: ${error instanceof Error ? error.message : String(error)}`);
286
+ return 1;
287
+ }
288
+ if (parsed.options.json) {
289
+ logInfo(JSON.stringify({
290
+ command: "usage rotate",
291
+ rotated: rotatedPath !== null,
292
+ path: rotatedPath,
293
+ }));
294
+ }
295
+ else {
296
+ logInfo(rotatedPath
297
+ ? `Usage ledger rotated: ${rotatedPath}`
298
+ : "Usage ledger rotation skipped.");
299
+ }
300
+ return 0;
301
+ }
302
+ const parsed = parseUsageArgs(args);
303
+ if (!parsed.ok) {
304
+ logError(parsed.message);
305
+ printUsageCommandHelp(logInfo);
306
+ return 1;
307
+ }
308
+ const options = parsed.options;
309
+ const query = { since: options.since, by: options.by };
310
+ let summary;
311
+ let rows = [];
312
+ try {
313
+ if (options.json) {
314
+ rows = await (deps.readRows ?? readUsageLedgerRows)(query);
315
+ summary = (deps.summarizeRows ?? summarizeUsageRows)(rows, query);
316
+ }
317
+ else {
318
+ summary = await (deps.summarizeUsage ?? summarizeUsageLedger)(query);
319
+ }
320
+ }
321
+ catch (error) {
322
+ logError(`Failed to read usage ledger: ${error instanceof Error ? error.message : String(error)}`);
323
+ return 1;
324
+ }
325
+ const rendered = options.json
326
+ ? rowsToJsonPayload(summary, rows)
327
+ : options.csv
328
+ ? formatCsvSummary(summary)
329
+ : formatTextSummary(summary);
330
+ if (options.outPath) {
331
+ const outputPath = resolve(deps.getCwd?.() ?? process.cwd(), options.outPath);
332
+ try {
333
+ await (deps.writeFile ?? defaultWriteFile)(outputPath, `${rendered}\n`);
334
+ }
335
+ catch (error) {
336
+ logError(`Failed to write usage report: ${error instanceof Error ? error.message : String(error)}`);
337
+ return 1;
338
+ }
339
+ if (!options.json && !options.csv) {
340
+ logInfo(`Usage report written: ${outputPath}`);
341
+ }
342
+ return 0;
343
+ }
344
+ logInfo(rendered);
345
+ return 0;
346
+ }
347
+ //# sourceMappingURL=usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../../lib/codex-manager/commands/usage.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  export declare function printUsage(): void;
2
2
  export type AuthLoginOptions = {
3
3
  manual: boolean;
4
+ deviceAuth: boolean;
4
5
  };
5
6
  export type ParsedAuthLoginArgs = {
6
7
  ok: true;
@@ -1 +1 @@
1
- {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../../lib/codex-manager/help.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,IAAI,IAAI,CAsCjC;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC9B,MAAM,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAC5B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GACvC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,mBAAmB,CAqBtE;AAED,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,MAAM,cAAc,GACvB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE,GACrC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnD,wBAAgB,cAAc,IAAI,IAAI,CAgBrC;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,cAAc,CAyD5D"}
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../../lib/codex-manager/help.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,IAAI,IAAI,CA8CjC;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAC5B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GACvC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,mBAAmB,CAwCtE;AAED,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,MAAM,cAAc,GACvB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE,GACrC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnD,wBAAgB,cAAc,IAAI,IAAI,CAgBrC;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,cAAc,CAyD5D"}
@@ -3,7 +3,7 @@ export function printUsage() {
3
3
  "Codex Multi-Auth CLI",
4
4
  "",
5
5
  "Start here:",
6
- " codex auth login [--manual|--no-browser]",
6
+ " codex auth login [--device-auth|--manual|--no-browser]",
7
7
  " codex auth status",
8
8
  " codex auth check",
9
9
  "",
@@ -12,6 +12,7 @@ export function printUsage() {
12
12
  " codex auth switch <index>",
13
13
  " codex auth best [--live] [--json] [--model <model>]",
14
14
  " codex auth forecast [--live] [--json] [--model <model>]",
15
+ " codex auth account tag|untag|weight|pause|unpause|drain|undrain|note ...",
15
16
  "",
16
17
  "Repair:",
17
18
  " codex auth verify-flagged [--dry-run] [--json] [--no-restore]",
@@ -20,7 +21,14 @@ export function printUsage() {
20
21
  " codex auth doctor [--json] [--fix] [--dry-run]",
21
22
  "",
22
23
  "Diagnostics:",
24
+ " codex auth usage [--since <time|duration>] [--by <group>] [--json|--csv] [--out <path>]",
25
+ " codex auth budget limit|check|list ...",
26
+ " codex auth bridge token create|list|rotate|revoke",
27
+ " codex auth integrations [--kind <name>] [--base-url <url>] [--model <model>] [--json]",
28
+ " codex auth models [--json] [--model <model>]",
29
+ " codex auth monitor [--json]",
23
30
  " codex auth rotation <enable|disable|status|bind-app|unbind-app>",
31
+ " codex auth rotation reset-rate-limits [--all | --account <idx>] [--dry-run] [--json]",
24
32
  " codex auth why-selected [--now | --last] [--json]",
25
33
  "",
26
34
  "Advanced:",
@@ -38,10 +46,19 @@ export function printUsage() {
38
46
  export function parseAuthLoginArgs(args) {
39
47
  const options = {
40
48
  manual: false,
49
+ deviceAuth: false,
41
50
  };
51
+ const manualFlags = [];
42
52
  for (const arg of args) {
43
53
  if (arg === "--manual" || arg === "--no-browser") {
44
54
  options.manual = true;
55
+ if (!manualFlags.includes(arg)) {
56
+ manualFlags.push(arg);
57
+ }
58
+ continue;
59
+ }
60
+ if (arg === "--device-auth") {
61
+ options.deviceAuth = true;
45
62
  continue;
46
63
  }
47
64
  if (arg === "--help" || arg === "-h") {
@@ -53,6 +70,14 @@ export function parseAuthLoginArgs(args) {
53
70
  message: `Unknown login option: ${arg}`,
54
71
  };
55
72
  }
73
+ if (options.deviceAuth && options.manual) {
74
+ const conflict = manualFlags.length > 0 ? manualFlags.join(" or ") : "--manual";
75
+ return {
76
+ ok: false,
77
+ reason: "error",
78
+ message: `Cannot combine --device-auth with ${conflict}`,
79
+ };
80
+ }
56
81
  return { ok: true, options };
57
82
  }
58
83
  export function printBestUsage() {
@@ -1 +1 @@
1
- {"version":3,"file":"help.js","sourceRoot":"","sources":["../../../lib/codex-manager/help.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU;IACzB,OAAO,CAAC,GAAG,CACV;QACC,sBAAsB;QACtB,EAAE;QACF,aAAa;QACb,4CAA4C;QAC5C,qBAAqB;QACrB,oBAAoB;QACpB,EAAE;QACF,YAAY;QACZ,mBAAmB;QACnB,6BAA6B;QAC7B,uDAAuD;QACvD,2DAA2D;QAC3D,EAAE;QACF,SAAS;QACT,iEAAiE;QACjE,4DAA4D;QAC5D,kEAAkE;QAClE,kDAAkD;QAClD,EAAE;QACF,cAAc;QACd,mEAAmE;QACnE,qDAAqD;QACrD,EAAE;QACF,WAAW;QACX,oFAAoF;QACpF,sCAAsC;QACtC,oCAAoC;QACpC,uBAAuB;QACvB,EAAE;QACF,QAAQ;QACR,yDAAyD;QACzD,oDAAoD;QACpD,yEAAyE;KACzE,CAAC,IAAI,CAAC,IAAI,CAAC,CACZ,CAAC;AACH,CAAC;AAWD,MAAM,UAAU,kBAAkB,CAAC,IAAc;IAChD,MAAM,OAAO,GAAqB;QACjC,MAAM,EAAE,KAAK;KACb,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,cAAc,EAAE,CAAC;YAClD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YACtB,SAAS;QACV,CAAC;QACD,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACtC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QACtC,CAAC;QACD,OAAO;YACN,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,yBAAyB,GAAG,EAAE;SACvC,CAAC;IACH,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC;AAcD,MAAM,UAAU,cAAc;IAC7B,OAAO,CAAC,GAAG,CACV;QACC,QAAQ;QACR,uDAAuD;QACvD,EAAE;QACF,UAAU;QACV,kFAAkF;QAClF,yDAAyD;QACzD,yEAAyE;QACzE,EAAE;QACF,WAAW;QACX,2DAA2D;QAC3D,uEAAuE;KACvE,CAAC,IAAI,CAAC,IAAI,CAAC,CACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAc;IAC3C,MAAM,OAAO,GAAmB;QAC/B,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,eAAe;QACtB,aAAa,EAAE,KAAK;KACpB,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACtC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QACtC,CAAC;QACD,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACtC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;YACpB,SAAS;QACV,CAAC;QACD,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACtC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;YACpB,SAAS;QACV,CAAC;QACD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACZ,OAAO;oBACN,EAAE,EAAE,KAAK;oBACT,MAAM,EAAE,OAAO;oBACf,OAAO,EAAE,2BAA2B;iBACpC,CAAC;YACH,CAAC;YACD,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;YACtB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;YAC7B,CAAC,IAAI,CAAC,CAAC;YACP,SAAS;QACV,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YAClD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACZ,OAAO;oBACN,EAAE,EAAE,KAAK;oBACT,MAAM,EAAE,OAAO;oBACf,OAAO,EAAE,2BAA2B;iBACpC,CAAC;YACH,CAAC;YACD,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;YACtB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;YAC7B,SAAS;QACV,CAAC;QACD,OAAO;YACN,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,mBAAmB,GAAG,EAAE;SACjC,CAAC;IACH,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC"}
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../../lib/codex-manager/help.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"codex-manager.d.ts","sourceRoot":"","sources":["../../lib/codex-manager.ts"],"names":[],"mappings":"AA65CA,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQ3D;AAwuDD,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,OAAO,CAAC,CAuGrE;AAuCD,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAwL7E"}
1
+ {"version":3,"file":"codex-manager.d.ts","sourceRoot":"","sources":["../../lib/codex-manager.ts"],"names":[],"mappings":"AA86CA,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQ3D;AA+vDD,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,OAAO,CAAC,CAuGrE;AAuCD,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAwN7E"}
@@ -2,14 +2,22 @@ import { stdin as input, stdout as output } from "node:process";
2
2
  import { createInterface } from "node:readline/promises";
3
3
  import { extractAccountEmail, extractAccountId, formatAccountLabel, formatWaitTime, getAccountIdCandidates, resolveRequestAccountId, sanitizeEmail, selectBestAccountCandidate, shouldUpdateAccountIdFromToken, } from "./accounts.js";
4
4
  import { createAuthorizationFlow, exchangeAuthorizationCode, parseAuthorizationInput, redactOAuthUrlForLog, REDIRECT_URI, } from "./auth/auth.js";
5
+ import { runDeviceAuthFlow } from "./auth/device-auth.js";
5
6
  import { copyTextToClipboard, isBrowserLaunchSuppressed, openBrowserUrl, } from "./auth/browser.js";
6
7
  import { startLocalOAuthServer } from "./auth/server.js";
7
8
  import { promptAddAnotherAccount, promptLoginMode, } from "./cli.js";
8
9
  import { loadCodexCliState } from "./codex-cli/state.js";
9
10
  import { setCodexCliActiveSelection } from "./codex-cli/writer.js";
10
11
  import { runBestCommand, } from "./codex-manager/commands/best.js";
12
+ import { runAccountCommand } from "./codex-manager/commands/account.js";
13
+ import { runBudgetCommand } from "./codex-manager/commands/budget.js";
14
+ import { runBridgeCommand } from "./codex-manager/commands/bridge.js";
11
15
  import { runCheckCommand } from "./codex-manager/commands/check.js";
16
+ import { runIntegrationsCommand } from "./codex-manager/commands/integrations.js";
17
+ import { runModelsCommand } from "./codex-manager/commands/models.js";
18
+ import { runMonitorCommand } from "./codex-manager/commands/monitor.js";
12
19
  import { runConfigExplainCommand } from "./codex-manager/commands/config-explain.js";
20
+ import { saveAccountsWithRetry } from "./codex-manager/forecast-report-shared.js";
13
21
  import { runDebugBundleCommand } from "./codex-manager/commands/debug-bundle.js";
14
22
  import { parseWhySelectedArgs, printWhySelectedUsage, runWhySelectedCommand, } from "./codex-manager/commands/why-selected.js";
15
23
  import { parseVerifyArgs, printVerifyUsage, runVerifyCommand, } from "./codex-manager/commands/verify.js";
@@ -23,6 +31,7 @@ import { runRotationCommand } from "./codex-manager/commands/rotation.js";
23
31
  import { runFeaturesCommand, runStatusCommand, } from "./codex-manager/commands/status.js";
24
32
  import { loadPersistedRuntimeObservabilitySnapshot } from "./runtime/runtime-observability.js";
25
33
  import { runSwitchCommand } from "./codex-manager/commands/switch.js";
34
+ import { runUsageCommand } from "./codex-manager/commands/usage.js";
26
35
  import { parseAuthLoginArgs, printUsage } from "./codex-manager/help.js";
27
36
  import { applyUiThemeFromDashboardSettings, configureUnifiedSettings, resolveMenuLayoutMode, } from "./codex-manager/settings-hub.js";
28
37
  import { getCodexRuntimeRotationProxy, getPluginConfigExplainReport, loadPluginConfig, savePluginConfig, } from "./config.js";
@@ -1435,6 +1444,18 @@ async function runOAuthFlow(forceNewLogin, signInMode) {
1435
1444
  }
1436
1445
  return exchangeAuthorizationCode(code, pkce.verifier, REDIRECT_URI);
1437
1446
  }
1447
+ async function runSignInFlow(forceNewLogin, signInMode, options = {}) {
1448
+ if (signInMode === "device") {
1449
+ // OpenAI owns the device-code account picker; there is no force-new-login
1450
+ // equivalent to pass through for this mode.
1451
+ // TODO: Thread a manager-level AbortSignal when login cancellation exists.
1452
+ return runDeviceAuthFlow({
1453
+ log: console.log,
1454
+ timeoutMs: options.timeoutMs,
1455
+ });
1456
+ }
1457
+ return runOAuthFlow(forceNewLogin, signInMode);
1458
+ }
1438
1459
  async function persistAccountPool(results, replaceAll) {
1439
1460
  if (results.length === 0)
1440
1461
  return;
@@ -1713,7 +1734,7 @@ async function runHealthCheck(options = {}) {
1713
1734
  await saveQuotaCache(workingQuotaCache);
1714
1735
  }
1715
1736
  if (changed) {
1716
- await saveAccounts(storage);
1737
+ await saveAccountsWithRetry(storage, saveAccounts);
1717
1738
  }
1718
1739
  if (activeAccountRefreshed &&
1719
1740
  activeIndex >= 0 &&
@@ -2173,9 +2194,11 @@ async function runAuthLogin(args) {
2173
2194
  while (true) {
2174
2195
  const latestNamedBackup = namedBackups[0] ?? null;
2175
2196
  const preferManualMode = loginOptions.manual || isBrowserLaunchSuppressed();
2176
- const signInMode = preferManualMode
2177
- ? "manual"
2178
- : await promptOAuthSignInMode(latestNamedBackup, onboardingBackupDiscoveryWarning);
2197
+ const signInMode = loginOptions.deviceAuth
2198
+ ? "device"
2199
+ : preferManualMode
2200
+ ? "manual"
2201
+ : await promptOAuthSignInMode(latestNamedBackup, onboardingBackupDiscoveryWarning);
2179
2202
  if (signInMode === "cancel") {
2180
2203
  if (existingCount > 0) {
2181
2204
  console.log(stylePromptText(UI_COPY.oauth.cancelledBackToMenu, "muted"));
@@ -2243,10 +2266,12 @@ async function runAuthLogin(args) {
2243
2266
  }
2244
2267
  continue loginFlow;
2245
2268
  }
2246
- if (signInMode !== "browser" && signInMode !== "manual") {
2269
+ if (signInMode !== "browser" &&
2270
+ signInMode !== "manual" &&
2271
+ signInMode !== "device") {
2247
2272
  continue;
2248
2273
  }
2249
- const tokenResult = await runOAuthFlow(forceNewLogin, signInMode);
2274
+ const tokenResult = await runSignInFlow(forceNewLogin, signInMode);
2250
2275
  if (tokenResult.type !== "success") {
2251
2276
  if (isOAuthCancellation(tokenResult)) {
2252
2277
  if (existingCount > 0) {
@@ -2345,7 +2370,7 @@ async function persistAndSyncSelectedAccount({ storage, targetIndex, parsed, swi
2345
2370
  }
2346
2371
  account.lastUsed = switchNow;
2347
2372
  account.lastSwitchReason = switchReason;
2348
- await saveAccounts(storage);
2373
+ await saveAccountsWithRetry(storage, saveAccounts);
2349
2374
  const synced = await setCodexCliActiveSelection({
2350
2375
  accountId: account.accountId,
2351
2376
  email: account.email,
@@ -2568,6 +2593,34 @@ export async function runCodexMultiAuthCli(rawArgs) {
2568
2593
  if (command === "best") {
2569
2594
  return runBest(rest);
2570
2595
  }
2596
+ if (command === "account") {
2597
+ return runAccountCommand(rest, {
2598
+ setStoragePath,
2599
+ loadAccounts,
2600
+ });
2601
+ }
2602
+ if (command === "budget") {
2603
+ return runBudgetCommand(rest);
2604
+ }
2605
+ if (command === "bridge") {
2606
+ return runBridgeCommand(rest);
2607
+ }
2608
+ if (command === "integrations") {
2609
+ return runIntegrationsCommand(rest);
2610
+ }
2611
+ if (command === "models") {
2612
+ return runModelsCommand(rest, {
2613
+ setStoragePath,
2614
+ loadAccounts,
2615
+ loadQuotaCache,
2616
+ });
2617
+ }
2618
+ if (command === "monitor") {
2619
+ return runMonitorCommand(rest, {
2620
+ setStoragePath,
2621
+ loadAccounts,
2622
+ });
2623
+ }
2571
2624
  if (command === "report") {
2572
2625
  return runReportCommand(rest, {
2573
2626
  setStoragePath,
@@ -2584,6 +2637,9 @@ export async function runCodexMultiAuthCli(rawArgs) {
2584
2637
  loadRuntimeObservabilitySnapshot: loadPersistedRuntimeObservabilitySnapshot,
2585
2638
  });
2586
2639
  }
2640
+ if (command === "usage") {
2641
+ return runUsageCommand(rest);
2642
+ }
2587
2643
  if (command === "rotation") {
2588
2644
  return runRotationCommand(rest, {
2589
2645
  loadPluginConfig,
@@ -2592,6 +2648,7 @@ export async function runCodexMultiAuthCli(rawArgs) {
2592
2648
  setStoragePath,
2593
2649
  getStoragePath,
2594
2650
  loadAccounts,
2651
+ saveAccounts,
2595
2652
  resolveActiveIndex,
2596
2653
  bindCodexApp: bindCodexAppRuntimeRotation,
2597
2654
  unbindCodexApp: unbindCodexAppRuntimeRotation,