@nodetool-ai/cli 0.7.0-rc.23 → 0.8.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 (535) hide show
  1. package/README.md +82 -0
  2. package/dist/.nodetool-build-stamp +1 -0
  3. package/dist/ExecutionTree.d.ts +2 -1
  4. package/dist/ExecutionTree.d.ts.map +1 -1
  5. package/dist/ExecutionTree.js +1 -1
  6. package/dist/ExecutionTree.js.map +1 -1
  7. package/dist/affected/affected.d.ts +45 -0
  8. package/dist/affected/affected.d.ts.map +1 -0
  9. package/dist/affected/affected.js +160 -0
  10. package/dist/affected/affected.js.map +1 -0
  11. package/dist/agent-toolbelt.d.ts +15 -0
  12. package/dist/agent-toolbelt.d.ts.map +1 -0
  13. package/dist/agent-toolbelt.js +28 -0
  14. package/dist/agent-toolbelt.js.map +1 -0
  15. package/dist/api-client.d.ts +12 -0
  16. package/dist/api-client.d.ts.map +1 -0
  17. package/dist/api-client.js +21 -0
  18. package/dist/api-client.js.map +1 -0
  19. package/dist/app-build/bundle.d.ts +15 -0
  20. package/dist/app-build/bundle.d.ts.map +1 -0
  21. package/dist/app-build/bundle.js +45 -0
  22. package/dist/app-build/bundle.js.map +1 -0
  23. package/dist/app-build/watch.d.ts +13 -0
  24. package/dist/app-build/watch.d.ts.map +1 -0
  25. package/dist/app-build/watch.js +25 -0
  26. package/dist/app-build/watch.js.map +1 -0
  27. package/dist/app-debug/app-target.d.ts +14 -0
  28. package/dist/app-debug/app-target.d.ts.map +1 -0
  29. package/dist/app-debug/app-target.js +120 -0
  30. package/dist/app-debug/app-target.js.map +1 -0
  31. package/dist/app-debug/harness.d.ts +29 -0
  32. package/dist/app-debug/harness.d.ts.map +1 -0
  33. package/dist/app-debug/harness.js +116 -0
  34. package/dist/app-debug/harness.js.map +1 -0
  35. package/dist/app-debug/index.d.ts +12 -0
  36. package/dist/app-debug/index.d.ts.map +1 -0
  37. package/dist/app-debug/index.js +9 -0
  38. package/dist/app-debug/index.js.map +1 -0
  39. package/dist/app.d.ts +38 -48
  40. package/dist/app.d.ts.map +1 -1
  41. package/dist/app.js +980 -677
  42. package/dist/app.js.map +1 -1
  43. package/dist/bash-tool.d.ts +13 -0
  44. package/dist/bash-tool.d.ts.map +1 -0
  45. package/dist/bash-tool.js +85 -0
  46. package/dist/bash-tool.js.map +1 -0
  47. package/dist/chat-codeact.d.ts +93 -0
  48. package/dist/chat-codeact.d.ts.map +1 -0
  49. package/dist/chat-codeact.js +179 -0
  50. package/dist/chat-codeact.js.map +1 -0
  51. package/dist/chat-context.d.ts +18 -0
  52. package/dist/chat-context.d.ts.map +1 -0
  53. package/dist/chat-context.js +32 -0
  54. package/dist/chat-context.js.map +1 -0
  55. package/dist/chat-media.d.ts +3 -0
  56. package/dist/chat-media.d.ts.map +1 -0
  57. package/dist/chat-media.js +46 -0
  58. package/dist/chat-media.js.map +1 -0
  59. package/dist/chat-prompts.d.ts +20 -0
  60. package/dist/chat-prompts.d.ts.map +1 -0
  61. package/dist/chat-prompts.js +42 -0
  62. package/dist/chat-prompts.js.map +1 -0
  63. package/dist/chat-sessions.d.ts +25 -0
  64. package/dist/chat-sessions.d.ts.map +1 -0
  65. package/dist/chat-sessions.js +153 -0
  66. package/dist/chat-sessions.js.map +1 -0
  67. package/dist/command-errors.d.ts +10 -0
  68. package/dist/command-errors.d.ts.map +1 -0
  69. package/dist/command-errors.js +15 -0
  70. package/dist/command-errors.js.map +1 -0
  71. package/dist/commands/__tests__/jtbd.test.d.ts +2 -0
  72. package/dist/commands/__tests__/jtbd.test.d.ts.map +1 -0
  73. package/dist/commands/__tests__/jtbd.test.js +120 -0
  74. package/dist/commands/__tests__/jtbd.test.js.map +1 -0
  75. package/dist/commands/__tests__/timeline-render-audio.test.d.ts +2 -0
  76. package/dist/commands/__tests__/timeline-render-audio.test.d.ts.map +1 -0
  77. package/dist/commands/__tests__/timeline-render-audio.test.js +53 -0
  78. package/dist/commands/__tests__/timeline-render-audio.test.js.map +1 -0
  79. package/dist/commands/__tests__/timeline-render-completeness.test.d.ts +2 -0
  80. package/dist/commands/__tests__/timeline-render-completeness.test.d.ts.map +1 -0
  81. package/dist/commands/__tests__/timeline-render-completeness.test.js +117 -0
  82. package/dist/commands/__tests__/timeline-render-completeness.test.js.map +1 -0
  83. package/dist/commands/__tests__/timeline-render.test.d.ts +2 -0
  84. package/dist/commands/__tests__/timeline-render.test.d.ts.map +1 -0
  85. package/dist/commands/__tests__/timeline-render.test.js +115 -0
  86. package/dist/commands/__tests__/timeline-render.test.js.map +1 -0
  87. package/dist/commands/__tests__/timeline-score.test.d.ts +2 -0
  88. package/dist/commands/__tests__/timeline-score.test.d.ts.map +1 -0
  89. package/dist/commands/__tests__/timeline-score.test.js +100 -0
  90. package/dist/commands/__tests__/timeline-score.test.js.map +1 -0
  91. package/dist/commands/affected.d.ts +9 -0
  92. package/dist/commands/affected.d.ts.map +1 -0
  93. package/dist/commands/affected.js +122 -0
  94. package/dist/commands/affected.js.map +1 -0
  95. package/dist/commands/agent.d.ts +26 -4
  96. package/dist/commands/agent.d.ts.map +1 -1
  97. package/dist/commands/agent.js +328 -306
  98. package/dist/commands/agent.js.map +1 -1
  99. package/dist/commands/app.d.ts +3 -0
  100. package/dist/commands/app.d.ts.map +1 -0
  101. package/dist/commands/app.js +405 -0
  102. package/dist/commands/app.js.map +1 -0
  103. package/dist/commands/apps.d.ts +15 -0
  104. package/dist/commands/apps.d.ts.map +1 -0
  105. package/dist/commands/apps.js +180 -0
  106. package/dist/commands/apps.js.map +1 -0
  107. package/dist/commands/auth.d.ts +12 -0
  108. package/dist/commands/auth.d.ts.map +1 -0
  109. package/dist/commands/auth.js +154 -0
  110. package/dist/commands/auth.js.map +1 -0
  111. package/dist/commands/collections.d.ts +10 -0
  112. package/dist/commands/collections.d.ts.map +1 -0
  113. package/dist/commands/collections.js +257 -0
  114. package/dist/commands/collections.js.map +1 -0
  115. package/dist/commands/costs.d.ts +15 -0
  116. package/dist/commands/costs.d.ts.map +1 -0
  117. package/dist/commands/costs.js +201 -0
  118. package/dist/commands/costs.js.map +1 -0
  119. package/dist/commands/db.d.ts +3 -0
  120. package/dist/commands/db.d.ts.map +1 -0
  121. package/dist/commands/db.js +176 -0
  122. package/dist/commands/db.js.map +1 -0
  123. package/dist/commands/debug-summary-output.d.ts +22 -0
  124. package/dist/commands/debug-summary-output.d.ts.map +1 -0
  125. package/dist/commands/debug-summary-output.js +28 -0
  126. package/dist/commands/debug-summary-output.js.map +1 -0
  127. package/dist/commands/debug.d.ts +13 -0
  128. package/dist/commands/debug.d.ts.map +1 -0
  129. package/dist/commands/debug.js +138 -0
  130. package/dist/commands/debug.js.map +1 -0
  131. package/dist/commands/deploy-helpers.d.ts +49 -18
  132. package/dist/commands/deploy-helpers.d.ts.map +1 -1
  133. package/dist/commands/deploy-helpers.js +10 -276
  134. package/dist/commands/deploy-helpers.js.map +1 -1
  135. package/dist/commands/deploy.d.ts +0 -1
  136. package/dist/commands/deploy.d.ts.map +1 -1
  137. package/dist/commands/deploy.js +21 -217
  138. package/dist/commands/deploy.js.map +1 -1
  139. package/dist/commands/errors.d.ts +11 -0
  140. package/dist/commands/errors.d.ts.map +1 -0
  141. package/dist/commands/errors.js +177 -0
  142. package/dist/commands/errors.js.map +1 -0
  143. package/dist/commands/eval.d.ts +152 -0
  144. package/dist/commands/eval.d.ts.map +1 -0
  145. package/dist/commands/eval.js +690 -0
  146. package/dist/commands/eval.js.map +1 -0
  147. package/dist/commands/extension.d.ts +12 -0
  148. package/dist/commands/extension.d.ts.map +1 -0
  149. package/dist/commands/extension.js +30 -0
  150. package/dist/commands/extension.js.map +1 -0
  151. package/dist/commands/game-benchmark.d.ts +34 -0
  152. package/dist/commands/game-benchmark.d.ts.map +1 -0
  153. package/dist/commands/game-benchmark.js +95 -0
  154. package/dist/commands/game-benchmark.js.map +1 -0
  155. package/dist/commands/game-smoke.d.ts +3 -0
  156. package/dist/commands/game-smoke.d.ts.map +1 -0
  157. package/dist/commands/game-smoke.js +23 -0
  158. package/dist/commands/game-smoke.js.map +1 -0
  159. package/dist/commands/game.d.ts +4 -0
  160. package/dist/commands/game.d.ts.map +1 -0
  161. package/dist/commands/game.js +624 -0
  162. package/dist/commands/game.js.map +1 -0
  163. package/dist/commands/generate.d.ts +17 -0
  164. package/dist/commands/generate.d.ts.map +1 -0
  165. package/dist/commands/generate.js +324 -0
  166. package/dist/commands/generate.js.map +1 -0
  167. package/dist/commands/generations.d.ts +17 -0
  168. package/dist/commands/generations.d.ts.map +1 -0
  169. package/dist/commands/generations.js +408 -0
  170. package/dist/commands/generations.js.map +1 -0
  171. package/dist/commands/harness.d.ts +69 -0
  172. package/dist/commands/harness.d.ts.map +1 -0
  173. package/dist/commands/harness.js +575 -0
  174. package/dist/commands/harness.js.map +1 -0
  175. package/dist/commands/js-script-validation-output.d.ts +7 -0
  176. package/dist/commands/js-script-validation-output.d.ts.map +1 -0
  177. package/dist/commands/js-script-validation-output.js +5 -0
  178. package/dist/commands/js-script-validation-output.js.map +1 -0
  179. package/dist/commands/js-script-versions.d.ts +53 -0
  180. package/dist/commands/js-script-versions.d.ts.map +1 -0
  181. package/dist/commands/js-script-versions.js +89 -0
  182. package/dist/commands/js-script-versions.js.map +1 -0
  183. package/dist/commands/js-script.d.ts +29 -0
  184. package/dist/commands/js-script.d.ts.map +1 -0
  185. package/dist/commands/js-script.js +211 -0
  186. package/dist/commands/js-script.js.map +1 -0
  187. package/dist/commands/jtbd.d.ts +38 -0
  188. package/dist/commands/jtbd.d.ts.map +1 -0
  189. package/dist/commands/jtbd.js +261 -0
  190. package/dist/commands/jtbd.js.map +1 -0
  191. package/dist/commands/local-db.d.ts +16 -0
  192. package/dist/commands/local-db.d.ts.map +1 -0
  193. package/dist/commands/local-db.js +33 -0
  194. package/dist/commands/local-db.js.map +1 -0
  195. package/dist/commands/mcp.d.ts +21 -0
  196. package/dist/commands/mcp.d.ts.map +1 -0
  197. package/dist/commands/mcp.js +164 -0
  198. package/dist/commands/mcp.js.map +1 -0
  199. package/dist/commands/migrate-code-inputs.d.ts +24 -0
  200. package/dist/commands/migrate-code-inputs.d.ts.map +1 -0
  201. package/dist/commands/migrate-code-inputs.js +120 -0
  202. package/dist/commands/migrate-code-inputs.js.map +1 -0
  203. package/dist/commands/models-hf.js +4 -4
  204. package/dist/commands/models-hf.js.map +1 -1
  205. package/dist/commands/models-recommended.d.ts.map +1 -1
  206. package/dist/commands/models-recommended.js +16 -24
  207. package/dist/commands/models-recommended.js.map +1 -1
  208. package/dist/commands/node.d.ts +10 -0
  209. package/dist/commands/node.d.ts.map +1 -0
  210. package/dist/commands/node.js +72 -0
  211. package/dist/commands/node.js.map +1 -0
  212. package/dist/commands/output.d.ts +24 -0
  213. package/dist/commands/output.d.ts.map +1 -0
  214. package/dist/commands/output.js +132 -0
  215. package/dist/commands/output.js.map +1 -0
  216. package/dist/commands/package-helpers.d.ts +1 -7
  217. package/dist/commands/package-helpers.d.ts.map +1 -1
  218. package/dist/commands/package-helpers.js +3 -26
  219. package/dist/commands/package-helpers.js.map +1 -1
  220. package/dist/commands/package.d.ts.map +1 -1
  221. package/dist/commands/package.js +14 -14
  222. package/dist/commands/package.js.map +1 -1
  223. package/dist/commands/packs.d.ts +13 -0
  224. package/dist/commands/packs.d.ts.map +1 -0
  225. package/dist/commands/packs.js +60 -0
  226. package/dist/commands/packs.js.map +1 -0
  227. package/dist/commands/reliability.d.ts +14 -0
  228. package/dist/commands/reliability.d.ts.map +1 -0
  229. package/dist/commands/reliability.js +80 -0
  230. package/dist/commands/reliability.js.map +1 -0
  231. package/dist/commands/resource-read.d.ts +28 -0
  232. package/dist/commands/resource-read.d.ts.map +1 -0
  233. package/dist/commands/resource-read.js +316 -0
  234. package/dist/commands/resource-read.js.map +1 -0
  235. package/dist/commands/runs.d.ts +7 -0
  236. package/dist/commands/runs.d.ts.map +1 -0
  237. package/dist/commands/runs.js +302 -0
  238. package/dist/commands/runs.js.map +1 -0
  239. package/dist/commands/sketch-validation-output.d.ts +7 -0
  240. package/dist/commands/sketch-validation-output.d.ts.map +1 -0
  241. package/dist/commands/sketch-validation-output.js +5 -0
  242. package/dist/commands/sketch-validation-output.js.map +1 -0
  243. package/dist/commands/sketch-versions.d.ts +66 -0
  244. package/dist/commands/sketch-versions.d.ts.map +1 -0
  245. package/dist/commands/sketch-versions.js +108 -0
  246. package/dist/commands/sketch-versions.js.map +1 -0
  247. package/dist/commands/sketch.d.ts +21 -0
  248. package/dist/commands/sketch.d.ts.map +1 -0
  249. package/dist/commands/sketch.js +101 -0
  250. package/dist/commands/sketch.js.map +1 -0
  251. package/dist/commands/storage.d.ts +24 -0
  252. package/dist/commands/storage.d.ts.map +1 -0
  253. package/dist/commands/storage.js +112 -0
  254. package/dist/commands/storage.js.map +1 -0
  255. package/dist/commands/telegram.d.ts +11 -0
  256. package/dist/commands/telegram.d.ts.map +1 -0
  257. package/dist/commands/telegram.js +66 -0
  258. package/dist/commands/telegram.js.map +1 -0
  259. package/dist/commands/timeline-render.d.ts +85 -0
  260. package/dist/commands/timeline-render.d.ts.map +1 -0
  261. package/dist/commands/timeline-render.js +474 -0
  262. package/dist/commands/timeline-render.js.map +1 -0
  263. package/dist/commands/timeline-score.d.ts +16 -0
  264. package/dist/commands/timeline-score.d.ts.map +1 -0
  265. package/dist/commands/timeline-score.js +89 -0
  266. package/dist/commands/timeline-score.js.map +1 -0
  267. package/dist/commands/timeline-validation-output.d.ts +7 -0
  268. package/dist/commands/timeline-validation-output.d.ts.map +1 -0
  269. package/dist/commands/timeline-validation-output.js +9 -0
  270. package/dist/commands/timeline-validation-output.js.map +1 -0
  271. package/dist/commands/timeline-versions.d.ts +72 -0
  272. package/dist/commands/timeline-versions.d.ts.map +1 -0
  273. package/dist/commands/timeline-versions.js +108 -0
  274. package/dist/commands/timeline-versions.js.map +1 -0
  275. package/dist/commands/timeline.d.ts +22 -0
  276. package/dist/commands/timeline.d.ts.map +1 -0
  277. package/dist/commands/timeline.js +105 -0
  278. package/dist/commands/timeline.js.map +1 -0
  279. package/dist/commands/validate.d.ts +22 -0
  280. package/dist/commands/validate.d.ts.map +1 -0
  281. package/dist/commands/validate.js +127 -0
  282. package/dist/commands/validate.js.map +1 -0
  283. package/dist/commands/validation-output.d.ts +25 -0
  284. package/dist/commands/validation-output.d.ts.map +1 -0
  285. package/dist/commands/validation-output.js +29 -0
  286. package/dist/commands/validation-output.js.map +1 -0
  287. package/dist/commands/version-commands.d.ts +94 -0
  288. package/dist/commands/version-commands.d.ts.map +1 -0
  289. package/dist/commands/version-commands.js +227 -0
  290. package/dist/commands/version-commands.js.map +1 -0
  291. package/dist/commands/worker-models.d.ts +13 -0
  292. package/dist/commands/worker-models.d.ts.map +1 -0
  293. package/dist/commands/worker-models.js +207 -0
  294. package/dist/commands/worker-models.js.map +1 -0
  295. package/dist/commands/worker.d.ts +23 -0
  296. package/dist/commands/worker.d.ts.map +1 -0
  297. package/dist/commands/worker.js +374 -0
  298. package/dist/commands/worker.js.map +1 -0
  299. package/dist/debug/browser-runner.d.ts +21 -0
  300. package/dist/debug/browser-runner.d.ts.map +1 -0
  301. package/dist/debug/browser-runner.js +196 -0
  302. package/dist/debug/browser-runner.js.map +1 -0
  303. package/dist/debug/collector.d.ts +9 -0
  304. package/dist/debug/collector.d.ts.map +1 -0
  305. package/dist/debug/collector.js +9 -0
  306. package/dist/debug/collector.js.map +1 -0
  307. package/dist/debug/diff.d.ts +48 -0
  308. package/dist/debug/diff.d.ts.map +1 -0
  309. package/dist/debug/diff.js +68 -0
  310. package/dist/debug/diff.js.map +1 -0
  311. package/dist/debug/harness.d.ts +11 -0
  312. package/dist/debug/harness.d.ts.map +1 -0
  313. package/dist/debug/harness.js +103 -0
  314. package/dist/debug/harness.js.map +1 -0
  315. package/dist/debug/index.d.ts +17 -0
  316. package/dist/debug/index.d.ts.map +1 -0
  317. package/dist/debug/index.js +16 -0
  318. package/dist/debug/index.js.map +1 -0
  319. package/dist/debug/markdown.d.ts +3 -0
  320. package/dist/debug/markdown.d.ts.map +1 -0
  321. package/dist/debug/markdown.js +127 -0
  322. package/dist/debug/markdown.js.map +1 -0
  323. package/dist/debug/server-runner.d.ts +24 -0
  324. package/dist/debug/server-runner.d.ts.map +1 -0
  325. package/dist/debug/server-runner.js +197 -0
  326. package/dist/debug/server-runner.js.map +1 -0
  327. package/dist/debug/target.d.ts +34 -0
  328. package/dist/debug/target.d.ts.map +1 -0
  329. package/dist/debug/target.js +104 -0
  330. package/dist/debug/target.js.map +1 -0
  331. package/dist/debug/trace.d.ts +30 -0
  332. package/dist/debug/trace.d.ts.map +1 -0
  333. package/dist/debug/trace.js +87 -0
  334. package/dist/debug/trace.js.map +1 -0
  335. package/dist/debug/types.d.ts +82 -0
  336. package/dist/debug/types.d.ts.map +1 -0
  337. package/dist/debug/types.js +13 -0
  338. package/dist/debug/types.js.map +1 -0
  339. package/dist/debug/verdict.d.ts +3 -0
  340. package/dist/debug/verdict.d.ts.map +1 -0
  341. package/dist/debug/verdict.js +78 -0
  342. package/dist/debug/verdict.js.map +1 -0
  343. package/dist/debug/watch.d.ts +23 -0
  344. package/dist/debug/watch.d.ts.map +1 -0
  345. package/dist/debug/watch.js +68 -0
  346. package/dist/debug/watch.js.map +1 -0
  347. package/dist/diagnose.d.ts +139 -0
  348. package/dist/diagnose.d.ts.map +1 -0
  349. package/dist/diagnose.js +418 -0
  350. package/dist/diagnose.js.map +1 -0
  351. package/dist/evals/graph-runner.d.ts +8 -0
  352. package/dist/evals/graph-runner.d.ts.map +1 -0
  353. package/dist/evals/graph-runner.js +136 -0
  354. package/dist/evals/graph-runner.js.map +1 -0
  355. package/dist/harness/capability-coverage.d.ts +161 -0
  356. package/dist/harness/capability-coverage.d.ts.map +1 -0
  357. package/dist/harness/capability-coverage.js +266 -0
  358. package/dist/harness/capability-coverage.js.map +1 -0
  359. package/dist/harness/capability-table.d.ts +17 -0
  360. package/dist/harness/capability-table.d.ts.map +1 -0
  361. package/dist/harness/capability-table.js +3844 -0
  362. package/dist/harness/capability-table.js.map +1 -0
  363. package/dist/harness/changed-files.d.ts +20 -0
  364. package/dist/harness/changed-files.d.ts.map +1 -0
  365. package/dist/harness/changed-files.js +90 -0
  366. package/dist/harness/changed-files.js.map +1 -0
  367. package/dist/harness/declared-capabilities.d.ts +12 -0
  368. package/dist/harness/declared-capabilities.d.ts.map +1 -0
  369. package/dist/harness/declared-capabilities.js +21 -0
  370. package/dist/harness/declared-capabilities.js.map +1 -0
  371. package/dist/harness/registry.d.ts +190 -0
  372. package/dist/harness/registry.d.ts.map +1 -0
  373. package/dist/harness/registry.js +2034 -0
  374. package/dist/harness/registry.js.map +1 -0
  375. package/dist/index.js +122 -131
  376. package/dist/index.js.map +1 -1
  377. package/dist/interaction-script.d.ts +40 -0
  378. package/dist/interaction-script.d.ts.map +1 -0
  379. package/dist/interaction-script.js +96 -0
  380. package/dist/interaction-script.js.map +1 -0
  381. package/dist/js-script-debug/harness.d.ts +124 -0
  382. package/dist/js-script-debug/harness.d.ts.map +1 -0
  383. package/dist/js-script-debug/harness.js +230 -0
  384. package/dist/js-script-debug/harness.js.map +1 -0
  385. package/dist/js-script-debug/index.d.ts +9 -0
  386. package/dist/js-script-debug/index.d.ts.map +1 -0
  387. package/dist/js-script-debug/index.js +9 -0
  388. package/dist/js-script-debug/index.js.map +1 -0
  389. package/dist/js-script-debug/interactions.d.ts +19 -0
  390. package/dist/js-script-debug/interactions.d.ts.map +1 -0
  391. package/dist/js-script-debug/interactions.js +17 -0
  392. package/dist/js-script-debug/interactions.js.map +1 -0
  393. package/dist/js-script-debug/target.d.ts +20 -0
  394. package/dist/js-script-debug/target.d.ts.map +1 -0
  395. package/dist/js-script-debug/target.js +78 -0
  396. package/dist/js-script-debug/target.js.map +1 -0
  397. package/dist/local-model-interfaces.d.ts +20 -0
  398. package/dist/local-model-interfaces.d.ts.map +1 -0
  399. package/dist/local-model-interfaces.js +41 -0
  400. package/dist/local-model-interfaces.js.map +1 -0
  401. package/dist/local-secrets.d.ts +3 -0
  402. package/dist/local-secrets.d.ts.map +1 -0
  403. package/dist/local-secrets.js +16 -0
  404. package/dist/local-secrets.js.map +1 -0
  405. package/dist/markdown.d.ts.map +1 -1
  406. package/dist/markdown.js +7 -2
  407. package/dist/markdown.js.map +1 -1
  408. package/dist/node/run-node.d.ts +28 -0
  409. package/dist/node/run-node.d.ts.map +1 -0
  410. package/dist/node/run-node.js +76 -0
  411. package/dist/node/run-node.js.map +1 -0
  412. package/dist/node-registry.d.ts +27 -0
  413. package/dist/node-registry.d.ts.map +1 -0
  414. package/dist/node-registry.js +33 -0
  415. package/dist/node-registry.js.map +1 -0
  416. package/dist/nodetool-main.d.ts +15 -0
  417. package/dist/nodetool-main.d.ts.map +1 -0
  418. package/dist/nodetool-main.js +1368 -0
  419. package/dist/nodetool-main.js.map +1 -0
  420. package/dist/nodetool.d.ts +0 -13
  421. package/dist/nodetool.d.ts.map +1 -1
  422. package/dist/nodetool.js +17 -1147
  423. package/dist/nodetool.js.map +1 -1
  424. package/dist/numeric-options.d.ts +22 -0
  425. package/dist/numeric-options.d.ts.map +1 -0
  426. package/dist/numeric-options.js +45 -0
  427. package/dist/numeric-options.js.map +1 -0
  428. package/dist/permission-gate.d.ts +55 -0
  429. package/dist/permission-gate.d.ts.map +1 -0
  430. package/dist/permission-gate.js +118 -0
  431. package/dist/permission-gate.js.map +1 -0
  432. package/dist/predicates.d.ts +6 -0
  433. package/dist/predicates.d.ts.map +1 -0
  434. package/dist/predicates.js +6 -0
  435. package/dist/predicates.js.map +1 -0
  436. package/dist/providers.d.ts +73 -10
  437. package/dist/providers.d.ts.map +1 -1
  438. package/dist/providers.js +339 -97
  439. package/dist/providers.js.map +1 -1
  440. package/dist/readline-input.d.ts +13 -19
  441. package/dist/readline-input.d.ts.map +1 -1
  442. package/dist/readline-input.js +201 -190
  443. package/dist/readline-input.js.map +1 -1
  444. package/dist/run-budget.d.ts +40 -0
  445. package/dist/run-budget.d.ts.map +1 -0
  446. package/dist/run-budget.js +119 -0
  447. package/dist/run-budget.js.map +1 -0
  448. package/dist/run-dsl-supervised.d.ts +11 -0
  449. package/dist/run-dsl-supervised.d.ts.map +1 -0
  450. package/dist/run-dsl-supervised.js +82 -0
  451. package/dist/run-dsl-supervised.js.map +1 -0
  452. package/dist/run-dsl.d.ts +29 -0
  453. package/dist/run-dsl.d.ts.map +1 -1
  454. package/dist/run-dsl.js +44 -10
  455. package/dist/run-dsl.js.map +1 -1
  456. package/dist/run-json.d.ts +24 -0
  457. package/dist/run-json.d.ts.map +1 -0
  458. package/dist/run-json.js +132 -0
  459. package/dist/run-json.js.map +1 -0
  460. package/dist/sandbox-catalog.d.ts +24 -0
  461. package/dist/sandbox-catalog.d.ts.map +1 -0
  462. package/dist/sandbox-catalog.js +78 -0
  463. package/dist/sandbox-catalog.js.map +1 -0
  464. package/dist/settings.d.ts +11 -10
  465. package/dist/settings.d.ts.map +1 -1
  466. package/dist/settings.js +71 -13
  467. package/dist/settings.js.map +1 -1
  468. package/dist/sketch-debug/harness.d.ts +87 -0
  469. package/dist/sketch-debug/harness.d.ts.map +1 -0
  470. package/dist/sketch-debug/harness.js +145 -0
  471. package/dist/sketch-debug/harness.js.map +1 -0
  472. package/dist/sketch-debug/index.d.ts +9 -0
  473. package/dist/sketch-debug/index.d.ts.map +1 -0
  474. package/dist/sketch-debug/index.js +9 -0
  475. package/dist/sketch-debug/index.js.map +1 -0
  476. package/dist/sketch-debug/interactions.d.ts +19 -0
  477. package/dist/sketch-debug/interactions.d.ts.map +1 -0
  478. package/dist/sketch-debug/interactions.js +17 -0
  479. package/dist/sketch-debug/interactions.js.map +1 -0
  480. package/dist/sketch-debug/target.d.ts +48 -0
  481. package/dist/sketch-debug/target.d.ts.map +1 -0
  482. package/dist/sketch-debug/target.js +138 -0
  483. package/dist/sketch-debug/target.js.map +1 -0
  484. package/dist/stdin.d.ts +18 -19
  485. package/dist/stdin.d.ts.map +1 -1
  486. package/dist/stdin.js +160 -157
  487. package/dist/stdin.js.map +1 -1
  488. package/dist/supervisor.d.ts +97 -0
  489. package/dist/supervisor.d.ts.map +1 -0
  490. package/dist/supervisor.js +194 -0
  491. package/dist/supervisor.js.map +1 -0
  492. package/dist/terminal-clipboard.d.ts +3 -0
  493. package/dist/terminal-clipboard.d.ts.map +1 -0
  494. package/dist/terminal-clipboard.js +24 -0
  495. package/dist/terminal-clipboard.js.map +1 -0
  496. package/dist/terminal-mouse.d.ts +24 -0
  497. package/dist/terminal-mouse.d.ts.map +1 -0
  498. package/dist/terminal-mouse.js +84 -0
  499. package/dist/terminal-mouse.js.map +1 -0
  500. package/dist/terminal-screen.d.ts +41 -0
  501. package/dist/terminal-screen.d.ts.map +1 -0
  502. package/dist/terminal-screen.js +228 -0
  503. package/dist/terminal-screen.js.map +1 -0
  504. package/dist/timeline-debug/harness.d.ts +79 -0
  505. package/dist/timeline-debug/harness.d.ts.map +1 -0
  506. package/dist/timeline-debug/harness.js +122 -0
  507. package/dist/timeline-debug/harness.js.map +1 -0
  508. package/dist/timeline-debug/index.d.ts +9 -0
  509. package/dist/timeline-debug/index.d.ts.map +1 -0
  510. package/dist/timeline-debug/index.js +9 -0
  511. package/dist/timeline-debug/index.js.map +1 -0
  512. package/dist/timeline-debug/interactions.d.ts +19 -0
  513. package/dist/timeline-debug/interactions.d.ts.map +1 -0
  514. package/dist/timeline-debug/interactions.js +17 -0
  515. package/dist/timeline-debug/interactions.js.map +1 -0
  516. package/dist/timeline-debug/target.d.ts +34 -0
  517. package/dist/timeline-debug/target.d.ts.map +1 -0
  518. package/dist/timeline-debug/target.js +132 -0
  519. package/dist/timeline-debug/target.js.map +1 -0
  520. package/dist/tool-format.d.ts +54 -0
  521. package/dist/tool-format.d.ts.map +1 -0
  522. package/dist/tool-format.js +360 -0
  523. package/dist/tool-format.js.map +1 -0
  524. package/dist/useExecutionState.d.ts.map +1 -1
  525. package/dist/useExecutionState.js +8 -4
  526. package/dist/useExecutionState.js.map +1 -1
  527. package/dist/validate/index.d.ts +28 -0
  528. package/dist/validate/index.d.ts.map +1 -0
  529. package/dist/validate/index.js +51 -0
  530. package/dist/validate/index.js.map +1 -0
  531. package/dist/websocket-client.d.ts +78 -15
  532. package/dist/websocket-client.d.ts.map +1 -1
  533. package/dist/websocket-client.js +497 -171
  534. package/dist/websocket-client.js.map +1 -1
  535. package/package.json +65 -31
