@hagicode/hagiscript 0.1.0-dev.9.1.ba06982

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 (46) hide show
  1. package/README.md +251 -0
  2. package/README_cn.md +251 -0
  3. package/dist/cli.d.ts +5 -0
  4. package/dist/cli.js +50 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/node-runtime-commands.d.ts +2 -0
  7. package/dist/commands/node-runtime-commands.js +88 -0
  8. package/dist/commands/node-runtime-commands.js.map +1 -0
  9. package/dist/commands/npm-sync-commands.d.ts +2 -0
  10. package/dist/commands/npm-sync-commands.js +155 -0
  11. package/dist/commands/npm-sync-commands.js.map +1 -0
  12. package/dist/index.d.ts +11 -0
  13. package/dist/index.js +14 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/runtime/node-download.d.ts +13 -0
  16. package/dist/runtime/node-download.js +78 -0
  17. package/dist/runtime/node-download.js.map +1 -0
  18. package/dist/runtime/node-extract.d.ts +6 -0
  19. package/dist/runtime/node-extract.js +155 -0
  20. package/dist/runtime/node-extract.js.map +1 -0
  21. package/dist/runtime/node-installer.d.ts +39 -0
  22. package/dist/runtime/node-installer.js +85 -0
  23. package/dist/runtime/node-installer.js.map +1 -0
  24. package/dist/runtime/node-platform.d.ts +14 -0
  25. package/dist/runtime/node-platform.js +41 -0
  26. package/dist/runtime/node-platform.js.map +1 -0
  27. package/dist/runtime/node-release.d.ts +28 -0
  28. package/dist/runtime/node-release.js +146 -0
  29. package/dist/runtime/node-release.js.map +1 -0
  30. package/dist/runtime/node-verify.d.ts +20 -0
  31. package/dist/runtime/node-verify.js +66 -0
  32. package/dist/runtime/node-verify.js.map +1 -0
  33. package/dist/runtime/npm-global.d.ts +20 -0
  34. package/dist/runtime/npm-global.js +53 -0
  35. package/dist/runtime/npm-global.js.map +1 -0
  36. package/dist/runtime/npm-sync.d.ts +114 -0
  37. package/dist/runtime/npm-sync.js +398 -0
  38. package/dist/runtime/npm-sync.js.map +1 -0
  39. package/dist/runtime/tool-sync-catalog.config.json +59 -0
  40. package/dist/runtime/tool-sync-catalog.d.ts +48 -0
  41. package/dist/runtime/tool-sync-catalog.js +189 -0
  42. package/dist/runtime/tool-sync-catalog.js.map +1 -0
  43. package/dist/version.d.ts +7 -0
  44. package/dist/version.js +9 -0
  45. package/dist/version.js.map +1 -0
  46. package/package.json +73 -0
