codex-multi-auth 2.0.2 → 2.1.1

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 (122) hide show
  1. package/README.md +17 -5
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +91 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/account-policy.d.ts +22 -0
  6. package/dist/lib/account-policy.d.ts.map +1 -0
  7. package/dist/lib/account-policy.js +159 -0
  8. package/dist/lib/account-policy.js.map +1 -0
  9. package/dist/lib/accounts.d.ts.map +1 -1
  10. package/dist/lib/accounts.js +2 -1
  11. package/dist/lib/accounts.js.map +1 -1
  12. package/dist/lib/budget-guard.d.ts +39 -0
  13. package/dist/lib/budget-guard.d.ts.map +1 -0
  14. package/dist/lib/budget-guard.js +201 -0
  15. package/dist/lib/budget-guard.js.map +1 -0
  16. package/dist/lib/codex-manager/commands/account.d.ts +13 -0
  17. package/dist/lib/codex-manager/commands/account.d.ts.map +1 -0
  18. package/dist/lib/codex-manager/commands/account.js +156 -0
  19. package/dist/lib/codex-manager/commands/account.js.map +1 -0
  20. package/dist/lib/codex-manager/commands/bridge.d.ts +6 -0
  21. package/dist/lib/codex-manager/commands/bridge.d.ts.map +1 -0
  22. package/dist/lib/codex-manager/commands/bridge.js +167 -0
  23. package/dist/lib/codex-manager/commands/bridge.js.map +1 -0
  24. package/dist/lib/codex-manager/commands/budget.d.ts +12 -0
  25. package/dist/lib/codex-manager/commands/budget.d.ts.map +1 -0
  26. package/dist/lib/codex-manager/commands/budget.js +123 -0
  27. package/dist/lib/codex-manager/commands/budget.js.map +1 -0
  28. package/dist/lib/codex-manager/commands/integrations.d.ts +6 -0
  29. package/dist/lib/codex-manager/commands/integrations.d.ts.map +1 -0
  30. package/dist/lib/codex-manager/commands/integrations.js +78 -0
  31. package/dist/lib/codex-manager/commands/integrations.js.map +1 -0
  32. package/dist/lib/codex-manager/commands/models.d.ts +14 -0
  33. package/dist/lib/codex-manager/commands/models.d.ts.map +1 -0
  34. package/dist/lib/codex-manager/commands/models.js +74 -0
  35. package/dist/lib/codex-manager/commands/models.js.map +1 -0
  36. package/dist/lib/codex-manager/commands/monitor.d.ts +22 -0
  37. package/dist/lib/codex-manager/commands/monitor.d.ts.map +1 -0
  38. package/dist/lib/codex-manager/commands/monitor.js +94 -0
  39. package/dist/lib/codex-manager/commands/monitor.js.map +1 -0
  40. package/dist/lib/codex-manager/commands/rotation.d.ts +1 -0
  41. package/dist/lib/codex-manager/commands/rotation.d.ts.map +1 -1
  42. package/dist/lib/codex-manager/commands/rotation.js +293 -10
  43. package/dist/lib/codex-manager/commands/rotation.js.map +1 -1
  44. package/dist/lib/codex-manager/commands/usage.d.ts +13 -0
  45. package/dist/lib/codex-manager/commands/usage.d.ts.map +1 -0
  46. package/dist/lib/codex-manager/commands/usage.js +347 -0
  47. package/dist/lib/codex-manager/commands/usage.js.map +1 -0
  48. package/dist/lib/codex-manager/help.d.ts.map +1 -1
  49. package/dist/lib/codex-manager/help.js +8 -0
  50. package/dist/lib/codex-manager/help.js.map +1 -1
  51. package/dist/lib/codex-manager.d.ts.map +1 -1
  52. package/dist/lib/codex-manager.js +42 -2
  53. package/dist/lib/codex-manager.js.map +1 -1
  54. package/dist/lib/config.d.ts.map +1 -1
  55. package/dist/lib/config.js +2 -22
  56. package/dist/lib/config.js.map +1 -1
  57. package/dist/lib/constants.d.ts +1 -0
  58. package/dist/lib/constants.d.ts.map +1 -1
  59. package/dist/lib/constants.js +1 -0
  60. package/dist/lib/constants.js.map +1 -1
  61. package/dist/lib/env-parsing.d.ts +21 -0
  62. package/dist/lib/env-parsing.d.ts.map +1 -0
  63. package/dist/lib/env-parsing.js +34 -0
  64. package/dist/lib/env-parsing.js.map +1 -0
  65. package/dist/lib/index.d.ts +9 -0
  66. package/dist/lib/index.d.ts.map +1 -1
  67. package/dist/lib/index.js +9 -0
  68. package/dist/lib/index.js.map +1 -1
  69. package/dist/lib/integration-generators.d.ts +14 -0
  70. package/dist/lib/integration-generators.d.ts.map +1 -0
  71. package/dist/lib/integration-generators.js +93 -0
  72. package/dist/lib/integration-generators.js.map +1 -0
  73. package/dist/lib/local-bridge.d.ts +17 -0
  74. package/dist/lib/local-bridge.d.ts.map +1 -0
  75. package/dist/lib/local-bridge.js +249 -0
  76. package/dist/lib/local-bridge.js.map +1 -0
  77. package/dist/lib/local-client-tokens.d.ts +37 -0
  78. package/dist/lib/local-client-tokens.d.ts.map +1 -0
  79. package/dist/lib/local-client-tokens.js +200 -0
  80. package/dist/lib/local-client-tokens.js.map +1 -0
  81. package/dist/lib/model-capability-matrix.d.ts +38 -0
  82. package/dist/lib/model-capability-matrix.d.ts.map +1 -0
  83. package/dist/lib/model-capability-matrix.js +89 -0
  84. package/dist/lib/model-capability-matrix.js.map +1 -0
  85. package/dist/lib/policy/runtime-policy.d.ts +59 -0
  86. package/dist/lib/policy/runtime-policy.d.ts.map +1 -0
  87. package/dist/lib/policy/runtime-policy.js +156 -0
  88. package/dist/lib/policy/runtime-policy.js.map +1 -0
  89. package/dist/lib/proactive-refresh.js +4 -4
  90. package/dist/lib/proactive-refresh.js.map +1 -1
  91. package/dist/lib/refresh-lease.d.ts.map +1 -1
  92. package/dist/lib/refresh-lease.js +1 -10
  93. package/dist/lib/refresh-lease.js.map +1 -1
  94. package/dist/lib/routing-profiles.d.ts +36 -0
  95. package/dist/lib/routing-profiles.d.ts.map +1 -0
  96. package/dist/lib/routing-profiles.js +203 -0
  97. package/dist/lib/routing-profiles.js.map +1 -0
  98. package/dist/lib/runtime-rotation-proxy.d.ts.map +1 -1
  99. package/dist/lib/runtime-rotation-proxy.js +96 -6
  100. package/dist/lib/runtime-rotation-proxy.js.map +1 -1
  101. package/dist/lib/usage/index.d.ts +5 -0
  102. package/dist/lib/usage/index.d.ts.map +1 -0
  103. package/dist/lib/usage/index.js +5 -0
  104. package/dist/lib/usage/index.js.map +1 -0
  105. package/dist/lib/usage/ledger.d.ts +12 -0
  106. package/dist/lib/usage/ledger.d.ts.map +1 -0
  107. package/dist/lib/usage/ledger.js +493 -0
  108. package/dist/lib/usage/ledger.js.map +1 -0
  109. package/dist/lib/usage/pricing.d.ts +11 -0
  110. package/dist/lib/usage/pricing.d.ts.map +1 -0
  111. package/dist/lib/usage/pricing.js +67 -0
  112. package/dist/lib/usage/pricing.js.map +1 -0
  113. package/dist/lib/usage/redaction.d.ts +10 -0
  114. package/dist/lib/usage/redaction.d.ts.map +1 -0
  115. package/dist/lib/usage/redaction.js +129 -0
  116. package/dist/lib/usage/redaction.js.map +1 -0
  117. package/dist/lib/usage/types.d.ts +89 -0
  118. package/dist/lib/usage/types.d.ts.map +1 -0
  119. package/dist/lib/usage/types.js +2 -0
  120. package/dist/lib/usage/types.js.map +1 -0
  121. package/package.json +1 -1
  122. package/scripts/codex-routing.js +19 -12
