@nodetool-ai/pack-manager 0.0.0-stage → 0.8.9-bootstrap.0

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 (127) hide show
  1. package/README.md +4 -2
  2. package/dist/.nodetool-build-stamp +1 -0
  3. package/dist/child-exit.d.ts +3 -0
  4. package/dist/child-exit.d.ts.map +1 -0
  5. package/dist/child-exit.js +17 -0
  6. package/dist/child-exit.js.map +1 -0
  7. package/dist/cli-feature.d.ts +30 -0
  8. package/dist/cli-feature.d.ts.map +1 -0
  9. package/dist/cli-feature.js +89 -0
  10. package/dist/cli-feature.js.map +1 -0
  11. package/dist/command-errors.d.ts +8 -0
  12. package/dist/command-errors.d.ts.map +1 -0
  13. package/dist/command-errors.js +49 -0
  14. package/dist/command-errors.js.map +1 -0
  15. package/dist/commands/authorized-pack-install.d.ts +7 -0
  16. package/dist/commands/authorized-pack-install.d.ts.map +1 -0
  17. package/dist/commands/authorized-pack-install.js +20 -0
  18. package/dist/commands/authorized-pack-install.js.map +1 -0
  19. package/dist/commands/output.d.ts +32 -0
  20. package/dist/commands/output.d.ts.map +1 -0
  21. package/dist/commands/output.js +150 -0
  22. package/dist/commands/output.js.map +1 -0
  23. package/dist/commands/pack-install-authorization.d.ts +40 -0
  24. package/dist/commands/pack-install-authorization.d.ts.map +1 -0
  25. package/dist/commands/pack-install-authorization.js +132 -0
  26. package/dist/commands/pack-install-authorization.js.map +1 -0
  27. package/dist/commands/pack-management.d.ts +26 -0
  28. package/dist/commands/pack-management.d.ts.map +1 -0
  29. package/dist/commands/pack-management.js +74 -0
  30. package/dist/commands/pack-management.js.map +1 -0
  31. package/dist/commands/packs.d.ts +5 -0
  32. package/dist/commands/packs.d.ts.map +1 -0
  33. package/dist/commands/packs.js +12 -0
  34. package/dist/commands/packs.js.map +1 -0
  35. package/dist/index.d.ts +5 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +5 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/install-lock.d.ts +12 -0
  40. package/dist/install-lock.d.ts.map +1 -0
  41. package/dist/install-lock.js +139 -0
  42. package/dist/install-lock.js.map +1 -0
  43. package/dist/npm-runner.d.ts +23 -0
  44. package/dist/npm-runner.d.ts.map +1 -0
  45. package/dist/npm-runner.js +160 -0
  46. package/dist/npm-runner.js.map +1 -0
  47. package/dist/packs/command-service.d.ts +16 -0
  48. package/dist/packs/command-service.d.ts.map +1 -0
  49. package/dist/packs/command-service.js +184 -0
  50. package/dist/packs/command-service.js.map +1 -0
  51. package/dist/packs/doctor-lock.d.ts +8 -0
  52. package/dist/packs/doctor-lock.d.ts.map +1 -0
  53. package/dist/packs/doctor-lock.js +50 -0
  54. package/dist/packs/doctor-lock.js.map +1 -0
  55. package/dist/packs/doctor.d.ts +25 -0
  56. package/dist/packs/doctor.d.ts.map +1 -0
  57. package/dist/packs/doctor.js +12 -0
  58. package/dist/packs/doctor.js.map +1 -0
  59. package/dist/packs/global-bootstrap.d.ts +11 -0
  60. package/dist/packs/global-bootstrap.d.ts.map +1 -0
  61. package/dist/packs/global-bootstrap.js +72 -0
  62. package/dist/packs/global-bootstrap.js.map +1 -0
  63. package/dist/packs/host.d.ts +12 -0
  64. package/dist/packs/host.d.ts.map +1 -0
  65. package/dist/packs/host.js +69 -0
  66. package/dist/packs/host.js.map +1 -0
  67. package/dist/packs/install-manifests.d.ts +2 -0
  68. package/dist/packs/install-manifests.d.ts.map +1 -0
  69. package/dist/packs/install-manifests.js +30 -0
  70. package/dist/packs/install-manifests.js.map +1 -0
  71. package/dist/packs/install-process.d.ts +4 -0
  72. package/dist/packs/install-process.d.ts.map +1 -0
  73. package/dist/packs/install-process.js +11 -0
  74. package/dist/packs/install-process.js.map +1 -0
  75. package/dist/packs/install-selection.d.ts +39 -0
  76. package/dist/packs/install-selection.d.ts.map +1 -0
  77. package/dist/packs/install-selection.js +67 -0
  78. package/dist/packs/install-selection.js.map +1 -0
  79. package/dist/packs/install-state.d.ts +25 -0
  80. package/dist/packs/install-state.d.ts.map +1 -0
  81. package/dist/packs/install-state.js +45 -0
  82. package/dist/packs/install-state.js.map +1 -0
  83. package/dist/packs/install-tree.d.ts +35 -0
  84. package/dist/packs/install-tree.d.ts.map +1 -0
  85. package/dist/packs/install-tree.js +253 -0
  86. package/dist/packs/install-tree.js.map +1 -0
  87. package/dist/packs/install-verification.d.ts +12 -0
  88. package/dist/packs/install-verification.d.ts.map +1 -0
  89. package/dist/packs/install-verification.js +75 -0
  90. package/dist/packs/install-verification.js.map +1 -0
  91. package/dist/packs/installed.d.ts +36 -0
  92. package/dist/packs/installed.d.ts.map +1 -0
  93. package/dist/packs/installed.js +87 -0
  94. package/dist/packs/installed.js.map +1 -0
  95. package/dist/packs/installer-load-check.d.ts +5 -0
  96. package/dist/packs/installer-load-check.d.ts.map +1 -0
  97. package/dist/packs/installer-load-check.js +98 -0
  98. package/dist/packs/installer-load-check.js.map +1 -0
  99. package/dist/packs/installer.d.ts +16 -0
  100. package/dist/packs/installer.d.ts.map +1 -0
  101. package/dist/packs/installer.js +149 -0
  102. package/dist/packs/installer.js.map +1 -0
  103. package/dist/packs/management.d.ts +51 -0
  104. package/dist/packs/management.d.ts.map +1 -0
  105. package/dist/packs/management.js +78 -0
  106. package/dist/packs/management.js.map +1 -0
  107. package/dist/packs/mode.d.ts +48 -0
  108. package/dist/packs/mode.d.ts.map +1 -0
  109. package/dist/packs/mode.js +251 -0
  110. package/dist/packs/mode.js.map +1 -0
  111. package/dist/packs/owned-replay-plan.d.ts +5 -0
  112. package/dist/packs/owned-replay-plan.d.ts.map +1 -0
  113. package/dist/packs/owned-replay-plan.js +65 -0
  114. package/dist/packs/owned-replay-plan.js.map +1 -0
  115. package/dist/packs/removal-selection.d.ts +12 -0
  116. package/dist/packs/removal-selection.d.ts.map +1 -0
  117. package/dist/packs/removal-selection.js +186 -0
  118. package/dist/packs/removal-selection.js.map +1 -0
  119. package/dist/packs/removal.d.ts +12 -0
  120. package/dist/packs/removal.d.ts.map +1 -0
  121. package/dist/packs/removal.js +144 -0
  122. package/dist/packs/removal.js.map +1 -0
  123. package/dist/packs/repair.d.ts +2 -0
  124. package/dist/packs/repair.d.ts.map +1 -0
  125. package/dist/packs/repair.js +2 -0
  126. package/dist/packs/repair.js.map +1 -0
  127. package/package.json +51 -4
