@numa-tech/numa 1.12.6 → 1.12.8

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 (68) hide show
  1. package/README.md +141 -43
  2. package/dist/ai-registry/bridge.d.ts +8 -0
  3. package/dist/ai-registry/bridge.js +63 -0
  4. package/dist/ai-registry/bridge.js.map +1 -0
  5. package/dist/ai-registry/client.d.ts +29 -3
  6. package/dist/ai-registry/client.js +112 -8
  7. package/dist/ai-registry/client.js.map +1 -1
  8. package/dist/ai-registry/commands.js +367 -112
  9. package/dist/ai-registry/commands.js.map +1 -1
  10. package/dist/ai-registry/errors.d.ts +2 -1
  11. package/dist/ai-registry/errors.js +12 -1
  12. package/dist/ai-registry/errors.js.map +1 -1
  13. package/dist/ai-registry/mcp-installer.d.ts +1 -0
  14. package/dist/ai-registry/mcp-installer.js +4 -0
  15. package/dist/ai-registry/mcp-installer.js.map +1 -1
  16. package/dist/ai-registry/namespace.d.ts +17 -0
  17. package/dist/ai-registry/namespace.js +53 -0
  18. package/dist/ai-registry/namespace.js.map +1 -0
  19. package/dist/ai-registry/schemas.d.ts +127 -2
  20. package/dist/ai-registry/schemas.js +42 -2
  21. package/dist/ai-registry/schemas.js.map +1 -1
  22. package/dist/ai-registry/sync.d.ts +23 -0
  23. package/dist/ai-registry/sync.js +276 -0
  24. package/dist/ai-registry/sync.js.map +1 -0
  25. package/dist/ai-registry/tui.d.ts +2 -0
  26. package/dist/ai-registry/tui.js +140 -0
  27. package/dist/ai-registry/tui.js.map +1 -0
  28. package/dist/ai-registry/workspace.d.ts +191 -0
  29. package/dist/ai-registry/workspace.js +167 -0
  30. package/dist/ai-registry/workspace.js.map +1 -0
  31. package/dist/app-config.d.ts +3 -2
  32. package/dist/app-config.js +5 -3
  33. package/dist/app-config.js.map +1 -1
  34. package/dist/chatgpt-desktop.d.ts +7 -0
  35. package/dist/chatgpt-desktop.js +95 -0
  36. package/dist/chatgpt-desktop.js.map +1 -1
  37. package/dist/cli.js +25 -3
  38. package/dist/cli.js.map +1 -1
  39. package/dist/command-catalog.d.ts +1 -0
  40. package/dist/command-catalog.js +97 -10
  41. package/dist/command-catalog.js.map +1 -1
  42. package/dist/config-page.js +2 -0
  43. package/dist/config-page.js.map +1 -1
  44. package/dist/config.d.ts +1 -0
  45. package/dist/config.js +1 -0
  46. package/dist/config.js.map +1 -1
  47. package/dist/pipeline/client.d.ts +10 -6
  48. package/dist/pipeline/client.js +7 -4
  49. package/dist/pipeline/client.js.map +1 -1
  50. package/dist/pipeline/commands.d.ts +5 -1
  51. package/dist/pipeline/commands.js +89 -18
  52. package/dist/pipeline/commands.js.map +1 -1
  53. package/dist/pipeline/schemas.d.ts +7 -7
  54. package/dist/pipeline/schemas.js +2 -2
  55. package/dist/pipeline/schemas.js.map +1 -1
  56. package/dist/platform-profile.d.ts +8 -2
  57. package/dist/platform-profile.js +5 -2
  58. package/dist/platform-profile.js.map +1 -1
  59. package/dist/web-console-page.d.ts +3 -3
  60. package/dist/web-console-page.js +75 -20
  61. package/dist/web-console-page.js.map +1 -1
  62. package/dist/web-console.d.ts +1 -1
  63. package/dist/web-console.js +46 -0
  64. package/dist/web-console.js.map +1 -1
  65. package/package.json +8 -5
  66. package/skills/numa-ai-registry/SKILL.md +25 -19
  67. package/skills/numa-ai-registry/evals/evals.json +10 -10
  68. package/skills/numa-ai-registry/references/command-contract.md +41 -6