@@ -0,0 +1,201 @@
1
+ import { existsSync, promises as fs } from "node:fs";
2
+ import { basename, join } from "node:path";
3
+ import { logWarn } from "./logger.js";
4
+ import { getCodexMultiAuthDir } from "./runtime-paths.js";
5
+ import { isRecord, sleep } from "./utils.js";
6
+ const BUDGET_GUARD_FILE_NAME = "budget-guards.json";
7
+ const RETRYABLE_FS_CODES = new Set(["EBUSY", "EPERM"]);
8
+ const VALID_WINDOWS = new Set(["hour", "day", "week", "month"]);
9
+ let writeQueue = Promise.resolve();
10
+ function isRetryableFsError(error) {
11
+ const code = error?.code;
12
+ return typeof code === "string" && RETRYABLE_FS_CODES.has(code);
13
+ }
14
+ function normalizeKey(value) {
15
+ const normalized = value.trim().toLowerCase().replace(/[^a-z0-9._:-]+/g, "-");
16
+ return normalized.length > 0 ? normalized.slice(0, 100) : null;
17
+ }
18
+ function normalizePositiveNumber(value) {
19
+ return typeof value === "number" && Number.isFinite(value) && value > 0
20
+ ? value
21
+ : undefined;
22
+ }
23
+ function normalizeLimit(key, value) {
24
+ if (!isRecord(value))
25
+ return null;
26
+ const window = typeof value.window === "string" && VALID_WINDOWS.has(value.window)
27
+ ? value.window
28
+ : null;
29
+ if (!window)
30
+ return null;
31
+ return {
32
+ key,
33
+ window,
34
+ maxRequests: normalizePositiveNumber(value.maxRequests),
35
+ maxTokens: normalizePositiveNumber(value.maxTokens),
36
+ maxCostUsd: normalizePositiveNumber(value.maxCostUsd),
37
+ updatedAt: typeof value.updatedAt === "number" && Number.isFinite(value.updatedAt)
38
+ ? value.updatedAt
39
+ : 0,
40
+ };
41
+ }
42
+ function emptyStore() {
43
+ return { version: 1, limits: {} };
44
+ }
45
+ function normalizeStore(value) {
46
+ if (!isRecord(value) || value.version !== 1)
47
+ return emptyStore();
48
+ const limits = {};
49
+ if (isRecord(value.limits)) {
50
+ for (const [rawKey, raw] of Object.entries(value.limits)) {
51
+ const key = normalizeKey(rawKey);
52
+ if (!key)
53
+ continue;
54
+ const limit = normalizeLimit(key, raw);
55
+ if (limit)
56
+ limits[key] = limit;
57
+ }
58
+ }
59
+ return { version: 1, limits };
60
+ }
61
+ async function readFileWithRetry(path) {
62
+ let lastError;
63
+ for (let attempt = 0; attempt < 5; attempt += 1) {
64
+ try {
65
+ return await fs.readFile(path, "utf8");
66
+ }
67
+ catch (error) {
68
+ lastError = error;
69
+ if (!isRetryableFsError(error) || attempt >= 4)
70
+ throw error;
71
+ await sleep(10 * 2 ** attempt);
72
+ }
73
+ }
74
+ throw lastError instanceof Error
75
+ ? lastError
76
+ : new Error("budget guard read retry exhausted");
77
+ }
78
+ export function getBudgetGuardPath() {
79
+ return join(getCodexMultiAuthDir(), BUDGET_GUARD_FILE_NAME);
80
+ }
81
+ export function normalizeBudgetKey(value) {
82
+ return normalizeKey(value);
83
+ }
84
+ export async function loadBudgetGuardStore() {
85
+ const path = getBudgetGuardPath();
86
+ if (!existsSync(path))
87
+ return emptyStore();
88
+ try {
89
+ return normalizeStore(JSON.parse(await readFileWithRetry(path)));
90
+ }
91
+ catch (error) {
92
+ logWarn(`Failed to load budget guards from ${basename(path)}: ${error instanceof Error ? error.message : String(error)}`);
93
+ return emptyStore();
94
+ }
95
+ }
96
+ export async function saveBudgetGuardStore(store) {
97
+ const path = getBudgetGuardPath();
98
+ const payload = normalizeStore(store);
99
+ const task = async () => {
100
+ await fs.mkdir(getCodexMultiAuthDir(), { recursive: true, mode: 0o700 });
101
+ const tempPath = `${path}.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2, 8)}.tmp`;
102
+ let moved = false;
103
+ try {
104
+ await fs.writeFile(tempPath, `${JSON.stringify(payload, null, 2)}\n`, {
105
+ encoding: "utf8",
106
+ mode: 0o600,
107
+ });
108
+ for (let attempt = 0; attempt < 5; attempt += 1) {
109
+ try {
110
+ await fs.rename(tempPath, path);
111
+ moved = true;
112
+ return;
113
+ }
114
+ catch (error) {
115
+ if (!isRetryableFsError(error) || attempt >= 4)
116
+ throw error;
117
+ await sleep(10 * 2 ** attempt);
118
+ }
119
+ }
120
+ }
121
+ finally {
122
+ if (!moved) {
123
+ try {
124
+ await fs.unlink(tempPath);
125
+ }
126
+ catch {
127
+ // Best-effort temp cleanup.
128
+ }
129
+ }
130
+ }
131
+ };
132
+ const queued = writeQueue.catch(() => undefined).then(task);
133
+ writeQueue = queued.then(() => undefined, () => undefined);
134
+ await queued;
135
+ }
136
+ export function upsertBudgetLimit(store, limit, now = Date.now()) {
137
+ const key = normalizeKey(limit.key);
138
+ if (!key)
139
+ throw new Error("Budget key is required");
140
+ const next = normalizeLimit(key, { ...limit, key, updatedAt: now });
141
+ if (!next)
142
+ throw new Error("Invalid budget limit");
143
+ store.limits[key] = next;
144
+ return next;
145
+ }
146
+ export function getBudgetWindowStart(window, now = Date.now()) {
147
+ const date = new Date(now);
148
+ if (window === "hour") {
149
+ date.setUTCMinutes(0, 0, 0);
150
+ return date.getTime();
151
+ }
152
+ if (window === "day") {
153
+ date.setUTCHours(0, 0, 0, 0);
154
+ return date.getTime();
155
+ }
156
+ if (window === "week") {
157
+ date.setUTCHours(0, 0, 0, 0);
158
+ const day = date.getUTCDay();
159
+ const mondayOffset = day === 0 ? 6 : day - 1;
160
+ date.setUTCDate(date.getUTCDate() - mondayOffset);
161
+ return date.getTime();
162
+ }
163
+ date.setUTCDate(1);
164
+ date.setUTCHours(0, 0, 0, 0);
165
+ return date.getTime();
166
+ }
167
+ export function evaluateBudgetGuard(limit, summary) {
168
+ const reasons = [];
169
+ if (typeof limit.maxRequests === "number" &&
170
+ summary.totals.requests >= limit.maxRequests) {
171
+ reasons.push(`request limit reached (${summary.totals.requests}/${limit.maxRequests})`);
172
+ }
173
+ if (typeof limit.maxTokens === "number" &&
174
+ summary.totals.totalTokens >= limit.maxTokens) {
175
+ reasons.push(`token limit reached (${summary.totals.totalTokens}/${limit.maxTokens})`);
176
+ }
177
+ if (typeof limit.maxCostUsd === "number" &&
178
+ summary.totals.costUsd >= limit.maxCostUsd) {
179
+ reasons.push(`cost limit reached (${summary.totals.costUsd.toFixed(6)}/${limit.maxCostUsd.toFixed(6)})`);
180
+ }
181
+ return {
182
+ key: limit.key,
183
+ window: limit.window,
184
+ allowed: reasons.length === 0,
185
+ reasons,
186
+ usage: {
187
+ requests: summary.totals.requests,
188
+ totalTokens: summary.totals.totalTokens,
189
+ costUsd: summary.totals.costUsd,
190
+ },
191
+ limits: {
192
+ maxRequests: limit.maxRequests ?? null,
193
+ maxTokens: limit.maxTokens ?? null,
194
+ maxCostUsd: limit.maxCostUsd ?? null,
195
+ },
196
+ };
197
+ }
198
+ export function resetBudgetGuardWriteQueueForTests() {
199
+ writeQueue = Promise.resolve();
200
+ }
201
+ //# sourceMappingURL=budget-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget-guard.js","sourceRoot":"","sources":["../../lib/budget-guard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { loadAccountPolicyStore, saveAccountPolicyStore } from "../../account-policy.js";
2
+ import type { AccountStorageV3 } from "../../storage.js";
3
+ export interface AccountCommandDeps {
4
+ setStoragePath: (path: string | null) => void;
5
+ loadAccounts: () => Promise<AccountStorageV3 | null>;
6
+ loadPolicyStore?: typeof loadAccountPolicyStore;
7
+ savePolicyStore?: typeof saveAccountPolicyStore;
8
+ logInfo?: (message: string) => void;
9
+ logError?: (message: string) => void;
10
+ getNow?: () => number;
11
+ }
12
+ export declare function runAccountCommand(args: string[], deps: AccountCommandDeps): Promise<number>;
13
+ //# sourceMappingURL=account.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../../lib/codex-manager/commands/account.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,sBAAsB,EAEtB,sBAAsB,EAGtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAqB,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAE5E,MAAM,WAAW,kBAAkB;IAClC,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC9C,YAAY,EAAE,MAAM,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACrD,eAAe,CAAC,EAAE,OAAO,sBAAsB,CAAC;IAChD,eAAe,CAAC,EAAE,OAAO,sBAAsB,CAAC;IAChD,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;CACtB;AAkDD,wBAAsB,iBAAiB,CACtC,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,kBAAkB,GACtB,OAAO,CAAC,MAAM,CAAC,CA2HjB"}
@@ -0,0 +1,156 @@
1
+ import { getAccountPolicyKey, loadAccountPolicyStore, normalizeAccountPolicyTag, saveAccountPolicyStore, upsertAccountPolicy, } from "../../account-policy.js";
2
+ function printAccountUsage(logInfo) {
3
+ logInfo([
4
+ "Usage:",
5
+ " codex auth account tag <index> <tag>",
6
+ " codex auth account untag <index> <tag>",
7
+ " codex auth account weight <index> <0..10>",
8
+ " codex auth account pause|unpause|drain|undrain <index>",
9
+ " codex auth account note <index> <text>",
10
+ " codex auth account policy list [--json]",
11
+ ].join("\n"));
12
+ }
13
+ function parseAccountIndex(value) {
14
+ if (!value || !/^\d+$/.test(value))
15
+ return null;
16
+ const parsed = Number.parseInt(value, 10);
17
+ return Number.isSafeInteger(parsed) && parsed > 0 ? parsed - 1 : null;
18
+ }
19
+ function resolveAccount(storage, index) {
20
+ if (!storage || index === null || index < 0 || index >= storage.accounts.length) {
21
+ return null;
22
+ }
23
+ const account = storage.accounts[index];
24
+ return account ? { account, index } : null;
25
+ }
26
+ function policySummary(store, storage) {
27
+ return (storage?.accounts ?? []).map((account, index) => {
28
+ const accountKey = getAccountPolicyKey(account, index);
29
+ const policy = store.accounts[accountKey];
30
+ return {
31
+ index: index + 1,
32
+ label: `Account ${index + 1}`,
33
+ accountKey,
34
+ tags: policy?.tags ?? [],
35
+ weight: policy?.weight ?? 1,
36
+ paused: policy?.paused ?? false,
37
+ drained: policy?.drained ?? false,
38
+ note: policy?.note ?? null,
39
+ };
40
+ });
41
+ }
42
+ export async function runAccountCommand(args, deps) {
43
+ const logInfo = deps.logInfo ?? console.log;
44
+ const logError = deps.logError ?? console.error;
45
+ const [command, ...rest] = args;
46
+ if (!command || command === "--help" || command === "-h") {
47
+ printAccountUsage(logInfo);
48
+ return 0;
49
+ }
50
+ deps.setStoragePath(null);
51
+ const storage = await deps.loadAccounts();
52
+ const loadStore = deps.loadPolicyStore ?? loadAccountPolicyStore;
53
+ const saveStore = deps.savePolicyStore ?? saveAccountPolicyStore;
54
+ const store = await loadStore();
55
+ if (command === "policy") {
56
+ const [subcommand, ...policyArgs] = rest;
57
+ if (subcommand !== "list") {
58
+ logError(`Unknown account policy command: ${subcommand ?? "(missing)"}`);
59
+ return 1;
60
+ }
61
+ const unknown = policyArgs.find((arg) => arg !== "--json" && arg !== "-j");
62
+ if (unknown) {
63
+ logError(`Unknown account policy list option: ${unknown}`);
64
+ return 1;
65
+ }
66
+ const payload = {
67
+ command: "account policy list",
68
+ accounts: policySummary(store, storage),
69
+ };
70
+ if (policyArgs.includes("--json") || policyArgs.includes("-j")) {
71
+ logInfo(JSON.stringify(payload, null, 2));
72
+ return 0;
73
+ }
74
+ if (payload.accounts.length === 0) {
75
+ logInfo("No accounts configured.");
76
+ return 0;
77
+ }
78
+ for (const entry of payload.accounts) {
79
+ const markers = [
80
+ `weight=${entry.weight}`,
81
+ entry.paused ? "paused" : null,
82
+ entry.drained ? "drained" : null,
83
+ entry.tags.length > 0 ? `tags=${entry.tags.join(",")}` : null,
84
+ entry.note ? "note" : null,
85
+ ].filter((value) => value !== null);
86
+ logInfo(`${entry.index}. ${entry.label} | ${markers.join(" | ")}`);
87
+ }
88
+ return 0;
89
+ }
90
+ const accountIndex = parseAccountIndex(rest[0]);
91
+ const resolved = resolveAccount(storage, accountIndex);
92
+ if (!resolved) {
93
+ logError("Account index is required and must reference a configured account.");
94
+ return 1;
95
+ }
96
+ const accountKey = getAccountPolicyKey(resolved.account, resolved.index);
97
+ const now = deps.getNow?.() ?? Date.now();
98
+ if (command === "tag" || command === "untag") {
99
+ const tag = normalizeAccountPolicyTag(rest[1] ?? "");
100
+ if (!tag) {
101
+ logError(`${command} requires a tag value.`);
102
+ return 1;
103
+ }
104
+ const policy = upsertAccountPolicy(store, accountKey, (next) => {
105
+ if (command === "tag" && !next.tags.includes(tag))
106
+ next.tags.push(tag);
107
+ if (command === "untag") {
108
+ next.tags = next.tags.filter((existing) => existing !== tag);
109
+ }
110
+ }, now);
111
+ await saveStore(store);
112
+ logInfo(`${command === "tag" ? "Tagged" : "Removed tag from"} account ${resolved.index + 1}: ${policy.tags.join(",") || "none"}`);
113
+ return 0;
114
+ }
115
+ if (command === "weight") {
116
+ const weight = rest[1] === undefined ? Number.NaN : Number.parseFloat(rest[1]);
117
+ if (!Number.isFinite(weight) || weight < 0 || weight > 10) {
118
+ logError("weight requires a number from 0 to 10.");
119
+ return 1;
120
+ }
121
+ upsertAccountPolicy(store, accountKey, (next) => {
122
+ next.weight = weight;
123
+ }, now);
124
+ await saveStore(store);
125
+ logInfo(`Set account ${resolved.index + 1} weight to ${weight}.`);
126
+ return 0;
127
+ }
128
+ if (["pause", "unpause", "drain", "undrain"].includes(command)) {
129
+ upsertAccountPolicy(store, accountKey, (next) => {
130
+ if (command === "pause")
131
+ next.paused = true;
132
+ if (command === "unpause")
133
+ next.paused = false;
134
+ if (command === "drain")
135
+ next.drained = true;
136
+ if (command === "undrain")
137
+ next.drained = false;
138
+ }, now);
139
+ await saveStore(store);
140
+ logInfo(`Updated account ${resolved.index + 1}: ${command}.`);
141
+ return 0;
142
+ }
143
+ if (command === "note") {
144
+ const note = rest.slice(1).join(" ").trim();
145
+ upsertAccountPolicy(store, accountKey, (next) => {
146
+ next.note = note.length > 0 ? note.slice(0, 500) : null;
147
+ }, now);
148
+ await saveStore(store);
149
+ logInfo(`Updated account ${resolved.index + 1} note.`);
150
+ return 0;
151
+ }
152
+ logError(`Unknown account command: ${command}`);
153
+ printAccountUsage(logInfo);
154
+ return 1;
155
+ }
156
+ //# sourceMappingURL=account.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../../../../lib/codex-manager/commands/account.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface BridgeCommandDeps {
2
+ logInfo?: (message: string) => void;
3
+ logError?: (message: string) => void;
4
+ }
5
+ export declare function runBridgeCommand(args: string[], deps?: BridgeCommandDeps): Promise<number>;
6
+ //# sourceMappingURL=bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../../../lib/codex-manager/commands/bridge.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,iBAAiB;IACjC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAiED,wBAAsB,gBAAgB,CACrC,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,GAAE,iBAAsB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAmHjB"}
@@ -0,0 +1,167 @@
1
+ import { addLocalClientToken, loadLocalClientTokenStore, revokeLocalClientToken, rotateLocalClientToken, } from "../../local-client-tokens.js";
2
+ function printBridgeUsage(logInfo) {
3
+ logInfo([
4
+ "Usage:",
5
+ " codex auth bridge token create [--label <label>] [--json]",
6
+ " codex auth bridge token list [--json]",
7
+ " codex auth bridge token rotate <id> [--json]",
8
+ " codex auth bridge token revoke <id> [--json]",
9
+ ].join("\n"));
10
+ }
11
+ function printJson(logInfo, value) {
12
+ logInfo(JSON.stringify(value, null, 2));
13
+ }
14
+ function publicTokenRecord(token) {
15
+ return {
16
+ id: token.id,
17
+ label: token.label,
18
+ prefix: token.prefix,
19
+ createdAt: token.createdAt,
20
+ lastUsedAt: token.lastUsedAt,
21
+ revokedAt: token.revokedAt,
22
+ state: token.revokedAt === null ? "active" : "revoked",
23
+ };
24
+ }
25
+ function consumeJsonFlag(args) {
26
+ return {
27
+ json: args.includes("--json") || args.includes("-j"),
28
+ rest: args.filter((arg) => arg !== "--json" && arg !== "-j"),
29
+ };
30
+ }
31
+ function parseLabel(args) {
32
+ let label;
33
+ for (let i = 0; i < args.length; i += 1) {
34
+ const arg = args[i];
35
+ if (arg === "--label") {
36
+ const value = args[i + 1];
37
+ if (!value)
38
+ return { ok: false, message: "Missing value for --label" };
39
+ label = value;
40
+ i += 1;
41
+ continue;
42
+ }
43
+ if (arg?.startsWith("--label=")) {
44
+ label = arg.slice("--label=".length);
45
+ continue;
46
+ }
47
+ return { ok: false, message: `Unknown bridge token option: ${arg ?? ""}` };
48
+ }
49
+ return { ok: true, label };
50
+ }
51
+ export async function runBridgeCommand(args, deps = {}) {
52
+ const logInfo = deps.logInfo ?? console.log;
53
+ const logError = deps.logError ?? console.error;
54
+ if (args.includes("--help") || args.includes("-h")) {
55
+ printBridgeUsage(logInfo);
56
+ return 0;
57
+ }
58
+ const [area, action, ...rest] = args;
59
+ if (area !== "token") {
60
+ logError("Expected `codex auth bridge token ...`");
61
+ return 1;
62
+ }
63
+ if (action === "create") {
64
+ const { json, rest: actionArgs } = consumeJsonFlag(rest);
65
+ const parsed = parseLabel(actionArgs);
66
+ if (!parsed.ok) {
67
+ logError(parsed.message);
68
+ return 1;
69
+ }
70
+ const created = await addLocalClientToken({ label: parsed.label });
71
+ if (json) {
72
+ printJson(logInfo, {
73
+ command: "bridge token create",
74
+ token: publicTokenRecord(created.record),
75
+ plainToken: created.plainToken,
76
+ });
77
+ return 0;
78
+ }
79
+ logInfo(`Token id: ${created.record.id}`);
80
+ logInfo(`Token prefix: ${created.record.prefix}`);
81
+ logInfo(`Token: ${created.plainToken}`);
82
+ return 0;
83
+ }
84
+ if (action === "list") {
85
+ const { json, rest: actionArgs } = consumeJsonFlag(rest);
86
+ if (actionArgs.length > 0) {
87
+ logError(`Unknown bridge token list option: ${actionArgs[0] ?? ""}`);
88
+ return 1;
89
+ }
90
+ const store = await loadLocalClientTokenStore();
91
+ if (json) {
92
+ printJson(logInfo, {
93
+ command: "bridge token list",
94
+ tokens: store.tokens.map(publicTokenRecord),
95
+ });
96
+ return 0;
97
+ }
98
+ if (store.tokens.length === 0) {
99
+ logInfo("No local bridge tokens configured.");
100
+ return 0;
101
+ }
102
+ for (const token of store.tokens) {
103
+ const state = token.revokedAt === null ? "active" : "revoked";
104
+ logInfo(`${token.id} ${token.prefix} ${token.label} ${state}`);
105
+ }
106
+ return 0;
107
+ }
108
+ if (action === "rotate") {
109
+ const { json, rest: actionArgs } = consumeJsonFlag(rest);
110
+ const id = actionArgs[0];
111
+ if (!id) {
112
+ logError("Missing token id");
113
+ return 1;
114
+ }
115
+ if (actionArgs.length > 1) {
116
+ logError(`Unknown bridge token rotate option: ${actionArgs[1] ?? ""}`);
117
+ return 1;
118
+ }
119
+ const rotated = await rotateLocalClientToken({ id });
120
+ if (!rotated) {
121
+ logError("Token not found or already revoked.");
122
+ return 1;
123
+ }
124
+ if (json) {
125
+ printJson(logInfo, {
126
+ command: "bridge token rotate",
127
+ token: publicTokenRecord(rotated.record),
128
+ plainToken: rotated.plainToken,
129
+ });
130
+ return 0;
131
+ }
132
+ logInfo(`Token id: ${rotated.record.id}`);
133
+ logInfo(`Token prefix: ${rotated.record.prefix}`);
134
+ logInfo(`Token: ${rotated.plainToken}`);
135
+ return 0;
136
+ }
137
+ if (action === "revoke") {
138
+ const { json, rest: actionArgs } = consumeJsonFlag(rest);
139
+ const id = actionArgs[0];
140
+ if (!id) {
141
+ logError("Missing token id");
142
+ return 1;
143
+ }
144
+ if (actionArgs.length > 1) {
145
+ logError(`Unknown bridge token revoke option: ${actionArgs[1] ?? ""}`);
146
+ return 1;
147
+ }
148
+ const revoked = await revokeLocalClientToken(id);
149
+ if (!revoked) {
150
+ logError("Token not found or already revoked.");
151
+ return 1;
152
+ }
153
+ if (json) {
154
+ printJson(logInfo, {
155
+ command: "bridge token revoke",
156
+ id,
157
+ revoked: true,
158
+ });
159
+ return 0;
160
+ }
161
+ logInfo("Token revoked.");
162
+ return 0;
163
+ }
164
+ logError(`Unknown bridge token action: ${action ?? ""}`);
165
+ return 1;
166
+ }
167
+ //# sourceMappingURL=bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../../../lib/codex-manager/commands/bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { loadBudgetGuardStore, saveBudgetGuardStore } from "../../budget-guard.js";
2
+ import { summarizeUsageLedger } from "../../usage/index.js";
3
+ export interface BudgetCommandDeps {
4
+ loadStore?: typeof loadBudgetGuardStore;
5
+ saveStore?: typeof saveBudgetGuardStore;
6
+ summarizeUsage?: typeof summarizeUsageLedger;
7
+ logInfo?: (message: string) => void;
8
+ logError?: (message: string) => void;
9
+ getNow?: () => number;
10
+ }
11
+ export declare function runBudgetCommand(args: string[], deps?: BudgetCommandDeps): Promise<number>;
12
+ //# sourceMappingURL=budget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget.d.ts","sourceRoot":"","sources":["../../../../lib/codex-manager/commands/budget.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,oBAAoB,EAEpB,oBAAoB,EAGpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,WAAW,iBAAiB;IACjC,SAAS,CAAC,EAAE,OAAO,oBAAoB,CAAC;IACxC,SAAS,CAAC,EAAE,OAAO,oBAAoB,CAAC;IACxC,cAAc,CAAC,EAAE,OAAO,oBAAoB,CAAC;IAC7C,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;CACtB;AAqBD,wBAAsB,gBAAgB,CACrC,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,GAAE,iBAAsB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAoHjB"}