@tokensrc/codex 1.12.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 (76) hide show
  1. package/README.md +74 -0
  2. package/assets/codex-shortcut-icon.icns +0 -0
  3. package/assets/codex-shortcut-icon.ico +0 -0
  4. package/dist/account-display.d.ts +16 -0
  5. package/dist/account-display.js +35 -0
  6. package/dist/account-display.js.map +1 -0
  7. package/dist/bin-app.d.ts +2 -0
  8. package/dist/bin-app.js +12 -0
  9. package/dist/bin-app.js.map +1 -0
  10. package/dist/bin-run.d.ts +2 -0
  11. package/dist/bin-run.js +12 -0
  12. package/dist/bin-run.js.map +1 -0
  13. package/dist/branding.d.ts +2 -0
  14. package/dist/branding.js +8 -0
  15. package/dist/branding.js.map +1 -0
  16. package/dist/cli.d.ts +2 -0
  17. package/dist/cli.js +69 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/client.d.ts +27 -0
  20. package/dist/client.js +177 -0
  21. package/dist/client.js.map +1 -0
  22. package/dist/command-directory.d.ts +15 -0
  23. package/dist/command-directory.js +28 -0
  24. package/dist/command-directory.js.map +1 -0
  25. package/dist/commands.d.ts +25 -0
  26. package/dist/commands.js +507 -0
  27. package/dist/commands.js.map +1 -0
  28. package/dist/config.d.ts +36 -0
  29. package/dist/config.js +272 -0
  30. package/dist/config.js.map +1 -0
  31. package/dist/console-status.d.ts +58 -0
  32. package/dist/console-status.js +84 -0
  33. package/dist/console-status.js.map +1 -0
  34. package/dist/credentials.d.ts +52 -0
  35. package/dist/credentials.js +130 -0
  36. package/dist/credentials.js.map +1 -0
  37. package/dist/errors.d.ts +19 -0
  38. package/dist/errors.js +40 -0
  39. package/dist/errors.js.map +1 -0
  40. package/dist/index.d.ts +18 -0
  41. package/dist/index.js +67 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/legacy-cleanup.d.ts +5 -0
  44. package/dist/legacy-cleanup.js +36 -0
  45. package/dist/legacy-cleanup.js.map +1 -0
  46. package/dist/oidc.d.ts +26 -0
  47. package/dist/oidc.js +154 -0
  48. package/dist/oidc.js.map +1 -0
  49. package/dist/private-file.d.ts +3 -0
  50. package/dist/private-file.js +30 -0
  51. package/dist/private-file.js.map +1 -0
  52. package/dist/profile.d.ts +29 -0
  53. package/dist/profile.js +253 -0
  54. package/dist/profile.js.map +1 -0
  55. package/dist/protocol.d.ts +752 -0
  56. package/dist/protocol.js +235 -0
  57. package/dist/protocol.js.map +1 -0
  58. package/dist/quota-cache.d.ts +18 -0
  59. package/dist/quota-cache.js +66 -0
  60. package/dist/quota-cache.js.map +1 -0
  61. package/dist/runtime.d.ts +16 -0
  62. package/dist/runtime.js +144 -0
  63. package/dist/runtime.js.map +1 -0
  64. package/dist/selection.d.ts +18 -0
  65. package/dist/selection.js +42 -0
  66. package/dist/selection.js.map +1 -0
  67. package/dist/shortcuts.d.ts +30 -0
  68. package/dist/shortcuts.js +122 -0
  69. package/dist/shortcuts.js.map +1 -0
  70. package/dist/tui.d.ts +29 -0
  71. package/dist/tui.js +278 -0
  72. package/dist/tui.js.map +1 -0
  73. package/dist/types.d.ts +104 -0
  74. package/dist/types.js +2 -0
  75. package/dist/types.js.map +1 -0
  76. package/package.json +92 -0