@@ -0,0 +1,191 @@
1
+ import { z } from "zod";
2
+ import type { McpAgentTarget } from "./mcp-installer.js";
3
+ import type { InstallScope, SkillAgentTarget } from "./skill-installer.js";
4
+ declare const SkillEntrySchema: z.ZodObject<{
5
+ name: z.ZodString;
6
+ version: z.ZodOptional<z.ZodString>;
7
+ label: z.ZodOptional<z.ZodString>;
8
+ agent: z.ZodEnum<{
9
+ agents: "agents";
10
+ chatgpt: "chatgpt";
11
+ claude: "claude";
12
+ codex: "codex";
13
+ cursor: "cursor";
14
+ custom: "custom";
15
+ openclaw: "openclaw";
16
+ workbuddy: "workbuddy";
17
+ }>;
18
+ scope: z.ZodDefault<z.ZodEnum<{
19
+ project: "project";
20
+ user: "user";
21
+ }>>;
22
+ customRoot: z.ZodOptional<z.ZodString>;
23
+ }, z.core.$strip>;
24
+ declare const McpEntrySchema: z.ZodObject<{
25
+ name: z.ZodString;
26
+ version: z.ZodOptional<z.ZodString>;
27
+ label: z.ZodOptional<z.ZodString>;
28
+ agent: z.ZodEnum<{
29
+ chatgpt: "chatgpt";
30
+ claude: "claude";
31
+ codex: "codex";
32
+ cursor: "cursor";
33
+ custom: "custom";
34
+ openclaw: "openclaw";
35
+ workbuddy: "workbuddy";
36
+ }>;
37
+ scope: z.ZodDefault<z.ZodEnum<{
38
+ project: "project";
39
+ user: "user";
40
+ }>>;
41
+ transport: z.ZodDefault<z.ZodEnum<{
42
+ auto: "auto";
43
+ bridge: "bridge";
44
+ remote: "remote";
45
+ }>>;
46
+ customConfig: z.ZodOptional<z.ZodString>;
47
+ }, z.core.$strip>;
48
+ export declare const RegistryManifestSchema: z.ZodObject<{
49
+ schemaVersion: z.ZodLiteral<1>;
50
+ namespaceKey: z.ZodString;
51
+ instanceCode: z.ZodOptional<z.ZodString>;
52
+ skills: z.ZodDefault<z.ZodArray<z.ZodObject<{
53
+ name: z.ZodString;
54
+ version: z.ZodOptional<z.ZodString>;
55
+ label: z.ZodOptional<z.ZodString>;
56
+ agent: z.ZodEnum<{
57
+ agents: "agents";
58
+ chatgpt: "chatgpt";
59
+ claude: "claude";
60
+ codex: "codex";
61
+ cursor: "cursor";
62
+ custom: "custom";
63
+ openclaw: "openclaw";
64
+ workbuddy: "workbuddy";
65
+ }>;
66
+ scope: z.ZodDefault<z.ZodEnum<{
67
+ project: "project";
68
+ user: "user";
69
+ }>>;
70
+ customRoot: z.ZodOptional<z.ZodString>;
71
+ }, z.core.$strip>>>;
72
+ mcpServers: z.ZodDefault<z.ZodArray<z.ZodObject<{
73
+ name: z.ZodString;
74
+ version: z.ZodOptional<z.ZodString>;
75
+ label: z.ZodOptional<z.ZodString>;
76
+ agent: z.ZodEnum<{
77
+ chatgpt: "chatgpt";
78
+ claude: "claude";
79
+ codex: "codex";
80
+ cursor: "cursor";
81
+ custom: "custom";
82
+ openclaw: "openclaw";
83
+ workbuddy: "workbuddy";
84
+ }>;
85
+ scope: z.ZodDefault<z.ZodEnum<{
86
+ project: "project";
87
+ user: "user";
88
+ }>>;
89
+ transport: z.ZodDefault<z.ZodEnum<{
90
+ auto: "auto";
91
+ bridge: "bridge";
92
+ remote: "remote";
93
+ }>>;
94
+ customConfig: z.ZodOptional<z.ZodString>;
95
+ }, z.core.$strip>>>;
96
+ }, z.core.$loose>;
97
+ export declare const RegistryLockResourceSchema: z.ZodObject<{
98
+ type: z.ZodEnum<{
99
+ MCP: "MCP";
100
+ SKILL: "SKILL";
101
+ }>;
102
+ name: z.ZodString;
103
+ version: z.ZodString;
104
+ trackedLabel: z.ZodOptional<z.ZodString>;
105
+ sha256: z.ZodString;
106
+ source: z.ZodObject<{
107
+ registry: z.ZodLiteral<"NACOS">;
108
+ namespaceKey: z.ZodString;
109
+ instanceCode: z.ZodString;
110
+ }, z.core.$strip>;
111
+ install: z.ZodObject<{
112
+ agent: z.ZodString;
113
+ scope: z.ZodEnum<{
114
+ project: "project";
115
+ user: "user";
116
+ }>;
117
+ status: z.ZodEnum<{
118
+ FAILED: "FAILED";
119
+ INSTALLED: "INSTALLED";
120
+ LOCKED: "LOCKED";
121
+ MISSING: "MISSING";
122
+ }>;
123
+ path: z.ZodOptional<z.ZodString>;
124
+ }, z.core.$strip>;
125
+ }, z.core.$strip>;
126
+ export declare const RegistryLockSchema: z.ZodObject<{
127
+ schemaVersion: z.ZodLiteral<1>;
128
+ namespaceKey: z.ZodString;
129
+ instanceCode: z.ZodString;
130
+ policyRevision: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
131
+ resources: z.ZodArray<z.ZodObject<{
132
+ type: z.ZodEnum<{
133
+ MCP: "MCP";
134
+ SKILL: "SKILL";
135
+ }>;
136
+ name: z.ZodString;
137
+ version: z.ZodString;
138
+ trackedLabel: z.ZodOptional<z.ZodString>;
139
+ sha256: z.ZodString;
140
+ source: z.ZodObject<{
141
+ registry: z.ZodLiteral<"NACOS">;
142
+ namespaceKey: z.ZodString;
143
+ instanceCode: z.ZodString;
144
+ }, z.core.$strip>;
145
+ install: z.ZodObject<{
146
+ agent: z.ZodString;
147
+ scope: z.ZodEnum<{
148
+ project: "project";
149
+ user: "user";
150
+ }>;
151
+ status: z.ZodEnum<{
152
+ FAILED: "FAILED";
153
+ INSTALLED: "INSTALLED";
154
+ LOCKED: "LOCKED";
155
+ MISSING: "MISSING";
156
+ }>;
157
+ path: z.ZodOptional<z.ZodString>;
158
+ }, z.core.$strip>;
159
+ }, z.core.$strip>>;
160
+ }, z.core.$strip>;
161
+ export type RegistryManifest = z.infer<typeof RegistryManifestSchema>;
162
+ export type RegistrySkillEntry = z.infer<typeof SkillEntrySchema> & {
163
+ agent: SkillAgentTarget;
164
+ scope: InstallScope;
165
+ };
166
+ export type RegistryMcpEntry = z.infer<typeof McpEntrySchema> & {
167
+ agent: McpAgentTarget;
168
+ scope: InstallScope;
169
+ };
170
+ export type RegistryLock = z.infer<typeof RegistryLockSchema>;
171
+ export type RegistryLockResource = z.infer<typeof RegistryLockResourceSchema>;
172
+ export interface RegistryWorkspaceFiles {
173
+ directory: string;
174
+ manifestPath: string;
175
+ lockPath: string;
176
+ }
177
+ export declare function findRegistryWorkspace(start?: string): Promise<RegistryWorkspaceFiles | undefined>;
178
+ export declare function registryWorkspaceAt(start?: string): RegistryWorkspaceFiles;
179
+ export declare function readRegistryManifest(start?: string, required?: boolean): Promise<{
180
+ manifest: RegistryManifest;
181
+ files: RegistryWorkspaceFiles;
182
+ } | undefined>;
183
+ export declare function readRegistryLock(files: RegistryWorkspaceFiles, required?: boolean): Promise<RegistryLock | undefined>;
184
+ export declare function writeRegistryManifest(files: RegistryWorkspaceFiles, manifest: RegistryManifest): Promise<void>;
185
+ export declare function writeRegistryLock(files: RegistryWorkspaceFiles, lock: RegistryLock): Promise<void>;
186
+ export declare function canonicalJson(value: unknown): string;
187
+ export declare function canonicalSha256(value: unknown): string;
188
+ export declare function mergeSkillEntry(manifest: RegistryManifest, entry: RegistrySkillEntry): RegistryManifest;
189
+ export declare function mergeMcpEntry(manifest: RegistryManifest, entry: RegistryMcpEntry): RegistryManifest;
190
+ export declare function upsertLockResource(lock: RegistryLock, resource: RegistryLockResource): RegistryLock;
191
+ export {};
@@ -0,0 +1,167 @@
1
+ import { createHash } from "node:crypto";
2
+ import { access, mkdir, readFile, rename, writeFile } from "node:fs/promises";
3
+ import { dirname, join, parse, resolve } from "node:path";
4
+ import { z } from "zod";
5
+ import { AiRegistryError } from "./errors.js";
6
+ const SkillEntrySchema = z.object({
7
+ name: z.string().min(1),
8
+ version: z.string().min(1).optional(),
9
+ label: z.string().min(1).optional(),
10
+ agent: z.enum(["chatgpt", "codex", "claude", "cursor", "workbuddy", "openclaw", "agents", "custom"]),
11
+ scope: z.enum(["project", "user"]).default("project"),
12
+ customRoot: z.string().min(1).optional()
13
+ }).refine((entry) => !(entry.version && entry.label), "Skill entry cannot set both version and label");
14
+ const McpEntrySchema = z.object({
15
+ name: z.string().min(1),
16
+ version: z.string().min(1).optional(),
17
+ label: z.string().min(1).optional(),
18
+ agent: z.enum(["chatgpt", "codex", "claude", "cursor", "workbuddy", "openclaw", "custom"]),
19
+ scope: z.enum(["project", "user"]).default("project"),
20
+ transport: z.enum(["auto", "remote", "bridge"]).default("auto"),
21
+ customConfig: z.string().min(1).optional()
22
+ }).refine((entry) => !(entry.version && entry.label), "MCP entry cannot set both version and label");
23
+ export const RegistryManifestSchema = z.object({
24
+ schemaVersion: z.literal(1),
25
+ namespaceKey: z.string().min(1),
26
+ instanceCode: z.string().min(1).optional(),
27
+ skills: z.array(SkillEntrySchema).default([]),
28
+ mcpServers: z.array(McpEntrySchema).default([])
29
+ }).passthrough();
30
+ const LockInstallSchema = z.object({
31
+ agent: z.string().min(1),
32
+ scope: z.enum(["project", "user"]),
33
+ status: z.enum(["LOCKED", "INSTALLED", "MISSING", "FAILED"]),
34
+ path: z.string().min(1).optional()
35
+ });
36
+ export const RegistryLockResourceSchema = z.object({
37
+ type: z.enum(["SKILL", "MCP"]),
38
+ name: z.string().min(1),
39
+ version: z.string().min(1),
40
+ trackedLabel: z.string().min(1).optional(),
41
+ sha256: z.string().regex(/^[a-f0-9]{64}$/u),
42
+ source: z.object({
43
+ registry: z.literal("NACOS"),
44
+ namespaceKey: z.string().min(1),
45
+ instanceCode: z.string().min(1)
46
+ }),
47
+ install: LockInstallSchema
48
+ });
49
+ export const RegistryLockSchema = z.object({
50
+ schemaVersion: z.literal(1),
51
+ namespaceKey: z.string().min(1),
52
+ instanceCode: z.string().min(1),
53
+ policyRevision: z.union([z.string().min(1), z.number().int().nonnegative()]),
54
+ resources: z.array(RegistryLockResourceSchema)
55
+ });
56
+ export async function findRegistryWorkspace(start = process.cwd()) {
57
+ let current = resolve(start);
58
+ const root = parse(current).root;
59
+ while (true) {
60
+ const directory = join(current, ".numa");
61
+ const manifestPath = join(directory, "registry.json");
62
+ if (await exists(manifestPath))
63
+ return { directory, manifestPath, lockPath: join(directory, "registry.lock.json") };
64
+ if (current === root)
65
+ return undefined;
66
+ current = dirname(current);
67
+ }
68
+ }
69
+ export function registryWorkspaceAt(start = process.cwd()) {
70
+ const directory = join(resolve(start), ".numa");
71
+ return { directory, manifestPath: join(directory, "registry.json"), lockPath: join(directory, "registry.lock.json") };
72
+ }
73
+ export async function readRegistryManifest(start = process.cwd(), required = true) {
74
+ const files = await findRegistryWorkspace(start);
75
+ if (!files) {
76
+ if (!required)
77
+ return undefined;
78
+ throw new AiRegistryError("No .numa/registry.json was found in this project.", "ai_registry_manifest_not_found");
79
+ }
80
+ return { manifest: await parseJson(files.manifestPath, RegistryManifestSchema, "registry manifest"), files };
81
+ }
82
+ export async function readRegistryLock(files, required = true) {
83
+ if (!(await exists(files.lockPath))) {
84
+ if (!required)
85
+ return undefined;
86
+ throw new AiRegistryError("No .numa/registry.lock.json exists; run `numa registry lock` first.", "ai_registry_lock_not_found");
87
+ }
88
+ return parseJson(files.lockPath, RegistryLockSchema, "registry lock");
89
+ }
90
+ export async function writeRegistryManifest(files, manifest) {
91
+ await writeCanonicalJson(files.manifestPath, normalizeManifest(RegistryManifestSchema.parse(manifest)));
92
+ }
93
+ export async function writeRegistryLock(files, lock) {
94
+ const parsed = RegistryLockSchema.parse(lock);
95
+ const normalized = {
96
+ ...parsed,
97
+ resources: [...parsed.resources].sort((left, right) => compareText(`${left.type}\0${left.name}\0${left.install.agent}`, `${right.type}\0${right.name}\0${right.install.agent}`))
98
+ };
99
+ await writeCanonicalJson(files.lockPath, normalized);
100
+ }
101
+ export function canonicalJson(value) {
102
+ return JSON.stringify(sortValue(value));
103
+ }
104
+ export function canonicalSha256(value) {
105
+ return createHash("sha256").update(canonicalJson(value)).digest("hex");
106
+ }
107
+ export function mergeSkillEntry(manifest, entry) {
108
+ return normalizeManifest({
109
+ ...manifest,
110
+ skills: [...manifest.skills.filter((item) => !(item.name === entry.name && item.agent === entry.agent)), entry]
111
+ });
112
+ }
113
+ export function mergeMcpEntry(manifest, entry) {
114
+ return normalizeManifest({
115
+ ...manifest,
116
+ mcpServers: [...manifest.mcpServers.filter((item) => !(item.name === entry.name && item.agent === entry.agent)), entry]
117
+ });
118
+ }
119
+ export function upsertLockResource(lock, resource) {
120
+ return {
121
+ ...lock,
122
+ resources: [...lock.resources.filter((item) => !(item.type === resource.type && item.name === resource.name && item.install.agent === resource.install.agent)), resource]
123
+ };
124
+ }
125
+ function normalizeManifest(manifest) {
126
+ return {
127
+ ...manifest,
128
+ skills: [...manifest.skills].sort((left, right) => compareText(`${left.name}\0${left.agent}`, `${right.name}\0${right.agent}`)),
129
+ mcpServers: [...manifest.mcpServers].sort((left, right) => compareText(`${left.name}\0${left.agent}`, `${right.name}\0${right.agent}`))
130
+ };
131
+ }
132
+ async function parseJson(path, schema, label) {
133
+ try {
134
+ return schema.parse(JSON.parse(await readFile(path, "utf8")));
135
+ }
136
+ catch (error) {
137
+ throw new AiRegistryError(`Cannot read ${label} ${path}: ${error instanceof Error ? error.message : String(error)}`, "ai_registry_manifest_invalid");
138
+ }
139
+ }
140
+ async function writeCanonicalJson(path, value) {
141
+ await mkdir(dirname(path), { recursive: true, mode: 0o755 });
142
+ const temporary = `${path}.${process.pid}.tmp`;
143
+ await writeFile(temporary, `${JSON.stringify(sortValue(value), null, 2)}\n`, { mode: 0o644 });
144
+ await rename(temporary, path);
145
+ }
146
+ function sortValue(value) {
147
+ if (Array.isArray(value))
148
+ return value.map(sortValue);
149
+ if (!value || typeof value !== "object")
150
+ return value;
151
+ return Object.fromEntries(Object.entries(value)
152
+ .sort(([left], [right]) => compareText(left, right))
153
+ .map(([key, item]) => [key, sortValue(item)]));
154
+ }
155
+ function compareText(left, right) {
156
+ return left < right ? -1 : left > right ? 1 : 0;
157
+ }
158
+ async function exists(path) {
159
+ try {
160
+ await access(path);
161
+ return true;
162
+ }
163
+ catch {
164
+ return false;
165
+ }
166
+ }
167
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/ai-registry/workspace.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,13 @@
1
1
  export type OutputFormat = "text" | "json";
