hagiscript-sdk 0.2.9-dev.1780142424.1.dedbfb7

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 (86) hide show
  1. package/README.md +25 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/package.json +38 -0
  4. package/dist/src/index.d.ts +24 -0
  5. package/dist/src/index.js +27 -0
  6. package/dist/src/index.js.map +1 -0
  7. package/dist/src/runtime/command-launch.d.ts +41 -0
  8. package/dist/src/runtime/command-launch.js +100 -0
  9. package/dist/src/runtime/command-launch.js.map +1 -0
  10. package/dist/src/runtime/component-service-manager.d.ts +71 -0
  11. package/dist/src/runtime/component-service-manager.js +367 -0
  12. package/dist/src/runtime/component-service-manager.js.map +1 -0
  13. package/dist/src/runtime/dotnet-installer.d.ts +39 -0
  14. package/dist/src/runtime/dotnet-installer.js +282 -0
  15. package/dist/src/runtime/dotnet-installer.js.map +1 -0
  16. package/dist/src/runtime/download-cache.d.ts +7 -0
  17. package/dist/src/runtime/download-cache.js +110 -0
  18. package/dist/src/runtime/download-cache.js.map +1 -0
  19. package/dist/src/runtime/manifest-manager.d.ts +57 -0
  20. package/dist/src/runtime/manifest-manager.js +188 -0
  21. package/dist/src/runtime/manifest-manager.js.map +1 -0
  22. package/dist/src/runtime/node-download.d.ts +13 -0
  23. package/dist/src/runtime/node-download.js +78 -0
  24. package/dist/src/runtime/node-download.js.map +1 -0
  25. package/dist/src/runtime/node-extract.d.ts +18 -0
  26. package/dist/src/runtime/node-extract.js +170 -0
  27. package/dist/src/runtime/node-extract.js.map +1 -0
  28. package/dist/src/runtime/node-installer.d.ts +43 -0
  29. package/dist/src/runtime/node-installer.js +114 -0
  30. package/dist/src/runtime/node-installer.js.map +1 -0
  31. package/dist/src/runtime/node-platform.d.ts +15 -0
  32. package/dist/src/runtime/node-platform.js +51 -0
  33. package/dist/src/runtime/node-platform.js.map +1 -0
  34. package/dist/src/runtime/node-release.d.ts +28 -0
  35. package/dist/src/runtime/node-release.js +149 -0
  36. package/dist/src/runtime/node-release.js.map +1 -0
  37. package/dist/src/runtime/node-verify.d.ts +30 -0
  38. package/dist/src/runtime/node-verify.js +102 -0
  39. package/dist/src/runtime/node-verify.js.map +1 -0
  40. package/dist/src/runtime/npm-global.d.ts +28 -0
  41. package/dist/src/runtime/npm-global.js +77 -0
  42. package/dist/src/runtime/npm-global.js.map +1 -0
  43. package/dist/src/runtime/npm-sync.d.ts +164 -0
  44. package/dist/src/runtime/npm-sync.js +603 -0
  45. package/dist/src/runtime/npm-sync.js.map +1 -0
  46. package/dist/src/runtime/pm2-manager.d.ts +102 -0
  47. package/dist/src/runtime/pm2-manager.js +715 -0
  48. package/dist/src/runtime/pm2-manager.js.map +1 -0
  49. package/dist/src/runtime/runtime-executor.d.ts +58 -0
  50. package/dist/src/runtime/runtime-executor.js +291 -0
  51. package/dist/src/runtime/runtime-executor.js.map +1 -0
  52. package/dist/src/runtime/runtime-manager.d.ts +92 -0
  53. package/dist/src/runtime/runtime-manager.js +798 -0
  54. package/dist/src/runtime/runtime-manager.js.map +1 -0
  55. package/dist/src/runtime/runtime-manifest.d.ts +106 -0
  56. package/dist/src/runtime/runtime-manifest.js +450 -0
  57. package/dist/src/runtime/runtime-manifest.js.map +1 -0
  58. package/dist/src/runtime/runtime-paths.d.ts +45 -0
  59. package/dist/src/runtime/runtime-paths.js +138 -0
  60. package/dist/src/runtime/runtime-paths.js.map +1 -0
  61. package/dist/src/runtime/runtime-state.d.ts +45 -0
  62. package/dist/src/runtime/runtime-state.js +82 -0
  63. package/dist/src/runtime/runtime-state.js.map +1 -0
  64. package/dist/src/runtime/server-config.d.ts +21 -0
  65. package/dist/src/runtime/server-config.js +169 -0
  66. package/dist/src/runtime/server-config.js.map +1 -0
  67. package/dist/src/runtime/server-manager.d.ts +107 -0
  68. package/dist/src/runtime/server-manager.js +946 -0
  69. package/dist/src/runtime/server-manager.js.map +1 -0
  70. package/dist/src/runtime/server-version-state.d.ts +43 -0
  71. package/dist/src/runtime/server-version-state.js +156 -0
  72. package/dist/src/runtime/server-version-state.js.map +1 -0
  73. package/dist/src/runtime/seven-zip-extract.d.ts +15 -0
  74. package/dist/src/runtime/seven-zip-extract.js +104 -0
  75. package/dist/src/runtime/seven-zip-extract.js.map +1 -0
  76. package/dist/src/runtime/tool-sync-catalog.config.json +59 -0
  77. package/dist/src/runtime/tool-sync-catalog.d.ts +48 -0
  78. package/dist/src/runtime/tool-sync-catalog.js +189 -0
  79. package/dist/src/runtime/tool-sync-catalog.js.map +1 -0
  80. package/dist/src/runtime/zip-extract.d.ts +6 -0
  81. package/dist/src/runtime/zip-extract.js +90 -0
  82. package/dist/src/runtime/zip-extract.js.map +1 -0
  83. package/dist/src/version.d.ts +7 -0
  84. package/dist/src/version.js +23 -0
  85. package/dist/src/version.js.map +1 -0
  86. package/package.json +38 -0
