@nodetool-ai/cli 0.8.3 → 0.8.4-a24.2

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 (252) hide show
  1. package/dist/.nodetool-build-stamp +1 -1
  2. package/dist/app-debug/harness.js +1 -1
  3. package/dist/app-debug/harness.js.map +1 -1
  4. package/dist/command-errors.d.ts +7 -9
  5. package/dist/command-errors.d.ts.map +1 -1
  6. package/dist/command-errors.js +36 -2
  7. package/dist/command-errors.js.map +1 -1
  8. package/dist/commands/__tests__/jtbd.test.js +1 -1
  9. package/dist/commands/__tests__/jtbd.test.js.map +1 -1
  10. package/dist/commands/__tests__/runtime.test.d.ts +2 -0
  11. package/dist/commands/__tests__/runtime.test.d.ts.map +1 -0
  12. package/dist/commands/__tests__/runtime.test.js +128 -0
  13. package/dist/commands/__tests__/runtime.test.js.map +1 -0
  14. package/dist/commands/agent.js +1 -1
  15. package/dist/commands/agent.js.map +1 -1
  16. package/dist/commands/app.d.ts.map +1 -1
  17. package/dist/commands/app.js +3 -5
  18. package/dist/commands/app.js.map +1 -1
  19. package/dist/commands/apps.d.ts.map +1 -1
  20. package/dist/commands/apps.js +20 -20
  21. package/dist/commands/apps.js.map +1 -1
  22. package/dist/commands/authorized-pack-install.d.ts +7 -0
  23. package/dist/commands/authorized-pack-install.d.ts.map +1 -0
  24. package/dist/commands/authorized-pack-install.js +20 -0
  25. package/dist/commands/authorized-pack-install.js.map +1 -0
  26. package/dist/commands/debug.d.ts.map +1 -1
  27. package/dist/commands/debug.js +15 -3
  28. package/dist/commands/debug.js.map +1 -1
  29. package/dist/commands/eval.js +2 -2
  30. package/dist/commands/eval.js.map +1 -1
  31. package/dist/commands/game-benchmark.d.ts +4 -0
  32. package/dist/commands/game-benchmark.d.ts.map +1 -1
  33. package/dist/commands/game-benchmark.js +8 -0
  34. package/dist/commands/game-benchmark.js.map +1 -1
  35. package/dist/commands/game-smoke.d.ts.map +1 -1
  36. package/dist/commands/game-smoke.js +3 -3
  37. package/dist/commands/game-smoke.js.map +1 -1
  38. package/dist/commands/game.d.ts.map +1 -1
  39. package/dist/commands/game.js +72 -25
  40. package/dist/commands/game.js.map +1 -1
  41. package/dist/commands/harness.d.ts +21 -0
  42. package/dist/commands/harness.d.ts.map +1 -1
  43. package/dist/commands/harness.js +198 -10
  44. package/dist/commands/harness.js.map +1 -1
  45. package/dist/commands/install-missing-packs.d.ts +21 -0
  46. package/dist/commands/install-missing-packs.d.ts.map +1 -0
  47. package/dist/commands/install-missing-packs.js +48 -0
  48. package/dist/commands/install-missing-packs.js.map +1 -0
  49. package/dist/commands/js-script.d.ts.map +1 -1
  50. package/dist/commands/js-script.js +11 -9
  51. package/dist/commands/js-script.js.map +1 -1
  52. package/dist/commands/node.d.ts.map +1 -1
  53. package/dist/commands/node.js +15 -3
  54. package/dist/commands/node.js.map +1 -1
  55. package/dist/commands/pack-install-authorization.d.ts +40 -0
  56. package/dist/commands/pack-install-authorization.d.ts.map +1 -0
  57. package/dist/commands/pack-install-authorization.js +131 -0
  58. package/dist/commands/pack-install-authorization.js.map +1 -0
  59. package/dist/commands/pack-management.d.ts +26 -0
  60. package/dist/commands/pack-management.d.ts.map +1 -0
  61. package/dist/commands/pack-management.js +74 -0
  62. package/dist/commands/pack-management.js.map +1 -0
  63. package/dist/commands/packs.d.ts +2 -1
  64. package/dist/commands/packs.d.ts.map +1 -1
  65. package/dist/commands/packs.js +7 -2
  66. package/dist/commands/packs.js.map +1 -1
  67. package/dist/commands/projects.d.ts +11 -0
  68. package/dist/commands/projects.d.ts.map +1 -0
  69. package/dist/commands/projects.js +145 -0
  70. package/dist/commands/projects.js.map +1 -0
  71. package/dist/commands/resource-read.d.ts.map +1 -1
  72. package/dist/commands/resource-read.js +6 -12
  73. package/dist/commands/resource-read.js.map +1 -1
  74. package/dist/commands/runs.js +1 -1
  75. package/dist/commands/runs.js.map +1 -1
  76. package/dist/commands/runtime.d.ts +3 -0
  77. package/dist/commands/runtime.d.ts.map +1 -0
  78. package/dist/commands/runtime.js +122 -0
  79. package/dist/commands/runtime.js.map +1 -0
  80. package/dist/commands/sketch.d.ts.map +1 -1
  81. package/dist/commands/sketch.js +2 -4
  82. package/dist/commands/sketch.js.map +1 -1
  83. package/dist/commands/timeline-render.d.ts +0 -10
  84. package/dist/commands/timeline-render.d.ts.map +1 -1
  85. package/dist/commands/timeline-render.js +18 -8
  86. package/dist/commands/timeline-render.js.map +1 -1
  87. package/dist/commands/timeline-score.d.ts.map +1 -1
  88. package/dist/commands/timeline-score.js +1 -2
  89. package/dist/commands/timeline-score.js.map +1 -1
  90. package/dist/commands/timeline.d.ts.map +1 -1
  91. package/dist/commands/timeline.js +2 -4
  92. package/dist/commands/timeline.js.map +1 -1
  93. package/dist/commands/validate.d.ts +2 -0
  94. package/dist/commands/validate.d.ts.map +1 -1
  95. package/dist/commands/validate.js +8 -3
  96. package/dist/commands/validate.js.map +1 -1
  97. package/dist/commands/version-commands.d.ts.map +1 -1
  98. package/dist/commands/version-commands.js +5 -10
  99. package/dist/commands/version-commands.js.map +1 -1
  100. package/dist/debug/server-runner.d.ts.map +1 -1
  101. package/dist/debug/server-runner.js +7 -1
  102. package/dist/debug/server-runner.js.map +1 -1
  103. package/dist/debug/target.d.ts.map +1 -1
  104. package/dist/debug/target.js +2 -11
  105. package/dist/debug/target.js.map +1 -1
  106. package/dist/evals/graph-runner.d.ts +1 -1
  107. package/dist/evals/graph-runner.d.ts.map +1 -1
  108. package/dist/evals/graph-runner.js +2 -2
  109. package/dist/evals/graph-runner.js.map +1 -1
  110. package/dist/harness/capability-table.d.ts.map +1 -1
  111. package/dist/harness/capability-table.js +17 -9
  112. package/dist/harness/capability-table.js.map +1 -1
  113. package/dist/harness/registry.d.ts.map +1 -1
  114. package/dist/harness/registry.js +131 -2
  115. package/dist/harness/registry.js.map +1 -1
  116. package/dist/index.js +10 -3
  117. package/dist/index.js.map +1 -1
  118. package/dist/install-lock.d.ts +12 -0
  119. package/dist/install-lock.d.ts.map +1 -0
  120. package/dist/install-lock.js +139 -0
  121. package/dist/install-lock.js.map +1 -0
  122. package/dist/js-script-debug/harness.d.ts +4 -0
  123. package/dist/js-script-debug/harness.d.ts.map +1 -1
  124. package/dist/js-script-debug/harness.js.map +1 -1
  125. package/dist/node/run-node.d.ts +3 -0
  126. package/dist/node/run-node.d.ts.map +1 -1
  127. package/dist/node/run-node.js +18 -2
  128. package/dist/node/run-node.js.map +1 -1
  129. package/dist/node-registry.d.ts +6 -4
  130. package/dist/node-registry.d.ts.map +1 -1
  131. package/dist/node-registry.js +10 -5
  132. package/dist/node-registry.js.map +1 -1
  133. package/dist/nodetool-main.js +57 -62
  134. package/dist/nodetool-main.js.map +1 -1
  135. package/dist/nodetool.js +8 -1
  136. package/dist/nodetool.js.map +1 -1
  137. package/dist/npm-runner.d.ts +23 -0
  138. package/dist/npm-runner.d.ts.map +1 -0
  139. package/dist/npm-runner.js +160 -0
  140. package/dist/npm-runner.js.map +1 -0
  141. package/dist/optional-node-root.d.ts +10 -0
  142. package/dist/optional-node-root.d.ts.map +1 -0
  143. package/dist/optional-node-root.js +26 -0
  144. package/dist/optional-node-root.js.map +1 -0
  145. package/dist/packs/command-service.d.ts +14 -0
  146. package/dist/packs/command-service.d.ts.map +1 -0
  147. package/dist/packs/command-service.js +190 -0
  148. package/dist/packs/command-service.js.map +1 -0
  149. package/dist/packs/doctor-lock.d.ts +8 -0
  150. package/dist/packs/doctor-lock.d.ts.map +1 -0
  151. package/dist/packs/doctor-lock.js +50 -0
  152. package/dist/packs/doctor-lock.js.map +1 -0
  153. package/dist/packs/doctor.d.ts +25 -0
  154. package/dist/packs/doctor.d.ts.map +1 -0
  155. package/dist/packs/doctor.js +12 -0
  156. package/dist/packs/doctor.js.map +1 -0
  157. package/dist/packs/global-bootstrap.d.ts +11 -0
  158. package/dist/packs/global-bootstrap.d.ts.map +1 -0
  159. package/dist/packs/global-bootstrap.js +72 -0
  160. package/dist/packs/global-bootstrap.js.map +1 -0
  161. package/dist/packs/host.d.ts +17 -0
  162. package/dist/packs/host.d.ts.map +1 -0
  163. package/dist/packs/host.js +79 -0
  164. package/dist/packs/host.js.map +1 -0
  165. package/dist/packs/install-manifests.d.ts +2 -0
  166. package/dist/packs/install-manifests.d.ts.map +1 -0
  167. package/dist/packs/install-manifests.js +30 -0
  168. package/dist/packs/install-manifests.js.map +1 -0
  169. package/dist/packs/install-process.d.ts +4 -0
  170. package/dist/packs/install-process.d.ts.map +1 -0
  171. package/dist/packs/install-process.js +11 -0
  172. package/dist/packs/install-process.js.map +1 -0
  173. package/dist/packs/install-selection.d.ts +39 -0
  174. package/dist/packs/install-selection.d.ts.map +1 -0
  175. package/dist/packs/install-selection.js +67 -0
  176. package/dist/packs/install-selection.js.map +1 -0
  177. package/dist/packs/install-state.d.ts +21 -0
  178. package/dist/packs/install-state.d.ts.map +1 -0
  179. package/dist/packs/install-state.js +44 -0
  180. package/dist/packs/install-state.js.map +1 -0
  181. package/dist/packs/install-tree.d.ts +35 -0
  182. package/dist/packs/install-tree.d.ts.map +1 -0
  183. package/dist/packs/install-tree.js +253 -0
  184. package/dist/packs/install-tree.js.map +1 -0
  185. package/dist/packs/install-verification.d.ts +12 -0
  186. package/dist/packs/install-verification.d.ts.map +1 -0
  187. package/dist/packs/install-verification.js +76 -0
  188. package/dist/packs/install-verification.js.map +1 -0
  189. package/dist/packs/installed.d.ts +36 -0
  190. package/dist/packs/installed.d.ts.map +1 -0
  191. package/dist/packs/installed.js +87 -0
  192. package/dist/packs/installed.js.map +1 -0
  193. package/dist/packs/installer-load-check.d.ts +4 -0
  194. package/dist/packs/installer-load-check.d.ts.map +1 -0
  195. package/dist/packs/installer-load-check.js +52 -0
  196. package/dist/packs/installer-load-check.js.map +1 -0
  197. package/dist/packs/installer.d.ts +16 -0
  198. package/dist/packs/installer.d.ts.map +1 -0
  199. package/dist/packs/installer.js +142 -0
  200. package/dist/packs/installer.js.map +1 -0
  201. package/dist/packs/management.d.ts +51 -0
  202. package/dist/packs/management.d.ts.map +1 -0
  203. package/dist/packs/management.js +81 -0
  204. package/dist/packs/management.js.map +1 -0
  205. package/dist/packs/mode.d.ts +42 -0
  206. package/dist/packs/mode.d.ts.map +1 -0
  207. package/dist/packs/mode.js +215 -0
  208. package/dist/packs/mode.js.map +1 -0
  209. package/dist/packs/owned-replay-plan.d.ts +5 -0
  210. package/dist/packs/owned-replay-plan.d.ts.map +1 -0
  211. package/dist/packs/owned-replay-plan.js +68 -0
  212. package/dist/packs/owned-replay-plan.js.map +1 -0
  213. package/dist/packs/removal-selection.d.ts +12 -0
  214. package/dist/packs/removal-selection.d.ts.map +1 -0
  215. package/dist/packs/removal-selection.js +169 -0
  216. package/dist/packs/removal-selection.js.map +1 -0
  217. package/dist/packs/removal.d.ts +12 -0
  218. package/dist/packs/removal.d.ts.map +1 -0
  219. package/dist/packs/removal.js +138 -0
  220. package/dist/packs/removal.js.map +1 -0
  221. package/dist/packs/repair.d.ts +2 -0
  222. package/dist/packs/repair.d.ts.map +1 -0
  223. package/dist/packs/repair.js +2 -0
  224. package/dist/packs/repair.js.map +1 -0
  225. package/dist/packs/serve.d.ts +2 -0
  226. package/dist/packs/serve.d.ts.map +1 -0
  227. package/dist/packs/serve.js +14 -0
  228. package/dist/packs/serve.js.map +1 -0
  229. package/dist/providers.d.ts +1 -1
  230. package/dist/providers.d.ts.map +1 -1
  231. package/dist/providers.js +42 -6
  232. package/dist/providers.js.map +1 -1
  233. package/dist/run-dsl-supervised.d.ts.map +1 -1
  234. package/dist/run-dsl-supervised.js +8 -1
  235. package/dist/run-dsl-supervised.js.map +1 -1
  236. package/dist/runtime-env.d.ts +4 -0
  237. package/dist/runtime-env.d.ts.map +1 -0
  238. package/dist/runtime-env.js +31 -0
  239. package/dist/runtime-env.js.map +1 -0
  240. package/dist/sketch-debug/harness.d.ts +1 -1
  241. package/dist/sketch-debug/harness.d.ts.map +1 -1
  242. package/dist/sketch-debug/harness.js +2 -7
  243. package/dist/sketch-debug/harness.js.map +1 -1
  244. package/dist/validate/index.d.ts +3 -2
  245. package/dist/validate/index.d.ts.map +1 -1
  246. package/dist/validate/index.js +30 -2
  247. package/dist/validate/index.js.map +1 -1
  248. package/dist/workflow-file.d.ts +3 -0
  249. package/dist/workflow-file.d.ts.map +1 -0
  250. package/dist/workflow-file.js +176 -0
  251. package/dist/workflow-file.js.map +1 -0
  252. package/package.json +34 -41
