@numa-tech/numa 1.11.10

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 (99) hide show
  1. package/README.md +602 -0
  2. package/THIRD_PARTY_NOTICES.md +13 -0
  3. package/assets/codex-shortcut-icon.icns +0 -0
  4. package/assets/codex-shortcut-icon.ico +0 -0
  5. package/dist/app-config.d.ts +26 -0
  6. package/dist/app-config.js +135 -0
  7. package/dist/app-config.js.map +1 -0
  8. package/dist/backend.d.ts +16 -0
  9. package/dist/backend.js +106 -0
  10. package/dist/backend.js.map +1 -0
  11. package/dist/branding.d.ts +7 -0
  12. package/dist/branding.js +13 -0
  13. package/dist/branding.js.map +1 -0
  14. package/dist/chatgpt-console.d.ts +53 -0
  15. package/dist/chatgpt-console.js +105 -0
  16. package/dist/chatgpt-console.js.map +1 -0
  17. package/dist/cli.d.ts +2 -0
  18. package/dist/cli.js +451 -0
  19. package/dist/cli.js.map +1 -0
  20. package/dist/codex-auth-agent.d.ts +60 -0
  21. package/dist/codex-auth-agent.js +331 -0
  22. package/dist/codex-auth-agent.js.map +1 -0
  23. package/dist/codex-commands.d.ts +2 -0
  24. package/dist/codex-commands.js +528 -0
  25. package/dist/codex-commands.js.map +1 -0
  26. package/dist/codex-legacy-cleanup.d.ts +5 -0
  27. package/dist/codex-legacy-cleanup.js +77 -0
  28. package/dist/codex-legacy-cleanup.js.map +1 -0
  29. package/dist/codex-process.d.ts +13 -0
  30. package/dist/codex-process.js +193 -0
  31. package/dist/codex-process.js.map +1 -0
  32. package/dist/codex-protocol.d.ts +352 -0
  33. package/dist/codex-protocol.js +116 -0
  34. package/dist/codex-protocol.js.map +1 -0
  35. package/dist/codex-quota-cache.d.ts +20 -0
  36. package/dist/codex-quota-cache.js +82 -0
  37. package/dist/codex-quota-cache.js.map +1 -0
  38. package/dist/codex-selection.d.ts +18 -0
  39. package/dist/codex-selection.js +47 -0
  40. package/dist/codex-selection.js.map +1 -0
  41. package/dist/codex-service-client.d.ts +11 -0
  42. package/dist/codex-service-client.js +91 -0
  43. package/dist/codex-service-client.js.map +1 -0
  44. package/dist/codex-shortcuts.d.ts +43 -0
  45. package/dist/codex-shortcuts.js +429 -0
  46. package/dist/codex-shortcuts.js.map +1 -0
  47. package/dist/codex-tui.d.ts +15 -0
  48. package/dist/codex-tui.js +235 -0
  49. package/dist/codex-tui.js.map +1 -0
  50. package/dist/command-catalog.d.ts +9 -0
  51. package/dist/command-catalog.js +206 -0
  52. package/dist/command-catalog.js.map +1 -0
  53. package/dist/config-page.d.ts +2 -0
  54. package/dist/config-page.js +51 -0
  55. package/dist/config-page.js.map +1 -0
  56. package/dist/config.d.ts +22 -0
  57. package/dist/config.js +99 -0
  58. package/dist/config.js.map +1 -0
  59. package/dist/identity.d.ts +23 -0
  60. package/dist/identity.js +78 -0
  61. package/dist/identity.js.map +1 -0
  62. package/dist/media/client.d.ts +79 -0
  63. package/dist/media/client.js +175 -0
  64. package/dist/media/client.js.map +1 -0
  65. package/dist/media/commands.d.ts +2 -0
  66. package/dist/media/commands.js +193 -0
  67. package/dist/media/commands.js.map +1 -0
  68. package/dist/media/errors.d.ts +8 -0
  69. package/dist/media/errors.js +37 -0
  70. package/dist/media/errors.js.map +1 -0
  71. package/dist/media/schemas.d.ts +62 -0
  72. package/dist/media/schemas.js +71 -0
  73. package/dist/media/schemas.js.map +1 -0
  74. package/dist/media/transfers.d.ts +38 -0
  75. package/dist/media/transfers.js +169 -0
  76. package/dist/media/transfers.js.map +1 -0
  77. package/dist/oauth.d.ts +30 -0
  78. package/dist/oauth.js +295 -0
  79. package/dist/oauth.js.map +1 -0
  80. package/dist/private-file.d.ts +3 -0
  81. package/dist/private-file.js +51 -0
  82. package/dist/private-file.js.map +1 -0
  83. package/dist/server.d.ts +2 -0
  84. package/dist/server.js +197 -0
  85. package/dist/server.js.map +1 -0
  86. package/dist/types.d.ts +40 -0
  87. package/dist/types.js +2 -0
  88. package/dist/types.js.map +1 -0
  89. package/dist/web-console-page.d.ts +3 -0
  90. package/dist/web-console-page.js +59 -0
  91. package/dist/web-console-page.js.map +1 -0
  92. package/dist/web-console.d.ts +22 -0
  93. package/dist/web-console.js +335 -0
  94. package/dist/web-console.js.map +1 -0
  95. package/examples/claude-desktop-installed-binary.json +11 -0
  96. package/examples/claude-desktop-npx.json +12 -0
  97. package/examples/codex-installed-binary.json +11 -0
  98. package/examples/codex-npx.json +12 -0
  99. package/package.json +67 -0