@@ -0,0 +1,160 @@
1
+ import { spawn } from "node:child_process";
2
+ import { existsSync } from "node:fs";
3
+ import { dirname, join, delimiter, win32 } from "node:path";
4
+ const WINDOWS_NPM_BOOTSTRAP = String.raw `
5
+ const [root, cli, ...args] = process.argv.slice(1);
6
+ const fs = require("node:fs");
7
+ const path = require("node:path");
8
+ const rawCwd = process.cwd();
9
+ const physicalRoot = rawCwd.startsWith("\\\\?\\UNC\\") ? "\\\\" + rawCwd.slice(8) : rawCwd.startsWith("\\\\?\\") ? rawCwd.slice(4) : rawCwd;
10
+ const sameDirectory = (left, right) => {
11
+ const a = fs.statSync(left, { bigint: true });
12
+ const b = fs.statSync(right, { bigint: true });
13
+ return a.isDirectory() && b.isDirectory() && a.ino !== 0n && b.ino !== 0n && a.dev === b.dev && a.ino === b.ino;
14
+ };
15
+ if (physicalRoot.length >= 260 || !sameDirectory(root, physicalRoot)) {
16
+ throw new Error("Windows npm requires a verified short path to the install directory. Use a shorter installation prefix.");
17
+ }
18
+ process.chdir(physicalRoot);
19
+ process.cwd = () => root;
20
+ const promiseFs = require("node:fs/promises");
21
+ const mkdtemp = promiseFs.mkdtemp;
22
+ promiseFs.mkdtemp = (prefix, ...options) => {
23
+ if (typeof prefix === "string" && prefix.length >= 260) {
24
+ const relative = path.relative(root, prefix);
25
+ const separator = prefix.endsWith("\\") || prefix.endsWith("/") ? prefix.slice(-1) : "";
26
+ const inside = (relative !== "" || separator !== "") && relative !== ".." && !relative.startsWith(".." + path.sep) && !path.isAbsolute(relative);
27
+ const physical = inside ? path.resolve(physicalRoot, relative) + separator : null;
28
+ if (physical && physical.length < 260 && sameDirectory(path.dirname(prefix + "XXXXXX"), path.dirname(physical + "XXXXXX"))) {
29
+ prefix = physical;
30
+ }
31
+ }
32
+ return mkdtemp(prefix, ...options);
33
+ };
34
+ const children = require("node:child_process");
35
+ const spawn = children.spawn;
36
+ children.spawn = (...call) => {
37
+ const index = Array.isArray(call[1]) ? 2 : 1;
38
+ const options = call[index];
39
+ if (options && typeof options.cwd === "string" && options.cwd.length >= 260) {
40
+ const relative = path.relative(root, options.cwd);
41
+ const inside = relative !== ".." && !relative.startsWith(".." + path.sep) && !path.isAbsolute(relative);
42
+ const physical = inside ? path.resolve(physicalRoot, relative) : null;
43
+ const cwd = physical && physical.length < 260 && sameDirectory(options.cwd, physical)
44
+ ? physical : path.toNamespacedPath(options.cwd);
45
+ call[index] = { ...options, cwd };
46
+ }
47
+ return spawn(...call);
48
+ };
49
+ require("node:module").syncBuiltinESMExports();
50
+ process.argv = [process.execPath, cli, ...args];
51
+ require(cli);
52
+ `;
53
+ /** Override npm configuration that could change the verified install shape. */
54
+ export function npmInstallFlags(mode, scriptPolicy = "ignore") {
55
+ return [
56
+ ...(scriptPolicy === "ignore" ? ["--ignore-scripts"] : []), "--omit=dev", "--include=prod", "--include=optional",
57
+ "--strict-peer-deps", "--legacy-peer-deps=false", "--install-strategy=hoisted",
58
+ mode === "global" ? "--prefer-dedupe=false" : "--prefer-dedupe",
59
+ "--package-lock=true", "--global=false", "--workspaces=false",
60
+ "--force=false", "--dry-run=false", "--no-audit", "--no-fund", "--update-notifier=false",
61
+ ...(mode === "global" ? ["--no-save"] : ["--save", "--save-exact", "--save-prod"])
62
+ ];
63
+ }
64
+ export function assertInstallerModuleIdentity(execArgv = process.execArgv, nodeOptions = process.env["NODE_OPTIONS"] ?? "") {
65
+ const flags = [...execArgv, nodeOptions].join(" ");
66
+ if (/(?:^|[\s"'])--preserve-symlinks(?:-main)?(?:$|[\s="'])/.test(flags)) {
67
+ throw new Error("Remove --preserve-symlinks and --preserve-symlinks-main before installing NodeTool packages.");
68
+ }
69
+ }
70
+ /** Returns a warning for untested future npm releases. */
71
+ export function checkNpmVersion(version) {
72
+ const match = /^(\d+)\.(\d+)\.(\d+)$/.exec(version.trim());
73
+ const major = Number(match?.[1]);
74
+ const minor = Number(match?.[2]);
75
+ if (!match || major < 10 || (major === 10 && minor < 9)) {
76
+ throw new Error(`npm ${version.trim()} is unsupported. NodeTool requires npm 10.9.0 or later. Upgrade with npm install -g npm@11.`);
77
+ }
78
+ return major >= 12 ? `npm ${version.trim()} has not been tested with the NodeTool installer.` : null;
79
+ }
80
+ export function findNpmCli(executable = process.execPath, platform = process.platform, path = process.env["PATH"] ?? "") {
81
+ const besideNode = platform === "win32"
82
+ ? join(dirname(executable), "node_modules", "npm", "bin", "npm-cli.js")
83
+ : join(dirname(executable), "..", "lib", "node_modules", "npm", "bin", "npm-cli.js");
84
+ if (existsSync(besideNode)) {
85
+ return besideNode;
86
+ }
87
+ // Windows command shims are never executed through a shell. Resolve their JS entry.
88
+ for (const dir of path.split(delimiter)) {
89
+ const entry = join(dir, "node_modules", "npm", "bin", "npm-cli.js");
90
+ if (existsSync(entry)) {
91
+ return entry;
92
+ }
93
+ }
94
+ return null;
95
+ }
96
+ function npmCall(cli, args, root, capture, signal) {
97
+ if (!cli && process.platform === "win32") {
98
+ throw new Error("Cannot locate npm-cli.js. Install Node.js with npm and run the command again.");
99
+ }
100
+ let cwd = root;
101
+ let launchArgs = cli ? [cli, ...args] : [...args];
102
+ if (process.platform === "win32" && root.length >= 260) {
103
+ // libuv can obtain a short directory alias from namespaced cwd input.
104
+ // Keep npm's logical project path while lifecycle children use that alias.
105
+ cwd = win32.toNamespacedPath(root);
106
+ launchArgs = ["-e", WINDOWS_NPM_BOOTSTRAP, root, cli, ...args];
107
+ }
108
+ return new Promise((resolve, reject) => {
109
+ const child = spawn(cli ? process.execPath : "npm", launchArgs, {
110
+ cwd, shell: false, stdio: capture ? ["ignore", "pipe", "pipe"] : "inherit", signal
111
+ });
112
+ let output = "";
113
+ let errors = "";
114
+ child.stdout?.on("data", (chunk) => { output += chunk.toString(); });
115
+ child.stderr?.on("data", (chunk) => { errors += chunk.toString(); });
116
+ child.stdout?.on("error", reject);
117
+ child.stderr?.on("error", reject);
118
+ child.on("error", reject);
119
+ child.on("close", (code) => {
120
+ if (code === 0) {
121
+ resolve(output);
122
+ }
123
+ else {
124
+ reject(new Error(`npm exited with code ${String(code)}${errors ? `: ${errors.trim()}` : ""}`));
125
+ }
126
+ });
127
+ });
128
+ }
129
+ export async function runNpm(root, args, options) {
130
+ assertInstallerModuleIdentity();
131
+ const cli = findNpmCli();
132
+ const warning = checkNpmVersion(await npmCall(cli, ["--version"], root, true, options.signal));
133
+ if (warning) {
134
+ options.onWarning?.(warning);
135
+ }
136
+ await npmCall(cli, [...args, ...npmInstallFlags(options.mode, options.scriptPolicy)], root, false, options.signal);
137
+ }
138
+ /** Installer commands retain forced policy while returning machine-readable output. */
139
+ export async function runInstallerNpm(root, args, options) {
140
+ assertInstallerModuleIdentity();
141
+ const cli = findNpmCli();
142
+ const warning = checkNpmVersion(await npmCall(cli, ["--version"], root, true, options.signal));
143
+ if (warning) {
144
+ (options.onWarning ?? ((value) => process.stderr.write(value + "\n")))(warning);
145
+ }
146
+ const flags = npmInstallFlags(options.mode).filter((flag) => flag !== "--dry-run=false" &&
147
+ (!options.rebuild || flag !== "--ignore-scripts"));
148
+ return npmCall(cli, [...args, ...flags, `--dry-run=${String(options.dryRun ?? false)}`,
149
+ ...(options.rebuild ? ["--ignore-scripts=false", "--foreground-scripts"] : [])], root, true, options.signal);
150
+ }
151
+ export async function installerNpmVersion(root, signal, onWarning) {
152
+ assertInstallerModuleIdentity();
153
+ const version = (await npmCall(findNpmCli(), ["--version"], root, true, signal)).trim();
154
+ const warning = checkNpmVersion(version);
155
+ if (warning) {
156
+ (onWarning ?? ((value) => process.stderr.write(value + "\n")))(warning);
157
+ }
158
+ return version;
159
+ }
160
+ //# sourceMappingURL=npm-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-runner.js","sourceRoot":"","sources":["../src/npm-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { readCatalogNodes, type NodeCatalogIndex } from "@nodetool-ai/pack-core";
2
+ import type { PackCommandServices } from "../commands/pack-management.js";
3
+ import { type InstallerOperations } from "./installer.js";
4
+ import { type InstalledPackSnapshot } from "./installed.js";
5
+ import { type WorkflowPackResolver } from "../cli-feature.js";
6
+ /** Called only inside a packs command. No entrypoint or module import reads desired state. */
7
+ export interface PackCommandServiceOptions {
8
+ readonly snapshot?: InstalledPackSnapshot;
9
+ readonly catalog?: NodeCatalogIndex;
10
+ readonly catalogNodes?: ReturnType<typeof readCatalogNodes>;
11
+ readonly stateFile?: string;
12
+ readonly operations?: InstallerOperations;
13
+ readonly resolveWorkflowPacks?: WorkflowPackResolver;
14
+ }
15
+ export declare function createPackCommandServices(context?: PackCommandServiceOptions): Promise<PackCommandServices>;
16
+ //# sourceMappingURL=command-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-service.d.ts","sourceRoot":"","sources":["../../src/packs/command-service.ts"],"names":[],"mappings":"AAKA,OAAO,EAAoB,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEnG,OAAO,KAAK,EAAE,mBAAmB,EAAqB,MAAM,gCAAgC,CAAC;AAK7F,OAAO,EAAgB,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAKxE,OAAO,EAAsB,KAAK,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAGhF,OAAO,EAA+B,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAc3F,8FAA8F;AAC9F,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;IAC5D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC;IAC1C,QAAQ,CAAC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CACtD;AAED,wBAAsB,yBAAyB,CAAC,OAAO,GAAE,yBAA8B,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAuHrH"}
@@ -0,0 +1,184 @@
1
+ import { spawn } from "node:child_process";
2
+ import { join } from "node:path";
3
+ import { realpath } from "node:fs/promises";
4
+ import { fileURLToPath } from "node:url";
5
+ import { getNodetoolDataDir } from "@nodetool-ai/config";
6
+ import { readCatalogIndex } from "@nodetool-ai/pack-core";
7
+ import { RUNTIME_NPM_PACKAGES, isRuntimeNpmPackageId } from "@nodetool-ai/protocol/runtime-npm-packages";
8
+ import { installWithCommandAuthorization } from "../commands/authorized-pack-install.js";
9
+ import { authorizePackInstallCommand } from "../commands/pack-install-authorization.js";
10
+ import { loadCliPackSnapshot } from "./host.js";
11
+ import { readDesiredState } from "./install-selection.js";
12
+ import { installPacks } from "./installer.js";
13
+ import { listPackRows, explainPack, requestedInstallIds, restartNotice } from "./management.js";
14
+ import { reportPackInstallation } from "./doctor.js";
15
+ import { assertPackInstallProcessAllowed } from "./install-process.js";
16
+ import { inspectPackInstallLock } from "./doctor-lock.js";
17
+ import { readInstalledPacks } from "./installed.js";
18
+ import { readInstallTree, assertTreePins, assertSharedIdentities } from "./install-tree.js";
19
+ import { installerNpmVersion } from "../npm-runner.js";
20
+ import { loadInstalledCommandFeature } from "../cli-feature.js";
21
+ async function verifyInstalledInChild(cliRoot, installRoot, ids) {
22
+ const entry = fileURLToPath(new URL("./installer-load-check.js", import.meta.url));
23
+ await new Promise((resolve, reject) => {
24
+ const child = spawn(process.execPath, [entry, cliRoot, installRoot, ...ids], { shell: false, stdio: ["ignore", "pipe", "pipe"] });
25
+ let output = "";
26
+ child.stdout.on("data", (chunk) => { output += chunk.toString(); });
27
+ child.stderr.on("data", (chunk) => { output += chunk.toString(); });
28
+ child.on("error", reject);
29
+ child.on("close", code => { if (code === 0) {
30
+ resolve();
31
+ }
32
+ else {
33
+ reject(new Error(`Installed pack registration failed (${String(code)}): ${output.trim()}`));
34
+ } });
35
+ });
36
+ }
37
+ export async function createPackCommandServices(context = {}) {
38
+ const snapshot = context.snapshot ?? await loadCliPackSnapshot();
39
+ const catalog = context.catalog ?? readCatalogIndex();
40
+ const stateFile = context.stateFile ?? join(getNodetoolDataDir(), "cli-packs.json");
41
+ const operations = context.operations;
42
+ const root = snapshot.mode.kind === "global" || snapshot.mode.kind === "local" ? await realpath(snapshot.mode.installRoot) : null;
43
+ const state = await readDesiredState(stateFile);
44
+ const desired = root ? state[root] : undefined;
45
+ const request = (packs, runtimeLibraries = []) => ({ mode: snapshot.mode, packs, runtimeLibraries, catalog, stateFile });
46
+ const tree = async () => root ? (await readInstallTree(root, snapshot.mode.kind === "global")).packages : [];
47
+ const runtimeIds = async () => {
48
+ const installed = await tree();
49
+ const byFolder = new Map((catalog.installPins ?? []).map(pin => [pin.installName ?? pin.name, pin]));
50
+ return new Set(Object.entries(RUNTIME_NPM_PACKAGES).filter(([, runtime]) => runtime.packageNames.every(name => {
51
+ const pin = byFolder.get(name);
52
+ return pin && installed.some(entry => entry.path === `node_modules/${name}` && entry.name === pin.name && entry.version === pin.version && entry.integrity === pin.integrity);
53
+ })).map(([id]) => id));
54
+ };
55
+ return {
56
+ async list() { return listPackRows(catalog, snapshot, await runtimeIds()); },
57
+ async why(target) { return explainPack(catalog, snapshot, target, await runtimeIds()); },
58
+ async add(ids, options) {
59
+ let selected = requestedInstallIds(catalog, ids);
60
+ if (options.restore) {
61
+ selected = { packs: desired?.packs ?? [], runtimeLibraries: desired?.runtimeLibraries ?? [] };
62
+ }
63
+ else if (options.for) {
64
+ const resolver = context.resolveWorkflowPacks ?? (await loadInstalledCommandFeature(import.meta.url, "cli-workflow", { snapshot, catalog })).resolveWorkflowPacks;
65
+ if (!resolver) {
66
+ throw new Error("Configured cli-workflow feature does not provide workflow pack discovery");
67
+ }
68
+ const resolved = await resolver(options.for, snapshot, catalog);
69
+ selected = { packs: [...resolved.packs], runtimeLibraries: [...resolved.runtimeLibraries] };
70
+ }
71
+ if (selected.packs.length === 0 && selected.runtimeLibraries.length === 0) {
72
+ console.log("No missing node packs or runtime libraries to install.");
73
+ return;
74
+ }
75
+ assertPackInstallProcessAllowed();
76
+ const installRequest = request(selected.packs, selected.runtimeLibraries);
77
+ const installed = await installWithCommandAuthorization({
78
+ authorize: () => authorizePackInstallCommand({ request: installRequest,
79
+ command: options.restore ? "packs-restore" : "packs-add", confirm: !options.yes }),
80
+ install: authorization => installPacks(installRequest, authorization, operations)
81
+ });
82
+ if (!installed) {
83
+ return;
84
+ }
85
+ process.stderr.write(restartNotice([...selected.packs, ...selected.runtimeLibraries]) + "\n");
86
+ },
87
+ async remove(ids) {
88
+ const selected = requestedInstallIds(catalog, ids);
89
+ const removeRequest = request(selected.packs, selected.runtimeLibraries);
90
+ const authorization = await authorizePackInstallCommand({ request: removeRequest, command: "packs-remove" });
91
+ if (!authorization) {
92
+ throw new Error("Node pack removal was not authorized");
93
+ }
94
+ const { removePacks } = await import("./removal.js");
95
+ const result = await removePacks(removeRequest, authorization, operations);
96
+ if (result.kept.length) {
97
+ console.log(`Keeping required packages: ${result.kept.join(", ")}`);
98
+ }
99
+ console.log(result.removed.length ? `Removed: ${result.removed.join(", ")}` : "No installed packages were removed.");
100
+ process.stderr.write('Running "nodetool serve" and "nodetool mcp serve" processes may fail on later lazy imports. Restart them after removing packs.\n');
101
+ },
102
+ async doctor(options) {
103
+ const issues = [];
104
+ const baseline = { ...reportPackInstallation(snapshot), installRoot: root,
105
+ reason: snapshot.mode.kind === "global" || snapshot.mode.kind === "local" ? null : snapshot.mode.reason,
106
+ installedPacks: snapshot.packs.map(pack => ({ id: pack.id, npm: pack.npm, version: pack.version })),
107
+ desiredCoreVersion: desired?.coreVersion ?? null };
108
+ issues.push(...await inspectPackInstallLock(snapshot.mode));
109
+ let npmVersion = null;
110
+ if (root) {
111
+ try {
112
+ npmVersion = await (operations?.npmVersion ?? installerNpmVersion)(root);
113
+ }
114
+ catch (error) {
115
+ issues.push({ kind: "npm", message: error instanceof Error ? error.message : String(error) });
116
+ }
117
+ try {
118
+ const { packages: installed, missingLock } = await readInstallTree(root, snapshot.mode.kind === "global");
119
+ if (missingLock) {
120
+ issues.push({ kind: "unverified_global_install", message: "This global npm installation has no integrity records yet. Run nodetool packs doctor --repair to authorize verification and establish the pinned baseline." });
121
+ }
122
+ const admitted = new Set(snapshot.packs.map(pack => pack.npm));
123
+ const packs = catalog.packs.filter(pack => admitted.has(pack.npm.name));
124
+ const byFolder = new Map((catalog.installPins ?? []).map(pin => [pin.installName ?? pin.name, pin]));
125
+ const requiredPin = (name) => {
126
+ const pin = byFolder.get(name);
127
+ if (!pin) {
128
+ throw new Error(`Installed package ${name} has no catalog integrity pin`);
129
+ }
130
+ return pin;
131
+ };
132
+ const libraries = new Set([...(desired?.runtimeLibraries ?? []), ...packs.flatMap(pack => pack.runtimeLibraries)]);
133
+ const runtimePins = [...libraries].flatMap(id => {
134
+ if (!isRuntimeNpmPackageId(id)) {
135
+ throw new Error(`Unknown desired runtime library: ${id}`);
136
+ }
137
+ return RUNTIME_NPM_PACKAGES[id].packageNames.map(name => ({ ...requiredPin(name), installPath: `node_modules/${name}` }));
138
+ });
139
+ const installedNames = new Set(installed.map(entry => entry.name));
140
+ const installedShared = (catalog.installPins ?? []).filter(pin => pin.shared && installedNames.has(pin.name));
141
+ const pins = [...packs.map(pack => pack.npm), ...packs.flatMap(pack => pack.provides.map(requiredPin)),
142
+ ...packs.flatMap(pack => pack.scriptAllowlist), ...runtimePins, ...installedShared];
143
+ const coreNames = new Set(catalog.packs.filter(pack => pack.kind === "core" && installedNames.has(pack.npm.name)).map(pack => pack.npm.name));
144
+ if (!missingLock) {
145
+ assertTreePins(installed, installed, pins, coreNames, catalog.coreVersion);
146
+ }
147
+ await assertSharedIdentities(installed, installedShared);
148
+ }
149
+ catch (error) {
150
+ issues.push({ kind: "integrity", message: error instanceof Error ? error.message : String(error) });
151
+ }
152
+ if (options.installed || options.pack?.length) {
153
+ try {
154
+ const ids = options.pack ?? snapshot.packs.map(pack => pack.id);
155
+ if (operations) {
156
+ await operations.loadCheck(snapshot.mode, ids);
157
+ }
158
+ else {
159
+ await verifyInstalledInChild(snapshot.mode.cliRoot, root, ids);
160
+ }
161
+ }
162
+ catch (error) {
163
+ issues.push({ kind: "registration", message: error instanceof Error ? error.message : String(error) });
164
+ }
165
+ }
166
+ }
167
+ if (options.repair) {
168
+ const repairRequest = request(desired?.packs ?? [], desired?.runtimeLibraries ?? []);
169
+ const authorization = await authorizePackInstallCommand({ request: repairRequest, command: "packs-repair" });
170
+ if (!authorization) {
171
+ throw new Error("Node pack repair was not authorized");
172
+ }
173
+ const { repairPackInstallation } = await import("./repair.js");
174
+ await repairPackInstallation(repairRequest, authorization, operations);
175
+ process.stderr.write("Node pack installation verified and repaired. Restart running serve and MCP processes.\n");
176
+ const repaired = reportPackInstallation(readInstalledPacks(snapshot.mode, catalog));
177
+ return { ...repaired, npmVersion, dirty: false };
178
+ }
179
+ return { ...baseline, healthy: baseline.healthy && issues.length === 0 && !desired?.dirty,
180
+ npmVersion, dirty: desired?.dirty ?? false, issues: [...baseline.issues, ...issues] };
181
+ }
182
+ };
183
+ }
184
+ //# sourceMappingURL=command-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-service.js","sourceRoot":"","sources":["../../src/packs/command-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { InstallMode } from "./mode.js";
2
+ export interface PackLockIssue {
3
+ readonly kind: string;
4
+ readonly message: string;
5
+ }
6
+ /** A killed installer can leave a valid tree without a desired-state dirty marker. */
7
+ export declare function inspectPackInstallLock(mode: InstallMode): Promise<readonly PackLockIssue[]>;
8
+ //# sourceMappingURL=doctor-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-lock.d.ts","sourceRoot":"","sources":["../../src/packs/doctor-lock.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAG7C,MAAM,WAAW,aAAa;IAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AAElF,sFAAsF;AACtF,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CA4BjG"}
@@ -0,0 +1,50 @@
1
+ import { readFile, stat } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { hostname } from "node:os";
4
+ import { z } from "zod";
5
+ const ownerSchema = z.object({ pid: z.number().int().positive().max(2_147_483_647), hostname: z.string(), token: z.string(), startedAt: z.string() });
6
+ /** A killed installer can leave a valid tree without a desired-state dirty marker. */
7
+ export async function inspectPackInstallLock(mode) {
8
+ if (!mode.nodeModulesRoot) {
9
+ return [];
10
+ }
11
+ const file = join(mode.nodeModulesRoot, ".nodetool-packs.lock");
12
+ const issues = [];
13
+ try {
14
+ await stat(file + ".guard");
15
+ issues.push({ kind: "install_guard", message: `Install lock guard exists at ${file}.guard. Confirm its owner stopped before removing it; repair never steals the guard.` });
16
+ }
17
+ catch (error) {
18
+ if (!(error instanceof Error && "code" in error && error.code === "ENOENT")) {
19
+ throw error;
20
+ }
21
+ }
22
+ try {
23
+ const info = await stat(file);
24
+ const owner = ownerSchema.parse(JSON.parse(await readFile(file, "utf8")));
25
+ let stopped = false;
26
+ if (owner.hostname === hostname()) {
27
+ try {
28
+ process.kill(owner.pid, 0);
29
+ }
30
+ catch (error) {
31
+ if (error instanceof Error && "code" in error && error.code === "ESRCH") {
32
+ stopped = true;
33
+ }
34
+ else if (!(error instanceof Error && "code" in error && error.code === "EPERM")) {
35
+ throw error;
36
+ }
37
+ }
38
+ }
39
+ const interrupted = stopped || Date.now() - info.mtimeMs > 60_000;
40
+ issues.push({ kind: interrupted ? "interrupted_install" : "active_install",
41
+ message: interrupted ? `Interrupted install lock at ${file}. Run nodetool packs doctor --repair after its heartbeat expires.` : `An install is active at ${file}. Wait for it to finish before checking or repairing the tree.` });
42
+ }
43
+ catch (error) {
44
+ if (!(error instanceof Error && "code" in error && error.code === "ENOENT")) {
45
+ issues.push({ kind: "invalid_install_lock", message: `Cannot inspect install lock ${file}: ${error instanceof Error ? error.message : String(error)}` });
46
+ }
47
+ }
48
+ return issues;
49
+ }
50
+ //# sourceMappingURL=doctor-lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-lock.js","sourceRoot":"","sources":["../../src/packs/doctor-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAGtJ,sFAAsF;AACtF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,IAAiB;IAC5D,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;QAAC,OAAO,EAAE,CAAC;IAAC,CAAC;IACzC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAAC;IAChE,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,gCAAgC,IAAI,sFAAsF,EAAE,CAAC,CAAC;IAC9K,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAAC,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;YAAC,MAAM,KAAK,CAAC;QAAC,CAAC;IAAC,CAAC;IACjH,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1E,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAAC,CAAC;YACnC,OAAO,KAAK,EAAE,CAAC;gBACb,IAAI,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAAC,OAAO,GAAG,IAAI,CAAC;gBAAC,CAAC;qBACvF,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,CAAC;oBAAC,MAAM,KAAK,CAAC;gBAAC,CAAC;YACnG,CAAC;QACH,CAAC;QACD,MAAM,WAAW,GAAG,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,gBAAgB;YACxE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,+BAA+B,IAAI,mEAAmE,CAAC,CAAC,CAAC,2BAA2B,IAAI,gEAAgE,EAAE,CAAC,CAAC;IACvO,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;YAC5E,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,+BAA+B,IAAI,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3J,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { InstalledPackSnapshot } from "./installed.js";
2
+ export type PackDoctorIssue = {
3
+ readonly kind: "wrong_version";
4
+ readonly pack: string;
5
+ readonly npm: string;
6
+ readonly version: string;
7
+ readonly expectedVersion: string;
8
+ readonly packageRoot: string;
9
+ } | {
10
+ readonly kind: "invalid_package";
11
+ readonly pack: string;
12
+ readonly npm: string;
13
+ readonly reason: string;
14
+ readonly packageRoot: string;
15
+ };
16
+ export interface PackDoctorReport {
17
+ readonly mode: InstalledPackSnapshot["mode"]["kind"];
18
+ readonly cliRoot: string;
19
+ readonly coreVersion: string;
20
+ readonly healthy: boolean;
21
+ readonly issues: readonly PackDoctorIssue[];
22
+ }
23
+ /** Report rejected tree entries without importing them or mutating the installed tree. */
24
+ export declare function reportPackInstallation(snapshot: InstalledPackSnapshot): PackDoctorReport;
25
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/packs/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE5D,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACtG,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAClE;IAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAC9E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;CAC7C;AAED,0FAA0F;AAC1F,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,gBAAgB,CASxF"}
@@ -0,0 +1,12 @@
1
+ /** Report rejected tree entries without importing them or mutating the installed tree. */
2
+ export function reportPackInstallation(snapshot) {
3
+ const issues = [
4
+ ...snapshot.wrongVersions.map((entry) => ({ kind: "wrong_version", pack: entry.id,
5
+ npm: entry.npm, version: entry.version, expectedVersion: entry.expectedVersion, packageRoot: entry.packageRoot })),
6
+ ...snapshot.invalidPackages.map((entry) => ({ kind: "invalid_package", pack: entry.id,
7
+ npm: entry.npm, reason: entry.reason, packageRoot: entry.packageRoot }))
8
+ ];
9
+ return { mode: snapshot.mode.kind, cliRoot: snapshot.mode.cliRoot, coreVersion: snapshot.mode.coreVersion,
10
+ healthy: issues.length === 0, issues };
11
+ }
12
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/packs/doctor.ts"],"names":[],"mappings":"AAgBA,0FAA0F;AAC1F,MAAM,UAAU,sBAAsB,CAAC,QAA+B;IACpE,MAAM,MAAM,GAAsB;QAChC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE;YAChG,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QACpH,GAAG,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE;YACpG,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;KAC3E,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,WAAW;QACvG,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { NodeCatalogIndex } from "@nodetool-ai/pack-core";
2
+ import type { InstallPlan, TreePackage, VerificationPin } from "./install-tree.js";
3
+ export interface GlobalBootstrapPin extends VerificationPin {
4
+ readonly installPath: string;
5
+ readonly realPath: string;
6
+ }
7
+ /** Initial global npm installs omit locks. Reify only catalog-owned existing roots. */
8
+ export declare function globalBootstrapPins(catalog: NodeCatalogIndex, before: readonly TreePackage[], libraries: readonly string[]): readonly GlobalBootstrapPin[];
9
+ /** Permit only explicitly authorized same-version root reification, never arbitrary changes. */
10
+ export declare function normalizeGlobalBootstrap(plan: InstallPlan, pins: readonly GlobalBootstrapPin[]): InstallPlan;
11
+ //# sourceMappingURL=global-bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-bootstrap.d.ts","sourceRoot":"","sources":["../../src/packs/global-bootstrap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEnF,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IAAG,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE;AAEvH,uFAAuF;AACvF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,WAAW,EAAE,EAAE,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,kBAAkB,EAAE,CAwB1J;AAID,gGAAgG;AAChG,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,kBAAkB,EAAE,GAAG,WAAW,CAyB5G"}
@@ -0,0 +1,72 @@
1
+ import { z } from "zod";
2
+ import { RUNTIME_NPM_PACKAGES, isRuntimeNpmPackageId } from "@nodetool-ai/protocol/runtime-npm-packages";
3
+ /** Initial global npm installs omit locks. Reify only catalog-owned existing roots. */
4
+ export function globalBootstrapPins(catalog, before, libraries) {
5
+ const table = new Map((catalog.installPins ?? []).map(pin => [pin.installName ?? pin.name, pin]));
6
+ const installed = new Set(before.map(entry => entry.name));
7
+ const packs = catalog.packs.filter(pack => installed.has(pack.npm.name));
8
+ const required = (name) => {
9
+ const pin = table.get(name);
10
+ if (!pin) {
11
+ throw new Error(`Global bootstrap has no integrity pin for ${name}`);
12
+ }
13
+ return pin;
14
+ };
15
+ const candidates = [...packs.flatMap(pack => [pack.npm, ...pack.provides.map(required), ...pack.scriptAllowlist]),
16
+ ...(catalog.installPins ?? []).filter(pin => pin.shared),
17
+ ...libraries.flatMap(id => isRuntimeNpmPackageId(id) ? RUNTIME_NPM_PACKAGES[id].packageNames.map(name => ({ ...required(name), installPath: `node_modules/${name}` })) : [])];
18
+ const result = new Map();
19
+ for (const pin of candidates) {
20
+ const entries = before.filter(entry => entry.name === pin.name && (!pin.installPath || entry.path === pin.installPath));
21
+ if (!entries.length) {
22
+ continue;
23
+ }
24
+ const path = `node_modules/${pin.installName ?? pin.name}`;
25
+ if (!pin.integrity || pin.integrity === "PENDING" || entries.length !== 1 || entries[0].path !== path ||
26
+ entries[0].version !== pin.version || entries[0].integrity !== undefined) {
27
+ throw new Error(`Global bootstrap requires one exact unrecorded root package: ${pin.name}`);
28
+ }
29
+ result.set(path, { ...pin, installPath: path, realPath: entries[0].realPath });
30
+ }
31
+ return [...result.values()].sort((a, b) => a.installPath.localeCompare(b.installPath));
32
+ }
33
+ const identity = z.object({ name: z.string(), version: z.string(), path: z.string() });
34
+ const changeSchema = z.object({ from: identity, to: identity });
35
+ /** Permit only explicitly authorized same-version root reification, never arbitrary changes. */
36
+ export function normalizeGlobalBootstrap(plan, pins) {
37
+ const byPath = new Map(pins.map(pin => [pin.realPath, pin]));
38
+ const byName = new Map();
39
+ for (const pin of pins) {
40
+ byName.set(pin.name, [...(byName.get(pin.name) ?? []), pin]);
41
+ }
42
+ const replayed = new Set();
43
+ return { ...plan, change: plan.change.filter(raw => {
44
+ const text = z.string().safeParse(raw);
45
+ if (text.success) {
46
+ const match = /^change (\S+) (\S+) => (\S+)$/.exec(text.data);
47
+ const candidates = match ? byName.get(match[1]) : undefined;
48
+ if (!match || candidates?.length !== 1) {
49
+ return true;
50
+ }
51
+ const pin = candidates[0];
52
+ if (replayed.has(pin.realPath) || match[2] !== pin.version || match[3] !== pin.version) {
53
+ return true;
54
+ }
55
+ replayed.add(pin.realPath);
56
+ return false;
57
+ }
58
+ const parsed = changeSchema.safeParse(raw);
59
+ if (!parsed.success) {
60
+ return true;
61
+ }
62
+ const { from, to } = parsed.data;
63
+ const pin = byPath.get(from.path);
64
+ if (!pin || replayed.has(pin.realPath) || from.path !== to.path || from.name !== pin.name || to.name !== pin.name ||
65
+ from.version !== pin.version || to.version !== pin.version) {
66
+ return true;
67
+ }
68
+ replayed.add(pin.realPath);
69
+ return false;
70
+ }) };
71
+ }
72
+ //# sourceMappingURL=global-bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-bootstrap.js","sourceRoot":"","sources":["../../src/packs/global-bootstrap.ts"],"names":[],"mappings":"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"}