@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,235 @@
1
+ import { z } from "zod";
2
+ export const CODEX_DISTRIBUTION_SCHEMA_VERSION = 1;
3
+ export const CODEX_ACCOUNTS_PATH = "/v1/codex/accounts";
4
+ export const CODEX_ACCOUNTS_LIST_PATH = CODEX_ACCOUNTS_PATH;
5
+ export const CODEX_ACCOUNTS_IMPORT_PATH = "/v1/admin/codex/accounts/import";
6
+ export const CODEX_ADMIN_ACCOUNTS_PATH = "/v1/admin/codex/accounts";
7
+ export const CODEX_ADMIN_ASSIGNMENTS_PATH = "/v1/admin/codex/assignments";
8
+ const CodexCompatibilityLabelSchema = z.string().max(256)
9
+ .transform((label) => label.trim() ? label : undefined)
10
+ .optional();
11
+ const CodexQuotaInstantSchema = z.union([
12
+ z.number().int().positive(),
13
+ z.string().datetime({ offset: true })
14
+ ]);
15
+ export function codexQuotaWindowHasData(window) {
16
+ if (!window)
17
+ return false;
18
+ const resetAt = window.resetAt;
19
+ return Boolean((typeof window.windowMinutes === "number" && window.windowMinutes > 0) ||
20
+ (typeof window.usedPercent === "number" && window.usedPercent > 0) ||
21
+ (typeof resetAt === "number" && Number.isFinite(resetAt) && resetAt > 0) ||
22
+ (typeof resetAt === "string" && Number.isFinite(Date.parse(resetAt))));
23
+ }
24
+ const CodexQuotaWindowFieldsSchema = z.object({
25
+ usedPercent: z.number().min(0).max(100).nullable().optional(),
26
+ windowMinutes: z.number().int().nonnegative().nullable().optional(),
27
+ resetAt: CodexQuotaInstantSchema.nullable().optional()
28
+ });
29
+ export const CodexQuotaWindowViewSchema = CodexQuotaWindowFieldsSchema.transform((window) => codexQuotaWindowHasData(window) ? window : null);
30
+ export const CodexQuotaSnapshotViewSchema = z.object({
31
+ updatedAt: CodexQuotaInstantSchema.nullable().optional(),
32
+ status: z.number().int().nullable().optional(),
33
+ model: z.string().max(180).nullable().optional(),
34
+ planType: z.string().max(80).nullable().optional(),
35
+ activeLimit: z.number().int().nonnegative().nullable().optional(),
36
+ primary: CodexQuotaWindowViewSchema.nullable().optional(),
37
+ secondary: CodexQuotaWindowViewSchema.nullable().optional()
38
+ });
39
+ export const CodexAccountSummarySchema = z.object({
40
+ id: z.string().min(1).max(128),
41
+ accountId: z.string().min(1).max(512),
42
+ label: CodexCompatibilityLabelSchema,
43
+ isDefault: z.boolean(),
44
+ accessExpiresAt: z.number().int().positive().optional(),
45
+ credentialStatus: z.enum(["AVAILABLE", "NEEDS_REAUTH", "TEMPORARILY_UNAVAILABLE"]).optional(),
46
+ quota: CodexQuotaSnapshotViewSchema.nullable().optional()
47
+ });
48
+ export const CodexAccountListResponseSchema = z.object({
49
+ schemaVersion: z.literal(CODEX_DISTRIBUTION_SCHEMA_VERSION),
50
+ accounts: z.array(CodexAccountSummarySchema),
51
+ defaultAccountId: z.string().min(1).max(128).nullable().optional()
52
+ });
53
+ export const CodexLoginCredentialsResponseSchema = z.object({
54
+ schemaVersion: z.literal(CODEX_DISTRIBUTION_SCHEMA_VERSION),
55
+ account: CodexAccountSummarySchema,
56
+ accessToken: z.string().min(1),
57
+ idToken: z.string().min(1),
58
+ expiresAt: z.number().int().positive()
59
+ });
60
+ export const CodexUploadAccountSchema = z.object({
61
+ sourceKey: z.string().min(1).max(320),
62
+ accountId: z.string().min(1).max(512).optional(),
63
+ label: z.string().min(1).max(256),
64
+ email: z.string().max(512).optional(),
65
+ refreshToken: z.string().min(1),
66
+ accessToken: z.string().min(1).optional(),
67
+ idToken: z.string().min(1).optional(),
68
+ expiresAt: z.number().int().positive().optional(),
69
+ enabled: z.boolean(),
70
+ quota: z.object({
71
+ updatedAt: z.number().int().positive(),
72
+ status: z.number().int(),
73
+ model: z.string().min(1).max(180),
74
+ planType: z.string().max(80).optional(),
75
+ activeLimit: z.number().int().nonnegative().optional(),
76
+ primary: z.object({
77
+ usedPercent: z.number().min(0).max(100).optional(),
78
+ windowMinutes: z.number().int().positive().optional(),
79
+ resetAt: z.number().int().positive().optional()
80
+ }),
81
+ secondary: z.object({
82
+ usedPercent: z.number().min(0).max(100).optional(),
83
+ windowMinutes: z.number().int().positive().optional(),
84
+ resetAt: z.number().int().positive().optional()
85
+ })
86
+ }).optional()
87
+ });
88
+ export const CodexUploadBatchSchema = z.object({
89
+ source: z.string().min(1).max(128),
90
+ accounts: z.array(CodexUploadAccountSchema).min(1)
91
+ });
92
+ export const CodexImportCredentialResultSchema = z.object({
93
+ accountId: z.string().min(1).max(128),
94
+ label: CodexCompatibilityLabelSchema,
95
+ status: z.enum(["CREATED", "UNCHANGED", "REPLACED", "REJECTED", "UNKNOWN"]),
96
+ errorCode: z.string().min(1).max(128).regex(/^[a-z][a-z0-9_.-]*$/i).nullable()
97
+ });
98
+ export const CodexImportResultSchema = z.object({
99
+ schemaVersion: z.literal(CODEX_DISTRIBUTION_SCHEMA_VERSION),
100
+ created: z.number().int().nonnegative(),
101
+ updated: z.number().int().nonnegative(),
102
+ accountIds: z.array(z.string().min(1).max(128)),
103
+ credentials: z.array(CodexImportCredentialResultSchema)
104
+ }).superRefine((result, context) => {
105
+ if (result.accountIds.length !== result.credentials.length) {
106
+ context.addIssue({
107
+ code: "custom",
108
+ path: ["credentials"],
109
+ message: "Credential results must correspond one-to-one with imported accounts."
110
+ });
111
+ }
112
+ });
113
+ const NullableInstantSchema = z.number().int().positive().nullable();
114
+ const NullableSafeCodeSchema = z.string().min(1).max(128).regex(/^[a-z][a-z0-9_.-]*$/i).nullable();
115
+ export const CodexCredentialVersionSchema = z.strictObject({
116
+ id: z.string().min(1).max(128),
117
+ accountId: z.string().min(1).max(128),
118
+ version: z.number().int().positive(),
119
+ status: z.enum([
120
+ "ACTIVE",
121
+ "CANDIDATE",
122
+ "RETIRED",
123
+ "SUPERSEDED",
124
+ "REJECTED",
125
+ "UNKNOWN",
126
+ "REVOKED"
127
+ ]),
128
+ expiresAt: NullableInstantSchema,
129
+ observedSource: z.string().max(180).nullable(),
130
+ lastVerifiedAt: NullableInstantSchema,
131
+ lastRefreshAttemptAt: NullableInstantSchema,
132
+ lastRefreshAttemptReason: z.enum([
133
+ "MISSING_ACCESS_TOKEN",
134
+ "MISSING_ID_TOKEN",
135
+ "MISSING_EXPIRY",
136
+ "ACCESS_TOKEN_EXPIRED",
137
+ "ACCESS_TOKEN_EXPIRING_SOON",
138
+ "UPLOAD_REPLACEMENT_VALIDATION",
139
+ "MANUAL_ADMIN_REQUEST",
140
+ "SCHEDULED_REFRESH",
141
+ "ON_DEMAND_RETRIEVAL",
142
+ "CONTROLLED_RECOVERY"
143
+ ]).nullable(),
144
+ lastRefreshAttemptOutcome: z.enum([
145
+ "IN_PROGRESS",
146
+ "SUCCESS",
147
+ "TEMPORARY_FAILURE",
148
+ "PERMANENT_FAILURE"
149
+ ]).nullable(),
150
+ lastRefreshAttemptErrorCode: NullableSafeCodeSchema,
151
+ lastRefreshObservedExpiresAt: NullableInstantSchema,
152
+ firstObservedAt: z.number().int().positive(),
153
+ lastObservedAt: z.number().int().positive(),
154
+ serverIssuedAt: NullableInstantSchema,
155
+ providerIssuedAt: NullableInstantSchema,
156
+ parentCredentialId: z.string().min(1).max(128).nullable(),
157
+ supersededByCredentialId: z.string().min(1).max(128).nullable(),
158
+ supersededAt: NullableInstantSchema,
159
+ supersededReason: z.string().min(1).max(180).nullable(),
160
+ lastRefreshTokenResponseMode: z.enum(["NEW", "SAME", "OMITTED", "NOT_APPLICABLE"]),
161
+ retiredAt: NullableInstantSchema,
162
+ rejectedAt: NullableInstantSchema,
163
+ createdAt: z.number().int().positive(),
164
+ updatedAt: z.number().int().positive()
165
+ });
166
+ export const CodexAdminAccountSchema = z.strictObject({
167
+ id: z.string().min(1).max(128),
168
+ sourceKey: z.string().min(1).max(320),
169
+ providerAccountId: z.string().min(1).max(512).nullable(),
170
+ label: CodexCompatibilityLabelSchema,
171
+ email: z.string().max(512).nullable(),
172
+ status: z.enum(["ACTIVE", "DISABLED", "NEEDS_REAUTH"]),
173
+ refreshStatus: z.enum(["UNKNOWN", "HEALTHY", "TEMPORARILY_UNAVAILABLE", "NEEDS_REAUTH"]),
174
+ subscriptionStatus: z.string().max(128).nullable(),
175
+ subscriptionExpiresAt: NullableInstantSchema,
176
+ credentialExpiresAt: NullableInstantSchema,
177
+ lastRefreshAt: NullableInstantSchema,
178
+ lastRefreshErrorCode: NullableSafeCodeSchema,
179
+ credentialStatus: z.enum(["AVAILABLE", "NEEDS_REAUTH", "TEMPORARILY_UNAVAILABLE"]),
180
+ activeCredential: CodexCredentialVersionSchema.nullable(),
181
+ createdAt: z.number().int().positive(),
182
+ updatedAt: z.number().int().positive(),
183
+ activeAssignmentCount: z.number().int().nonnegative().optional()
184
+ });
185
+ export const CodexAdminAccountListResponseSchema = z.strictObject({
186
+ schemaVersion: z.literal(CODEX_DISTRIBUTION_SCHEMA_VERSION),
187
+ accounts: z.array(CodexAdminAccountSchema)
188
+ });
189
+ export const CodexCredentialVersionListResponseSchema = z.strictObject({
190
+ schemaVersion: z.literal(CODEX_DISTRIBUTION_SCHEMA_VERSION),
191
+ account: CodexAdminAccountSchema,
192
+ credentials: z.array(CodexCredentialVersionSchema)
193
+ });
194
+ export const CodexManualRefreshResponseSchema = z.strictObject({
195
+ schemaVersion: z.literal(CODEX_DISTRIBUTION_SCHEMA_VERSION),
196
+ accountId: z.string().min(1).max(128),
197
+ outcome: z.enum(["SUCCESS", "TEMPORARY_FAILURE", "PERMANENT_FAILURE"]),
198
+ errorCode: NullableSafeCodeSchema,
199
+ expiresAt: NullableInstantSchema
200
+ });
201
+ export const CodexAdminAssignmentSchema = z.strictObject({
202
+ id: z.string().min(1).max(128),
203
+ accountId: z.string().min(1).max(128),
204
+ userSubject: z.string().min(1).max(255),
205
+ username: z.string().min(1).max(512),
206
+ isDefault: z.boolean(),
207
+ status: z.enum(["ACTIVE", "DISABLED"]),
208
+ createdAt: z.number().int().positive(),
209
+ updatedAt: z.number().int().positive()
210
+ });
211
+ export const CodexAdminAssignmentListResponseSchema = z.strictObject({
212
+ schemaVersion: z.literal(CODEX_DISTRIBUTION_SCHEMA_VERSION),
213
+ assignments: z.array(CodexAdminAssignmentSchema)
214
+ });
215
+ export const CodexAdminAssignmentMutationResponseSchema = z.strictObject({
216
+ schemaVersion: z.literal(CODEX_DISTRIBUTION_SCHEMA_VERSION),
217
+ assignment: CodexAdminAssignmentSchema
218
+ });
219
+ export const CodexAdminAssignmentDeleteResponseSchema = z.strictObject({
220
+ schemaVersion: z.literal(CODEX_DISTRIBUTION_SCHEMA_VERSION),
221
+ assignmentId: z.string().min(1).max(128)
222
+ });
223
+ export function codexAccountLoginCredentialsPath(accountId) {
224
+ return `${CODEX_ACCOUNTS_PATH}/${encodeURIComponent(accountId)}/login-credentials`;
225
+ }
226
+ export function codexAdminCredentialVersionsPath(accountId) {
227
+ return `${CODEX_ADMIN_ACCOUNTS_PATH}/${encodeURIComponent(accountId)}/credential-versions`;
228
+ }
229
+ export function codexAdminRefreshPath(accountId) {
230
+ return `${CODEX_ADMIN_ACCOUNTS_PATH}/${encodeURIComponent(accountId)}/refresh`;
231
+ }
232
+ export function codexAdminAssignmentPath(assignmentId) {
233
+ return `${CODEX_ADMIN_ASSIGNMENTS_PATH}/${encodeURIComponent(assignmentId)}`;
234
+ }
235
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export interface CodexQuotaWindowUpload {
2
+ usedPercent?: number;
3
+ windowMinutes?: number;
4
+ resetAt?: number;
5
+ }
6
+ export interface CodexQuotaUpload {
7
+ updatedAt: number;
8
+ status: number;
9
+ model: string;
10
+ planType?: string;
11
+ activeLimit?: number;
12
+ primary: CodexQuotaWindowUpload;
13
+ secondary: CodexQuotaWindowUpload;
14
+ }
15
+ export declare function loadCodexQuotaUploads(storagePath: string, accounts: readonly {
16
+ accountId?: string;
17
+ email?: string;
18
+ }[]): Promise<Array<CodexQuotaUpload | undefined>>;
@@ -0,0 +1,66 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { dirname, join } from "node:path";
3
+ function record(value) {
4
+ return value !== null && typeof value === "object" && !Array.isArray(value)
5
+ ? value : undefined;
6
+ }
7
+ function finite(value) {
8
+ return typeof value === "number" && Number.isFinite(value) ? value : undefined;
9
+ }
10
+ function window(value) {
11
+ const source = record(value);
12
+ if (!source)
13
+ return {};
14
+ const used = finite(source.usedPercent);
15
+ const minutes = finite(source.windowMinutes);
16
+ const resetAt = finite(source.resetAtMs);
17
+ return {
18
+ ...(used === undefined ? {} : { usedPercent: Math.max(0, Math.min(100, used)) }),
19
+ ...(minutes === undefined || minutes <= 0 ? {} : { windowMinutes: Math.round(minutes) }),
20
+ ...(resetAt === undefined || resetAt <= 0 ? {} : { resetAt: Math.round(resetAt) })
21
+ };
22
+ }
23
+ function snapshot(value) {
24
+ const source = record(value);
25
+ if (!source)
26
+ return undefined;
27
+ const updatedAt = finite(source.updatedAt);
28
+ const status = finite(source.status);
29
+ const model = typeof source.model === "string" ? source.model.trim() : "";
30
+ if (!updatedAt || status === undefined || !model)
31
+ return undefined;
32
+ const activeLimit = finite(source.activeLimit);
33
+ return {
34
+ updatedAt: Math.round(updatedAt), status: Math.round(status), model,
35
+ ...(typeof source.planType === "string" && source.planType.trim() ? { planType: source.planType.trim() } : {}),
36
+ ...(activeLimit === undefined || activeLimit < 0 ? {} : { activeLimit: Math.round(activeLimit) }),
37
+ primary: window(source.primary), secondary: window(source.secondary)
38
+ };
39
+ }
40
+ export async function loadCodexQuotaUploads(storagePath, accounts) {
41
+ try {
42
+ const parsed = record(JSON.parse(await readFile(join(dirname(storagePath), "quota-cache.json"), "utf8")));
43
+ if (!parsed || parsed.version !== 1)
44
+ return accounts.map(() => undefined);
45
+ const byAccountId = record(parsed.byAccountId) ?? {};
46
+ const byEmail = record(parsed.byEmail) ?? {};
47
+ const normalized = accounts.map((account) => ({
48
+ accountId: account.accountId?.trim() || undefined,
49
+ email: account.email?.trim().toLowerCase() || undefined
50
+ }));
51
+ return normalized.map((account) => {
52
+ if (account.accountId && normalized.filter((item) => item.accountId === account.accountId).length === 1) {
53
+ const result = snapshot(byAccountId[account.accountId]);
54
+ if (result)
55
+ return result;
56
+ }
57
+ if (!account.email || normalized.filter((item) => item.email === account.email).length !== 1)
58
+ return undefined;
59
+ return snapshot(byEmail[account.email]);
60
+ });
61
+ }
62
+ catch {
63
+ return accounts.map(() => undefined);
64
+ }
65
+ }
66
+ //# sourceMappingURL=quota-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota-cache.js","sourceRoot":"","sources":["../src/quota-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export interface CodexLaunch {
2
+ command: string;
3
+ args: string[];
4
+ source: "override" | "path" | "bundled" | "npx";
5
+ }
6
+ export interface CodexRuntimeOptions {
7
+ env?: NodeJS.ProcessEnv;
8
+ binary?: string;
9
+ binaryEnvNames?: string[];
10
+ bundledEnvNames?: string[];
11
+ launchMode?: "direct" | "npx";
12
+ packageName?: string;
13
+ }
14
+ export declare function resolveCodexRuntime(args?: string[], options?: CodexRuntimeOptions): Promise<CodexLaunch>;
15
+ export declare function runCodexLaunch(launch: CodexLaunch, env?: NodeJS.ProcessEnv, binaryHintName?: string): Promise<number>;
16
+ export declare const resolveCodexLaunch: typeof resolveCodexRuntime;
@@ -0,0 +1,144 @@
1
+ import { spawn } from "node:child_process";
2
+ import { constants } from "node:fs";
3
+ import { access, realpath } from "node:fs/promises";
4
+ import { createRequire } from "node:module";
5
+ import { delimiter, dirname, join } from "node:path";
6
+ import { CodexRuntimeError } from "./errors.js";
7
+ const require = createRequire(import.meta.url);
8
+ const PROBE_TIMEOUT_MS = 5_000;
9
+ function enabled(value) {
10
+ return ["1", "true", "yes", "on"].includes(value?.trim().toLowerCase() ?? "");
11
+ }
12
+ async function probe(launch, env) {
13
+ const child = spawn(launch.command, [...launch.args, "--version"], {
14
+ env,
15
+ stdio: ["ignore", "ignore", "pipe"],
16
+ windowsHide: true
17
+ });
18
+ let stderr = "";
19
+ child.stderr.setEncoding("utf8").on("data", (chunk) => {
20
+ stderr = (stderr + chunk).slice(0, 1_000);
21
+ });
22
+ return new Promise((resolve) => {
23
+ let settled = false;
24
+ const finish = (detail) => {
25
+ if (settled)
26
+ return;
27
+ settled = true;
28
+ clearTimeout(timer);
29
+ resolve(detail);
30
+ };
31
+ const timer = setTimeout(() => {
32
+ child.kill();
33
+ finish("probe timed out");
34
+ }, PROBE_TIMEOUT_MS);
35
+ child.once("error", (error) => finish(error.message));
36
+ child.once("exit", (code, signal) => finish(code === 0 && !signal ? undefined : stderr.trim() || `exit ${code ?? signal}`));
37
+ });
38
+ }
39
+ async function executable(path) {
40
+ try {
41
+ await access(path, process.platform === "win32" ? constants.F_OK : constants.X_OK);
42
+ return true;
43
+ }
44
+ catch {
45
+ return false;
46
+ }
47
+ }
48
+ async function canonical(path) {
49
+ try {
50
+ return await realpath(path);
51
+ }
52
+ catch {
53
+ return path;
54
+ }
55
+ }
56
+ async function pathCandidates(env, bundled) {
57
+ const result = [];
58
+ const seen = new Set();
59
+ const bundledCanonical = bundled ? await canonical(bundled) : undefined;
60
+ for (const directory of (env.PATH ?? env.Path ?? env.path ?? "").split(delimiter).filter(Boolean)) {
61
+ const paths = process.platform === "win32"
62
+ ? [join(directory, "codex.exe"), join(directory, "node_modules", "@openai", "codex", "bin", "codex.js"), join(dirname(directory), "@openai", "codex", "bin", "codex.js")]
63
+ : [join(directory, "codex")];
64
+ for (const path of paths) {
65
+ if (!(await executable(path)))
66
+ continue;
67
+ const value = await canonical(path);
68
+ if (value === bundledCanonical || seen.has(value))
69
+ continue;
70
+ seen.add(value);
71
+ result.push(path.endsWith("codex.js")
72
+ ? { command: process.execPath, args: [path], source: "path" }
73
+ : { command: path, args: [], source: "path" });
74
+ }
75
+ }
76
+ return result;
77
+ }
78
+ function firstEnv(env, names) {
79
+ for (const name of names) {
80
+ const value = env[name]?.trim();
81
+ if (value)
82
+ return { name, value };
83
+ }
84
+ return undefined;
85
+ }
86
+ export async function resolveCodexRuntime(args = [], options = {}) {
87
+ const env = options.env ?? process.env;
88
+ const binaryEnvNames = options.binaryEnvNames ?? ["TOKENSRC_CODEX_BIN", "NUMA_CODEX_BIN"];
89
+ if (options.launchMode === "npx") {
90
+ return {
91
+ command: process.platform === "win32" ? "npx.cmd" : "npx",
92
+ args: ["-y", "--prefer-online", `${options.packageName ?? "@openai/codex"}@latest`, ...args],
93
+ source: "npx"
94
+ };
95
+ }
96
+ const environmentBinary = firstEnv(env, binaryEnvNames);
97
+ const binary = options.binary?.trim() || environmentBinary?.value;
98
+ if (binary) {
99
+ const launch = { command: binary, args: [], source: "override" };
100
+ const error = await probe(launch, env);
101
+ if (error) {
102
+ const label = environmentBinary?.name ?? binaryEnvNames[0] ?? "Codex binary";
103
+ throw new CodexRuntimeError(`${label}=${binary} is unavailable (${error}).`);
104
+ }
105
+ return { ...launch, args };
106
+ }
107
+ let bundled;
108
+ try {
109
+ bundled = {
110
+ command: process.execPath,
111
+ args: [require.resolve("@openai/codex/bin/codex.js")],
112
+ source: "bundled"
113
+ };
114
+ }
115
+ catch { /* optional diagnostic below */ }
116
+ const forceBundled = (options.bundledEnvNames ?? ["TOKENSRC_CODEX_USE_BUNDLED", "NUMA_USE_BUNDLED_CODEX"])
117
+ .some((name) => enabled(env[name]));
118
+ const diagnostics = [];
119
+ if (!forceBundled) {
120
+ for (const candidate of await pathCandidates(env, bundled?.args[0])) {
121
+ const error = await probe(candidate, env);
122
+ if (!error)
123
+ return { ...candidate, args: [...candidate.args, ...args] };
124
+ diagnostics.push(`${candidate.command}: ${error}`);
125
+ }
126
+ }
127
+ if (bundled) {
128
+ const error = await probe(bundled, env);
129
+ if (!error)
130
+ return { ...bundled, args: [...bundled.args, ...args] };
131
+ diagnostics.push(`bundled: ${error}`);
132
+ }
133
+ throw new CodexRuntimeError(`Unable to start the official Codex CLI${diagnostics.length ? `: ${diagnostics.join("; ")}` : ""}.`);
134
+ }
135
+ export async function runCodexLaunch(launch, env = process.env, binaryHintName = "TOKENSRC_CODEX_BIN") {
136
+ const child = spawn(launch.command, launch.args, { stdio: "inherit", env });
137
+ return new Promise((resolve, reject) => {
138
+ child.once("error", (error) => reject(new CodexRuntimeError(`Unable to start the official Codex CLI (${launch.command}): ${error.message}. ` +
139
+ `Override it with ${binaryHintName}.`, { cause: error })));
140
+ child.once("exit", (code, signal) => resolve(signal ? 128 : (code ?? 1)));
141
+ });
142
+ }
143
+ export const resolveCodexLaunch = resolveCodexRuntime;
144
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { z } from "zod";
2
+ declare const CodexSelectionSchema: z.ZodObject<{
3
+ schemaVersion: z.ZodLiteral<1>;
4
+ serviceUrl: z.ZodString;
5
+ allowInsecurePoc: z.ZodBoolean;
6
+ account: z.ZodObject<{
7
+ id: z.ZodString;
8
+ accountId: z.ZodString;
9
+ label: z.ZodString;
10
+ }, z.core.$strip>;
11
+ updatedAt: z.ZodString;
12
+ }, z.core.$strip>;
13
+ export type CodexSelection = z.infer<typeof CodexSelectionSchema>;
14
+ export declare function codexSelectionPath(configDirectory: string): string;
15
+ export declare function loadCodexSelection(configDirectory: string): Promise<CodexSelection | undefined>;
16
+ export declare function saveCodexSelection(configDirectory: string, selection: Omit<CodexSelection, "schemaVersion" | "updatedAt">): Promise<CodexSelection>;
17
+ export declare function clearCodexSelection(configDirectory: string): Promise<void>;
18
+ export {};
@@ -0,0 +1,42 @@
1
+ import { rm } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { z } from "zod";
4
+ import { readJsonIfExists, writePrivateJson } from "./private-file.js";
5
+ const CodexSelectionSchema = z.object({
6
+ schemaVersion: z.literal(1),
7
+ serviceUrl: z.string().url(),
8
+ allowInsecurePoc: z.boolean(),
9
+ account: z.object({
10
+ id: z.string().min(1),
11
+ accountId: z.string().min(1),
12
+ label: z.string().min(1)
13
+ }),
14
+ updatedAt: z.string().datetime()
15
+ });
16
+ export function codexSelectionPath(configDirectory) {
17
+ return join(configDirectory, "codex-selection.json");
18
+ }
19
+ export async function loadCodexSelection(configDirectory) {
20
+ const raw = await readJsonIfExists(codexSelectionPath(configDirectory));
21
+ if (raw === undefined)
22
+ return undefined;
23
+ const parsed = CodexSelectionSchema.safeParse(raw);
24
+ if (!parsed.success)
25
+ throw new Error(`Invalid Codex selection: ${codexSelectionPath(configDirectory)}`);
26
+ return parsed.data;
27
+ }
28
+ export async function saveCodexSelection(configDirectory, selection) {
29
+ const value = {
30
+ schemaVersion: 1,
31
+ ...selection,
32
+ updatedAt: new Date().toISOString()
33
+ };
34
+ await writePrivateJson(codexSelectionPath(configDirectory), value);
35
+ await rm(join(configDirectory, "codex-access-token.json"), { force: true });
36
+ return value;
37
+ }
38
+ export async function clearCodexSelection(configDirectory) {
39
+ await rm(codexSelectionPath(configDirectory), { force: true });
40
+ await rm(join(configDirectory, "codex-access-token.json"), { force: true });
41
+ }
42
+ //# sourceMappingURL=selection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection.js","sourceRoot":"","sources":["../src/selection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEvE,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IAC5B,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE;IAC7B,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;KACzB,CAAC;IACF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAIH,MAAM,UAAU,kBAAkB,CAAC,eAAuB;IACxD,OAAO,IAAI,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,eAAuB;IAC9D,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC,CAAC;IACxE,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACnD,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,kBAAkB,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IACxG,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,eAAuB,EACvB,SAA8D;IAE9D,MAAM,KAAK,GAAmB;QAC5B,aAAa,EAAE,CAAC;QAChB,GAAG,SAAS;QACZ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;IACF,MAAM,gBAAgB,CAAC,kBAAkB,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,CAAC;IACnE,MAAM,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,yBAAyB,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5E,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,eAAuB;IAC/D,MAAM,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,yBAAyB,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { ResolvedCodexConfig } from "./types.js";
2
+ export type CodexShortcutTarget = "run" | "app" | "both";
3
+ export type CodexShortcutScope = "auto" | "system" | "user";
4
+ export interface CodexShortcutOptions {
5
+ target?: CodexShortcutTarget;
6
+ scope?: CodexShortcutScope;
7
+ workspace?: string;
8
+ account?: string;
9
+ selectAccount?: boolean;
10
+ server?: string;
11
+ insecurePoc?: boolean;
12
+ registryUrl?: string;
13
+ force?: boolean;
14
+ rootDirectory?: string;
15
+ }
16
+ export interface CodexShortcutArtifact {
17
+ kind: "command" | "application" | "manifest";
18
+ path: string;
19
+ }
20
+ export interface CodexShortcutResult {
21
+ action: "installed" | "removed";
22
+ platform: NodeJS.Platform;
23
+ scope: "system" | "user";
24
+ commandDirectory: string;
25
+ pathReady: boolean;
26
+ pathHint?: string;
27
+ artifacts: CodexShortcutArtifact[];
28
+ }
29
+ export declare function installCodexShortcuts(config: ResolvedCodexConfig, options?: CodexShortcutOptions): Promise<CodexShortcutResult>;
30
+ export declare function removeCodexShortcuts(config: ResolvedCodexConfig, options?: CodexShortcutOptions): Promise<CodexShortcutResult>;