2
2
  export type CliLocale = "zh-CN" | "en-US";
3
3
  export interface AppConfig {
4
- schemaVersion: 3;
4
+ schemaVersion: 4;
5
5
  locale: CliLocale;
6
6
  output: OutputFormat;
7
7
  apiBaseUrl: string;
8
8
  profileUrl: string;
9
9
  profileId: string;
10
+ aiRegistryDefaultNamespaceKey: string;
10
11
  registryUrl: string;
11
12
  checkUpdates: boolean;
12
13
  initializedAt?: string;
@@ -25,6 +26,6 @@ export declare function loadAppConfigSync(): AppConfig;
25
26
  export declare function hasAppConfig(): Promise<boolean>;
26
27
  export declare function saveAppConfig(config: AppConfig): Promise<AppConfig>;
27
28
  export declare function resetAppConfig(): Promise<void>;
28
- export declare const CONFIG_KEYS: readonly ["locale", "output", "apiBaseUrl", "profileUrl", "profileId", "registryUrl", "checkUpdates"];
29
+ export declare const CONFIG_KEYS: readonly ["locale", "output", "apiBaseUrl", "profileUrl", "profileId", "aiRegistryDefaultNamespaceKey", "registryUrl", "checkUpdates"];
29
30
  export type ConfigKey = (typeof CONFIG_KEYS)[number];
30
31
  export declare function updateConfigValue(config: AppConfig, expression: string): AppConfig;
@@ -9,12 +9,13 @@ export const DEFAULT_API_BASE_URL = "https://apps-gw-prd.mcisaas.com/mci-devops-
9
9
  export const DEFAULT_PROFILE_URL = "https://code-inbox.mcisaas.com/public/v1/tenants/numa-realm/client-configuration";
10
10
  export const LEGACY_OFFICIAL_PROFILE_URL = "https://mail.tokensource.top/public/v1/tenants/numa-realm/client-configuration";
11
11
  export const DEFAULT_APP_CONFIG = {
12
- schemaVersion: 3,
12
+ schemaVersion: 4,
13
13
  locale: "zh-CN",
14
14
  output: "text",
15
15
  apiBaseUrl: DEFAULT_API_BASE_URL,
16
16
  profileUrl: DEFAULT_PROFILE_URL,
17
17
  profileId: "",
18
+ aiRegistryDefaultNamespaceKey: "",
18
19
  registryUrl: DEFAULT_REGISTRY_URL,
19
20
  checkUpdates: true
20
21
  };
@@ -30,12 +31,12 @@ export function appConfigPath() {
30
31
  return join(appConfigDirectory(), "config.json");
31
32
  }
32
33
  function normalizeConfig(value) {
33
- const migrateLegacyRegistry = value?.schemaVersion !== 2 && value?.schemaVersion !== 3 &&
34
+ const migrateLegacyRegistry = ![2, 3, 4].includes(value?.schemaVersion ?? 0) &&
34
35
  value?.registryUrl === LEGACY_PRIVATE_REGISTRY_URL;
35
36
  const normalized = {
36
37
  ...DEFAULT_APP_CONFIG,
37
38
  ...(value ?? {}),
38
- schemaVersion: 3,
39
+ schemaVersion: 4,
39
40
  ...(migrateLegacyRegistry ? { registryUrl: DEFAULT_REGISTRY_URL } : {})
40
41
  };
41
42
  return {
@@ -100,6 +101,7 @@ export const CONFIG_KEYS = [
100
101
  "apiBaseUrl",
101
102
  "profileUrl",
102
103
  "profileId",
104
+ "aiRegistryDefaultNamespaceKey",
103
105
  "registryUrl",
104
106
  "checkUpdates"
105
107
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"app-config.js","sourceRoot":"","sources":["../src/app-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app-config.js","sourceRoot":"","sources":["../src/app-config.ts"],"names":[],"mappings":"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"}
@@ -34,5 +34,12 @@ export interface ChatGptDesktopPreparation {
34
34
  /** ChatGPT release versions use YY.MDD.build; `26.8` means the start of August 2026. */
35
35
  export declare function requiresChatGptRollback(version: string): boolean;
36
36
  export declare function inspectChatGptDesktop(dependencies?: ChatGptDesktopDependencies): Promise<CodexDesktopAppStatus>;
37
+ interface DownloadProgress {
38
+ start(): void;
39
+ update(bytes: number): void;
40
+ complete(bytes: number): void;
41
+ abort(): void;
42
+ }
43
+ export declare function createChatGptDownloadProgress(output: NodeJS.WritableStream, totalBytes: number, now?: () => number): DownloadProgress;
37
44
  export declare function ensureManagedChatGptDesktop(dependencies?: ChatGptDesktopDependencies): Promise<ChatGptDesktopPreparation>;
38
45
  export {};
@@ -15,6 +15,8 @@ export const MANAGED_CHATGPT_ARCHIVE_SHA256 = "da88c8a15eab1ddc8efdf50182d4aca74
15
15
  const CHATGPT_BUNDLE_ID = "com.openai.codex";
16
16
  const OPENAI_TEAM_ID = "2DC432GLL2";
17
17
  const MAX_DOWNLOAD_BYTES = 650 * 1024 * 1024;
18
+ const DOWNLOAD_PROGRESS_INTERVAL_MS = 200;
19
+ const MEBIBYTE = 1024 * 1024;
18
20
  const execFile = promisify(execFileCallback);
19
21
  function appCandidates(dependencies) {
20
22
  if (dependencies.appPaths)
@@ -168,6 +170,94 @@ async function writeAll(file, value) {
168
170
  offset += result.bytesWritten;
169
171
  }
170
172
  }
173
+ function formatMebibytes(bytes) {
174
+ return `${(bytes / MEBIBYTE).toFixed(1)} MiB`;
175
+ }
176
+ function formatRate(bytesPerSecond) {
177
+ if (bytesPerSecond >= MEBIBYTE)
178
+ return `${(bytesPerSecond / MEBIBYTE).toFixed(1)} MiB/s`;
179
+ return `${Math.max(0, bytesPerSecond / 1024).toFixed(0)} KiB/s`;
180
+ }
181
+ function formatDuration(seconds) {
182
+ if (!Number.isFinite(seconds) || seconds < 0)
183
+ return "--:--";
184
+ const rounded = Math.ceil(seconds);
185
+ const hours = Math.floor(rounded / 3600);
186
+ const minutes = Math.floor((rounded % 3600) / 60);
187
+ const remainder = rounded % 60;
188
+ return hours > 0
189
+ ? `${hours}:${String(minutes).padStart(2, "0")}:${String(remainder).padStart(2, "0")}`
190
+ : `${minutes}:${String(remainder).padStart(2, "0")}`;
191
+ }
192
+ export function createChatGptDownloadProgress(output, totalBytes, now = Date.now) {
193
+ const terminal = output;
194
+ const interactive = terminal.isTTY === true;
195
+ const columns = Number.isFinite(terminal.columns) ? terminal.columns : 100;
196
+ const barWidth = Math.max(10, Math.min(30, columns - 64));
197
+ const startedAt = now();
198
+ let lastRenderedAt = Number.NEGATIVE_INFINITY;
199
+ let lastReportedBucket = 0;
200
+ let terminalLineOpen = false;
201
+ const snapshot = (bytes) => {
202
+ const bounded = Math.max(0, Math.min(bytes, totalBytes));
203
+ const ratio = totalBytes > 0 ? bounded / totalBytes : 0;
204
+ const percent = ratio * 100;
205
+ const elapsedSeconds = Math.max(0, (now() - startedAt) / 1000);
206
+ const rate = elapsedSeconds >= 0.25 && bounded > 0 ? bounded / elapsedSeconds : 0;
207
+ const eta = rate > 0 ? (totalBytes - bounded) / rate : Number.NaN;
208
+ const completed = Math.min(barWidth, Math.floor(ratio * barWidth));
209
+ const bar = `${"█".repeat(completed)}${"░".repeat(barWidth - completed)}`;
210
+ return `下载 [${bar}] ${percent.toFixed(1)}% ${formatMebibytes(bounded)}/${formatMebibytes(totalBytes)}`
211
+ + ` ${rate > 0 ? formatRate(rate) : "-- KiB/s"} ETA ${formatDuration(eta)}`;
212
+ };
213
+ const renderInteractive = (bytes, force = false) => {
214
+ const timestamp = now();
215
+ if (!force && timestamp - lastRenderedAt < DOWNLOAD_PROGRESS_INTERVAL_MS)
216
+ return;
217
+ output.write(`\r\u001b[2K${snapshot(bytes)}`);
218
+ terminalLineOpen = true;
219
+ lastRenderedAt = timestamp;
220
+ };
221
+ const renderLog = (bytes, force = false) => {
222
+ const bounded = Math.max(0, Math.min(bytes, totalBytes));
223
+ const ratio = totalBytes > 0 ? bounded / totalBytes : 0;
224
+ const bucket = Math.min(10, Math.floor(ratio * 10));
225
+ if (!force && bucket <= lastReportedBucket)
226
+ return;
227
+ lastReportedBucket = Math.max(lastReportedBucket, bucket);
228
+ output.write(`${snapshot(bytes)}\n`);
229
+ };
230
+ return {
231
+ start() {
232
+ if (interactive)
233
+ renderInteractive(0, true);
234
+ else
235
+ output.write(`正在下载 ChatGPT 安装包(${formatMebibytes(totalBytes)})…\n`);
236
+ },
237
+ update(bytes) {
238
+ if (interactive)
239
+ renderInteractive(bytes, bytes >= totalBytes);
240
+ else
241
+ renderLog(bytes);
242
+ },
243
+ complete(bytes) {
244
+ if (interactive) {
245
+ renderInteractive(bytes, true);
246
+ output.write("\n");
247
+ terminalLineOpen = false;
248
+ }
249
+ else if (lastReportedBucket < 10) {
250
+ renderLog(bytes, true);
251
+ }
252
+ },
253
+ abort() {
254
+ if (terminalLineOpen) {
255
+ output.write("\n");
256
+ terminalLineOpen = false;
257
+ }
258
+ }
259
+ };
260
+ }
171
261
  async function downloadManagedArchive(dependencies) {
172
262
  const env = dependencies.env ?? process.env;
173
263
  const home = dependencies.homeDirectory ?? homedir();
@@ -196,7 +286,9 @@ async function downloadManagedArchive(dependencies) {
196
286
  }
197
287
  const digest = createHash("sha256");
198
288
  const file = await open(temporary, "wx", 0o600);
289
+ const progress = createChatGptDownloadProgress(dependencies.output ?? process.stderr, MANAGED_CHATGPT_ARCHIVE_BYTES);
199
290
  let bytes = 0;
291
+ progress.start();
200
292
  try {
201
293
  const reader = response.body.getReader();
202
294
  while (true) {
@@ -208,9 +300,12 @@ async function downloadManagedArchive(dependencies) {
208
300
  throw new Error("ChatGPT 安装包超过允许的最大大小。");
209
301
  digest.update(item.value);
210
302
  await writeAll(file, item.value);
303
+ progress.update(bytes);
211
304
  }
305
+ progress.complete(bytes);
212
306
  }
213
307
  catch (error) {
308
+ progress.abort();
214
309
  await rm(temporary, { force: true });
215
310
  throw error;
216
311
  }