@@ -0,0 +1,25 @@
1
+ /**
2
+ * One rendering of a document validation, shared by the timeline, sketch and
3
+ * JS-script commands. A restored document is checked and reported exactly the
4
+ * way a validated one is, and all three read the same on screen.
5
+ */
6
+ export interface ValidationIssueLike {
7
+ severity: string;
8
+ message: string;
9
+ code: string;
10
+ path?: string | null;
11
+ }
12
+ export interface ValidationLike<I extends ValidationIssueLike> {
13
+ ok: boolean;
14
+ errors: I[];
15
+ warnings: I[];
16
+ }
17
+ /** `[path]` when the issue carries one, nothing otherwise. */
18
+ export declare function issueLocation(issue: ValidationIssueLike): string;
19
+ /**
20
+ * Headline, then one line per issue — errors before warnings. `where` names the
21
+ * part of the document an issue points at; per-document renderers pass the
22
+ * locator their issue type carries and fall back to `issueLocation`.
23
+ */
24
+ export declare function renderValidation<I extends ValidationIssueLike>(validation: ValidationLike<I>, where?: (issue: I) => string): string[];
25
+ //# sourceMappingURL=validation-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-output.d.ts","sourceRoot":"","sources":["../../src/commands/validation-output.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,mBAAmB;IAC3D,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,CAAC,EAAE,CAAC;IACZ,QAAQ,EAAE,CAAC,EAAE,CAAC;CACf;AAED,8DAA8D;AAC9D,wBAAgB,aAAa,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM,CAEhE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,mBAAmB,EAC5D,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC,EAC7B,KAAK,GAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAsB,GAC1C,MAAM,EAAE,CAaV"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * One rendering of a document validation, shared by the timeline, sketch and
3
+ * JS-script commands. A restored document is checked and reported exactly the
4
+ * way a validated one is, and all three read the same on screen.
5
+ */
6
+ /** `[path]` when the issue carries one, nothing otherwise. */
7
+ export function issueLocation(issue) {
8
+ return issue.path != null ? ` [${issue.path}]` : "";
9
+ }
10
+ /**
11
+ * Headline, then one line per issue — errors before warnings. `where` names the
12
+ * part of the document an issue points at; per-document renderers pass the
13
+ * locator their issue type carries and fall back to `issueLocation`.
14
+ */
15
+ export function renderValidation(validation, where = issueLocation) {
16
+ const errors = validation.errors.length;
17
+ const warnings = validation.warnings.length;
18
+ const mark = validation.ok ? (warnings ? "⚠️" : "✅") : "❌";
19
+ const lines = ["", `${mark} ${errors} error(s), ${warnings} warning(s)`];
20
+ if (errors + warnings === 0)
21
+ return lines;
22
+ lines.push("");
23
+ for (const issue of [...validation.errors, ...validation.warnings]) {
24
+ const tag = issue.severity === "error" ? "error" : "warn ";
25
+ lines.push(` ${tag} ${issue.message}${where(issue)} (${issue.code})`);
26
+ }
27
+ return lines;
28
+ }
29
+ //# sourceMappingURL=validation-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-output.js","sourceRoot":"","sources":["../../src/commands/validation-output.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAeH,8DAA8D;AAC9D,MAAM,UAAU,aAAa,CAAC,KAA0B;IACtD,OAAO,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACtD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,UAA6B,EAC7B,KAAK,GAAyB,aAAa;IAE3C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;IACxC,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC5C,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC3D,MAAM,KAAK,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,cAAc,QAAQ,aAAa,CAAC,CAAC;IACzE,IAAI,MAAM,GAAG,QAAQ,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAE1C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnE,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * `<document> versions list|show|create|restore|delete` — one registration for
3
+ * every document type that keeps immutable snapshots (timeline sequences,
4
+ * image documents, JS scripts).
5
+ *
6
+ * Each type keeps its own row shapes, table columns and messages in a
7
+ * `VersionCommandSpec`; the command wiring, the CAS-guarded restore order
8
+ * (snapshot the pre-restore state, write, re-validate) and the exit codes are
9
+ * written once here. `restore` mirrors the tRPC routers: an old document is
10
+ * restored against today's schema, so a restore whose document no longer
11
+ * validates exits non-zero.
12
+ */
13
+ import type { Command } from "commander";
14
+ /** A decoded JSON document, before anything validates its shape. */
15
+ export type JsonValue = string | number | boolean | null | JsonValue[] | {
16
+ [key: string]: JsonValue;
17
+ };
18
+ /** The model calls these commands make — the whole database seam. */
19
+ export interface VersionStore<Doc, Row> {
20
+ load: (id: string) => Promise<Doc | null>;
21
+ listVersions: (documentId: string, opts: {
22
+ limit?: number;
23
+ saveType?: string;
24
+ }) => Promise<Row[]>;
25
+ findVersion: (documentId: string, version: number) => Promise<Row | null>;
26
+ snapshot: (doc: Doc, opts: {
27
+ saveType: "manual" | "restore";
28
+ name?: string | null;
29
+ }) => Promise<Row>;
30
+ /**
31
+ * Write a version's document and settings back onto the parent document,
32
+ * compare-and-swap on the `updated_at` it was loaded with. Resolves to null
33
+ * when someone else wrote first.
34
+ */
35
+ restore: (doc: Doc, version: Row) => Promise<Doc | null>;
36
+ deleteVersion: (documentId: string, version: number) => Promise<void>;
37
+ }
38
+ interface Validation {
39
+ ok: boolean;
40
+ }
41
+ /** Everything one document type contributes to the shared commands. */
42
+ export interface VersionCommandSpec<Doc, Row, Item, V extends Validation, Counts, Meta> {
43
+ /** Argument placeholder, e.g. `timeline_id`. */
44
+ idArg: string;
45
+ /** The key naming the parent document in `--json` output, e.g. `timelineId`. */
46
+ idKey: string;
47
+ /** Descriptions, verbatim — these are the documented CLI surface. */
48
+ descriptions: {
49
+ group: string;
50
+ list: string;
51
+ show: string;
52
+ create: string;
53
+ restore: string;
54
+ delete: string;
55
+ restoreJson: string;
56
+ };
57
+ notFoundDocument: (id: string) => string;
58
+ notFoundVersion: (id: string, version: number) => string;
59
+ /** Thrown when the CAS restore loses the race. */
60
+ conflict: string;
61
+ confirmDelete: (id: string, version: number) => string;
62
+ deleted: (id: string, version: number) => string;
63
+ toItem: (row: Row) => Item;
64
+ /** The table columns, for `list` and for `show`'s header row. */
65
+ tableRow: (item: Item) => Record<string, unknown>;
66
+ counts: (document: JsonValue | undefined) => Counts;
67
+ /** The line `show` prints under the table. */
68
+ showSummary: (counts: Counts, item: Item) => string;
69
+ /** The line `restore` prints on success. */
70
+ restoreSummary: (id: string, version: number, counts: Counts, row: Row) => string;
71
+ /** Extra `--json` keys describing the document after a restore. */
72
+ restoreJsonExtra: (doc: Doc) => Record<string, unknown>;
73
+ /** The render settings the validator needs, read off the version row. */
74
+ validateMeta: (row: Row) => Meta;
75
+ renderValidation: (validation: V) => string[];
76
+ }
77
+ /** Injected with lazy defaults so registration stays light and actions unit-test. */
78
+ export interface VersionCommandDeps<Doc, Row, V extends Validation, Meta> {
79
+ store?: () => Promise<VersionStore<Doc, Row>>;
80
+ validate?: (document: unknown, meta: Meta) => Promise<V> | V;
81
+ confirmDelete?: (message: string, force?: boolean) => Promise<boolean>;
82
+ }
83
+ /** A version is a positive integer; anything else names itself in the error. */
84
+ export declare function parseVersionNumber(raw: string): number;
85
+ /** Parse a stored document without throwing — an unreadable one is a finding. */
86
+ export declare function parseVersionDocument(raw: unknown): JsonValue;
87
+ /** Count an array-valued field, or 0 for anything else. */
88
+ export declare function countArray(value: unknown): number;
89
+ export declare function registerVersionCommands<Doc, Row, Item, V extends Validation, Counts, Meta>(parent: Command, spec: VersionCommandSpec<Doc, Row, Item, V, Counts, Meta>, deps: VersionCommandDeps<Doc, Row, V, Meta>, defaults: {
90
+ store: () => Promise<VersionStore<Doc, Row>>;
91
+ validate: (document: unknown, meta: Meta) => Promise<V> | V;
92
+ }): void;
93
+ export {};
94
+ //# sourceMappingURL=version-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-commands.d.ts","sourceRoot":"","sources":["../../src/commands/version-commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,227 @@
1
+ import { printCommandError } from "../command-errors.js";
2
+ import { asJson, confirm, printTable } from "./output.js";
3
+ import { numericOptionParser } from "../numeric-options.js";
4
+ import { isString } from "../predicates.js";
5
+ /** A version is a positive integer; anything else names itself in the error. */
6
+ export function parseVersionNumber(raw) {
7
+ const value = Number(raw.trim());
8
+ if (!Number.isInteger(value) || value < 1) {
9
+ throw new Error(`version must be a positive integer (got "${raw}")`);
10
+ }
11
+ return value;
12
+ }
13
+ /** Parse a stored document without throwing — an unreadable one is a finding. */
14
+ export function parseVersionDocument(raw) {
15
+ // SAFETY: a Postgres json column arrives already decoded; either way the
16
+ // stored document is JSON.
17
+ if (!isString(raw))
18
+ return raw;
19
+ try {
20
+ return JSON.parse(raw);
21
+ }
22
+ catch {
23
+ return raw;
24
+ }
25
+ }
26
+ /** Count an array-valued field, or 0 for anything else. */
27
+ export function countArray(value) {
28
+ return Array.isArray(value) ? value.length : 0;
29
+ }
30
+ export function registerVersionCommands(parent, spec, deps, defaults) {
31
+ const openStore = deps.store ?? defaults.store;
32
+ const validate = deps.validate ?? defaults.validate;
33
+ const confirmDelete = deps.confirmDelete ??
34
+ ((message, force) => confirm(message, { force }));
35
+ const id = `<${spec.idArg}>`;
36
+ async function requireDocument(store, documentId) {
37
+ const doc = await store.load(documentId);
38
+ if (!doc)
39
+ throw new Error(spec.notFoundDocument(documentId));
40
+ return doc;
41
+ }
42
+ async function requireVersion(store, documentId, version) {
43
+ const row = await store.findVersion(documentId, version);
44
+ if (!row)
45
+ throw new Error(spec.notFoundVersion(documentId, version));
46
+ return row;
47
+ }
48
+ const versions = parent
49
+ .command("versions")
50
+ .description(spec.descriptions.group);
51
+ versions
52
+ .command(`list ${id}`)
53
+ .description(spec.descriptions.list)
54
+ .option("--save-type <type>", "Only manual, autosave or restore snapshots")
55
+ .option("--limit <n>", "Maximum versions to list (default 100)", numericOptionParser("--limit", { integer: true, min: 1 }))
56
+ .option("--json", "Print the versions as JSON")
57
+ .action(async (documentId, opts) => {
58
+ try {
59
+ const store = await openStore();
60
+ await requireDocument(store, documentId);
61
+ const query = {};
62
+ if (opts.limit !== undefined) {
63
+ query.limit = opts.limit;
64
+ }
65
+ if (opts.saveType) {
66
+ query.saveType = opts.saveType;
67
+ }
68
+ const rows = await store.listVersions(documentId, query);
69
+ const items = rows.map(spec.toItem);
70
+ if (opts.json) {
71
+ asJson({ [spec.idKey]: documentId, versions: items });
72
+ return;
73
+ }
74
+ printTable(items.map(spec.tableRow));
75
+ }
76
+ catch (e) {
77
+ printCommandError(e, opts.json);
78
+ process.exit(1);
79
+ }
80
+ });
81
+ versions
82
+ .command(`show ${id} <version>`)
83
+ .description(spec.descriptions.show)
84
+ .option("--json", "Print the metadata and the full document as JSON")
85
+ .action(async (documentId, version, opts) => {
86
+ try {
87
+ const number = parseVersionNumber(version);
88
+ const store = await openStore();
89
+ await requireDocument(store, documentId);
90
+ const row = await requireVersion(store, documentId, number);
91
+ const item = spec.toItem(row);
92
+ const document = parseVersionDocument(row.document);
93
+ if (opts.json) {
94
+ asJson({ ...item, document });
95
+ return;
96
+ }
97
+ printTable([spec.tableRow(item)]);
98
+ console.log(spec.showSummary(spec.counts(document), item));
99
+ }
100
+ catch (e) {
101
+ printCommandError(e, opts.json);
102
+ process.exit(1);
103
+ }
104
+ });
105
+ versions
106
+ .command(`create ${id}`)
107
+ .description(spec.descriptions.create)
108
+ .option("--name <name>", "Label for the snapshot")
109
+ .option("--json", "Print the created version as JSON")
110
+ .action(async (documentId, opts) => {
111
+ try {
112
+ const store = await openStore();
113
+ const doc = await requireDocument(store, documentId);
114
+ const row = await store.snapshot(doc, {
115
+ saveType: "manual",
116
+ name: opts.name ?? null
117
+ });
118
+ const item = spec.toItem(row);
119
+ if (opts.json) {
120
+ asJson(item);
121
+ return;
122
+ }
123
+ console.log(`✅ Snapshot saved as v${item.version}${item.name ? ` (${String(item.name)})` : ""}`);
124
+ }
125
+ catch (e) {
126
+ printCommandError(e, opts.json);
127
+ process.exit(1);
128
+ }
129
+ });
130
+ versions
131
+ .command(`restore ${id} <version>`)
132
+ .description(spec.descriptions.restore)
133
+ .option("--json", spec.descriptions.restoreJson)
134
+ .action(async (documentId, version, opts) => {
135
+ // The verdict leaves the try block in a variable: `process.exit` throws
136
+ // under test, and an exit inside the try would be caught here as a
137
+ // command failure.
138
+ let restoredOk = false;
139
+ try {
140
+ const number = parseVersionNumber(version);
141
+ const store = await openStore();
142
+ const doc = await requireDocument(store, documentId);
143
+ const target = await requireVersion(store, documentId, number);
144
+ // Snapshot what is about to be overwritten first, so the restore is
145
+ // itself undoable — same order the tRPC router uses.
146
+ const backup = await store.snapshot(doc, {
147
+ saveType: "restore",
148
+ name: `Before restore to v${number}`
149
+ });
150
+ const updated = await store.restore(doc, target);
151
+ if (!updated)
152
+ throw new Error(spec.conflict);
153
+ const document = parseVersionDocument(target.document);
154
+ const validation = await validate(document, spec.validateMeta(target));
155
+ if (opts.json) {
156
+ asJson({
157
+ [spec.idKey]: documentId,
158
+ restored: spec.toItem(target),
159
+ snapshot: spec.toItem(backup),
160
+ ...spec.restoreJsonExtra(updated),
161
+ validation
162
+ });
163
+ }
164
+ else {
165
+ console.log(spec.restoreSummary(documentId, number, spec.counts(document), target));
166
+ const meta = backup;
167
+ console.log(` pre-restore state saved as v${meta.version} (${meta.save_type})`);
168
+ console.log(spec.renderValidation(validation).join("\n"));
169
+ }
170
+ restoredOk = validation.ok;
171
+ }
172
+ catch (e) {
173
+ printCommandError(e, opts.json);
174
+ process.exit(1);
175
+ }
176
+ process.exit(restoredOk ? 0 : 1);
177
+ });
178
+ versions
179
+ .command(`delete ${id} <version>`)
180
+ .description(spec.descriptions.delete)
181
+ .option("-y, --yes", "Skip the confirmation prompt")
182
+ .option("--json", "Print the result as JSON")
183
+ .action(async (documentId, version, opts) => {
184
+ let aborted = false;
185
+ try {
186
+ const number = parseVersionNumber(version);
187
+ const store = await openStore();
188
+ await requireDocument(store, documentId);
189
+ await requireVersion(store, documentId, number);
190
+ const ok = await confirmDelete(spec.confirmDelete(documentId, number), opts.yes);
191
+ if (!ok) {
192
+ aborted = true;
193
+ if (opts.json) {
194
+ asJson({
195
+ [spec.idKey]: documentId,
196
+ version: number,
197
+ deleted: false,
198
+ aborted: true
199
+ });
200
+ }
201
+ else {
202
+ console.error("Aborted.");
203
+ }
204
+ }
205
+ else {
206
+ await store.deleteVersion(documentId, number);
207
+ if (opts.json) {
208
+ asJson({
209
+ [spec.idKey]: documentId,
210
+ version: number,
211
+ deleted: true
212
+ });
213
+ }
214
+ else {
215
+ console.log(spec.deleted(documentId, number));
216
+ }
217
+ }
218
+ }
219
+ catch (e) {
220
+ printCommandError(e, opts.json);
221
+ process.exit(1);
222
+ }
223
+ if (aborted)
224
+ process.exit(1);
225
+ });
226
+ }
227
+ //# sourceMappingURL=version-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-commands.js","sourceRoot":"","sources":["../../src/commands/version-commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `nodetool worker models` — inspect and manage the HF model cache on a
3
+ * remote GPU worker directly via the WebSocket bridge (no TS server required).
4
+ *
5
+ * Verbs:
6
+ * worker models list [<worker-id>] [--json]
7
+ * worker models download --repo-id <id> [<worker-id>] [-a <glob>] [-i <glob>]
8
+ * worker models delete --repo-id <id> [<worker-id>]
9
+ */
10
+ import type { Command } from "commander";
11
+ import { WorkerManager } from "@nodetool-ai/compute";
12
+ export declare function registerWorkerModelsCommands(worker: Command, getManager: () => Promise<WorkerManager>): void;
13
+ //# sourceMappingURL=worker-models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-models.d.ts","sourceRoot":"","sources":["../../src/commands/worker-models.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EACL,aAAa,EAEd,MAAM,sBAAsB,CAAC;AA+F9B,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,GACvC,IAAI,CAQN"}
@@ -0,0 +1,207 @@
1
+ /**
2
+ * `nodetool worker models` — inspect and manage the HF model cache on a
3
+ * remote GPU worker directly via the WebSocket bridge (no TS server required).
4
+ *
5
+ * Verbs:
6
+ * worker models list [<worker-id>] [--json]
7
+ * worker models download --repo-id <id> [<worker-id>] [-a <glob>] [-i <glob>]
8
+ * worker models delete --repo-id <id> [<worker-id>]
9
+ */
10
+ import { attachWorkerActivityHeartbeat } from "@nodetool-ai/compute";
11
+ import { WebsocketPythonBridge } from "@nodetool-ai/runtime";
12
+ import { resolveWorkerHfToken } from "@nodetool-ai/huggingface";
13
+ import { getSecret } from "@nodetool-ai/models";
14
+ import { printTable, asJson } from "./output.js";
15
+ // ---------------------------------------------------------------------------
16
+ // Formatting helpers
17
+ // ---------------------------------------------------------------------------
18
+ function formatBytes(n) {
19
+ if (!n || n <= 0)
20
+ return "-";
21
+ const units = ["B", "KB", "MB", "GB", "TB"];
22
+ let value = n;
23
+ let i = 0;
24
+ while (value >= 1024 && i < units.length - 1) {
25
+ value /= 1024;
26
+ i++;
27
+ }
28
+ return `${value.toFixed(1)} ${units[i]}`;
29
+ }
30
+ /** Local single-user id used across the TS stack for secret-store reads. */
31
+ const LOCAL_USER_ID = "1";
32
+ function collectOption(value, previous) {
33
+ return previous ? [...previous, value] : [value];
34
+ }
35
+ // ---------------------------------------------------------------------------
36
+ // Bridge connection helper
37
+ // ---------------------------------------------------------------------------
38
+ /**
39
+ * Resolve the target worker, open a WebSocket bridge, and return it.
40
+ * The bridge has `autoRestart: false` so it won't reconnect once closed —
41
+ * CLI commands are one-shot and call `bridge.close()` in a finally block.
42
+ *
43
+ * When `workerId` is omitted, falls back to the currently-attached instance.
44
+ */
45
+ async function openBridge(manager, workerId) {
46
+ let conn;
47
+ let instanceId;
48
+ if (workerId) {
49
+ conn = await manager.connectionInfo(workerId);
50
+ instanceId = workerId;
51
+ }
52
+ else {
53
+ const active = await manager.getActiveWorker();
54
+ if (!active) {
55
+ throw new Error("No worker attached. Provide a worker id or attach one with `worker create --attach`.");
56
+ }
57
+ conn = { wsUrl: active.ws_url, token: active.token };
58
+ instanceId = active.id;
59
+ }
60
+ const bridge = new WebsocketPythonBridge({
61
+ wsUrl: conn.wsUrl,
62
+ workerToken: conn.token ?? undefined,
63
+ autoRestart: false
64
+ });
65
+ // A model download runs for tens of minutes and sends nothing outbound after
66
+ // the request — the reaper would otherwise pause the pod mid-download. This
67
+ // touches the worker the command names, not the attached one.
68
+ attachWorkerActivityHeartbeat(bridge, {
69
+ resolveInstanceId: async () => instanceId
70
+ });
71
+ await bridge.connect();
72
+ if (!bridge.supportsModelManagement()) {
73
+ bridge.close();
74
+ throw new Error("This worker's image is too old for model management (protocol_version < 2). " +
75
+ "Upgrade the worker image.");
76
+ }
77
+ return bridge;
78
+ }
79
+ // ---------------------------------------------------------------------------
80
+ // Registration
81
+ // ---------------------------------------------------------------------------
82
+ export function registerWorkerModelsCommands(worker, getManager) {
83
+ const models = worker
84
+ .command("models")
85
+ .description("Manage the HF model cache on a remote worker");
86
+ registerList(models, getManager);
87
+ registerDownload(models, getManager);
88
+ registerDelete(models, getManager);
89
+ }
90
+ // ---------------------------------------------------------------------------
91
+ // worker models list
92
+ // ---------------------------------------------------------------------------
93
+ function registerList(models, getManager) {
94
+ models
95
+ .command("list [worker-id]")
96
+ .description("List cached HuggingFace models on the worker")
97
+ .option("--json", "Output as JSON")
98
+ .action(async (workerId, opts) => {
99
+ const manager = await getManager();
100
+ let bridge = null;
101
+ try {
102
+ bridge = await openBridge(manager, workerId);
103
+ const cached = await bridge.listCachedModels();
104
+ if (opts.json) {
105
+ asJson(cached);
106
+ return;
107
+ }
108
+ if (cached.length === 0) {
109
+ console.log("(no cached models)");
110
+ return;
111
+ }
112
+ printTable(cached.map((m) => ({
113
+ repo_id: m["repo_id"] ?? m["id"] ?? "",
114
+ type: m["type"] ?? "-",
115
+ size: formatBytes(m["size_on_disk"]),
116
+ pipeline: m["pipeline_tag"] ?? "-"
117
+ })), ["repo_id", "type", "size", "pipeline"]);
118
+ }
119
+ finally {
120
+ bridge?.close();
121
+ }
122
+ });
123
+ }
124
+ // ---------------------------------------------------------------------------
125
+ // worker models download
126
+ // ---------------------------------------------------------------------------
127
+ function registerDownload(models, getManager) {
128
+ models
129
+ .command("download [worker-id]")
130
+ .description("Download a HuggingFace model into the worker's cache")
131
+ .requiredOption("--repo-id <id>", "HuggingFace repo id (owner/name)")
132
+ .option("--file-path <path>", "Download a single file from the repo")
133
+ .option("-a, --allow-patterns <pattern>", "Only download files matching this glob (repeatable)", collectOption)
134
+ .option("-i, --ignore-patterns <pattern>", "Skip files matching this glob (repeatable)", collectOption)
135
+ .action(async (workerId, opts) => {
136
+ const manager = await getManager();
137
+ let bridge = null;
138
+ try {
139
+ bridge = await openBridge(manager, workerId);
140
+ let lastLine = "";
141
+ let errorMessage = null;
142
+ const render = (u) => {
143
+ if (u.status === "error") {
144
+ errorMessage = u.error ?? "download failed";
145
+ }
146
+ const pct = u.total_bytes > 0
147
+ ? Math.floor((u.downloaded_bytes / u.total_bytes) * 100)
148
+ : 0;
149
+ const line = `[${u.status}] ${u.repo_id} ${u.downloaded_files}/${u.total_files} files ${formatBytes(u.downloaded_bytes)}/${formatBytes(u.total_bytes)} ${pct}%`;
150
+ if (line !== lastLine) {
151
+ process.stderr.write(`\r${line.padEnd(100)}`);
152
+ lastLine = line;
153
+ }
154
+ if (u.status === "completed" ||
155
+ u.status === "error" ||
156
+ u.status === "cancelled") {
157
+ process.stderr.write("\n");
158
+ }
159
+ };
160
+ // The worker holds no HuggingFace credential, so a gated repo
161
+ // (FLUX.1-dev, RMBG-2.0, ...) 401s unless this host supplies one.
162
+ const token = await resolveWorkerHfToken((key) => getSecret(key, LOCAL_USER_ID));
163
+ await bridge.downloadModel({
164
+ repo_id: opts.repoId,
165
+ path: opts.filePath ?? null,
166
+ allow_patterns: opts.allowPatterns ?? null,
167
+ ignore_patterns: opts.ignorePatterns ?? null,
168
+ token
169
+ }, render);
170
+ if (errorMessage) {
171
+ console.error(errorMessage);
172
+ process.exit(1);
173
+ }
174
+ console.log(`Downloaded '${opts.repoId}' to worker cache.`);
175
+ }
176
+ finally {
177
+ bridge?.close();
178
+ }
179
+ });
180
+ }
181
+ // ---------------------------------------------------------------------------
182
+ // worker models delete
183
+ // ---------------------------------------------------------------------------
184
+ function registerDelete(models, getManager) {
185
+ models
186
+ .command("delete [worker-id]")
187
+ .description("Delete a cached HuggingFace model from the worker")
188
+ .requiredOption("--repo-id <id>", "HuggingFace repo id (owner/name)")
189
+ .action(async (workerId, opts) => {
190
+ const manager = await getManager();
191
+ let bridge = null;
192
+ try {
193
+ bridge = await openBridge(manager, workerId);
194
+ const deleted = await bridge.deleteCachedModel(opts.repoId);
195
+ if (deleted) {
196
+ console.log(`Deleted '${opts.repoId}' from worker cache.`);
197
+ }
198
+ else {
199
+ console.log(`'${opts.repoId}' was not found in the worker cache.`);
200
+ }
201
+ }
202
+ finally {
203
+ bridge?.close();
204
+ }
205
+ });
206
+ }
207
+ //# sourceMappingURL=worker-models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-models.js","sourceRoot":"","sources":["../../src/commands/worker-models.ts"],"names":[],"mappings":"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"}