@@ -0,0 +1,398 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { basename } from "node:path";
3
+ import semver from "semver";
4
+ import { installGlobalPackage, listGlobalPackages, NpmCommandError } from "./npm-global.js";
5
+ import { verifyNodeRuntime } from "./node-verify.js";
6
+ import { buildToolSyncPackageSet, ToolSyncCatalogValidationError } from "./tool-sync-catalog.js";
7
+ export class NpmSyncError extends Error {
8
+ constructor(message) {
9
+ super(message);
10
+ this.name = "NpmSyncError";
11
+ }
12
+ }
13
+ export class NpmManifestValidationError extends NpmSyncError {
14
+ errors;
15
+ constructor(errors) {
16
+ super(`Manifest validation failed: ${errors.join("; ")}`);
17
+ this.name = "NpmManifestValidationError";
18
+ this.errors = errors;
19
+ }
20
+ }
21
+ export class NpmSyncCommandError extends NpmSyncError {
22
+ packageName;
23
+ command;
24
+ args;
25
+ stdout;
26
+ stderr;
27
+ constructor(message, error, packageName) {
28
+ super(message);
29
+ this.name = "NpmSyncCommandError";
30
+ this.packageName = packageName;
31
+ this.command = error.context.command;
32
+ this.args = error.context.args;
33
+ this.stdout = error.context.stdout;
34
+ this.stderr = error.context.stderr;
35
+ }
36
+ }
37
+ export async function loadNpmSyncManifest(manifestPath) {
38
+ let parsed;
39
+ try {
40
+ parsed = JSON.parse(await readFile(manifestPath, "utf8"));
41
+ }
42
+ catch (error) {
43
+ const message = error instanceof Error ? error.message : String(error);
44
+ throw new NpmSyncError(`Failed to read manifest ${manifestPath}: ${message}`);
45
+ }
46
+ return validateNpmSyncManifest(parsed);
47
+ }
48
+ export function validateNpmSyncManifest(value) {
49
+ const errors = [];
50
+ if (!isRecord(value)) {
51
+ throw new NpmManifestValidationError(["manifest must be a JSON object"]);
52
+ }
53
+ if (isRecord(value.tools) && !Array.isArray(value.tools)) {
54
+ return validateToolSyncManifest(value.tools);
55
+ }
56
+ if (!isRecord(value.packages) || Array.isArray(value.packages)) {
57
+ throw new NpmManifestValidationError([
58
+ "manifest must contain a top-level packages object or tools object"
59
+ ]);
60
+ }
61
+ const packages = {};
62
+ for (const [packageName, entry] of Object.entries(value.packages)) {
63
+ if (!isValidPackageName(packageName)) {
64
+ errors.push(`invalid package name: ${packageName}`);
65
+ continue;
66
+ }
67
+ if (!isRecord(entry) || Array.isArray(entry)) {
68
+ errors.push(`${packageName} must be an object with a version range`);
69
+ continue;
70
+ }
71
+ const version = entry.version;
72
+ if (typeof version !== "string" || version.trim().length === 0) {
73
+ errors.push(`${packageName}.version must be a non-empty semver range`);
74
+ continue;
75
+ }
76
+ const normalizedRange = version.trim();
77
+ if (!semver.validRange(normalizedRange)) {
78
+ errors.push(`${packageName}.version is not a valid semver range: ${version}`);
79
+ continue;
80
+ }
81
+ const target = entry.target;
82
+ if (target !== undefined) {
83
+ if (typeof target !== "string" || target.trim().length === 0) {
84
+ errors.push(`${packageName}.target must be a non-empty npm selector`);
85
+ continue;
86
+ }
87
+ packages[packageName] = {
88
+ version: normalizedRange,
89
+ target: target.trim()
90
+ };
91
+ continue;
92
+ }
93
+ packages[packageName] = { version: normalizedRange };
94
+ }
95
+ if (errors.length > 0) {
96
+ throw new NpmManifestValidationError(errors);
97
+ }
98
+ return { packages, syncMode: "packages" };
99
+ }
100
+ export function normalizeGlobalInventory(stdout) {
101
+ let parsed;
102
+ try {
103
+ parsed = JSON.parse(stdout);
104
+ }
105
+ catch (error) {
106
+ const message = error instanceof Error ? error.message : String(error);
107
+ throw new NpmSyncError(`Failed to parse npm inventory JSON: ${message}`);
108
+ }
109
+ if (!isRecord(parsed) || !isRecord(parsed.dependencies)) {
110
+ return {};
111
+ }
112
+ const installed = {};
113
+ for (const [packageName, dependency] of Object.entries(parsed.dependencies)) {
114
+ if (!isRecord(dependency) || typeof dependency.version !== "string") {
115
+ continue;
116
+ }
117
+ installed[packageName] = dependency.version;
118
+ }
119
+ return installed;
120
+ }
121
+ export function createNpmSyncPlan(manifest, installed) {
122
+ return Object.entries(manifest.packages)
123
+ .sort(([left], [right]) => left.localeCompare(right))
124
+ .map(([packageName, entry]) => {
125
+ const installedVersion = installed[packageName];
126
+ const targetSelector = entry.target ?? entry.version;
127
+ const selectedInstallSelector = `${packageName}@${targetSelector}`;
128
+ const metadata = createActionMetadata(entry);
129
+ if (!installedVersion) {
130
+ return {
131
+ packageName,
132
+ requiredRange: entry.version,
133
+ targetSelector,
134
+ selectedInstallSelector,
135
+ action: "install",
136
+ ...metadata
137
+ };
138
+ }
139
+ if (semver.satisfies(installedVersion, entry.version, {
140
+ includePrerelease: true
141
+ })) {
142
+ return {
143
+ packageName,
144
+ requiredRange: entry.version,
145
+ targetSelector,
146
+ selectedInstallSelector,
147
+ installedVersion,
148
+ action: "noop",
149
+ ...metadata
150
+ };
151
+ }
152
+ return {
153
+ packageName,
154
+ requiredRange: entry.version,
155
+ targetSelector,
156
+ selectedInstallSelector,
157
+ installedVersion,
158
+ action: classifyOutOfRangeVersion(installedVersion, entry.version),
159
+ ...metadata
160
+ };
161
+ });
162
+ }
163
+ export async function syncNpmGlobals(options) {
164
+ const manifest = await loadNpmSyncManifest(options.manifestPath);
165
+ options.onLog?.({
166
+ type: "manifest-loaded",
167
+ manifestPath: options.manifestPath,
168
+ packageCount: Object.keys(manifest.packages).length,
169
+ syncMode: manifest.syncMode
170
+ });
171
+ const verifyRuntime = options.verifyRuntime ?? verifyNodeRuntime;
172
+ const runtimeResult = await verifyRuntime(options.runtimePath);
173
+ if (!runtimeResult.valid ||
174
+ !runtimeResult.nodePath ||
175
+ !runtimeResult.npmPath) {
176
+ throw new NpmSyncError(`Invalid Node.js runtime ${options.runtimePath}: ${runtimeResult.failureReason ?? "node/npm validation failed"}`);
177
+ }
178
+ const runtime = {
179
+ targetDirectory: runtimeResult.targetDirectory,
180
+ nodePath: runtimeResult.nodePath,
181
+ npmPath: runtimeResult.npmPath,
182
+ nodeVersion: runtimeResult.nodeVersion ?? "unknown",
183
+ npmVersion: runtimeResult.npmVersion ?? "unknown"
184
+ };
185
+ options.onLog?.({ type: "runtime-valid", runtime });
186
+ const npmOptions = {
187
+ ...options.npmOptions,
188
+ env: createRuntimeNpmEnv(runtime.targetDirectory, options.npmOptions?.env)
189
+ };
190
+ let inventoryResult;
191
+ try {
192
+ inventoryResult = await listGlobalPackages(runtime.npmPath, npmOptions);
193
+ }
194
+ catch (error) {
195
+ if (error instanceof NpmCommandError) {
196
+ throw new NpmSyncCommandError("Failed to list npm global packages", error);
197
+ }
198
+ throw error;
199
+ }
200
+ const installed = normalizeGlobalInventory(inventoryResult.stdout);
201
+ options.onLog?.({ type: "inventory", packages: installed });
202
+ const plan = createNpmSyncPlan(manifest, installed);
203
+ const actions = [];
204
+ for (const action of plan) {
205
+ options.onLog?.({ type: "planned-action", action });
206
+ if (action.action === "noop") {
207
+ const result = { ...action, changed: false };
208
+ actions.push(result);
209
+ options.onLog?.({ type: "skip", action });
210
+ continue;
211
+ }
212
+ options.onLog?.({ type: "install-start", action });
213
+ try {
214
+ const installResult = await installGlobalPackage(runtime.npmPath, action.selectedInstallSelector, npmOptions);
215
+ const result = {
216
+ ...action,
217
+ changed: true,
218
+ command: installResult.command,
219
+ args: installResult.args,
220
+ stdout: installResult.stdout,
221
+ stderr: installResult.stderr
222
+ };
223
+ actions.push(result);
224
+ options.onLog?.({ type: "install-complete", action: result });
225
+ }
226
+ catch (error) {
227
+ if (error instanceof NpmCommandError) {
228
+ throw new NpmSyncCommandError(`Failed to sync package ${action.packageName}`, error, action.packageName);
229
+ }
230
+ throw error;
231
+ }
232
+ }
233
+ const summary = {
234
+ runtime,
235
+ manifestPath: options.manifestPath,
236
+ packageCount: plan.length,
237
+ syncMode: manifest.syncMode,
238
+ noopCount: actions.filter((action) => !action.changed).length,
239
+ changedCount: actions.filter((action) => action.changed).length,
240
+ actions
241
+ };
242
+ options.onLog?.({ type: "summary", summary });
243
+ return summary;
244
+ }
245
+ function validateToolSyncManifest(value) {
246
+ try {
247
+ const selection = normalizeToolSelection(value);
248
+ const packageSet = buildToolSyncPackageSet(selection);
249
+ return {
250
+ packages: normalizeToolPackageSet(packageSet),
251
+ syncMode: "tools"
252
+ };
253
+ }
254
+ catch (error) {
255
+ if (error instanceof ToolSyncCatalogValidationError) {
256
+ throw new NpmManifestValidationError(error.errors);
257
+ }
258
+ throw error;
259
+ }
260
+ }
261
+ function normalizeToolSelection(value) {
262
+ const errors = [];
263
+ const optionalAgentCliSyncEnabled = Boolean(value.optionalAgentCliSyncEnabled);
264
+ const selectedOptionalAgentCliIds = normalizeStringArray(value.selectedOptionalAgentCliIds, "tools.selectedOptionalAgentCliIds", errors);
265
+ const customAgentClis = normalizeCustomAgentCliArray(value.customAgentClis, errors);
266
+ if (errors.length > 0) {
267
+ throw new NpmManifestValidationError(errors);
268
+ }
269
+ return {
270
+ optionalAgentCliSyncEnabled,
271
+ selectedOptionalAgentCliIds,
272
+ customAgentClis
273
+ };
274
+ }
275
+ function normalizeStringArray(value, path, errors) {
276
+ if (value === undefined) {
277
+ return [];
278
+ }
279
+ if (!Array.isArray(value)) {
280
+ errors.push(`${path} must be an array of strings`);
281
+ return [];
282
+ }
283
+ return value.flatMap((item, index) => {
284
+ if (typeof item !== "string") {
285
+ errors.push(`${path}[${index}] must be a string`);
286
+ return [];
287
+ }
288
+ return [item];
289
+ });
290
+ }
291
+ function normalizeCustomAgentCliArray(value, errors) {
292
+ if (value === undefined) {
293
+ return [];
294
+ }
295
+ if (!Array.isArray(value)) {
296
+ errors.push("tools.customAgentClis must be an array");
297
+ return [];
298
+ }
299
+ return value.flatMap((item, index) => {
300
+ if (!isRecord(item)) {
301
+ errors.push(`tools.customAgentClis[${index}] must be an object`);
302
+ return [];
303
+ }
304
+ const input = {
305
+ packageName: typeof item.packageName === "string" ? item.packageName : ""
306
+ };
307
+ if (typeof item.id === "string") {
308
+ input.id = item.id;
309
+ }
310
+ if (typeof item.displayName === "string") {
311
+ input.displayName = item.displayName;
312
+ }
313
+ if (typeof item.version === "string") {
314
+ input.version = item.version;
315
+ }
316
+ if (typeof item.target === "string") {
317
+ input.target = item.target;
318
+ }
319
+ return [input];
320
+ });
321
+ }
322
+ function normalizeToolPackageSet(packageSet) {
323
+ return Object.fromEntries(Object.entries(packageSet).map(([packageName, entry]) => [
324
+ packageName,
325
+ {
326
+ version: entry.version,
327
+ target: entry.target,
328
+ toolId: entry.toolId,
329
+ toolDisplayName: entry.toolDisplayName,
330
+ toolGroup: entry.toolGroup,
331
+ toolRequirement: entry.toolRequirement
332
+ }
333
+ ]));
334
+ }
335
+ function createActionMetadata(entry) {
336
+ return {
337
+ toolId: entry.toolId,
338
+ toolDisplayName: entry.toolDisplayName,
339
+ toolGroup: entry.toolGroup,
340
+ toolRequirement: entry.toolRequirement
341
+ };
342
+ }
343
+ function createRuntimeNpmEnv(runtimePath, baseEnv = process.env) {
344
+ const env = { ...baseEnv };
345
+ delete env.PREFIX;
346
+ delete env.npm_config_prefix;
347
+ delete env.NPM_CONFIG_GLOBALCONFIG;
348
+ delete env.npm_config_globalconfig;
349
+ delete env.NPM_CONFIG_USERCONFIG;
350
+ delete env.npm_config_userconfig;
351
+ return {
352
+ ...env,
353
+ NPM_CONFIG_PREFIX: runtimePath,
354
+ npm_config_fund: "false",
355
+ npm_config_audit: "false"
356
+ };
357
+ }
358
+ function classifyOutOfRangeVersion(installedVersion, range) {
359
+ const minimum = semver.minVersion(range);
360
+ if (minimum && semver.lt(installedVersion, minimum)) {
361
+ return "upgrade";
362
+ }
363
+ if (isAboveAllowedRange(installedVersion, range)) {
364
+ return "downgrade";
365
+ }
366
+ return "sync";
367
+ }
368
+ function isAboveAllowedRange(version, range) {
369
+ const parsed = new semver.Range(range, { includePrerelease: true });
370
+ return parsed.set.every((comparators) => comparators.some((comparator) => (comparator.operator === "<" || comparator.operator === "<=") &&
371
+ semver.gt(version, comparator.semver.version)));
372
+ }
373
+ function isValidPackageName(packageName) {
374
+ if (packageName.trim() !== packageName || packageName.length === 0) {
375
+ return false;
376
+ }
377
+ if (packageName.includes("\\") || packageName.includes("/../")) {
378
+ return false;
379
+ }
380
+ if (packageName.startsWith("@")) {
381
+ const parts = packageName.split("/");
382
+ return (parts.length === 2 &&
383
+ parts[0].startsWith("@") &&
384
+ isValidPackageNamePart(parts[0].slice(1)) &&
385
+ isValidPackageNamePart(parts[1]));
386
+ }
387
+ return !packageName.includes("/") && isValidPackageNamePart(packageName);
388
+ }
389
+ function isValidPackageNamePart(value) {
390
+ return (value.length > 0 &&
391
+ value === basename(value) &&
392
+ !value.startsWith(".") &&
393
+ !/[\s@]/u.test(value));
394
+ }
395
+ function isRecord(value) {
396
+ return typeof value === "object" && value !== null;
397
+ }
398
+ //# sourceMappingURL=npm-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-sync.js","sourceRoot":"","sources":["../../src/runtime/npm-sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "tools": [
4
+ {
5
+ "id": "openspec-skills",
6
+ "displayName": "OpenSpec skills",
7
+ "packageName": "skills",
8
+ "version": "1.5.1",
9
+ "target": "1.5.1",
10
+ "group": "mandatory",
11
+ "requirement": "mandatory"
12
+ },
13
+ {
14
+ "id": "omniroute",
15
+ "displayName": "OmniRoute",
16
+ "packageName": "omniroute",
17
+ "version": "3.6.9",
18
+ "target": "3.6.9",
19
+ "group": "mandatory",
20
+ "requirement": "mandatory"
21
+ },
22
+ {
23
+ "id": "code-server",
24
+ "displayName": "code-server",
25
+ "packageName": "code-server",
26
+ "version": "4.117.0",
27
+ "target": "4.117.0",
28
+ "group": "mandatory",
29
+ "requirement": "mandatory"
30
+ },
31
+ {
32
+ "id": "codex",
33
+ "displayName": "Codex CLI",
34
+ "packageName": "@openai/codex",
35
+ "version": "0.125.0",
36
+ "target": "0.125.0",
37
+ "group": "optional-agent-cli",
38
+ "requirement": "optional"
39
+ },
40
+ {
41
+ "id": "qoder",
42
+ "displayName": "Qoder CLI",
43
+ "packageName": "@qoder-ai/qodercli",
44
+ "version": "0.1.48",
45
+ "target": "0.1.48",
46
+ "group": "optional-agent-cli",
47
+ "requirement": "optional"
48
+ },
49
+ {
50
+ "id": "opencode",
51
+ "displayName": "OpenCode CLI",
52
+ "packageName": "opencode-ai",
53
+ "version": "1.14.24",
54
+ "target": "1.14.24",
55
+ "group": "optional-agent-cli",
56
+ "requirement": "optional"
57
+ }
58
+ ]
59
+ }
@@ -0,0 +1,48 @@
1
+ export type ToolSyncGroupId = "mandatory" | "optional-agent-cli";
2
+ export type ToolSyncRequirement = "mandatory" | "optional";
3
+ export interface ToolSyncCatalogEntry {
4
+ id: string;
5
+ displayName: string;
6
+ packageName: string;
7
+ version: string;
8
+ target?: string;
9
+ group: ToolSyncGroupId;
10
+ requirement: ToolSyncRequirement;
11
+ }
12
+ export interface ToolSyncPackageConstraint {
13
+ version: string;
14
+ target?: string;
15
+ toolId: string;
16
+ toolDisplayName: string;
17
+ toolGroup: ToolSyncGroupId;
18
+ toolRequirement: ToolSyncRequirement;
19
+ }
20
+ export interface CustomAgentCliToolInput {
21
+ id?: string;
22
+ displayName?: string;
23
+ packageName: string;
24
+ version?: string;
25
+ target?: string;
26
+ }
27
+ export interface ToolSyncSelection {
28
+ optionalAgentCliSyncEnabled?: boolean;
29
+ selectedOptionalAgentCliIds?: string[];
30
+ customAgentClis?: CustomAgentCliToolInput[];
31
+ }
32
+ export interface BuildToolSyncPackageSetOptions extends ToolSyncSelection {
33
+ catalog?: readonly ToolSyncCatalogEntry[];
34
+ }
35
+ interface ToolSyncCatalogConfig {
36
+ schemaVersion: number;
37
+ tools: ToolSyncCatalogEntry[];
38
+ }
39
+ export declare class ToolSyncCatalogValidationError extends Error {
40
+ readonly errors: string[];
41
+ constructor(errors: string[]);
42
+ }
43
+ export declare const builtInToolSyncCatalogConfig: ToolSyncCatalogConfig;
44
+ export declare const builtInToolSyncCatalog: readonly ToolSyncCatalogEntry[];
45
+ export declare function validateToolSyncCatalog(catalog?: readonly ToolSyncCatalogEntry[]): readonly ToolSyncCatalogEntry[];
46
+ export declare function buildToolSyncPackageSet(options?: BuildToolSyncPackageSetOptions): Record<string, ToolSyncPackageConstraint>;
47
+ export declare function normalizeToolSyncEntry(entry: ToolSyncCatalogEntry): [string, ToolSyncPackageConstraint];
48
+ export {};