@@ -0,0 +1,429 @@
1
+ import { spawn } from "node:child_process";
2
+ import { constants } from "node:fs";
3
+ import { access, chmod, copyFile, mkdir, readFile, rm, writeFile } from "node:fs/promises";
4
+ import { homedir } from "node:os";
5
+ import { dirname, join, resolve } from "node:path";
6
+ import process from "node:process";
7
+ import { DEFAULT_REGISTRY_URL } from "./app-config.js";
8
+ import { CODEX_APP_NAME, CODEX_SHORTCUT_NAME, PACKAGE_NAME } from "./branding.js";
9
+ const MANAGED_MARKER = `Managed by ${PACKAGE_NAME} codex shortcut`;
10
+ const MANIFEST_FILE = ".numa-codex-shortcuts.json";
11
+ function selectedPlatform(value) {
12
+ if (value === "darwin" || value === "win32")
13
+ return value;
14
+ throw new Error("Codex 快捷方式目前仅支持 macOS 和 Windows。");
15
+ }
16
+ function validateTarget(value) {
17
+ const target = value ?? "both";
18
+ if (target === "run" || target === "app" || target === "both")
19
+ return target;
20
+ throw new Error("--target 仅支持 run、app 或 both。");
21
+ }
22
+ function validateScope(value) {
23
+ const scope = value ?? "auto";
24
+ if (scope === "auto" || scope === "system" || scope === "user")
25
+ return scope;
26
+ throw new Error("--scope 仅支持 auto、system 或 user。");
27
+ }
28
+ function validateRegistryUrl(value) {
29
+ const url = new URL(value?.trim() || DEFAULT_REGISTRY_URL);
30
+ if (!["http:", "https:"].includes(url.protocol)) {
31
+ throw new Error("--registry-url 必须是 HTTP(S) URL。");
32
+ }
33
+ if (url.username || url.password) {
34
+ throw new Error("--registry-url 不能包含用户名或密码。");
35
+ }
36
+ return url.toString();
37
+ }
38
+ function validateCommandName(value) {
39
+ const name = value?.trim() || CODEX_SHORTCUT_NAME;
40
+ if (!/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/u.test(name)) {
41
+ throw new Error("--command-name 只能包含字母、数字、点、下划线和连字符。");
42
+ }
43
+ return name;
44
+ }
45
+ function validateAppName(value) {
46
+ const name = value?.trim() || CODEX_APP_NAME;
47
+ if (!name || name.length > 80 || /[\\/:*?"<>|\0]/u.test(name)) {
48
+ throw new Error("--app-name 包含无效字符或长度超过 80。");
49
+ }
50
+ return name;
51
+ }
52
+ function pathsFor(platform, homeDirectory, env, commandName, appName, scope, dependencies) {
53
+ if (platform === "darwin") {
54
+ const commandDirectory = scope === "system"
55
+ ? dependencies.macSystemCommandDirectory ?? "/usr/local/bin"
56
+ : join(homeDirectory, ".local", "bin");
57
+ const applicationsDirectory = scope === "system"
58
+ ? dependencies.macSystemApplicationsDirectory ?? "/Applications"
59
+ : join(homeDirectory, "Applications");
60
+ return {
61
+ commandDirectory,
62
+ manifestPath: join(commandDirectory, MANIFEST_FILE),
63
+ runCommand: join(commandDirectory, commandName),
64
+ appCommand: join(commandDirectory, `${commandName}-app`),
65
+ appIcon: join(applicationsDirectory, `${appName}.app`, "Contents", "Resources", "AppIcon.icns"),
66
+ appShortcut: join(applicationsDirectory, `${appName}.app`)
67
+ };
68
+ }
69
+ const roaming = env.APPDATA || join(homeDirectory, "AppData", "Roaming");
70
+ const commandDirectory = join(roaming, "npm");
71
+ return {
72
+ commandDirectory,
73
+ manifestPath: join(commandDirectory, MANIFEST_FILE),
74
+ runCommand: join(commandDirectory, `${commandName}.cmd`),
75
+ appCommand: join(commandDirectory, `${commandName}-app.cmd`),
76
+ appIcon: join(commandDirectory, `${commandName}-app.ico`),
77
+ appShortcut: join(roaming, "Microsoft", "Windows", "Start Menu", "Programs", `${appName}.lnk`)
78
+ };
79
+ }
80
+ async function writableAncestor(path) {
81
+ let candidate = path;
82
+ while (!(await exists(candidate))) {
83
+ const parent = dirname(candidate);
84
+ if (parent === candidate)
85
+ return false;
86
+ candidate = parent;
87
+ }
88
+ try {
89
+ await access(candidate, constants.W_OK);
90
+ return true;
91
+ }
92
+ catch {
93
+ return false;
94
+ }
95
+ }
96
+ async function resolveInstallScope(requested, platform, target, homeDirectory, env, commandName, appName, dependencies) {
97
+ if (platform === "win32") {
98
+ if (requested === "system") {
99
+ throw new Error("Windows 快捷入口使用当前用户范围;--scope system 仅适用于 macOS。");
100
+ }
101
+ return "user";
102
+ }
103
+ if (requested !== "auto")
104
+ return requested;
105
+ const systemPaths = pathsFor(platform, homeDirectory, env, commandName, appName, "system", dependencies);
106
+ if (await exists(systemPaths.manifestPath))
107
+ return "system";
108
+ if (dependencies.canUseMacSystemPaths !== undefined) {
109
+ return dependencies.canUseMacSystemPaths ? "system" : "user";
110
+ }
111
+ const commandWritable = await writableAncestor(systemPaths.commandDirectory);
112
+ const appWritable = target === "run" || await writableAncestor(dirname(systemPaths.appShortcut));
113
+ return commandWritable && appWritable ? "system" : "user";
114
+ }
115
+ function posixQuote(value) {
116
+ return `'${value.replaceAll("'", `'"'"'`)}'`;
117
+ }
118
+ function cmdQuote(value) {
119
+ return `"${value.replaceAll("%", "%%").replaceAll('"', '""')}"`;
120
+ }
121
+ function fixedArguments(kind, options, workspace) {
122
+ const registryUrl = validateRegistryUrl(options.registryUrl);
123
+ const result = [
124
+ "-y",
125
+ "--prefer-online",
126
+ `--registry=${registryUrl}`,
127
+ `${PACKAGE_NAME}@latest`,
128
+ "codex",
129
+ kind
130
+ ];
131
+ if (kind === "app")
132
+ result.push(workspace);
133
+ if (options.account)
134
+ result.push("--account", options.account);
135
+ if (options.selectAccount)
136
+ result.push("--select-account");
137
+ if (options.server)
138
+ result.push("--server", options.server);
139
+ if (options.insecurePoc)
140
+ result.push("--insecure-poc");
141
+ if (kind === "run")
142
+ result.push("--");
143
+ return result;
144
+ }
145
+ function posixWrapper(kind, options, workspace) {
146
+ const args = fixedArguments(kind, options, workspace).map(posixQuote).join(" ");
147
+ return `#!/bin/sh\n# ${MANAGED_MARKER}\nexec /usr/bin/env npx ${args} "$@"\n`;
148
+ }
149
+ function windowsWrapper(kind, options, workspace) {
150
+ const args = fixedArguments(kind, options, workspace).map(cmdQuote).join(" ");
151
+ return `@echo off\r\nrem ${MANAGED_MARKER}\r\ncall npx.cmd ${args} %*\r\nexit /b %errorlevel%\r\n`;
152
+ }
153
+ function xmlEscape(value) {
154
+ return value
155
+ .replaceAll("&", "&amp;")
156
+ .replaceAll("<", "&lt;")
157
+ .replaceAll(">", "&gt;")
158
+ .replaceAll('"', "&quot;")
159
+ .replaceAll("'", "&apos;");
160
+ }
161
+ function macInfoPlist(appName) {
162
+ return `<?xml version="1.0" encoding="UTF-8"?>
163
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
164
+ <plist version="1.0">
165
+ <dict>
166
+ <key>CFBundleDisplayName</key><string>${xmlEscape(appName)}</string>
167
+ <key>CFBundleExecutable</key><string>launcher</string>
168
+ <key>CFBundleIconFile</key><string>AppIcon.icns</string>
169
+ <key>CFBundleIdentifier</key><string>tech.numa.codex-shortcut</string>
170
+ <key>CFBundleName</key><string>${xmlEscape(appName)}</string>
171
+ <key>CFBundlePackageType</key><string>APPL</string>
172
+ <key>CFBundleVersion</key><string>1</string>
173
+ <key>LSUIElement</key><true/>
174
+ <key>NumaManagedBy</key><string>${MANAGED_MARKER}</string>
175
+ </dict>
176
+ </plist>
177
+ `;
178
+ }
179
+ function macBundleLauncher() {
180
+ return `#!/bin/sh
181
+ # ${MANAGED_MARKER}
182
+ bundle_root=$(CDPATH= cd -- "$(dirname -- "$0")/../.." && pwd)
183
+ exec open -a Terminal "$bundle_root/Contents/Resources/launch.command"
184
+ `;
185
+ }
186
+ async function exists(path) {
187
+ try {
188
+ await access(path, constants.F_OK);
189
+ return true;
190
+ }
191
+ catch {
192
+ return false;
193
+ }
194
+ }
195
+ async function isManagedTextFile(path) {
196
+ try {
197
+ return (await readFile(path, "utf8")).includes(MANAGED_MARKER);
198
+ }
199
+ catch {
200
+ return false;
201
+ }
202
+ }
203
+ async function readManifest(path) {
204
+ try {
205
+ const parsed = JSON.parse(await readFile(path, "utf8"));
206
+ if (parsed.version !== 1 || !Array.isArray(parsed.artifacts))
207
+ return undefined;
208
+ if (parsed.platform !== "darwin" && parsed.platform !== "win32")
209
+ return undefined;
210
+ return parsed;
211
+ }
212
+ catch {
213
+ return undefined;
214
+ }
215
+ }
216
+ async function assertManagedOrAbsent(path, force, manifest, bundle = false) {
217
+ if (!(await exists(path)) || force)
218
+ return;
219
+ const recorded = manifest?.artifacts.some((artifact) => artifact.path === path) === true;
220
+ const markerPath = bundle ? join(path, "Contents", "MacOS", "launcher") : path;
221
+ if (recorded && (path.endsWith(".lnk") || path.endsWith(".ico") || await isManagedTextFile(markerPath)))
222
+ return;
223
+ if (await isManagedTextFile(markerPath))
224
+ return;
225
+ throw new Error(`目标已存在且不是 numa 管理的快捷方式,请更换名称或使用 --force: ${path}`);
226
+ }
227
+ function pathStatus(platform, commandDirectory, env) {
228
+ const separator = platform === "win32" ? ";" : ":";
229
+ const normalize = (value) => platform === "win32" ? value.replace(/[\\/]+$/u, "").toLowerCase() : value.replace(/\/+$/u, "");
230
+ const pathReady = (env.PATH ?? "")
231
+ .split(separator)
232
+ .some((entry) => normalize(entry) === normalize(commandDirectory));
233
+ if (pathReady)
234
+ return { pathReady };
235
+ return {
236
+ pathReady,
237
+ pathHint: platform === "win32"
238
+ ? `请把 ${commandDirectory} 加入用户 PATH,然后重新打开终端。`
239
+ : `请在 shell 配置中加入: export PATH="${commandDirectory}:$PATH"`
240
+ };
241
+ }
242
+ function powerShellQuote(value) {
243
+ return `'${value.replaceAll("'", "''")}'`;
244
+ }
245
+ async function spawnPowerShell(executable, encodedCommand) {
246
+ await new Promise((resolvePromise, reject) => {
247
+ const child = spawn(executable, ["-NoProfile", "-NonInteractive", "-EncodedCommand", encodedCommand], {
248
+ windowsHide: true,
249
+ stdio: "ignore"
250
+ });
251
+ child.once("error", reject);
252
+ child.once("exit", (code) => {
253
+ if (code === 0)
254
+ resolvePromise();
255
+ else
256
+ reject(new Error(`${executable} 创建快捷方式失败,退出码 ${code ?? "unknown"}`));
257
+ });
258
+ });
259
+ }
260
+ async function defaultCreateWindowsLink(linkPath, commandPath, workspace, iconPath) {
261
+ const script = [
262
+ "$shell = New-Object -ComObject WScript.Shell",
263
+ `$shortcut = $shell.CreateShortcut(${powerShellQuote(linkPath)})`,
264
+ "$shortcut.TargetPath = $env:ComSpec",
265
+ `$shortcut.Arguments = ${powerShellQuote(`/d /c ""${commandPath}""`)}`,
266
+ `$shortcut.WorkingDirectory = ${powerShellQuote(workspace)}`,
267
+ `$shortcut.IconLocation = ${powerShellQuote(`${iconPath},0`)}`,
268
+ "$shortcut.Save()"
269
+ ].join("\r\n");
270
+ const encoded = Buffer.from(script, "utf16le").toString("base64");
271
+ try {
272
+ await spawnPowerShell("powershell.exe", encoded);
273
+ }
274
+ catch (error) {
275
+ if (error.code !== "ENOENT")
276
+ throw error;
277
+ await spawnPowerShell("pwsh.exe", encoded);
278
+ }
279
+ }
280
+ function requestedKinds(target) {
281
+ if (target === "run")
282
+ return new Set(["run-command"]);
283
+ if (target === "app")
284
+ return new Set(["app-command", "app-icon", "app-shortcut"]);
285
+ return new Set(["run-command", "app-command", "app-icon", "app-shortcut"]);
286
+ }
287
+ export async function installCodexShortcuts(options = {}, dependencies = {}) {
288
+ if (options.account && options.selectAccount) {
289
+ throw new Error("--account 与 --select-account 不能同时使用。");
290
+ }
291
+ const platform = selectedPlatform(dependencies.platform ?? process.platform);
292
+ const target = validateTarget(options.target);
293
+ const requestedScope = validateScope(options.scope);
294
+ const homeDirectory = dependencies.homeDirectory ?? homedir();
295
+ const cwd = dependencies.cwd ?? process.cwd();
296
+ const env = dependencies.env ?? process.env;
297
+ const commandName = validateCommandName(options.commandName);
298
+ const appName = validateAppName(options.appName);
299
+ const workspace = resolve(cwd, options.workspace ?? ".");
300
+ const scope = await resolveInstallScope(requestedScope, platform, target, homeDirectory, env, commandName, appName, dependencies);
301
+ const paths = pathsFor(platform, homeDirectory, env, commandName, appName, scope, dependencies);
302
+ const manifest = await readManifest(paths.manifestPath);
303
+ const force = options.force === true;
304
+ const artifacts = [];
305
+ await mkdir(paths.commandDirectory, { recursive: true });
306
+ if (target === "run" || target === "both") {
307
+ await assertManagedOrAbsent(paths.runCommand, force, manifest);
308
+ await writeFile(paths.runCommand, platform === "darwin"
309
+ ? posixWrapper("run", options, workspace)
310
+ : windowsWrapper("run", options, workspace), "utf8");
311
+ if (platform === "darwin")
312
+ await chmod(paths.runCommand, 0o755);
313
+ artifacts.push({ kind: "run-command", path: paths.runCommand });
314
+ }
315
+ if (target === "app" || target === "both") {
316
+ await assertManagedOrAbsent(paths.appCommand, force, manifest);
317
+ await assertManagedOrAbsent(paths.appShortcut, force, manifest, platform === "darwin");
318
+ if (platform === "win32")
319
+ await assertManagedOrAbsent(paths.appIcon, force, manifest);
320
+ await writeFile(paths.appCommand, platform === "darwin"
321
+ ? posixWrapper("app", options, workspace)
322
+ : windowsWrapper("app", options, workspace), "utf8");
323
+ if (platform === "darwin") {
324
+ await chmod(paths.appCommand, 0o755);
325
+ const contents = join(paths.appShortcut, "Contents");
326
+ const launcher = join(contents, "MacOS", "launcher");
327
+ const launchCommand = join(contents, "Resources", "launch.command");
328
+ await mkdir(dirname(launcher), { recursive: true });
329
+ await mkdir(dirname(launchCommand), { recursive: true });
330
+ await writeFile(join(contents, "Info.plist"), macInfoPlist(appName), "utf8");
331
+ await writeFile(launcher, macBundleLauncher(), "utf8");
332
+ await writeFile(launchCommand, posixWrapper("app", options, workspace), "utf8");
333
+ await copyFile(new URL("../assets/codex-shortcut-icon.icns", import.meta.url), paths.appIcon);
334
+ await chmod(launcher, 0o755);
335
+ await chmod(launchCommand, 0o755);
336
+ }
337
+ else {
338
+ await copyFile(new URL("../assets/codex-shortcut-icon.ico", import.meta.url), paths.appIcon);
339
+ await mkdir(dirname(paths.appShortcut), { recursive: true });
340
+ await (dependencies.createWindowsLink ?? defaultCreateWindowsLink)(paths.appShortcut, paths.appCommand, workspace, paths.appIcon);
341
+ }
342
+ artifacts.push({ kind: "app-command", path: paths.appCommand });
343
+ if (platform === "win32")
344
+ artifacts.push({ kind: "app-icon", path: paths.appIcon });
345
+ artifacts.push({ kind: "app-shortcut", path: paths.appShortcut });
346
+ }
347
+ const replacedKinds = requestedKinds(target);
348
+ const preserved = manifest?.artifacts.filter((artifact) => !replacedKinds.has(artifact.kind)) ?? [];
349
+ const nextManifest = {
350
+ version: 1,
351
+ platform,
352
+ artifacts: [...preserved, ...artifacts]
353
+ };
354
+ await writeFile(paths.manifestPath, `${JSON.stringify(nextManifest, null, 2)}\n`, { mode: 0o600 });
355
+ return {
356
+ platform,
357
+ action: "installed",
358
+ artifacts,
359
+ commandDirectory: paths.commandDirectory,
360
+ scope,
361
+ ...pathStatus(platform, paths.commandDirectory, env)
362
+ };
363
+ }
364
+ export async function removeCodexShortcuts(options = {}, dependencies = {}) {
365
+ const platform = selectedPlatform(dependencies.platform ?? process.platform);
366
+ const target = validateTarget(options.target);
367
+ const requestedScope = validateScope(options.scope);
368
+ const homeDirectory = dependencies.homeDirectory ?? homedir();
369
+ const env = dependencies.env ?? process.env;
370
+ const commandName = validateCommandName(options.commandName);
371
+ const appName = validateAppName(options.appName);
372
+ let scope = requestedScope === "system" ? "system" : "user";
373
+ if (platform === "win32" && scope === "system") {
374
+ throw new Error("Windows 快捷入口使用当前用户范围;--scope system 仅适用于 macOS。");
375
+ }
376
+ if (platform === "darwin" && requestedScope === "auto") {
377
+ const systemPaths = pathsFor(platform, homeDirectory, env, commandName, appName, "system", dependencies);
378
+ scope = await exists(systemPaths.manifestPath) ? "system" : "user";
379
+ }
380
+ const paths = pathsFor(platform, homeDirectory, env, commandName, appName, scope, dependencies);
381
+ const manifest = await readManifest(paths.manifestPath);
382
+ const kinds = requestedKinds(target);
383
+ const artifacts = manifest?.artifacts.filter((artifact) => kinds.has(artifact.kind)) ?? [];
384
+ const removed = [];
385
+ for (const artifact of artifacts) {
386
+ const managed = artifact.path.endsWith(".lnk") || artifact.kind === "app-icon" ||
387
+ await isManagedTextFile(artifact.path.endsWith(".app")
388
+ ? join(artifact.path, "Contents", "MacOS", "launcher")
389
+ : artifact.path);
390
+ if (!managed)
391
+ continue;
392
+ await rm(artifact.path, { force: true, recursive: artifact.path.endsWith(".app") });
393
+ removed.push(artifact);
394
+ }
395
+ if (manifest) {
396
+ const remaining = manifest.artifacts.filter((artifact) => !kinds.has(artifact.kind));
397
+ if (remaining.length === 0)
398
+ await rm(paths.manifestPath, { force: true });
399
+ else
400
+ await writeFile(paths.manifestPath, `${JSON.stringify({ ...manifest, artifacts: remaining }, null, 2)}\n`, { mode: 0o600 });
401
+ }
402
+ return {
403
+ platform,
404
+ action: "removed",
405
+ artifacts: removed,
406
+ commandDirectory: paths.commandDirectory,
407
+ scope,
408
+ ...pathStatus(platform, paths.commandDirectory, env)
409
+ };
410
+ }
411
+ export async function codexShortcutInstallHintNeeded(dependencies = {}) {
412
+ const rawPlatform = dependencies.platform ?? process.platform;
413
+ if (rawPlatform !== "darwin" && rawPlatform !== "win32")
414
+ return false;
415
+ const platform = selectedPlatform(rawPlatform);
416
+ const homeDirectory = dependencies.homeDirectory ?? homedir();
417
+ const env = dependencies.env ?? process.env;
418
+ const userPaths = pathsFor(platform, homeDirectory, env, CODEX_SHORTCUT_NAME, CODEX_APP_NAME, "user", dependencies);
419
+ const candidates = [userPaths.runCommand];
420
+ if (platform === "darwin") {
421
+ candidates.push(pathsFor(platform, homeDirectory, env, CODEX_SHORTCUT_NAME, CODEX_APP_NAME, "system", dependencies).runCommand);
422
+ }
423
+ for (const candidate of candidates) {
424
+ if (await isManagedTextFile(candidate))
425
+ return false;
426
+ }
427
+ return true;
428
+ }
429
+ //# sourceMappingURL=codex-shortcuts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-shortcuts.js","sourceRoot":"","sources":["../src/codex-shortcuts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type CodexAccountSummary } from "./codex-protocol.js";
2
+ export interface CodexTuiOptions {
3
+ columns?: number;
4
+ color?: boolean;
5
+ unicode?: boolean;
6
+ now?: number;
7
+ }
8
+ export declare function quotaRemainingPercent(usedPercent: number | null | undefined): number | undefined;
9
+ export declare function renderQuotaBar(remaining: number | undefined, width: number, options?: Pick<CodexTuiOptions, "color" | "unicode">): string;
10
+ export declare function terminalCellWidth(value: string): number;
11
+ export declare function formatQuotaRefresh(value: number | string | null | undefined, now?: number): string;
12
+ export declare function isCodexAccountAvailable(account: CodexAccountSummary): boolean;
13
+ export declare function codexAccountStatusText(account: CodexAccountSummary): string | undefined;
14
+ export declare function renderCodexAccountDashboard(accounts: readonly CodexAccountSummary[], selectedAccountId?: string, tuiOptions?: CodexTuiOptions): string;
15
+ export declare function promptCodexAccount(accounts: readonly CodexAccountSummary[], selectedAccountId?: string): Promise<CodexAccountSummary>;