@@ -0,0 +1,149 @@
1
+ import { mapNodePlatform } from "./node-platform.js";
2
+ export const DEFAULT_NODE_MAJOR = 22;
3
+ export const OFFICIAL_NODE_DIST_BASE_URL = "https://nodejs.org/dist";
4
+ export class NodeVersionSelectorError extends Error {
5
+ constructor(message) {
6
+ super(message);
7
+ this.name = "NodeVersionSelectorError";
8
+ }
9
+ }
10
+ export class NodeRuntimeSourcePolicyError extends Error {
11
+ constructor(message) {
12
+ super(message);
13
+ this.name = "NodeRuntimeSourcePolicyError";
14
+ }
15
+ }
16
+ export function normalizeVersionSelector(selector) {
17
+ const trimmed = selector?.trim();
18
+ return trimmed && trimmed.length > 0
19
+ ? trimmed.toLowerCase()
20
+ : String(DEFAULT_NODE_MAJOR);
21
+ }
22
+ export function validateVersionSelector(selector) {
23
+ const normalized = normalizeVersionSelector(selector);
24
+ if (["lts", "latest", "current"].includes(normalized)) {
25
+ return;
26
+ }
27
+ if (/^v?\d+(?:\.\d+\.\d+)?$/.test(normalized)) {
28
+ return;
29
+ }
30
+ throw new NodeVersionSelectorError(`Invalid Node.js version selector: ${selector ?? ""}. Use lts, latest, current, 22, 22.11.0, or v22.11.0.`);
31
+ }
32
+ export async function fetchNodeReleaseMetadata(fetchImpl = fetch, baseUrl = OFFICIAL_NODE_DIST_BASE_URL) {
33
+ assertOfficialNodeDistBaseUrl(baseUrl);
34
+ const response = await fetchImpl(`${baseUrl}/index.json`, {
35
+ headers: { accept: "application/json" }
36
+ });
37
+ if (!response.ok) {
38
+ throw new Error(`Failed to fetch Node.js release metadata: HTTP ${response.status}`);
39
+ }
40
+ const data = (await response.json());
41
+ if (!Array.isArray(data)) {
42
+ throw new Error("Node.js release metadata response was not an array.");
43
+ }
44
+ return data.map(parseReleaseMetadata);
45
+ }
46
+ export function resolveNodeRelease(releases, selector, platform) {
47
+ validateVersionSelector(selector);
48
+ const normalized = normalizeVersionSelector(selector);
49
+ const sorted = [...releases].sort(compareReleaseDescending);
50
+ const selected = selectRelease(sorted, normalized, platform);
51
+ if (!selected) {
52
+ throw new NodeVersionSelectorError(`No Node.js release matched version selector: ${selector ?? DEFAULT_NODE_MAJOR}`);
53
+ }
54
+ return selected;
55
+ }
56
+ export function selectNodeArchive(releases, selector, platform = mapNodePlatform(), baseUrl = OFFICIAL_NODE_DIST_BASE_URL) {
57
+ assertOfficialNodeDistBaseUrl(baseUrl);
58
+ const release = resolveNodeRelease(releases, selector, platform);
59
+ if (!release.files.includes(platform.releaseFileKey)) {
60
+ throw new Error(`Node.js ${release.version} does not publish an archive for ${platform.nodeFileKey}.`);
61
+ }
62
+ const fileName = `node-${release.version}-${platform.nodeFileKey}.${platform.archiveExtension}`;
63
+ const url = `${baseUrl}/${release.version}/${fileName}`;
64
+ assertOfficialNodeArchiveUrl(url, baseUrl);
65
+ return {
66
+ release,
67
+ version: release.version,
68
+ platform,
69
+ fileName,
70
+ url
71
+ };
72
+ }
73
+ export function assertOfficialNodeDistBaseUrl(baseUrl) {
74
+ let parsed;
75
+ try {
76
+ parsed = new URL(baseUrl);
77
+ }
78
+ catch {
79
+ throw new NodeRuntimeSourcePolicyError(`Node.js runtime source is not a valid URL: ${baseUrl}`);
80
+ }
81
+ if (parsed.protocol !== "https:" || parsed.hostname !== "nodejs.org") {
82
+ throw new NodeRuntimeSourcePolicyError(`Node.js runtime source is not governed by the official distribution host: ${baseUrl}`);
83
+ }
84
+ }
85
+ function assertOfficialNodeArchiveUrl(url, baseUrl) {
86
+ assertOfficialNodeDistBaseUrl(baseUrl);
87
+ const parsedUrl = new URL(url);
88
+ const parsedBaseUrl = new URL(baseUrl);
89
+ if (parsedUrl.protocol !== "https:" ||
90
+ parsedUrl.hostname !== parsedBaseUrl.hostname ||
91
+ !parsedUrl.pathname.startsWith("/dist/v")) {
92
+ throw new NodeRuntimeSourcePolicyError(`Node.js archive URL violates source policy: ${url}`);
93
+ }
94
+ }
95
+ function parseReleaseMetadata(value) {
96
+ if (typeof value !== "object" || value === null) {
97
+ throw new Error("Node.js release metadata item was not an object.");
98
+ }
99
+ const record = value;
100
+ if (typeof record.version !== "string" || !Array.isArray(record.files)) {
101
+ throw new Error("Node.js release metadata item is missing version or files.");
102
+ }
103
+ return {
104
+ version: record.version,
105
+ lts: typeof record.lts === "string" || typeof record.lts === "boolean"
106
+ ? record.lts
107
+ : undefined,
108
+ files: record.files.filter((file) => typeof file === "string"),
109
+ npm: typeof record.npm === "string" ? record.npm : undefined
110
+ };
111
+ }
112
+ function selectRelease(releases, selector, platform) {
113
+ const candidates = platform
114
+ ? releases.filter((release) => release.files.includes(platform.releaseFileKey))
115
+ : releases;
116
+ if (selector === "lts") {
117
+ return candidates.find((release) => Boolean(release.lts));
118
+ }
119
+ if (selector === "latest" || selector === "current") {
120
+ return candidates[0];
121
+ }
122
+ if (/^v?\d+$/.test(selector)) {
123
+ const major = Number(selector.replace(/^v/, ""));
124
+ return candidates.find((release) => getMajorVersion(release.version) === major);
125
+ }
126
+ const exact = selector.startsWith("v") ? selector : `v${selector}`;
127
+ return candidates.find((release) => release.version === exact);
128
+ }
129
+ function compareReleaseDescending(left, right) {
130
+ const leftParts = parseVersionParts(left.version);
131
+ const rightParts = parseVersionParts(right.version);
132
+ for (let index = 0; index < 3; index += 1) {
133
+ if (leftParts[index] !== rightParts[index]) {
134
+ return rightParts[index] - leftParts[index];
135
+ }
136
+ }
137
+ return 0;
138
+ }
139
+ function getMajorVersion(version) {
140
+ return parseVersionParts(version)[0];
141
+ }
142
+ function parseVersionParts(version) {
143
+ const match = /^v?(\d+)\.(\d+)\.(\d+)$/.exec(version);
144
+ if (!match) {
145
+ return [0, 0, 0];
146
+ }
147
+ return [Number(match[1]), Number(match[2]), Number(match[3])];
148
+ }
149
+ //# sourceMappingURL=node-release.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-release.js","sourceRoot":"","sources":["../../../../src/runtime/node-release.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export interface RuntimeExecutablePaths {
2
+ nodePath: string;
3
+ npmPath: string;
4
+ }
5
+ export interface RuntimeCommandInvocation {
6
+ command: string;
7
+ args: string[];
8
+ launchOptions: {
9
+ shell?: boolean;
10
+ };
11
+ }
12
+ export interface NodeRuntimeVerificationResult {
13
+ valid: boolean;
14
+ targetDirectory: string;
15
+ nodeVersion?: string;
16
+ npmVersion?: string;
17
+ nodePath?: string;
18
+ npmPath?: string;
19
+ failureReason?: string;
20
+ }
21
+ export interface VerifyNodeRuntimeOptions {
22
+ platform?: NodeJS.Platform;
23
+ timeoutMs?: number;
24
+ runCommand?: (command: string, args: string[], timeoutMs: number, launchOptions?: {
25
+ shell?: boolean;
26
+ }) => Promise<string>;
27
+ }
28
+ export declare function verifyNodeRuntime(targetDirectory: string, options?: VerifyNodeRuntimeOptions): Promise<NodeRuntimeVerificationResult>;
29
+ export declare function buildRuntimeNpmInvocation(paths: RuntimeExecutablePaths, args: string[], platform?: NodeJS.Platform): RuntimeCommandInvocation;
30
+ export declare function getRuntimeExecutablePaths(targetDirectory: string, platform?: NodeJS.Platform): RuntimeExecutablePaths;
@@ -0,0 +1,102 @@
1
+ import { access } from "node:fs/promises";
2
+ import { dirname, join } from "node:path";
3
+ import { constants } from "node:fs";
4
+ import { CommandExecutionError, getCommandLaunchOptions, runCommand as defaultRunCommand } from "./command-launch.js";
5
+ export async function verifyNodeRuntime(targetDirectory, options = {}) {
6
+ const timeoutMs = options.timeoutMs ?? 15_000;
7
+ const runCommand = options.runCommand ?? runVersionCommand;
8
+ const paths = getRuntimeExecutablePaths(targetDirectory, options.platform);
9
+ const npmInvocation = buildRuntimeNpmInvocation(paths, ["--version"], options.platform);
10
+ try {
11
+ await access(paths.nodePath, constants.X_OK);
12
+ await access(resolveNpmValidationTargetPath(paths, options.platform), constants.X_OK);
13
+ const nodeLaunchOptions = getCommandLaunchOptions(paths.nodePath, {
14
+ platform: options.platform
15
+ });
16
+ const [nodeVersion, npmVersion] = await Promise.all([
17
+ runCommand(paths.nodePath, ["--version"], timeoutMs, {
18
+ ...nodeLaunchOptions
19
+ }),
20
+ runCommand(npmInvocation.command, npmInvocation.args, timeoutMs, npmInvocation.launchOptions)
21
+ ]);
22
+ return {
23
+ valid: true,
24
+ targetDirectory,
25
+ nodeVersion: nodeVersion.trim(),
26
+ npmVersion: npmVersion.trim(),
27
+ nodePath: paths.nodePath,
28
+ npmPath: paths.npmPath
29
+ };
30
+ }
31
+ catch (error) {
32
+ return {
33
+ valid: false,
34
+ targetDirectory,
35
+ nodePath: paths.nodePath,
36
+ npmPath: paths.npmPath,
37
+ failureReason: error instanceof Error ? error.message : String(error)
38
+ };
39
+ }
40
+ }
41
+ export function buildRuntimeNpmInvocation(paths, args, platform = process.platform) {
42
+ const nodeLaunchOptions = getCommandLaunchOptions(paths.nodePath, { platform });
43
+ if (platform === "win32" && !nodeLaunchOptions.shell) {
44
+ return {
45
+ command: paths.nodePath,
46
+ args: [resolveBundledWindowsNpmCliPath(paths), ...args],
47
+ launchOptions: {}
48
+ };
49
+ }
50
+ return {
51
+ command: paths.npmPath,
52
+ args,
53
+ launchOptions: getCommandLaunchOptions(paths.npmPath, { platform })
54
+ };
55
+ }
56
+ export function getRuntimeExecutablePaths(targetDirectory, platform = process.platform) {
57
+ if (platform === "win32") {
58
+ return {
59
+ nodePath: join(targetDirectory, "node.exe"),
60
+ npmPath: join(targetDirectory, "npm.cmd")
61
+ };
62
+ }
63
+ return {
64
+ nodePath: join(targetDirectory, "bin", "node"),
65
+ npmPath: join(targetDirectory, "bin", "npm")
66
+ };
67
+ }
68
+ async function runVersionCommand(command, args, timeoutMs, launchOptions = {}) {
69
+ try {
70
+ const { stdout } = await defaultRunCommand(command, args, {
71
+ timeoutMs,
72
+ env: prependExecutableDirectoryToPath(command),
73
+ shell: launchOptions.shell,
74
+ maxBuffer: 1024 * 1024
75
+ });
76
+ return stdout;
77
+ }
78
+ catch (error) {
79
+ const stderr = error instanceof CommandExecutionError ? error.context.stderr.trim() : "";
80
+ throw new Error(stderr.length > 0
81
+ ? stderr
82
+ : `Command failed: ${command} ${args.join(" ")}`);
83
+ }
84
+ }
85
+ function resolveNpmValidationTargetPath(paths, platform = process.platform) {
86
+ return platform === "win32"
87
+ ? resolveBundledWindowsNpmCliPath(paths)
88
+ : paths.npmPath;
89
+ }
90
+ function resolveBundledWindowsNpmCliPath(paths) {
91
+ return join(dirname(paths.nodePath), "node_modules", "npm", "bin", "npm-cli.js");
92
+ }
93
+ function prependExecutableDirectoryToPath(command, baseEnv = process.env) {
94
+ const executableDirectory = dirname(command);
95
+ const pathKey = process.platform === "win32" ? "Path" : "PATH";
96
+ const existingPath = process.platform === "win32" ? (baseEnv.Path ?? baseEnv.PATH ?? "") : (baseEnv.PATH ?? "");
97
+ return {
98
+ ...baseEnv,
99
+ [pathKey]: [executableDirectory, existingPath].filter(Boolean).join(process.platform === "win32" ? ";" : ":")
100
+ };
101
+ }
102
+ //# sourceMappingURL=node-verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-verify.js","sourceRoot":"","sources":["../../../../src/runtime/node-verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,UAAU,IAAI,iBAAiB,EAChC,MAAM,qBAAqB,CAAC;AAkC7B,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,eAAuB,EACvB,UAAoC,EAAE;IAEtC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC;IAC9C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,iBAAiB,CAAC;IAC3D,MAAM,KAAK,GAAG,yBAAyB,CAAC,eAAe,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3E,MAAM,aAAa,GAAG,yBAAyB,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAExF,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,MAAM,CAAC,8BAA8B,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QAEtF,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,KAAK,CAAC,QAAQ,EAAE;YAChE,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAClD,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE;gBACnD,GAAG,iBAAiB;aACrB,CAAC;YACF,UAAU,CACR,aAAa,CAAC,OAAO,EACrB,aAAa,CAAC,IAAI,EAClB,SAAS,EACT,aAAa,CAAC,aAAa,CAC5B;SACF,CAAC,CAAC;QAEH,OAAO;YACL,KAAK,EAAE,IAAI;YACX,eAAe;YACf,WAAW,EAAE,WAAW,CAAC,IAAI,EAAE;YAC/B,UAAU,EAAE,UAAU,CAAC,IAAI,EAAE;YAC7B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,eAAe;YACf,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,aAAa,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SACtE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,KAA6B,EAC7B,IAAc,EACd,WAA4B,OAAO,CAAC,QAAQ;IAE5C,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAEhF,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QACrD,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,QAAQ;YACvB,IAAI,EAAE,CAAC,+BAA+B,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC;YACvD,aAAa,EAAE,EAAE;SAClB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,IAAI;QACJ,aAAa,EAAE,uBAAuB,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC;KACpE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,eAAuB,EACvB,WAA4B,OAAO,CAAC,QAAQ;IAE5C,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC;YAC3C,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC;SAC1C,CAAC;IACJ,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,CAAC;QAC9C,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC;KAC7C,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,OAAe,EACf,IAAc,EACd,SAAiB,EACjB,gBAAqC,EAAE;IAEvC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,IAAI,EAAE;YACxD,SAAS;YACT,GAAG,EAAE,gCAAgC,CAAC,OAAO,CAAC;YAC9C,KAAK,EAAE,aAAa,CAAC,KAAK;YAC1B,SAAS,EAAE,IAAI,GAAG,IAAI;SACvB,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GACV,KAAK,YAAY,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,KAAK,CACb,MAAM,CAAC,MAAM,GAAG,CAAC;YACf,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,mBAAmB,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACnD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,8BAA8B,CACrC,KAA6B,EAC7B,WAA4B,OAAO,CAAC,QAAQ;IAE5C,OAAO,QAAQ,KAAK,OAAO;QACzB,CAAC,CAAC,+BAA+B,CAAC,KAAK,CAAC;QACxC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;AACpB,CAAC;AAED,SAAS,+BAA+B,CAAC,KAA6B;IACpE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,gCAAgC,CACvC,OAAe,EACf,UAA6B,OAAO,CAAC,GAAG;IAExC,MAAM,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/D,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAEhH,OAAO;QACL,GAAG,OAAO;QACV,CAAC,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CACjE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CACzC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ export interface NpmCommandResult {
2
+ command: string;
3
+ args: string[];
4
+ stdout: string;
5
+ stderr: string;
6
+ }
7
+ export interface NpmCommandFailureContext extends NpmCommandResult {
8
+ exitCode?: string | number | null;
9
+ }
10
+ export declare class NpmCommandError extends Error {
11
+ readonly context: NpmCommandFailureContext;
12
+ constructor(message: string, context: NpmCommandFailureContext);
13
+ }
14
+ export interface NpmGlobalCommandOptions {
15
+ timeoutMs?: number;
16
+ env?: NodeJS.ProcessEnv;
17
+ platform?: NodeJS.Platform;
18
+ nodePath?: string;
19
+ registryMirror?: string;
20
+ prefix?: string;
21
+ runCommand?: (command: string, args: string[], timeoutMs: number, launchOptions?: {
22
+ shell?: boolean;
23
+ }) => Promise<NpmCommandResult>;
24
+ }
25
+ export declare function listGlobalPackages(npmPath: string, options?: NpmGlobalCommandOptions): Promise<NpmCommandResult>;
26
+ export declare function installGlobalPackage(npmPath: string, selector: string, options?: NpmGlobalCommandOptions): Promise<NpmCommandResult>;
27
+ export declare function buildListGlobalPackagesArgs(options?: NpmGlobalCommandOptions): string[];
28
+ export declare function buildInstallGlobalPackageArgs(selector: string, options?: NpmGlobalCommandOptions): string[];
@@ -0,0 +1,77 @@
1
+ import { CommandExecutionError, getCommandLaunchOptions, runCommand as defaultRunCommand } from "./command-launch.js";
2
+ import { buildRuntimeNpmInvocation, } from "./node-verify.js";
3
+ export class NpmCommandError extends Error {
4
+ context;
5
+ constructor(message, context) {
6
+ super(message);
7
+ this.name = "NpmCommandError";
8
+ this.context = context;
9
+ }
10
+ }
11
+ export async function listGlobalPackages(npmPath, options = {}) {
12
+ return runNpmCommand(npmPath, buildListGlobalPackagesArgs(options), options);
13
+ }
14
+ export async function installGlobalPackage(npmPath, selector, options = {}) {
15
+ return runNpmCommand(npmPath, buildInstallGlobalPackageArgs(selector, options), options);
16
+ }
17
+ export function buildListGlobalPackagesArgs(options = {}) {
18
+ return appendGlobalNpmOptions(["list", "-g", "--depth=0", "--json"], options);
19
+ }
20
+ export function buildInstallGlobalPackageArgs(selector, options = {}) {
21
+ return appendGlobalNpmOptions(["install", "-g", selector], options);
22
+ }
23
+ function appendGlobalNpmOptions(args, options) {
24
+ const nextArgs = options.registryMirror
25
+ ? [...args, "--registry", options.registryMirror]
26
+ : [...args];
27
+ return options.prefix ? [...nextArgs, "--prefix", options.prefix] : nextArgs;
28
+ }
29
+ async function runNpmCommand(npmPath, args, options) {
30
+ const timeoutMs = options.timeoutMs ?? 120_000;
31
+ const invocation = buildNpmCommandInvocation(npmPath, args, options);
32
+ const runner = options.runCommand
33
+ ? options.runCommand
34
+ : (command, commandArgs, commandTimeoutMs, launchOptions) => execNpmCommand(command, commandArgs, commandTimeoutMs, options.env, launchOptions);
35
+ return runner(invocation.command, invocation.args, timeoutMs, invocation.launchOptions);
36
+ }
37
+ function buildNpmCommandInvocation(npmPath, args, options) {
38
+ const platform = options.platform ?? process.platform;
39
+ if (platform === "win32" && options.nodePath) {
40
+ return buildRuntimeNpmInvocation({
41
+ nodePath: options.nodePath,
42
+ npmPath,
43
+ }, args, platform);
44
+ }
45
+ return {
46
+ command: npmPath,
47
+ args,
48
+ launchOptions: getCommandLaunchOptions(npmPath, { platform })
49
+ };
50
+ }
51
+ async function execNpmCommand(command, args, timeoutMs, env, launchOptions = {}) {
52
+ try {
53
+ const { stdout, stderr } = await defaultRunCommand(command, args, {
54
+ timeoutMs,
55
+ env,
56
+ shell: launchOptions.shell,
57
+ maxBuffer: 10 * 1024 * 1024
58
+ });
59
+ return {
60
+ command,
61
+ args,
62
+ stdout,
63
+ stderr
64
+ };
65
+ }
66
+ catch (error) {
67
+ const context = error instanceof CommandExecutionError ? error.context : undefined;
68
+ throw new NpmCommandError(`npm command failed: ${command} ${args.join(" ")}`, {
69
+ command,
70
+ args,
71
+ stdout: context?.stdout ?? "",
72
+ stderr: context?.stderr ?? "",
73
+ exitCode: context?.exitCode
74
+ });
75
+ }
76
+ }
77
+ //# sourceMappingURL=npm-global.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-global.js","sourceRoot":"","sources":["../../../../src/runtime/npm-global.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,164 @@
1
+ import { NpmCommandError, type NpmCommandFailureContext, type NpmGlobalCommandOptions } from "./npm-global.js";
2
+ import { verifyNodeRuntime } from "./node-verify.js";
3
+ import { type CustomAgentCliToolInput, type ToolSyncGroupId, type ToolSyncRequirement } from "./tool-sync-catalog.js";
4
+ export interface NpmSyncManifestEntry {
5
+ version: string;
6
+ target?: string;
7
+ toolId?: string;
8
+ toolDisplayName?: string;
9
+ toolGroup?: ToolSyncGroupId;
10
+ toolRequirement?: ToolSyncRequirement;
11
+ }
12
+ export interface NpmSyncManifest {
13
+ packages: Record<string, NpmSyncManifestEntry>;
14
+ syncMode: "packages" | "tools";
15
+ registryMirror?: string;
16
+ }
17
+ export interface NpmSyncToolManifestSelection {
18
+ optionalAgentCliSyncEnabled?: boolean;
19
+ selectedOptionalAgentCliIds?: string[];
20
+ customAgentClis?: CustomAgentCliToolInput[];
21
+ }
22
+ export interface NpmSyncToolManifest {
23
+ tools: NpmSyncToolManifestSelection;
24
+ registryMirror?: string;
25
+ }
26
+ export type InstalledGlobalPackages = Record<string, string>;
27
+ export type NpmSyncActionKind = "noop" | "install" | "upgrade" | "downgrade" | "sync";
28
+ export interface NpmSyncPlannedAction {
29
+ packageName: string;
30
+ requiredRange: string;
31
+ targetSelector: string;
32
+ selectedInstallSelector: string;
33
+ installedVersion?: string;
34
+ action: NpmSyncActionKind;
35
+ toolId?: string;
36
+ toolDisplayName?: string;
37
+ toolGroup?: ToolSyncGroupId;
38
+ toolRequirement?: ToolSyncRequirement;
39
+ }
40
+ export interface NpmSyncActionResult extends NpmSyncPlannedAction {
41
+ changed: boolean;
42
+ command?: string;
43
+ args?: string[];
44
+ stdout?: string;
45
+ stderr?: string;
46
+ fallback?: NpmSyncFallbackEvent;
47
+ }
48
+ export interface NpmSyncRuntimeMetadata {
49
+ targetDirectory: string;
50
+ nodePath: string;
51
+ npmPath: string;
52
+ nodeVersion: string;
53
+ npmVersion: string;
54
+ }
55
+ export type NpmSyncFallbackPolicy = "auto" | "mirror-only";
56
+ export type NpmSyncCommandKind = "inventory" | "install";
57
+ export interface NpmSyncFallbackEvent {
58
+ commandKind: NpmSyncCommandKind;
59
+ packageName?: string;
60
+ mirrorRegistry: string;
61
+ fallbackRegistry: string;
62
+ retrySucceeded: boolean;
63
+ }
64
+ export interface NpmSyncSummary {
65
+ runtime: NpmSyncRuntimeMetadata;
66
+ manifestPath: string;
67
+ packageCount: number;
68
+ syncMode: NpmSyncManifest["syncMode"];
69
+ registryMirror?: string;
70
+ fallbackPolicy: NpmSyncFallbackPolicy;
71
+ fallbackUsed: boolean;
72
+ fallbackEvents: NpmSyncFallbackEvent[];
73
+ noopCount: number;
74
+ changedCount: number;
75
+ actions: NpmSyncActionResult[];
76
+ }
77
+ export interface NpmSyncOptions {
78
+ runtimePath: string;
79
+ manifestPath?: string;
80
+ runtimeManifestPath?: string;
81
+ registryMirror?: string;
82
+ fallbackPolicy?: NpmSyncFallbackPolicy;
83
+ force?: boolean;
84
+ npmOptions?: NpmGlobalCommandOptions;
85
+ verifyRuntime?: typeof verifyNodeRuntime;
86
+ onLog?: (event: NpmSyncLogEvent) => void;
87
+ }
88
+ export interface NpmSyncPlanOptions {
89
+ force?: boolean;
90
+ }
91
+ export type NpmSyncLogEvent = {
92
+ type: "manifest-loaded";
93
+ manifestPath: string;
94
+ packageCount: number;
95
+ syncMode: NpmSyncManifest["syncMode"];
96
+ registryMirror?: string;
97
+ } | {
98
+ type: "fallback-policy";
99
+ fallbackPolicy: NpmSyncFallbackPolicy;
100
+ registryMirror: string;
101
+ fallbackRegistry?: string;
102
+ } | {
103
+ type: "fallback-used";
104
+ fallback: NpmSyncFallbackEvent;
105
+ } | {
106
+ type: "mirror-only";
107
+ registryMirror: string;
108
+ } | {
109
+ type: "runtime-valid";
110
+ runtime: NpmSyncRuntimeMetadata;
111
+ } | {
112
+ type: "inventory";
113
+ packages: InstalledGlobalPackages;
114
+ } | {
115
+ type: "planned-action";
116
+ action: NpmSyncPlannedAction;
117
+ } | {
118
+ type: "skip";
119
+ action: NpmSyncPlannedAction;
120
+ } | {
121
+ type: "install-start";
122
+ action: NpmSyncPlannedAction;
123
+ } | {
124
+ type: "install-complete";
125
+ action: NpmSyncActionResult;
126
+ } | {
127
+ type: "summary";
128
+ summary: NpmSyncSummary;
129
+ };
130
+ export declare class NpmSyncError extends Error {
131
+ constructor(message: string);
132
+ }
133
+ export declare class NpmManifestValidationError extends NpmSyncError {
134
+ readonly errors: string[];
135
+ constructor(errors: string[]);
136
+ }
137
+ export declare class NpmSyncCommandError extends NpmSyncError {
138
+ readonly packageName?: string;
139
+ readonly fallbackPolicy: NpmSyncFallbackPolicy;
140
+ readonly registryMirror?: string;
141
+ readonly fallbackRegistry?: string;
142
+ readonly fallbackAttempted: boolean;
143
+ readonly command: string;
144
+ readonly args: string[];
145
+ readonly stdout: string;
146
+ readonly stderr: string;
147
+ readonly mirrorContext?: NpmCommandFailureContext;
148
+ readonly officialContext?: NpmCommandFailureContext;
149
+ constructor(message: string, error: NpmCommandError, options?: {
150
+ packageName?: string;
151
+ fallbackPolicy?: NpmSyncFallbackPolicy;
152
+ registryMirror?: string;
153
+ fallbackRegistry?: string;
154
+ mirrorError?: NpmCommandError;
155
+ officialError?: NpmCommandError;
156
+ });
157
+ }
158
+ export declare function loadNpmSyncManifest(manifestPath: string): Promise<NpmSyncManifest>;
159
+ export declare function loadNpmSyncManifestFromRuntimeManifest(manifestPath?: string): Promise<NpmSyncManifest>;
160
+ export declare function validateNpmSyncManifest(value: unknown): NpmSyncManifest;
161
+ export declare function validateRegistryMirror(value: unknown, path?: string): string | undefined;
162
+ export declare function normalizeGlobalInventory(stdout: string): InstalledGlobalPackages;
163
+ export declare function createNpmSyncPlan(manifest: NpmSyncManifest, installed: InstalledGlobalPackages, options?: NpmSyncPlanOptions): NpmSyncPlannedAction[];
164
+ export declare function syncNpmGlobals(options: NpmSyncOptions): Promise<NpmSyncSummary>;