@@ -0,0 +1,215 @@
1
+ import { existsSync, readFileSync, realpathSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { join, posix, win32 } from "node:path";
4
+ import { z } from "zod";
5
+ const NPX_REASON = 'Packs need a global or local install. Run "npm install -g @nodetool-ai/cli" or "npm install @nodetool-ai/cli" in a project.';
6
+ const DEV_REASON = "Node packs are workspaces in this checkout. Build the required workspace instead of installing it.";
7
+ const dependenciesSchema = z.record(z.string(), z.string());
8
+ const manifestSchema = z.object({
9
+ name: z.string().optional(),
10
+ version: z.string().min(1).optional(),
11
+ dependencies: dependenciesSchema.optional(),
12
+ devDependencies: dependenciesSchema.optional(),
13
+ optionalDependencies: dependenciesSchema.optional(),
14
+ workspaces: z.union([z.array(z.string()), z.object({ packages: z.array(z.string()) })]).optional()
15
+ });
16
+ function pathKey(path, style) {
17
+ const paths = style === "win32" ? win32 : posix;
18
+ const normalized = paths.normalize(path).replace(/[/\\]+$/, "");
19
+ return style === "win32" ? normalized.toLowerCase() : normalized;
20
+ }
21
+ /** Classify a known package root without filesystem reads or npm subprocesses. */
22
+ export function classifyInstallLayout(layout) {
23
+ const pathStyle = layout.pathStyle ?? "posix";
24
+ const paths = pathStyle === "win32" ? win32 : posix;
25
+ const cliRoot = paths.normalize(layout.cliRoot);
26
+ const segments = pathKey(cliRoot, pathStyle).split(paths.sep);
27
+ const modules = paths.dirname(paths.dirname(cliRoot));
28
+ const npmLayout = pathKey(paths.basename(modules), pathStyle) === "node_modules" &&
29
+ pathKey(paths.basename(paths.dirname(cliRoot)), pathStyle) === "@nodetool-ai";
30
+ const nodeModulesRoot = npmLayout ? modules : null;
31
+ const identity = { cliRoot, coreVersion: layout.coreVersion, pathStyle };
32
+ if (segments.includes("_npx")) {
33
+ return { ...identity, kind: "npx", reason: NPX_REASON, nodeModulesRoot };
34
+ }
35
+ if (segments.includes(".pnpm")) {
36
+ return { ...identity, kind: "unsupported", reason: "Node pack installation is unsupported in a pnpm store. Use an npm global or local install.", nodeModulesRoot };
37
+ }
38
+ if (layout.yarnPnp) {
39
+ return { ...identity, kind: "unsupported", reason: "Node pack installation is unsupported with Yarn PnP. Use an npm global or local install.", nodeModulesRoot };
40
+ }
41
+ const bunLayout = segments.some((part, index) => part === ".bun" && segments[index + 1] === "install" && segments[index + 2] === "global") ||
42
+ layout.bunGlobalRoots?.some((root) => pathKey(cliRoot, pathStyle).startsWith(pathKey(root, pathStyle) + paths.sep));
43
+ if (bunLayout) {
44
+ return { ...identity, kind: "unsupported", reason: "Node pack installation is unsupported in the Bun global directory. Use an npm global or local install.", nodeModulesRoot };
45
+ }
46
+ if (!segments.includes("node_modules")) {
47
+ return { ...identity, kind: "dev", reason: DEV_REASON,
48
+ nodeModulesRoot: layout.workspaceRoot ? paths.join(layout.workspaceRoot, "node_modules") : null };
49
+ }
50
+ if (nodeModulesRoot && layout.globalNodeModulesRoots?.some((root) => pathKey(root, pathStyle) === pathKey(nodeModulesRoot, pathStyle))) {
51
+ return { ...identity, kind: "global", installRoot: cliRoot, nodeModulesRoot: paths.join(cliRoot, "node_modules") };
52
+ }
53
+ if (nodeModulesRoot && layout.projectHasCli) {
54
+ return { ...identity, kind: "local", installRoot: paths.dirname(nodeModulesRoot), nodeModulesRoot };
55
+ }
56
+ return { ...identity, kind: "unsupported", reason: "The project does not list @nodetool-ai/cli as a dependency. Install it explicitly in the project or use an npm global install.", nodeModulesRoot };
57
+ }
58
+ function readManifest(root) {
59
+ const file = join(root, "package.json");
60
+ let content;
61
+ try {
62
+ content = readFileSync(file, "utf8");
63
+ }
64
+ catch (error) {
65
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") {
66
+ return undefined;
67
+ }
68
+ throw error;
69
+ }
70
+ try {
71
+ return manifestSchema.parse(JSON.parse(content));
72
+ }
73
+ catch (cause) {
74
+ throw new Error(`Invalid package manifest: ${file}`, { cause });
75
+ }
76
+ }
77
+ function ancestorDirectories(start) {
78
+ const paths = process.platform === "win32" ? win32 : posix;
79
+ const result = [];
80
+ for (let current = start;; current = paths.dirname(current)) {
81
+ result.push(current);
82
+ if (paths.dirname(current) === current) {
83
+ return result;
84
+ }
85
+ }
86
+ }
87
+ function prefixFromNpmrc() {
88
+ const file = process.env["npm_config_userconfig"] ?? process.env["NPM_CONFIG_USERCONFIG"] ?? join(homedir(), ".npmrc");
89
+ let content;
90
+ try {
91
+ content = readFileSync(file, "utf8");
92
+ }
93
+ catch (error) {
94
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") {
95
+ return undefined;
96
+ }
97
+ throw error;
98
+ }
99
+ let prefix;
100
+ for (const line of content.split(/\r?\n/)) {
101
+ // npm config sections do not define a top-level global prefix.
102
+ if (line.trimStart().startsWith("[")) {
103
+ break;
104
+ }
105
+ const match = /^\s*prefix\s*=\s*(.*)$/.exec(line);
106
+ if (!match) {
107
+ continue;
108
+ }
109
+ const raw = match[1].trim();
110
+ if (raw.startsWith('"') && raw.endsWith('"')) {
111
+ try {
112
+ prefix = z.string().parse(JSON.parse(raw));
113
+ }
114
+ catch {
115
+ // A malformed prefix is not a reliable global installation root.
116
+ prefix = undefined;
117
+ }
118
+ }
119
+ else if (raw.startsWith("'") && raw.endsWith("'")) {
120
+ prefix = raw.slice(1, -1);
121
+ }
122
+ else {
123
+ const chars = [];
124
+ for (let index = 0; index < raw.length; index++) {
125
+ const char = raw[index];
126
+ if (char === ";" || char === "#") {
127
+ break;
128
+ }
129
+ if (char === "\\" && ["\\", ";", "#"].includes(raw[index + 1])) {
130
+ index++;
131
+ chars.push(raw[index]);
132
+ }
133
+ else {
134
+ chars.push(char);
135
+ }
136
+ }
137
+ prefix = chars.join("").trim();
138
+ }
139
+ }
140
+ return prefix;
141
+ }
142
+ function defaultGlobalRoots() {
143
+ const paths = process.platform === "win32" ? win32 : posix;
144
+ const roots = process.platform === "win32"
145
+ ? [paths.join(paths.dirname(process.execPath), "node_modules")]
146
+ : [paths.resolve(paths.dirname(process.execPath), "../lib/node_modules"), "/usr/local/lib/node_modules", "/usr/lib/node_modules"];
147
+ const prefix = process.env["npm_config_prefix"] ?? process.env["NPM_CONFIG_PREFIX"] ?? prefixFromNpmrc();
148
+ if (prefix) {
149
+ let expanded = prefix.replace(/(?<!\\)\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g, (original, name) => process.env[name] ?? original);
150
+ if (expanded.startsWith("~/") || expanded.startsWith("~\\")) {
151
+ expanded = paths.join(homedir(), expanded.slice(2));
152
+ }
153
+ roots.push(paths.resolve(expanded, process.platform === "win32" ? "node_modules" : "lib/node_modules"));
154
+ }
155
+ const appData = process.env["APPDATA"];
156
+ if (process.platform === "win32" && appData) {
157
+ roots.push(paths.join(appData, "npm", "node_modules"));
158
+ }
159
+ return roots;
160
+ }
161
+ function canonicalGlobalRoot(root) {
162
+ try {
163
+ return realpathSync(root);
164
+ }
165
+ catch (error) {
166
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") {
167
+ return root;
168
+ }
169
+ throw error;
170
+ }
171
+ }
172
+ /** Resolve the real CLI entry and inspect its layout only when the host requests it. */
173
+ export function detectInstallMode(entryPath, options = {}) {
174
+ const paths = process.platform === "win32" ? win32 : posix;
175
+ const entry = realpathSync(entryPath);
176
+ let cliRoot;
177
+ let coreVersion;
178
+ for (const directory of ancestorDirectories(paths.dirname(entry))) {
179
+ const manifest = readManifest(directory);
180
+ if (manifest?.name === "@nodetool-ai/cli") {
181
+ if (!manifest.version) {
182
+ throw new Error(`CLI package has no version: ${directory}`);
183
+ }
184
+ cliRoot = directory;
185
+ coreVersion = manifest.version;
186
+ break;
187
+ }
188
+ }
189
+ if (!cliRoot || !coreVersion) {
190
+ throw new Error(`Cannot find @nodetool-ai/cli package root for ${entry}`);
191
+ }
192
+ const ancestors = ancestorDirectories(cliRoot);
193
+ const yarnPnp = ancestors.some((directory) => [".pnp.cjs", ".pnp.js", ".pnp.loader.mjs"].some((file) => existsSync(paths.join(directory, file))));
194
+ const modules = paths.dirname(paths.dirname(cliRoot));
195
+ const project = readManifest(paths.dirname(modules));
196
+ const projectHasCli = Boolean(project?.dependencies?.["@nodetool-ai/cli"] ?? project?.devDependencies?.["@nodetool-ai/cli"] ?? project?.optionalDependencies?.["@nodetool-ai/cli"]);
197
+ const workspaceRoot = ancestors.find((directory) => readManifest(directory)?.workspaces !== undefined);
198
+ const layout = {
199
+ cliRoot, coreVersion, pathStyle: process.platform === "win32" ? "win32" : "posix",
200
+ globalNodeModulesRoots: (options.globalNodeModulesRoots ?? defaultGlobalRoots()).map(canonicalGlobalRoot), projectHasCli, yarnPnp,
201
+ bunGlobalRoots: options.bunGlobalRoots ?? [paths.join(process.env["BUN_INSTALL"] ?? paths.join(homedir(), ".bun"), "install", "global")]
202
+ };
203
+ if (workspaceRoot) {
204
+ return classifyInstallLayout({ ...layout, workspaceRoot });
205
+ }
206
+ return classifyInstallLayout(layout);
207
+ }
208
+ /** The catalog factory supplies the concrete closure when no ids are available yet. */
209
+ export function installDetailsForMode(mode, ids = []) {
210
+ if (mode.kind === "global" || mode.kind === "local") {
211
+ return { supported: true, reason: null, command: ids.length ? `nodetool packs add ${[...new Set(ids)].sort().join(" ")}` : null };
212
+ }
213
+ return { supported: false, reason: mode.reason, command: null };
214
+ }
215
+ //# sourceMappingURL=mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode.js","sourceRoot":"","sources":["../../src/packs/mode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { NodeCatalogIndex } from "@nodetool-ai/node-catalog";
2
+ import type { InstallPlan, TreePackage } from "./install-tree.js";
3
+ /** npm labels replaying an exact no-save owned package as a change. */
4
+ export declare function normalizeOwnedPackReplay(plan: InstallPlan, before: readonly TreePackage[], catalog: NodeCatalogIndex, coreNames?: ReadonlySet<string>): InstallPlan;
5
+ //# sourceMappingURL=owned-replay-plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owned-replay-plan.d.ts","sourceRoot":"","sources":["../../src/packs/owned-replay-plan.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAqB,MAAM,2BAA2B,CAAC;AAErF,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKlE,uEAAuE;AACvE,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,WAAW,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,SAAS,GAAE,WAAW,CAAC,MAAM,CAA8F,GAAG,WAAW,CA6C/P"}
@@ -0,0 +1,68 @@
1
+ import { z } from "zod";
2
+ import { RUNTIME_NPM_PACKAGES } from "@nodetool-ai/protocol/runtime-npm-packages";
3
+ const identity = z.object({ name: z.string(), version: z.string(), path: z.string() });
4
+ const replayChange = z.object({ from: identity, to: identity });
5
+ /** npm labels replaying an exact no-save owned package as a change. */
6
+ export function normalizeOwnedPackReplay(plan, before, catalog, coreNames = new Set(catalog.packs.filter((pack) => pack.kind === "core").map((pack) => pack.npm.name))) {
7
+ const table = new Map((catalog.installPins ?? []).map((pin) => [pin.installName ?? pin.name, pin]));
8
+ const excluded = new Set([
9
+ ...coreNames,
10
+ ...(catalog.installPins ?? []).filter((pin) => pin.shared).map((pin) => pin.name),
11
+ ...Object.values(RUNTIME_NPM_PACKAGES).flatMap((group) => group.packageNames),
12
+ ...Object.values(RUNTIME_NPM_PACKAGES).flatMap((group) => group.packageNames.map((name) => table.get(name)?.name).filter((name) => name !== undefined))
13
+ ]);
14
+ const owned = new Map();
15
+ for (const pack of catalog.packs) {
16
+ if (pack.kind !== "node-pack") {
17
+ continue;
18
+ }
19
+ for (const pin of [pack.npm, ...pack.provides.map((name) => table.get(name)).filter((pin) => pin !== undefined)]) {
20
+ if (!excluded.has(pin.name)) {
21
+ owned.set(pin.name, pin);
22
+ }
23
+ }
24
+ }
25
+ const paths = new Map(before.map((entry) => [entry.realPath, entry]));
26
+ const byName = new Map();
27
+ for (const entry of before) {
28
+ const entries = byName.get(entry.name) ?? [];
29
+ entries.push(entry);
30
+ byName.set(entry.name, entries);
31
+ }
32
+ const change = plan.change.filter((raw) => {
33
+ const text = z.string().safeParse(raw);
34
+ if (text.success) {
35
+ const match = /^change (\S+) (\S+) => (\S+)$/.exec(text.data);
36
+ if (!match || match[2] !== match[3]) {
37
+ return true;
38
+ }
39
+ const pin = owned.get(match[1]);
40
+ const entries = byName.get(match[1]);
41
+ if (!pin || entries?.length !== 1) {
42
+ return true;
43
+ }
44
+ const previous = entries[0];
45
+ const folder = pin.installName ?? pin.name;
46
+ return previous.path !== `node_modules/${folder}` || !previous.realPath.replaceAll("\\", "/").endsWith(`/node_modules/${folder}`) ||
47
+ !previous.integrity || previous.integrity !== pin.integrity || previous.version !== match[2] ||
48
+ pin.version !== catalog.coreVersion || match[2] !== catalog.coreVersion;
49
+ }
50
+ const parsed = replayChange.safeParse(raw);
51
+ if (!parsed.success) {
52
+ return true;
53
+ }
54
+ const { from, to } = parsed.data;
55
+ if (from.name !== to.name || from.version !== to.version || from.path !== to.path) {
56
+ return true;
57
+ }
58
+ const pin = owned.get(from.name);
59
+ const previous = paths.get(from.path);
60
+ if (!pin || !previous || !previous.integrity || previous.integrity !== pin.integrity || previous.name !== from.name ||
61
+ previous.version !== from.version || pin.version !== catalog.coreVersion || from.version !== catalog.coreVersion) {
62
+ return true;
63
+ }
64
+ return false;
65
+ });
66
+ return { ...plan, change };
67
+ }
68
+ //# sourceMappingURL=owned-replay-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owned-replay-plan.js","sourceRoot":"","sources":["../../src/packs/owned-replay-plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { type InstallPacksRequest, type InstallSelection } from "./install-selection.js";
2
+ export interface RemovalSelection {
3
+ readonly authorization: InstallSelection;
4
+ readonly remove: readonly string[];
5
+ readonly kept: readonly string[];
6
+ readonly removePaths: ReadonlySet<string>;
7
+ readonly npmNames: readonly string[];
8
+ readonly remainingPackIds: readonly string[];
9
+ }
10
+ /** Preserve logical pack requirements and every dependency reachable from retained roots. */
11
+ export declare function preparePackRemoval(request: InstallPacksRequest): Promise<RemovalSelection>;
12
+ //# sourceMappingURL=removal-selection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"removal-selection.d.ts","sourceRoot":"","sources":["../../src/packs/removal-selection.ts"],"names":[],"mappings":"AAMA,OAAO,EAA2B,KAAK,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAElH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,aAAa,EAAE,gBAAgB,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C;AAaD,6FAA6F;AAC7F,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAsFhG"}
@@ -0,0 +1,169 @@
1
+ import { readFile, realpath } from "node:fs/promises";
2
+ import { createRequire } from "node:module";
3
+ import { join } from "node:path";
4
+ import { z } from "zod";
5
+ import { RUNTIME_NPM_PACKAGES, isRuntimeNpmPackageId } from "@nodetool-ai/protocol/runtime-npm-packages";
6
+ import { planPackRemoval } from "./management.js";
7
+ import { prepareInstallSelection } from "./install-selection.js";
8
+ const dependencySchema = z.object({ dependencies: z.record(z.string(), z.string()).optional(),
9
+ optionalDependencies: z.record(z.string(), z.string()).optional(), peerDependencies: z.record(z.string(), z.string()).optional(),
10
+ peerDependenciesMeta: z.record(z.string(), z.object({ optional: z.boolean().optional() })).optional() });
11
+ function reachable(roots, edges) {
12
+ const result = new Set();
13
+ const pending = [...roots];
14
+ while (pending.length) {
15
+ const path = pending.pop();
16
+ if (result.has(path)) {
17
+ continue;
18
+ }
19
+ result.add(path);
20
+ pending.push(...(edges.get(path) ?? []));
21
+ }
22
+ return result;
23
+ }
24
+ /** Preserve logical pack requirements and every dependency reachable from retained roots. */
25
+ export async function preparePackRemoval(request) {
26
+ const selection = await prepareInstallSelection({ ...request, packs: [], runtimeLibraries: [] });
27
+ const logical = planPackRemoval(selection.catalog, selection.installedIds, request.packs);
28
+ const requestedLibraries = [...new Set([...(request.runtimeLibraries ?? []), ...logical.runtimeLibraries])];
29
+ for (const id of requestedLibraries) {
30
+ if (!isRuntimeNpmPackageId(id)) {
31
+ throw new Error(`Unknown runtime library: ${id}`);
32
+ }
33
+ }
34
+ const byPath = new Map(selection.before.map((entry) => [entry.path, entry]));
35
+ const byRealPath = new Map(selection.before.map((entry) => [entry.realPath, entry.path]));
36
+ const edges = new Map();
37
+ const dependencies = async (directory, omit = new Set()) => {
38
+ const manifest = dependencySchema.parse(JSON.parse(await readFile(join(directory, "package.json"), "utf8")));
39
+ const peers = Object.keys(manifest.peerDependencies ?? {}).filter((name) => !manifest.peerDependenciesMeta?.[name]?.optional);
40
+ const names = [...new Set([...Object.keys({ ...manifest.dependencies, ...manifest.optionalDependencies }), ...peers])];
41
+ const resolver = createRequire(join(directory, "package.json"));
42
+ const result = [];
43
+ for (const name of names) {
44
+ if (omit.has(name)) {
45
+ continue;
46
+ }
47
+ for (const lookup of resolver.resolve.paths(name) ?? []) {
48
+ try {
49
+ const actual = await realpath(join(lookup, name));
50
+ const path = byRealPath.get(actual);
51
+ if (path) {
52
+ result.push(path);
53
+ }
54
+ break;
55
+ }
56
+ catch (error) {
57
+ if (!(error instanceof Error && "code" in error && error.code === "ENOENT")) {
58
+ throw error;
59
+ }
60
+ }
61
+ }
62
+ }
63
+ return result;
64
+ };
65
+ for (const entry of selection.before) {
66
+ edges.set(entry.path, await dependencies(entry.realPath));
67
+ }
68
+ const catalogById = new Map(selection.catalog.packs.map((pack) => [pack.id, pack]));
69
+ const ownerRoots = new Map();
70
+ for (const id of logical.remove) {
71
+ const pack = catalogById.get(id);
72
+ ownerRoots.set(id, [pack.npm.name, ...pack.provides].map((name) => `node_modules/${name}`).filter((path) => byPath.has(path)));
73
+ }
74
+ const installedIds = new Set(selection.installedIds);
75
+ for (const id of request.packs) {
76
+ if (catalogById.get(id)?.kind === "node-pack" && !installedIds.has(id) && !logical.kept.includes(id)) {
77
+ ownerRoots.set(id, []);
78
+ }
79
+ }
80
+ for (const id of requestedLibraries) {
81
+ if (isRuntimeNpmPackageId(id)) {
82
+ const paths = RUNTIME_NPM_PACKAGES[id].packageNames.map((name) => `node_modules/${name}`).filter((path) => byPath.has(path));
83
+ ownerRoots.set(id, [...new Set([...(ownerRoots.get(id) ?? []), ...paths])]);
84
+ }
85
+ }
86
+ const requestedRoots = new Set([...ownerRoots.values()].flat());
87
+ const targetClosure = reachable(requestedRoots, edges);
88
+ const requestedNames = new Set([...requestedRoots].map((path) => path.slice("node_modules/".length)));
89
+ const protectedRoots = new Set(await dependencies(selection.root, selection.mode === "global" ? new Set() : requestedNames));
90
+ if (request.mode.cliRoot !== selection.root) {
91
+ for (const path of await dependencies(request.mode.cliRoot)) {
92
+ protectedRoots.add(path);
93
+ }
94
+ }
95
+ const nodePackNames = new Set(selection.catalog.packs.filter((pack) => pack.kind === "node-pack").flatMap((pack) => [pack.npm.name, ...pack.provides]));
96
+ for (const entry of selection.before) {
97
+ const topLevel = !entry.path.slice("node_modules/".length).includes("/node_modules/");
98
+ if ((entry.name.startsWith("@nodetool-ai/") && !nodePackNames.has(entry.name)) || (topLevel && !targetClosure.has(entry.path))) {
99
+ protectedRoots.add(entry.path);
100
+ }
101
+ }
102
+ for (const id of logical.remaining) {
103
+ const pack = catalogById.get(id);
104
+ for (const name of [pack.npm.name, ...pack.provides]) {
105
+ const path = `node_modules/${name}`;
106
+ if (byPath.has(path)) {
107
+ protectedRoots.add(path);
108
+ }
109
+ }
110
+ for (const library of pack.runtimeLibraries) {
111
+ if (isRuntimeNpmPackageId(library)) {
112
+ for (const name of RUNTIME_NPM_PACKAGES[library].packageNames) {
113
+ const path = `node_modules/${name}`;
114
+ if (byPath.has(path)) {
115
+ protectedRoots.add(path);
116
+ }
117
+ }
118
+ }
119
+ }
120
+ }
121
+ const wantedLibraries = new Set(requestedLibraries);
122
+ for (const id of selection.runtimeLibraries) {
123
+ if (!wantedLibraries.has(id) && isRuntimeNpmPackageId(id)) {
124
+ for (const name of RUNTIME_NPM_PACKAGES[id].packageNames) {
125
+ const path = `node_modules/${name}`;
126
+ if (byPath.has(path)) {
127
+ protectedRoots.add(path);
128
+ }
129
+ }
130
+ }
131
+ }
132
+ const kept = new Set(logical.kept);
133
+ let protectedPaths = reachable(protectedRoots, edges);
134
+ while (true) {
135
+ const protectedAncestors = new Set();
136
+ for (const path of protectedPaths) {
137
+ let prefix = "";
138
+ for (const segment of path.split("/")) {
139
+ prefix = prefix ? `${prefix}/${segment}` : segment;
140
+ protectedAncestors.add(prefix);
141
+ }
142
+ }
143
+ let changed = false;
144
+ for (const [id, paths] of ownerRoots) {
145
+ if (kept.has(id)) {
146
+ continue;
147
+ }
148
+ if (paths.some((path) => protectedAncestors.has(path))) {
149
+ kept.add(id);
150
+ for (const path of paths) {
151
+ protectedRoots.add(path);
152
+ }
153
+ changed = true;
154
+ }
155
+ }
156
+ if (!changed) {
157
+ break;
158
+ }
159
+ protectedPaths = reachable(protectedRoots, edges);
160
+ }
161
+ const remove = [...ownerRoots.keys()].filter((id) => !kept.has(id)).sort();
162
+ const removePaths = new Set([...reachable(remove.flatMap((id) => ownerRoots.get(id) ?? []), edges)].filter((path) => !protectedPaths.has(path)));
163
+ const npmNames = [...new Set(remove.flatMap((id) => ownerRoots.get(id) ?? []).map((path) => path.slice("node_modules/".length)))];
164
+ const authorization = { ...selection, packs: [...new Map([...selection.packs, ...request.packs.map((id) => catalogById.get(id)).filter((pack) => pack !== undefined)].map((pack) => [pack.id, pack])).values()],
165
+ runtimeLibraries: [...new Set([...selection.runtimeLibraries, ...requestedLibraries])].sort(), scripts: [], mutationPaths: [...removePaths] };
166
+ return { authorization, remove, kept: [...kept].sort(), removePaths, npmNames,
167
+ remainingPackIds: selection.installedIds.filter((id) => !remove.includes(id)) };
168
+ }
169
+ //# sourceMappingURL=removal-selection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"removal-selection.js","sourceRoot":"","sources":["../../src/packs/removal-selection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { type InstallAuthorization } from "../commands/pack-install-authorization.js";
2
+ import { type InstallerOperations } from "./installer.js";
3
+ import type { InstallPacksRequest, DesiredPackState } from "./install-selection.js";
4
+ export interface PackRemovalResult {
5
+ readonly desired: DesiredPackState;
6
+ readonly removed: readonly string[];
7
+ readonly kept: readonly string[];
8
+ readonly restartRequired: true;
9
+ }
10
+ /** Explicit removal mutates only packages exclusively owned by its authorized IDs. */
11
+ export declare function removePacks(request: InstallPacksRequest, authorization: InstallAuthorization, operations?: InstallerOperations): Promise<PackRemovalResult>;
12
+ //# sourceMappingURL=removal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"removal.d.ts","sourceRoot":"","sources":["../../src/packs/removal.ts"],"names":[],"mappings":"AAIA,OAAO,EAAmE,KAAK,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACvJ,OAAO,EAAgC,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAOpF,MAAM,WAAW,iBAAiB;IAAG,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAA;CAAE;AA0BhL,sFAAsF;AACtF,wBAAsB,WAAW,CAAC,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,oBAAoB,EAAE,UAAU,GAAE,mBAAkD,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAiE/L"}