@@ -0,0 +1,507 @@
1
+ import { createHash } from "node:crypto";
2
+ import { hostname } from "node:os";
3
+ import { getStoragePath, loadAccounts, setStoragePath, setStoragePathDirect } from "codex-multi-auth/storage";
4
+ import { CodexServiceError } from "./errors.js";
5
+ import { backupCodexFileCredentials, codexFileCredentialsMatchAccount, inspectLocalCodexCredentialStatus, resetManagedCodexFileCredentials, restoreCodexFileCredentials, writeCodexChatgptFileCredentials } from "./credentials.js";
6
+ import { CODEX_DISTRIBUTION_SCHEMA_VERSION } from "./protocol.js";
7
+ import { formatCodexAccountDisplayIdentity, resolveCodexAdminAccount, resolveCodexAccountDisplayName } from "./account-display.js";
8
+ import { loadCodexQuotaUploads } from "./quota-cache.js";
9
+ import { cleanupLegacyCodexProvider } from "./legacy-cleanup.js";
10
+ import { clearCodexSelection, loadCodexSelection, saveCodexSelection } from "./selection.js";
11
+ import { installCodexShortcuts, removeCodexShortcuts } from "./shortcuts.js";
12
+ import { isCodexAccountAvailable, renderCodexAccountDashboard, selectCodexAccount } from "./tui.js";
13
+ export const NO_AVAILABLE_CHATGPT_ACCOUNT_MESSAGE = "当前用户没有绑定可用的 ChatGPT 账号。请前往 OA 系统提交 IT11 工单,申请独享或共享的 ChatGPT 个人账号。";
14
+ async function json(command, deps) {
15
+ if (command.optsWithGlobals().json)
16
+ return true;
17
+ return Boolean(await deps.jsonEnabled?.(command));
18
+ }
19
+ function print(output, value) {
20
+ output.write(`${JSON.stringify(value, null, 2)}\n`);
21
+ }
22
+ function success(value) {
23
+ return {
24
+ schemaVersion: CODEX_DISTRIBUTION_SCHEMA_VERSION,
25
+ ok: true,
26
+ ...(value ?? {})
27
+ };
28
+ }
29
+ function importFailures(credentials) {
30
+ return credentials.filter(({ status }) => status === "REJECTED" || status === "UNKNOWN");
31
+ }
32
+ function serviceConnection(options = {}) {
33
+ return {
34
+ ...(options.server ? { serverUrl: options.server } : {}),
35
+ ...((options.insecurePoc || options.insecureHttp) ? { allowInsecureHttp: true } : {})
36
+ };
37
+ }
38
+ function serviceOptions(command) {
39
+ return command
40
+ .option("-u, --server <url>", "Codex account service URL")
41
+ .option("--insecure-poc", "allow non-loopback HTTP for isolated testing")
42
+ .option("--insecure-http", "allow non-loopback HTTP");
43
+ }
44
+ async function resolveAdminAccount(client, requested) {
45
+ const { accounts } = await client.listAdminAccounts();
46
+ return resolveCodexAdminAccount(accounts, requested);
47
+ }
48
+ function formatAdminAccount(account) {
49
+ return `${resolveCodexAccountDisplayName({
50
+ accountId: account.id,
51
+ label: account.label,
52
+ email: account.email,
53
+ providerAccountId: account.providerAccountId
54
+ })} (${account.id})`;
55
+ }
56
+ async function loadAccountData(deps, options = {}) {
57
+ const response = await deps.clientFor(serviceConnection(options)).listAccounts();
58
+ const previous = await loadCodexSelection(deps.config.persistence.configDirectory);
59
+ return {
60
+ response,
61
+ selectedAccountId: previous?.account.id ?? response.defaultAccountId ?? undefined
62
+ };
63
+ }
64
+ async function chooseAccount(deps, requested, options = {}) {
65
+ const { response, selectedAccountId } = await loadAccountData(deps, options);
66
+ const cli = deps.config.branding.cliName === "numa"
67
+ ? "numa codex use"
68
+ : `${deps.config.branding.cliName} use`;
69
+ const account = await selectCodexAccount(response.accounts, {
70
+ requested,
71
+ selectedAccountId,
72
+ nonInteractiveCommand: cli,
73
+ noAvailableMessage: `【需要申请 ChatGPT 账号】\n${NO_AVAILABLE_CHATGPT_ACCOUNT_MESSAGE}`,
74
+ output: deps.errorOutput
75
+ });
76
+ const accountLabel = resolveCodexAccountDisplayName({
77
+ accountId: account.id,
78
+ label: account.label,
79
+ providerAccountId: account.accountId
80
+ });
81
+ const selection = await saveCodexSelection(deps.config.persistence.configDirectory, {
82
+ serviceUrl: options.server ?? deps.config.connection.serverUrl,
83
+ allowInsecurePoc: Boolean(options.insecurePoc || options.insecureHttp || deps.config.connection.allowInsecureHttp),
84
+ account: { id: account.id, accountId: account.accountId, label: accountLabel }
85
+ });
86
+ return { account, selection };
87
+ }
88
+ async function installCredentials(deps, accountId, service) {
89
+ const response = await deps.clientFor(service).getLoginCredentials(accountId);
90
+ await cleanupLegacyCodexProvider();
91
+ await backupCodexFileCredentials();
92
+ await writeCodexChatgptFileCredentials({
93
+ accessToken: response.accessToken,
94
+ idToken: response.idToken,
95
+ accountId: response.account.accountId
96
+ });
97
+ return { expiresAt: response.expiresAt };
98
+ }
99
+ async function selectedCredentials(deps, requested, options = {}) {
100
+ let selection = await loadCodexSelection(deps.config.persistence.configDirectory);
101
+ if (!selection || options.server || requested && selection.account.id !== requested) {
102
+ selection = (await chooseAccount(deps, requested, options)).selection;
103
+ }
104
+ if (!(await codexFileCredentialsMatchAccount(selection.account.accountId))) {
105
+ await installCredentials(deps, selection.account.id, {
106
+ serverUrl: selection.serviceUrl,
107
+ allowInsecureHttp: selection.allowInsecurePoc
108
+ });
109
+ }
110
+ return selection;
111
+ }
112
+ export function registerCodexCommands(program, deps, options = {}) {
113
+ const codex = options.nested === false
114
+ ? program
115
+ : program.command("codex").description("Select an account and launch the official Codex client");
116
+ const includeAuthCommands = options.includeAuthCommands ?? options.nested === false;
117
+ if (includeAuthCommands)
118
+ codex.command("login").description("Log in with OIDC").action(async (_options, command) => {
119
+ if (!deps.auth.login)
120
+ throw new Error("The injected authentication provider does not expose login.");
121
+ const result = await deps.auth.login();
122
+ if (await json(command, deps))
123
+ print(deps.output, success(result));
124
+ else
125
+ deps.output.write(`Login complete; token expires at ${new Date(result.expiresAt * 1000).toISOString()}.\n`);
126
+ });
127
+ if (includeAuthCommands)
128
+ codex.command("logout").description("Remove the standalone OIDC login").action(async (_options, command) => {
129
+ if (!deps.auth.logout)
130
+ throw new Error("The injected authentication provider does not expose logout.");
131
+ await deps.auth.logout();
132
+ if (await json(command, deps))
133
+ print(deps.output, success());
134
+ else
135
+ deps.output.write("Logged out.\n");
136
+ });
137
+ serviceOptions(codex.command("list").description("List available Codex accounts without downloading credentials"))
138
+ .action(async (opts, command) => {
139
+ const { response: result, selectedAccountId } = await loadAccountData(deps, opts);
140
+ const hasAvailableAccount = result.accounts.some(isCodexAccountAvailable);
141
+ if (await json(command, deps))
142
+ print(deps.output, success({
143
+ ...result,
144
+ ...(hasAvailableAccount ? {} : { guidance: { code: "chatgpt_account_request_required", ticket_template: "IT11", message: NO_AVAILABLE_CHATGPT_ACCOUNT_MESSAGE } })
145
+ }));
146
+ else if (result.accounts.length === 0) {
147
+ deps.output.write(`【需要申请 ChatGPT 账号】\n${NO_AVAILABLE_CHATGPT_ACCOUNT_MESSAGE}\n`);
148
+ }
149
+ else {
150
+ deps.output.write(renderCodexAccountDashboard(result.accounts, selectedAccountId));
151
+ if (!hasAvailableAccount) {
152
+ deps.output.write(`【需要申请 ChatGPT 账号】\n${NO_AVAILABLE_CHATGPT_ACCOUNT_MESSAGE}\n`);
153
+ }
154
+ }
155
+ });
156
+ serviceOptions(codex.command("use [account]").description("Select an account and update the official Codex auth.json"))
157
+ .action(async (account, opts, command) => {
158
+ const result = await chooseAccount(deps, account, opts);
159
+ await installCredentials(deps, result.account.id, serviceConnection(opts));
160
+ if (await json(command, deps))
161
+ print(deps.output, success({ account: result.account, auth_mode: "chatgpt" }));
162
+ else
163
+ deps.output.write(`已选择: ${result.account.label} (${result.account.id})\n官方 Codex ChatGPT 登录凭据已更新。\n`);
164
+ });
165
+ serviceOptions(codex.command("run [codexArgs...]").description("Launch the official Codex CLI"))
166
+ .option("-a, --account <id>", "account id")
167
+ .option("-s, --select-account", "select an account before launch")
168
+ .allowUnknownOption(true)
169
+ .action(async (args, opts) => {
170
+ if (opts.selectAccount)
171
+ await clearCodexSelection(deps.config.persistence.configDirectory);
172
+ const selected = await selectedCredentials(deps, opts.account, opts);
173
+ deps.errorOutput.write(`Using ChatGPT account: ${selected.account.label} (${selected.account.id})\n`);
174
+ process.exitCode = await deps.run(args);
175
+ });
176
+ serviceOptions(codex.command("app [workspace]").description("Launch the official Codex desktop app"))
177
+ .option("-a, --account <id>", "account id")
178
+ .option("-s, --select-account", "select an account before launch")
179
+ .action(async (workspace, opts) => {
180
+ if (process.platform !== "darwin" && process.platform !== "win32")
181
+ throw new Error("官方 Codex 桌面 App 仅支持 macOS 和 Windows。");
182
+ if (opts.selectAccount)
183
+ await clearCodexSelection(deps.config.persistence.configDirectory);
184
+ const selected = await selectedCredentials(deps, opts.account, opts);
185
+ deps.errorOutput.write(`Using ChatGPT account: ${selected.account.label} (${selected.account.id})\n`);
186
+ process.exitCode = await deps.app(workspace);
187
+ });
188
+ codex.command("status").description("Show selection and official auth.json status")
189
+ .option("--remote", "include remote accounts")
190
+ .action(async (opts, command) => {
191
+ const local = await deps.status.loadLocal();
192
+ if (await json(command, deps))
193
+ print(deps.output, success({
194
+ configured: local.configured,
195
+ official_auth_matches_selection: local.officialAuthMatchesSelection,
196
+ official_auth: {
197
+ state: local.officialAuth.state,
198
+ account_id: local.officialAuth.accountId ?? null,
199
+ expires_at: local.officialAuth.expiresAt ? new Date(local.officialAuth.expiresAt).toISOString() : null,
200
+ usable: local.officialAuth.usable
201
+ },
202
+ selection: local.selection ? {
203
+ account: local.selection.account,
204
+ insecure_poc: local.selection.allowInsecurePoc,
205
+ updated_at: local.selection.updatedAt
206
+ } : null,
207
+ ...(opts.remote ? { remote: await deps.status.loadRemote() } : {})
208
+ }));
209
+ else {
210
+ deps.output.write(`Account selection: ${local.selection?.account.label ?? "not configured"}\n`);
211
+ deps.output.write(`Official ChatGPT login: ${local.officialAuthMatchesSelection ? "matched" : "not matched"}\n`);
212
+ }
213
+ });
214
+ codex.command("reset").description("Reset selection and managed official credentials")
215
+ .action(async (_options, command) => {
216
+ const selection = await loadCodexSelection(deps.config.persistence.configDirectory);
217
+ const cleanup = await cleanupLegacyCodexProvider();
218
+ const auth = await resetManagedCodexFileCredentials(selection?.account.accountId);
219
+ await clearCodexSelection(deps.config.persistence.configDirectory);
220
+ if (await json(command, deps))
221
+ print(deps.output, success({ reset: true, auth_action: auth.action, legacy_provider_removed: cleanup.changed }));
222
+ else
223
+ deps.output.write(`已重置 Codex 配置;登录处理=${auth.action}。\n`);
224
+ });
225
+ serviceOptions(codex.command("auth-agent [account]").description("Continuously renew official Codex credentials"))
226
+ .option("-o, --once", "refresh once")
227
+ .option("--restore", "restore prior auth.json")
228
+ .option("-i, --interval <seconds>", "refresh interval", "60")
229
+ .option("-r, --refresh-before <seconds>", "refresh before expiry", "3600")
230
+ .option("--credential-store <mode>", "file|keyring|auto", "file")
231
+ .option("--replace-login", "confirm replacement")
232
+ .action(async (account, opts, command) => {
233
+ if (opts.restore) {
234
+ const result = await restoreCodexFileCredentials();
235
+ if (await json(command, deps))
236
+ print(deps.output, success({ action: result.action }));
237
+ else
238
+ deps.output.write(`Restored ${result.authPath}.\n`);
239
+ return;
240
+ }
241
+ if (!opts.replaceLogin)
242
+ throw new Error("auth-agent replaces the current login; add --replace-login to confirm.");
243
+ if (opts.credentialStore !== "file")
244
+ throw new Error("ChatGPT auth.json 同步目前仅支持 --credential-store file。");
245
+ const selection = (await chooseAccount(deps, account, opts)).selection;
246
+ const interval = Number(opts.interval) * 1_000;
247
+ const refreshBefore = Number(opts.refreshBefore) * 1_000;
248
+ if (!Number.isFinite(interval) || interval <= 0)
249
+ throw new Error("--interval must be positive.");
250
+ if (!Number.isFinite(refreshBefore) || refreshBefore <= 0)
251
+ throw new Error("--refresh-before must be positive.");
252
+ const local = await inspectLocalCodexCredentialStatus(selection.account.accountId);
253
+ let expiresAt = local.state === "installed" && local.matchesExpectedAccount === true
254
+ ? local.expiresAt
255
+ : undefined;
256
+ do {
257
+ const timestamp = Date.now();
258
+ if (expiresAt === undefined || expiresAt <= timestamp + refreshBefore) {
259
+ expiresAt = (await installCredentials(deps, selection.account.id, serviceConnection(opts))).expiresAt;
260
+ const event = {
261
+ level: "INFO",
262
+ event: "credentials.installed",
263
+ at: new Date(timestamp).toISOString(),
264
+ account: selection.account.id,
265
+ expiresAt
266
+ };
267
+ if (await json(command, deps))
268
+ print(deps.output, success(event));
269
+ else
270
+ deps.output.write(`${event.at} INFO credentials.installed ${selection.account.label}\n`);
271
+ }
272
+ else {
273
+ const event = {
274
+ level: "INFO",
275
+ event: "credentials.current",
276
+ at: new Date(timestamp).toISOString(),
277
+ account: selection.account.id,
278
+ expiresAt,
279
+ refreshAt: expiresAt - refreshBefore
280
+ };
281
+ if (await json(command, deps))
282
+ print(deps.output, success(event));
283
+ else
284
+ deps.output.write(`${event.at} INFO credentials.current ${selection.account.label}; refresh not due\n`);
285
+ }
286
+ if (opts.once)
287
+ break;
288
+ await new Promise((resolve) => setTimeout(resolve, interval));
289
+ } while (true);
290
+ });
291
+ serviceOptions(codex.command("upload").description("Upload the local codex-multi-auth account pool"))
292
+ .option("--storage <path>", "account storage path")
293
+ .option("--source <name>", "upload source")
294
+ .action(async (opts, command) => {
295
+ if (opts.storage)
296
+ setStoragePathDirect(opts.storage);
297
+ else
298
+ setStoragePath(null);
299
+ const storage = await loadAccounts();
300
+ if (!storage?.accounts.length)
301
+ throw new Error(`codex-multi-auth account pool is empty: ${getStoragePath()}`);
302
+ const quotas = await loadCodexQuotaUploads(getStoragePath(), storage.accounts);
303
+ const accounts = storage.accounts.map((item, index) => {
304
+ if (!item.refreshToken?.trim())
305
+ throw new Error(`Account ${index + 1} has no refresh token.`);
306
+ return {
307
+ sourceKey: createHash("sha256").update(`${item.accountId ?? ""}\0${item.email ?? ""}\0${item.addedAt}`).digest("hex"),
308
+ ...(item.accountId ? { accountId: item.accountId } : {}),
309
+ label: item.email?.trim() || item.accountLabel?.trim() || `Codex account ${index + 1}`,
310
+ ...(item.email ? { email: item.email } : {}),
311
+ refreshToken: item.refreshToken,
312
+ ...(item.accessToken ? { accessToken: item.accessToken } : {}),
313
+ ...(item.expiresAt ? { expiresAt: item.expiresAt } : {}),
314
+ ...(quotas[index] ? { quota: quotas[index] } : {}),
315
+ enabled: item.enabled !== false
316
+ };
317
+ });
318
+ const result = await deps.clientFor(serviceConnection(opts)).uploadAccounts({ source: opts.source?.trim() || hostname(), accounts });
319
+ const credentials = result.credentials.map((credential, index) => ({
320
+ ...credential,
321
+ label: resolveCodexAccountDisplayName({
322
+ accountId: credential.accountId,
323
+ label: credential.label ?? accounts[index]?.label,
324
+ email: accounts[index]?.email,
325
+ providerAccountId: accounts[index]?.accountId
326
+ })
327
+ }));
328
+ const response = { ...result, credentials };
329
+ const failures = importFailures(credentials);
330
+ if (await json(command, deps)) {
331
+ print(deps.output, {
332
+ ...response,
333
+ ok: failures.length === 0,
334
+ targetTenantId: deps.config.connection.tenantId,
335
+ storage_path: getStoragePath(),
336
+ uploaded: accounts.length
337
+ });
338
+ }
339
+ else {
340
+ const accepted = credentials.length - failures.length;
341
+ deps.output.write(`目标租户:${deps.config.connection.tenantId}(由已验证的 client profile 决定)。\n`);
342
+ deps.output.write(`已处理 ${accounts.length} 个账号:新建 ${result.created},更新 ${result.updated},凭据成功 ${accepted},失败 ${failures.length}。\n`);
343
+ for (const item of credentials) {
344
+ deps.output.write(`- ${formatCodexAccountDisplayIdentity(item)}: ${item.status}`
345
+ + `${item.errorCode ? ` (${item.errorCode})` : ""}\n`);
346
+ }
347
+ deps.output.write("refresh token 已通过认证连接发送,客户端输出和日志均不包含令牌。\n");
348
+ }
349
+ if (failures.length > 0)
350
+ process.exitCode = 1;
351
+ });
352
+ const admin = codex.command("admin")
353
+ .description("Administer server-managed Codex accounts and assignments");
354
+ const adminAccounts = admin.command("accounts")
355
+ .description("Inspect accounts, credential history, and refresh state");
356
+ serviceOptions(adminAccounts.command("list").description("List all tenant Codex accounts"))
357
+ .action(async (opts, command) => {
358
+ const result = await deps.clientFor(serviceConnection(opts)).listAdminAccounts();
359
+ if (await json(command, deps)) {
360
+ print(deps.output, success(result));
361
+ return;
362
+ }
363
+ if (result.accounts.length === 0) {
364
+ deps.output.write("当前租户没有 ChatGPT/Codex 管理账号。\n");
365
+ return;
366
+ }
367
+ for (const account of result.accounts) {
368
+ deps.output.write(`${formatAdminAccount(account)} ${account.status}/${account.credentialStatus}`
369
+ + ` assignments=${account.activeAssignmentCount ?? 0}`
370
+ + `${account.lastRefreshErrorCode ? ` error=${account.lastRefreshErrorCode}` : ""}\n`);
371
+ }
372
+ });
373
+ serviceOptions(adminAccounts.command("credential-versions <account>")
374
+ .description("Show redacted credential version diagnostics"))
375
+ .action(async (account, opts, command) => {
376
+ const client = deps.clientFor(serviceConnection(opts));
377
+ const resolved = await resolveAdminAccount(client, account);
378
+ const result = await client.listCredentialVersions(resolved.id);
379
+ if (await json(command, deps)) {
380
+ print(deps.output, success(result));
381
+ return;
382
+ }
383
+ deps.output.write(`${formatAdminAccount(resolved)}\n`);
384
+ for (const credential of result.credentials) {
385
+ deps.output.write(`- v${credential.version} ${credential.status}`
386
+ + `${credential.lastRefreshAttemptReason ? ` reason=${credential.lastRefreshAttemptReason}` : ""}`
387
+ + `${credential.lastRefreshAttemptOutcome ? ` outcome=${credential.lastRefreshAttemptOutcome}` : ""}`
388
+ + `${credential.lastRefreshAttemptErrorCode ? ` error=${credential.lastRefreshAttemptErrorCode}` : ""}`
389
+ + `${credential.lastRefreshAttemptAt ? ` at=${new Date(credential.lastRefreshAttemptAt).toISOString()}` : ""}\n`);
390
+ }
391
+ });
392
+ serviceOptions(adminAccounts.command("refresh <account>")
393
+ .description("Request one server-side refresh-token exchange"))
394
+ .action(async (account, opts, command) => {
395
+ const client = deps.clientFor(serviceConnection(opts));
396
+ const resolved = await resolveAdminAccount(client, account);
397
+ const result = await client.refreshAdminAccount(resolved.id);
398
+ const ok = result.outcome === "SUCCESS";
399
+ if (await json(command, deps)) {
400
+ print(deps.output, { ...result, ok });
401
+ }
402
+ else {
403
+ deps.output.write(`${formatAdminAccount(resolved)}: ${result.outcome}`
404
+ + `${result.errorCode ? ` (${result.errorCode})` : ""}`
405
+ + `${result.expiresAt ? ` expires=${new Date(result.expiresAt).toISOString()}` : ""}\n`);
406
+ }
407
+ if (!ok)
408
+ process.exitCode = 1;
409
+ });
410
+ const adminAssignments = admin.command("assignments")
411
+ .description("List, bind, or unbind tenant Codex account assignments");
412
+ serviceOptions(adminAssignments.command("list").description("List tenant Codex account assignments"))
413
+ .action(async (opts, command) => {
414
+ const client = deps.clientFor(serviceConnection(opts));
415
+ const result = await client.listAdminAssignments();
416
+ if (await json(command, deps)) {
417
+ print(deps.output, success(result));
418
+ return;
419
+ }
420
+ if (result.assignments.length === 0) {
421
+ deps.output.write("当前租户没有 ChatGPT/Codex 账号绑定。\n");
422
+ return;
423
+ }
424
+ const { accounts } = await client.listAdminAccounts();
425
+ const accountById = new Map(accounts.map((account) => [account.id, account]));
426
+ for (const assignment of result.assignments) {
427
+ const account = accountById.get(assignment.accountId);
428
+ const accountText = account ? formatAdminAccount(account) : assignment.accountId;
429
+ deps.output.write(`${assignment.id} ${accountText} user=${assignment.username}`
430
+ + ` (${assignment.userSubject}) ${assignment.status}`
431
+ + `${assignment.isDefault ? " default" : ""}\n`);
432
+ }
433
+ });
434
+ serviceOptions(adminAssignments.command("bind <account> <subject>")
435
+ .description("Bind a ChatGPT/Codex account to a Keycloak user"))
436
+ .option("--default", "make this the user's default Codex account")
437
+ .action(async (account, subject, opts, command) => {
438
+ const client = deps.clientFor(serviceConnection(opts));
439
+ const resolved = await resolveAdminAccount(client, account);
440
+ const result = await client.bindAdminAssignment({
441
+ accountId: resolved.id,
442
+ userSubject: subject,
443
+ isDefault: Boolean(opts.default)
444
+ });
445
+ if (await json(command, deps))
446
+ print(deps.output, success(result));
447
+ else
448
+ deps.output.write(`已绑定 ${result.assignment.username} (${result.assignment.userSubject})`
449
+ + ` -> ${formatAdminAccount(resolved)}${result.assignment.isDefault ? " [default]" : ""}\n`);
450
+ });
451
+ serviceOptions(adminAssignments.command("unbind <assignment>")
452
+ .description("Remove a ChatGPT/Codex account assignment"))
453
+ .action(async (assignment, opts, command) => {
454
+ const client = deps.clientFor(serviceConnection(opts));
455
+ const assignmentList = await client.listAdminAssignments();
456
+ const target = assignmentList.assignments.find((item) => item.id === assignment);
457
+ if (!target) {
458
+ throw new CodexServiceError(`未找到 Codex 账号绑定: ${assignment}`, "codex_assignment_not_found", 404);
459
+ }
460
+ const resolved = await resolveAdminAccount(client, target.accountId);
461
+ const result = await client.unbindAdminAssignment(assignment);
462
+ if (await json(command, deps))
463
+ print(deps.output, success(result));
464
+ else
465
+ deps.output.write(`已解除 ${formatAdminAccount(resolved)} 与 ${target.username} 的绑定:${result.assignmentId}\n`);
466
+ });
467
+ serviceOptions(codex.command("shortcut [action]").description("Install or remove Codex shortcuts"))
468
+ .option("-t, --target <target>", "run|app|both", "both")
469
+ .option("--command-name <name>", "shortcut command base name")
470
+ .option("--app-name <name>", "desktop application name")
471
+ .option("--scope <scope>", "auto|system|user", "auto")
472
+ .option("-r, --registry-url <url>", "npm registry used by shortcuts")
473
+ .option("-w, --workspace <path>", "default workspace")
474
+ .option("-a, --account <id>", "fixed account id")
475
+ .option("-s, --select-account", "select account on every launch")
476
+ .option("-f, --force", "overwrite unmanaged target")
477
+ .action(async (action, opts, command) => {
478
+ if (action && action !== "install" && action !== "remove")
479
+ throw new Error("shortcut action must be install or remove.");
480
+ const shortcutConfig = {
481
+ ...deps.config,
482
+ branding: { ...deps.config.branding, ...(opts.appName ? { appName: opts.appName } : {}) },
483
+ launcher: {
484
+ ...deps.config.launcher,
485
+ ...(opts.commandName ? { runCommandName: opts.commandName, appCommandName: `${opts.commandName}-app` } : {})
486
+ }
487
+ };
488
+ const shortcutOptions = { ...opts, registryUrl: opts.registryUrl ?? deps.config.branding.registryUrl };
489
+ const result = action === "remove"
490
+ ? await removeCodexShortcuts(shortcutConfig, shortcutOptions)
491
+ : await installCodexShortcuts(shortcutConfig, shortcutOptions);
492
+ if (await json(command, deps))
493
+ print(deps.output, success({
494
+ action: result.action,
495
+ platform: result.platform,
496
+ command_directory: result.commandDirectory,
497
+ scope: result.scope,
498
+ path_ready: result.pathReady,
499
+ path_hint: result.pathHint ?? null,
500
+ artifacts: result.artifacts
501
+ }));
502
+ else
503
+ deps.output.write(`${result.action} ${result.artifacts.length} shortcut artifacts.\n`);
504
+ });
505
+ return codex;
506
+ }
507
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { z } from "zod";
2
+ import type { CodexModuleOptions, ResolvedCodexConfig } from "./types.js";
3
+ export declare const DEFAULT_CODEX_SERVER_URL = "https://mail.tokensource.top/api";
4
+ export declare const DEFAULT_TENANT_ID = "numa-realm";
5
+ export declare const DEFAULT_TENANT_HEADER_NAME = "X-Tenant-Id";
6
+ export declare const DEFAULT_OIDC_DISCOVERY_URL = "https://auth.tokensource.top/realms/numa-realm/.well-known/openid-configuration";
7
+ export declare const DEFAULT_OIDC_CLIENT_ID = "mcp-client";
8
+ export declare const DEFAULT_OIDC_SCOPE = "openid profile email offline_access";
9
+ export declare const DEFAULT_REGISTRY_URL = "https://registry.npmjs.org/";
10
+ declare const StoredConfigSchema: z.ZodObject<{
11
+ schemaVersion: z.ZodDefault<z.ZodLiteral<1>>;
12
+ profileUrl: z.ZodOptional<z.ZodString>;
13
+ serverUrl: z.ZodOptional<z.ZodString>;
14
+ tenantId: z.ZodOptional<z.ZodString>;
15
+ tenantHeaderName: z.ZodOptional<z.ZodString>;
16
+ allowInsecureHttp: z.ZodOptional<z.ZodBoolean>;
17
+ requestTimeoutMs: z.ZodOptional<z.ZodNumber>;
18
+ registryUrl: z.ZodOptional<z.ZodString>;
19
+ oidc: z.ZodOptional<z.ZodObject<{
20
+ discoveryUrl: z.ZodOptional<z.ZodString>;
21
+ issuerUrl: z.ZodOptional<z.ZodString>;
22
+ clientId: z.ZodOptional<z.ZodString>;
23
+ scope: z.ZodOptional<z.ZodString>;
24
+ redirectHost: z.ZodOptional<z.ZodString>;
25
+ redirectPort: z.ZodOptional<z.ZodNumber>;
26
+ redirectPath: z.ZodOptional<z.ZodString>;
27
+ openBrowser: z.ZodOptional<z.ZodBoolean>;
28
+ }, z.core.$strip>>;
29
+ }, z.core.$strip>;
30
+ export type StoredCodexConfig = z.infer<typeof StoredConfigSchema>;
31
+ export declare function defaultCodexConfigDirectory(env?: NodeJS.ProcessEnv, platform?: NodeJS.Platform, home?: string): string;
32
+ export declare function codexConfigPath(configDirectory: string): string;
33
+ export declare function loadStoredCodexConfig(configDirectory: string, settingsFile?: string): Promise<StoredCodexConfig>;
34
+ export declare function saveStoredCodexConfig(configDirectory: string, value: StoredCodexConfig, settingsFile?: string): Promise<StoredCodexConfig>;
35
+ export declare function resolveCodexConfig(options?: CodexModuleOptions): Promise<ResolvedCodexConfig>;
36
+ export {};