@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
@@ -1,4 +1,5 @@
1
- import { printCommandError } from "../command-errors.js";
1
+ import { printCommandError, commandMissingRuntime, commandMissingPack } from "../command-errors.js";
2
+ import { installMissingPacksAndReexec } from "./install-missing-packs.js";
2
3
  export function registerNodeCommands(program) {
3
4
  const node = program
4
5
  .command("node")
@@ -9,6 +10,7 @@ export function registerNodeCommands(program) {
9
10
  .option("--props <json>", "JSON object of property values keyed by @prop name", "{}")
10
11
  .option("--no-secrets", "Don't resolve secrets/assets (hermetic run)")
11
12
  .option("--json", "Print the full run result as JSON")
13
+ .option("--install-missing", "Authorize missing node pack installation, then re-execute once")
12
14
  .action(async (nodeType, opts) => {
13
15
  try {
14
16
  const { runSingleNode } = await import("../node/run-node.js");
@@ -42,6 +44,13 @@ export function registerNodeCommands(program) {
42
44
  runOptions.secretResolver = secretResolver;
43
45
  }
44
46
  const result = await runSingleNode(nodeType, runOptions);
47
+ if (!result.ok && (commandMissingRuntime(result) || commandMissingPack(result))) {
48
+ const exit = await installMissingPacksAndReexec(result, { command: "node-run", installMissing: opts.installMissing });
49
+ if (exit !== null) {
50
+ process.exit(exit);
51
+ }
52
+ process.exit(printCommandError(result, opts.json));
53
+ }
45
54
  const { printRunJson, previewJson } = await import("../run-json.js");
46
55
  if (opts.json) {
47
56
  await printRunJson(result);
@@ -64,8 +73,11 @@ export function registerNodeCommands(program) {
64
73
  process.exit(result.ok ? 0 : 1);
65
74
  }
66
75
  catch (e) {
67
- printCommandError(e, opts.json);
68
- process.exit(1);
76
+ const exit = await installMissingPacksAndReexec(e, { command: "node-run", installMissing: opts.installMissing });
77
+ if (exit !== null) {
78
+ process.exit(exit);
79
+ }
80
+ process.exit(printCommandError(e, opts.json));
69
81
  }
70
82
  });
71
83
  }
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/commands/node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/commands/node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { type InstallSelection, type InstallPacksRequest } from "../packs/install-selection.js";
2
+ declare const AUTHORIZATION: unique symbol;
3
+ export interface InstallAuthorization {
4
+ readonly [AUTHORIZATION]: true;
5
+ }
6
+ export type InstallCommandContext = "packs-add" | "packs-restore" | "packs-remove" | "packs-repair" | "run" | "debug" | "node-run" | "workflows-run" | "serve" | "mcp-serve" | "headless-job" | "chat" | "agent-tool";
7
+ export type InstallAuthorizationSource = "explicit" | "flag" | "environment" | "prompt";
8
+ interface AuthorizedScope {
9
+ readonly requestedPacks: ReadonlySet<string>;
10
+ readonly requestedLibraries: ReadonlySet<string>;
11
+ readonly operation: "install" | "remove" | "repair";
12
+ readonly source: InstallAuthorizationSource;
13
+ readonly root: string;
14
+ readonly coreVersion: string;
15
+ readonly mode: InstallSelection["mode"];
16
+ readonly packs: ReadonlySet<string>;
17
+ readonly libraries: ReadonlySet<string>;
18
+ readonly scripts: ReadonlySet<string>;
19
+ readonly bootstrap: ReadonlySet<string>;
20
+ readonly mutationPaths: ReadonlySet<string>;
21
+ }
22
+ export declare function installPromptMessage(selection: InstallSelection): string;
23
+ /** Only this CLI command module constructs live authorizations. JSON cannot reproduce one. */
24
+ export declare function authorizePackInstallCommand(options: {
25
+ readonly request: InstallPacksRequest;
26
+ readonly command: InstallCommandContext;
27
+ readonly installMissing?: boolean;
28
+ readonly confirm?: boolean;
29
+ readonly prompt?: (options: {
30
+ message: string;
31
+ default: false;
32
+ }) => Promise<boolean>;
33
+ }): Promise<InstallAuthorization | null>;
34
+ export declare function assertLiveInstallAuthorization(value: InstallAuthorization): void;
35
+ export declare class StaleInstallAuthorizationError extends Error {
36
+ constructor();
37
+ }
38
+ export declare function assertInstallAuthorizationScope(value: InstallAuthorization, selection: InstallSelection, operation?: AuthorizedScope["operation"], request?: InstallPacksRequest): void;
39
+ export {};
40
+ //# sourceMappingURL=pack-install-authorization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack-install-authorization.d.ts","sourceRoot":"","sources":["../../src/commands/pack-install-authorization.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,KAAK,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAIzH,QAAA,MAAM,aAAa,eAAsC,CAAC;AAC1D,MAAM,WAAW,oBAAoB;IAAG,QAAQ,CAAC,CAAC,aAAa,CAAC,EAAE,IAAI,CAAA;CAAE;AACxE,MAAM,MAAM,qBAAqB,GAAG,WAAW,GAAG,eAAe,GAAG,cAAc,GAAG,cAAc,GAAG,KAAK,GAAG,OAAO,GAAG,UAAU,GAAG,eAAe,GAClJ,OAAO,GAAG,WAAW,GAAG,cAAc,GAAG,MAAM,GAAG,YAAY,CAAC;AACjE,MAAM,MAAM,0BAA0B,GAAG,UAAU,GAAG,MAAM,GAAG,aAAa,GAAG,QAAQ,CAAC;AACxF,UAAU,eAAe;IACvB,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACpD,QAAQ,CAAC,MAAM,EAAE,0BAA0B,CAAC;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC7C;AAID,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,gBAAgB,GAAG,MAAM,CAmBxE;AAED,8FAA8F;AAC9F,wBAAsB,2BAA2B,CAAC,OAAO,EAAE;IACzD,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC;IACxC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,KAAK,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACtF,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CA0BvC;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAGhF;AACD,qBAAa,8BAA+B,SAAQ,KAAK;IACvD,cAAmK;CACpK;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS,GAAE,eAAe,CAAC,WAAW,CAAa,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAmClM"}
@@ -0,0 +1,131 @@
1
+ import { RUNTIME_NPM_PACKAGES, isRuntimeNpmPackageId } from "@nodetool-ai/protocol/runtime-npm-packages";
2
+ import { prepareInstallSelection } from "../packs/install-selection.js";
3
+ import { assertPackInstallProcessAllowed } from "../packs/install-process.js";
4
+ import { preparePackRemoval } from "../packs/removal-selection.js";
5
+ const AUTHORIZATION = Symbol("CLI install authorization");
6
+ const issued = new WeakMap();
7
+ const runCommands = new Set(["run", "debug", "node-run", "workflows-run"]);
8
+ export function installPromptMessage(selection) {
9
+ const lines = ["Install these NodeTool packages?"];
10
+ for (const pack of selection.packs) {
11
+ lines.push(`Pack ${pack.id}: ${pack.npm.name}@${pack.npm.version}, estimated ${pack.installBytes.toLocaleString("en-US")} bytes`);
12
+ }
13
+ for (const id of selection.runtimeLibraries) {
14
+ const versions = isRuntimeNpmPackageId(id) ? RUNTIME_NPM_PACKAGES[id].npmPackages.join(", ") : "unknown version";
15
+ const pins = isRuntimeNpmPackageId(id) ? RUNTIME_NPM_PACKAGES[id].packageNames.map((name) => selection.catalog.installPins?.find((pin) => (pin.installName ?? pin.name) === name)) : [];
16
+ const bytes = pins.length && pins.every((pin) => pin?.installBytes !== undefined)
17
+ ? pins.reduce((sum, pin) => sum + pin.installBytes, 0) : undefined;
18
+ lines.push(`Runtime ${id}: ${versions}, ${bytes === undefined ? "separate size estimate unavailable" : `estimated ${bytes.toLocaleString("en-US")} bytes`}`);
19
+ }
20
+ if (selection.bootstrap?.length) {
21
+ lines.push("This initial global install has no integrity record. These exact release packages will be reinstalled with scripts disabled to verify integrity:");
22
+ for (const pin of selection.bootstrap) {
23
+ lines.push(`${pin.name}@${pin.version} (${pin.installPath})`);
24
+ }
25
+ }
26
+ lines.push("Estimates can overlap through shared dependencies and exclude files generated by rebuilds. They are not final disk usage.");
27
+ lines.push(selection.scripts.length ? `Install scripts: ${selection.scripts.map((pin) => `${pin.name}@${pin.version}`).join(", ")}` : "Install scripts: none");
28
+ if (selection.mode === "local") {
29
+ lines.push("Updates local package.json and package-lock.json.");
30
+ }
31
+ return lines.join("\n");
32
+ }
33
+ /** Only this CLI command module constructs live authorizations. JSON cannot reproduce one. */
34
+ export async function authorizePackInstallCommand(options) {
35
+ assertPackInstallProcessAllowed();
36
+ let source;
37
+ if (options.command === "packs-add" || options.command === "packs-restore" || options.command === "packs-remove" || options.command === "packs-repair") {
38
+ source = "explicit";
39
+ }
40
+ else if (!runCommands.has(options.command)) {
41
+ return null;
42
+ }
43
+ else if (options.installMissing) {
44
+ source = "flag";
45
+ }
46
+ else if (process.env["NODETOOL_AUTO_INSTALL"] === "1") {
47
+ source = "environment";
48
+ }
49
+ else {
50
+ if (!process.stdin.isTTY || !process.stderr.isTTY || process.env["CI"] !== undefined) {
51
+ return null;
52
+ }
53
+ source = "prompt";
54
+ }
55
+ const operation = options.command === "packs-remove" ? "remove" : options.command === "packs-repair" ? "repair" : "install";
56
+ const selection = operation === "remove" ? (await preparePackRemoval(options.request)).authorization :
57
+ await prepareInstallSelection(options.request, operation === "repair" ? { allowDirty: true, restoreDesired: true } : {});
58
+ if (source === "prompt" || options.confirm) {
59
+ if (!process.stdin.isTTY || !process.stderr.isTTY || process.env["CI"] !== undefined) {
60
+ throw new Error("Use --yes to confirm a node pack install in a non-interactive terminal");
61
+ }
62
+ const prompt = options.prompt ?? (await import("@inquirer/prompts")).confirm;
63
+ if (!await prompt({ message: installPromptMessage(selection), default: false })) {
64
+ return null;
65
+ }
66
+ }
67
+ const value = Object.freeze({ [AUTHORIZATION]: true });
68
+ issued.set(value, { requestedPacks: new Set(options.request.packs), requestedLibraries: new Set(options.request.runtimeLibraries ?? []), operation, source, root: selection.root, coreVersion: selection.coreVersion, mode: selection.mode,
69
+ packs: new Set(selection.packs.map((pack) => pack.id)), libraries: new Set(selection.runtimeLibraries),
70
+ scripts: new Set(selection.scripts.map((pin) => JSON.stringify({ name: pin.name, version: pin.version, integrity: pin.integrity }))),
71
+ bootstrap: new Set((selection.bootstrap ?? []).map(pin => JSON.stringify(pin))),
72
+ mutationPaths: new Set(selection.mutationPaths ?? []) });
73
+ return value;
74
+ }
75
+ export function assertLiveInstallAuthorization(value) {
76
+ assertPackInstallProcessAllowed();
77
+ if (!issued.has(value)) {
78
+ throw new Error("Installing node packs requires a live CLI command authorization");
79
+ }
80
+ }
81
+ export class StaleInstallAuthorizationError extends Error {
82
+ constructor() { super("Installed packs changed while this command waited. A fresh CLI authorization is required."); this.name = "StaleInstallAuthorizationError"; }
83
+ }
84
+ export function assertInstallAuthorizationScope(value, selection, operation = "install", request) {
85
+ assertLiveInstallAuthorization(value);
86
+ const scope = issued.get(value);
87
+ if (scope.operation !== operation) {
88
+ throw new Error(`Install authorization cannot authorize ${operation}`);
89
+ }
90
+ if (scope.root !== selection.root || scope.coreVersion !== selection.coreVersion || scope.mode !== selection.mode) {
91
+ throw new Error("Install authorization does not match the install root, mode, or core version");
92
+ }
93
+ if ((selection.bootstrap ?? []).some(pin => !scope.bootstrap.has(JSON.stringify(pin)))) {
94
+ throw new Error("Global integrity bootstrap is outside the install authorization");
95
+ }
96
+ // A concurrent command can expand npm replay. The old token stays invalid.
97
+ // Only unchanged direct requests may ask the command layer for a new grant.
98
+ const extraPacks = selection.packs.filter(pack => !scope.packs.has(pack.id));
99
+ const extraLibraries = selection.runtimeLibraries.filter(id => !scope.libraries.has(id));
100
+ const extraScripts = selection.scripts.filter(pin => !scope.scripts.has(JSON.stringify({ name: pin.name, version: pin.version, integrity: pin.integrity })));
101
+ if (operation === "install" && request &&
102
+ new Set(request.packs).size === scope.requestedPacks.size && request.packs.every(id => scope.requestedPacks.has(id)) &&
103
+ new Set(request.runtimeLibraries ?? []).size === scope.requestedLibraries.size && (request.runtimeLibraries ?? []).every(id => scope.requestedLibraries.has(id)) &&
104
+ (extraPacks.length > 0 || extraLibraries.length > 0) &&
105
+ extraPacks.every(pack => selection.installedIds.includes(pack.id)) &&
106
+ extraLibraries.every(id => selection.replayLibraries.includes(id)) &&
107
+ extraScripts.every(pin => extraPacks.some(pack => pack.scriptAllowlist.some(script => script.name === pin.name && script.version === pin.version && script.integrity === pin.integrity)))) {
108
+ throw new StaleInstallAuthorizationError();
109
+ }
110
+ for (const pack of selection.packs) {
111
+ if (!scope.packs.has(pack.id)) {
112
+ throw new Error(`Pack ${pack.id} is outside the install authorization`);
113
+ }
114
+ }
115
+ for (const id of selection.runtimeLibraries) {
116
+ if (!scope.libraries.has(id)) {
117
+ throw new Error(`Runtime library ${id} is outside the install authorization`);
118
+ }
119
+ }
120
+ for (const pin of selection.scripts) {
121
+ if (!scope.scripts.has(JSON.stringify({ name: pin.name, version: pin.version, integrity: pin.integrity }))) {
122
+ throw new Error(`Install script ${pin.name}@${pin.version} is outside the install authorization`);
123
+ }
124
+ }
125
+ for (const path of selection.mutationPaths ?? []) {
126
+ if (!scope.mutationPaths.has(path)) {
127
+ throw new Error(`Removal path ${path} is outside the install authorization`);
128
+ }
129
+ }
130
+ }
131
+ //# sourceMappingURL=pack-install-authorization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack-install-authorization.js","sourceRoot":"","sources":["../../src/commands/pack-install-authorization.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { Command } from "commander";
2
+ import type { PackListRow } from "../packs/management.js";
3
+ export interface PackAddOptions {
4
+ readonly yes?: boolean;
5
+ readonly restore?: boolean;
6
+ readonly for?: string;
7
+ }
8
+ export interface PackDoctorOptions {
9
+ readonly installed?: boolean;
10
+ readonly json?: boolean;
11
+ readonly repair?: boolean;
12
+ readonly pack?: string[];
13
+ }
14
+ export interface PackCommandServices {
15
+ list(): Promise<readonly PackListRow[]>;
16
+ add(ids: readonly string[], options: PackAddOptions): Promise<void>;
17
+ remove(ids: readonly string[]): Promise<void>;
18
+ doctor(options: PackDoctorOptions): Promise<{
19
+ readonly healthy: boolean;
20
+ readonly [key: string]: unknown;
21
+ }>;
22
+ why(target: string): Promise<Record<string, unknown>>;
23
+ }
24
+ /** Register the command shape without reading the installed tree or constructing an installer. */
25
+ export declare function registerPackManagementCommands(packs: Command, loadServices: () => Promise<PackCommandServices>): void;
26
+ //# sourceMappingURL=pack-management.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack-management.d.ts","sourceRoot":"","sources":["../../src/commands/pack-management.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,MAAM,WAAW,cAAc;IAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE;AAC7G,MAAM,WAAW,iBAAiB;IAAG,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE;AACjJ,MAAM,WAAW,mBAAmB;IAClC,IAAI,IAAI,OAAO,CAAC,SAAS,WAAW,EAAE,CAAC,CAAC;IACxC,GAAG,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,MAAM,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC;QAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,CAAC;IAC5G,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvD;AAED,kGAAkG;AAClG,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI,CA4CrH"}
@@ -0,0 +1,74 @@
1
+ import { printCommandError } from "../command-errors.js";
2
+ import { printTable } from "./output.js";
3
+ /** Register the command shape without reading the installed tree or constructing an installer. */
4
+ export function registerPackManagementCommands(packs, loadServices) {
5
+ packs.command("list").description("List available and installed node packs and runtime libraries")
6
+ .option("--json", "Print the installed catalog report as JSON")
7
+ .action(async (options) => {
8
+ try {
9
+ const rows = await (await loadServices()).list();
10
+ if (options.json) {
11
+ console.log(JSON.stringify(rows, null, 2));
12
+ }
13
+ else {
14
+ printTable(rows.map(row => ({ id: row.id, kind: row.kind, installed: row.installed, version: row.version,
15
+ bytes: row.installBytes, nodes: row.nodeCount, required_by: row.requiredBy.join(", ") })));
16
+ }
17
+ }
18
+ catch (error) {
19
+ process.exitCode = printCommandError(error, options.json);
20
+ }
21
+ });
22
+ packs.command("add [ids...]").description("Install node packs or runtime libraries and their requirements")
23
+ .option("--yes", "Confirm the install without prompting")
24
+ .option("--restore", "Restore the desired set recorded for this install root")
25
+ .option("--for <workflow|file>", "Install every pack needed by a saved workflow or an explicitly named local workflow file")
26
+ .action(async (ids, options) => {
27
+ try {
28
+ const selections = Number(ids.length > 0) + Number(Boolean(options.restore)) + Number(Boolean(options.for));
29
+ if (selections !== 1) {
30
+ throw new Error("Choose pack ids, --restore, or --for <workflow|file>");
31
+ }
32
+ await (await loadServices()).add(ids, options);
33
+ }
34
+ catch (error) {
35
+ process.exitCode = printCommandError(error);
36
+ }
37
+ });
38
+ packs.command("remove <ids...>").description("Remove node packs while retaining requirements of installed packs")
39
+ .action(async (ids) => {
40
+ try {
41
+ await (await loadServices()).remove(ids);
42
+ }
43
+ catch (error) {
44
+ process.exitCode = printCommandError(error);
45
+ }
46
+ });
47
+ packs.command("doctor").description("Check the install mode, versions, integrity, shared copies and registration")
48
+ .option("--json", "Print the diagnostic report as JSON")
49
+ .option("--installed", "Register installed packs in a fresh child process")
50
+ .option("--pack <ids...>", "Limit registration checks to these pack ids")
51
+ .option("--repair", "Verify and repair a dirty pack installation")
52
+ .action(async (options) => {
53
+ try {
54
+ const report = await (await loadServices()).doctor(options);
55
+ console.log(JSON.stringify(report, null, 2));
56
+ if (!report.healthy) {
57
+ process.exitCode = 1;
58
+ }
59
+ }
60
+ catch (error) {
61
+ process.exitCode = printCommandError(error, options.json);
62
+ }
63
+ });
64
+ packs.command("why <node_type|id>").description("Explain a node owner, pack requirements or runtime library")
65
+ .action(async (target) => {
66
+ try {
67
+ console.log(JSON.stringify(await (await loadServices()).why(target), null, 2));
68
+ }
69
+ catch (error) {
70
+ process.exitCode = printCommandError(error);
71
+ }
72
+ });
73
+ }
74
+ //# sourceMappingURL=pack-management.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack-management.js","sourceRoot":"","sources":["../../src/commands/pack-management.ts"],"names":[],"mappings":"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"}
@@ -9,5 +9,6 @@
9
9
  * cache answered.
10
10
  */
11
11
  import type { Command } from "commander";
12
- export declare function registerPackCommands(program: Command): void;
12
+ import { type PackCommandServices } from "./pack-management.js";
13
+ export declare function registerPackCommands(program: Command, loadServices?: () => Promise<PackCommandServices>): void;
13
14
  //# sourceMappingURL=packs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"packs.d.ts","sourceRoot":"","sources":["../../src/commands/packs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6E3D"}
1
+ {"version":3,"file":"packs.d.ts","sourceRoot":"","sources":["../../src/commands/packs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAkC,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAQhG,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,GAAE,MAAM,OAAO,CAAC,mBAAmB,CAGrG,GAAG,IAAI,CA8EP"}
@@ -8,8 +8,12 @@
8
8
  * cache — and it prints one line per module with the outcome and whether the
9
9
  * cache answered.
10
10
  */
11
- export function registerPackCommands(program) {
12
- const packs = program.command("packs").description("Sandbox pack tooling");
11
+ import { registerPackManagementCommands } from "./pack-management.js";
12
+ export function registerPackCommands(program, loadServices = async () => {
13
+ const { createPackCommandServices } = await import("../packs/command-service.js");
14
+ return createPackCommandServices();
15
+ }) {
16
+ const packs = program.command("packs").description("Manage node packs, runtime libraries and sandbox compilation");
13
17
  packs
14
18
  .command("compile")
15
19
  .description("Compile every npm-backed sandbox module of every installed pack")
@@ -56,5 +60,6 @@ export function registerPackCommands(program) {
56
60
  if (skipped > 0)
57
61
  process.exitCode = 1;
58
62
  });
63
+ registerPackManagementCommands(packs, loadServices);
59
64
  }
60
65
  //# sourceMappingURL=packs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"packs.js","sourceRoot":"","sources":["../../src/commands/packs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"packs.js","sourceRoot":"","sources":["../../src/commands/packs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * `nodetool projects` — list projects and move whole projects between
3
+ * installs as `.nodetool-project` files.
4
+ *
5
+ * Runs in-process against the local database, asset store, and workspaces, the
6
+ * same ones the local server uses. `export` writes what the server's
7
+ * `GET /api/projects/:id/export` streams, and `import` reads what it accepts.
8
+ */
9
+ import type { Command } from "commander";
10
+ export declare function registerProjectCommands(program: Command): void;
11
+ //# sourceMappingURL=projects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/commands/projects.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAezC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuJ9D"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * `nodetool projects` — list projects and move whole projects between
3
+ * installs as `.nodetool-project` files.
4
+ *
5
+ * Runs in-process against the local database, asset store, and workspaces, the
6
+ * same ones the local server uses. `export` writes what the server's
7
+ * `GET /api/projects/:id/export` streams, and `import` reads what it accepts.
8
+ */
9
+ import { createWriteStream } from "node:fs";
10
+ import { readFile } from "node:fs/promises";
11
+ import { once } from "node:events";
12
+ import { Project } from "@nodetool-ai/models";
13
+ import { asJson, printTable } from "./output.js";
14
+ import { setupLocalDb, LOCAL_USER_ID } from "./local-db.js";
15
+ function fail(e) {
16
+ console.error(String(e instanceof Error ? e.message : e));
17
+ process.exit(1);
18
+ }
19
+ function fileBase(name) {
20
+ return (name || "project").replace(/[^A-Za-z0-9._-]+/g, "_") || "project";
21
+ }
22
+ export function registerProjectCommands(program) {
23
+ const projects = program
24
+ .command("projects")
25
+ .description("List, export, and import projects");
26
+ projects
27
+ .command("list")
28
+ .description("List projects, newest first")
29
+ .option("--archived", "List archived projects instead")
30
+ .option("--json", "Output as JSON")
31
+ .action(async (opts) => {
32
+ try {
33
+ await setupLocalDb();
34
+ const rows = await Project.listByUser(LOCAL_USER_ID, 1000, opts.archived ?? false);
35
+ if (opts.json) {
36
+ asJson(rows.map((row) => row.toResponse()));
37
+ return;
38
+ }
39
+ printTable(rows.map((row) => ({
40
+ id: row.id,
41
+ name: row.name,
42
+ kind: row.kind,
43
+ updated: row.updated_at
44
+ })));
45
+ }
46
+ catch (e) {
47
+ fail(e);
48
+ }
49
+ });
50
+ projects
51
+ .command("export <project_id>")
52
+ .description("Write a project with all of its documents, workflows, chats, assets, " +
53
+ "and workspace files to a .nodetool-project file")
54
+ .option("-o, --output <file>", "Output path (default: <name>.nodetool-project)")
55
+ .option("--json", "Print the manifest as JSON")
56
+ .action(async (projectId, opts) => {
57
+ try {
58
+ await setupLocalDb();
59
+ const { projectArchiveHost, streamZip, writeProjectArchive, PROJECT_ARCHIVE_EXTENSION } = await import("@nodetool-ai/websocket");
60
+ const project = await Project.findOwned(LOCAL_USER_ID, projectId);
61
+ if (!project)
62
+ throw new Error(`Project not found: ${projectId}`);
63
+ const outPath = opts.output ?? `${fileBase(project.name)}${PROJECT_ARCHIVE_EXTENSION}`;
64
+ const host = projectArchiveHost();
65
+ let manifest = null;
66
+ const zip = streamZip(async (writer) => {
67
+ manifest = await writeProjectArchive({
68
+ userId: LOCAL_USER_ID,
69
+ projectId: project.id,
70
+ storage: host.storage,
71
+ openWorkspace: host.openWorkspace
72
+ }, writer);
73
+ });
74
+ const out = createWriteStream(outPath);
75
+ zip.pipe(out);
76
+ await Promise.race([
77
+ once(out, "finish"),
78
+ once(zip, "error").then(([error]) => {
79
+ throw error;
80
+ })
81
+ ]);
82
+ const written = manifest;
83
+ if (!written)
84
+ throw new Error("Export wrote no manifest");
85
+ for (const skip of written.skipped) {
86
+ console.error(` warning: skipped ${skip.kind} ${skip.id}: ${skip.reason}`);
87
+ }
88
+ if (opts.json) {
89
+ asJson({ file: outPath, manifest: written });
90
+ return;
91
+ }
92
+ const counts = Object.entries(written.counts)
93
+ .filter(([, n]) => n > 0)
94
+ .map(([table, n]) => `${n} ${table}`)
95
+ .join(", ");
96
+ console.error(` exported ${counts || "an empty project"}; ` +
97
+ `${written.assets.length} asset file(s), ` +
98
+ `${written.workspace_files.length} workspace file(s)`);
99
+ console.log(outPath);
100
+ }
101
+ catch (e) {
102
+ fail(e);
103
+ }
104
+ });
105
+ projects
106
+ .command("import <file>")
107
+ .description("Import a .nodetool-project file as a new project")
108
+ .option("--name <name>", "Name for the new project (default: the exported name)")
109
+ .option("--json", "Output the result as JSON")
110
+ .action(async (file, opts) => {
111
+ try {
112
+ await setupLocalDb();
113
+ const { importProjectArchive, projectArchiveHost } = await import("@nodetool-ai/websocket");
114
+ const result = await importProjectArchive(new Uint8Array(await readFile(file)), {
115
+ userId: LOCAL_USER_ID,
116
+ name: opts.name,
117
+ ...projectArchiveHost()
118
+ });
119
+ for (const m of result.missing) {
120
+ console.error(` warning: ${m} is listed but missing from the file`);
121
+ }
122
+ for (const m of result.checksumMismatches) {
123
+ console.error(` warning: ${m} does not match its checksum`);
124
+ }
125
+ for (const skip of result.skipped) {
126
+ console.error(` note: the export skipped ${skip.kind} ${skip.id}: ${skip.reason}`);
127
+ }
128
+ if (opts.json) {
129
+ asJson({
130
+ project: result.project.toResponse(),
131
+ counts: result.counts,
132
+ missing: result.missing,
133
+ checksum_mismatches: result.checksumMismatches,
134
+ skipped: result.skipped
135
+ });
136
+ return;
137
+ }
138
+ console.log(result.project.id);
139
+ }
140
+ catch (e) {
141
+ fail(e);
142
+ }
143
+ });
144
+ }
145
+ //# sourceMappingURL=projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/commands/projects.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"resource-read.d.ts","sourceRoot":"","sources":["../../src/commands/resource-read.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,MAAM,WAAW,gBAAgB;IAC/B,kEAAkE;IAClE,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;CACrB;AA6GD,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,EAC/D,IAAI,EAAE,gBAAgB,GACrB,IAAI,CAuPN"}
1
+ {"version":3,"file":"resource-read.d.ts","sourceRoot":"","sources":["../../src/commands/resource-read.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,MAAM,WAAW,gBAAgB;IAC/B,kEAAkE;IAClE,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;CACrB;AA6GD,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,EAC/D,IAAI,EAAE,gBAAgB,GACrB,IAAI,CAiPN"}