@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,117 @@
1
+ import { mkdtemp, rm, writeFile } from "node:fs/promises";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { describe, expect, it, vi } from "vitest";
5
+ import { Command } from "commander";
6
+ import { registerTimelineRenderCommand, runTimelineRender } from "../timeline-render.js";
7
+ const incompleteRenderer = async ({ outPath, writeFrame }) => {
8
+ if (writeFrame) {
9
+ await writeFrame(0, new Uint8Array(16 * 16 * 4));
10
+ }
11
+ else {
12
+ await writeFile(outPath, "retained incomplete artifact");
13
+ }
14
+ return {
15
+ totalFrames: 1,
16
+ skippedClips: ["missing-clip"],
17
+ fontsUnavailable: [],
18
+ complete: false,
19
+ diagnostics: [
20
+ {
21
+ clipId: "missing-clip",
22
+ startMs: 0,
23
+ endMs: 1000,
24
+ reason: "missing_asset",
25
+ detail: "No current asset is available."
26
+ }
27
+ ]
28
+ };
29
+ };
30
+ describe("timeline export completeness", () => {
31
+ it("preserves missing-content diagnostics in preview results", async () => {
32
+ const directory = await mkdtemp(path.join(os.tmpdir(), "timeline-completeness-"));
33
+ try {
34
+ const input = path.join(directory, "timeline.json");
35
+ await writeFile(input, JSON.stringify({
36
+ name: "Missing content",
37
+ width: 16,
38
+ height: 16,
39
+ fps: 30,
40
+ durationMs: 1000,
41
+ document: { tracks: [], clips: [], markers: [] }
42
+ }));
43
+ const diagnostics = [
44
+ {
45
+ clipId: "missing-clip",
46
+ startMs: 0,
47
+ endMs: 1000,
48
+ reason: "missing_asset",
49
+ detail: "No current asset is available."
50
+ }
51
+ ];
52
+ const result = await runTimelineRender(input, { out: path.join(directory, "stills"), stills: true, frames: "0" }, async () => null, async () => ({
53
+ totalFrames: 1,
54
+ skippedClips: ["missing-clip"],
55
+ fontsUnavailable: [],
56
+ complete: false,
57
+ diagnostics
58
+ }));
59
+ expect(result).toMatchObject({
60
+ complete: false,
61
+ diagnostics,
62
+ skippedClips: ["missing-clip"]
63
+ });
64
+ }
65
+ finally {
66
+ await rm(directory, { recursive: true, force: true });
67
+ }
68
+ });
69
+ it.each([
70
+ { stills: false, exitCode: 1 },
71
+ { stills: true, exitCode: 0 }
72
+ ])("reports incomplete content with stills=$stills and exit=$exitCode", async ({ stills, exitCode }) => {
73
+ const directory = await mkdtemp(path.join(os.tmpdir(), "timeline-completeness-command-"));
74
+ const exit = vi
75
+ .spyOn(process, "exit")
76
+ .mockImplementation(() => undefined);
77
+ const log = vi.spyOn(console, "log").mockImplementation(() => { });
78
+ const error = vi.spyOn(console, "error").mockImplementation(() => { });
79
+ try {
80
+ const input = path.join(directory, "timeline.json");
81
+ await writeFile(input, JSON.stringify({
82
+ name: "Missing content",
83
+ width: 16,
84
+ height: 16,
85
+ fps: 30,
86
+ durationMs: 1000,
87
+ document: { tracks: [], clips: [], markers: [] }
88
+ }));
89
+ const command = new Command();
90
+ registerTimelineRenderCommand(command, async () => async () => null, incompleteRenderer);
91
+ await command.parseAsync([
92
+ "render",
93
+ input,
94
+ "--out",
95
+ path.join(directory, stills ? "stills" : "frames.zip"),
96
+ "--format",
97
+ "png_sequence",
98
+ "--frames",
99
+ "0",
100
+ "--json",
101
+ ...(stills ? ["--stills"] : [])
102
+ ], { from: "user" });
103
+ expect(exit).toHaveBeenCalledExactlyOnceWith(exitCode);
104
+ expect(JSON.parse(String(log.mock.calls[0][0]))).toMatchObject({
105
+ complete: false,
106
+ diagnostics: [{ clipId: "missing-clip", reason: "missing_asset" }]
107
+ });
108
+ }
109
+ finally {
110
+ exit.mockRestore();
111
+ log.mockRestore();
112
+ error.mockRestore();
113
+ await rm(directory, { recursive: true, force: true });
114
+ }
115
+ });
116
+ });
117
+ //# sourceMappingURL=timeline-render-completeness.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-render-completeness.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/timeline-render-completeness.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=timeline-render.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-render.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/timeline-render.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,115 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { parseCoverageFrames, parseFrameSpec, selectClipSubset } from "../timeline-render.js";
3
+ describe("parseFrameSpec", () => {
4
+ it("reads indices and inclusive ranges into sorted unique frames", () => {
5
+ expect(parseFrameSpec("290, 175,5-7,6", 450)).toEqual([5, 6, 7, 175, 290]);
6
+ });
7
+ it("accepts the last frame and refuses the one after it", () => {
8
+ expect(parseFrameSpec("449", 450)).toEqual([449]);
9
+ expect(() => parseFrameSpec("440-450", 450)).toThrow(/frames 0-449/);
10
+ });
11
+ it.each(["abc", "5-", "-5", "1.5", "3-1"])("refuses %j", (spec) => {
12
+ expect(() => parseFrameSpec(spec, 450)).toThrow();
13
+ });
14
+ it("refuses an empty selection", () => {
15
+ expect(() => parseFrameSpec(" , ", 450)).toThrow(/empty/);
16
+ });
17
+ });
18
+ describe("selectClipSubset", () => {
19
+ const clips = [
20
+ { id: "S1", name: "S1", mediaType: "group" },
21
+ { id: "g3", name: "streaks", mediaType: "group", parentId: "S1" },
22
+ { id: "s4", name: "streak-far", parentId: "g3" },
23
+ { id: "s6", name: "streak-mid", parentId: "g3" },
24
+ { id: "t11", name: "word-0", parentId: "S1" },
25
+ { id: "t15", name: "text", parentId: "S1" },
26
+ {
27
+ id: "t16",
28
+ name: "text",
29
+ parentId: "S1",
30
+ matte: { sourceClipId: "m1", mode: "alpha" }
31
+ },
32
+ { id: "M", name: "mattes", mediaType: "group" },
33
+ { id: "m1", name: "wipe", parentId: "M" },
34
+ { id: "other", name: "other" }
35
+ ];
36
+ const ids = (list) => list.map((c) => c.id);
37
+ it("keeps a clip and its ancestor groups but not its siblings", () => {
38
+ expect(ids(selectClipSubset(clips, "s4"))).toEqual(["S1", "g3", "s4"]);
39
+ });
40
+ it("matches names, every clip that shares one, and ids in one list", () => {
41
+ expect(ids(selectClipSubset(clips, "streak-mid, word-0"))).toEqual([
42
+ "S1",
43
+ "g3",
44
+ "s6",
45
+ "t11"
46
+ ]);
47
+ expect(ids(selectClipSubset(clips, "text"))).toEqual([
48
+ "S1",
49
+ "t15",
50
+ "t16",
51
+ "M",
52
+ "m1"
53
+ ]);
54
+ });
55
+ it("keeps the children of a selected group", () => {
56
+ expect(ids(selectClipSubset(clips, "streaks"))).toEqual([
57
+ "S1",
58
+ "g3",
59
+ "s4",
60
+ "s6"
61
+ ]);
62
+ });
63
+ it("keeps a matte source clip and that source's ancestors", () => {
64
+ expect(ids(selectClipSubset(clips, "t16"))).toEqual([
65
+ "S1",
66
+ "t16",
67
+ "M",
68
+ "m1"
69
+ ]);
70
+ });
71
+ it("names every token that matches no clip", () => {
72
+ expect(() => selectClipSubset(clips, "s4,nope,also-nope")).toThrow(/"nope", "also-nope"/);
73
+ });
74
+ it("refuses an empty list", () => {
75
+ expect(() => selectClipSubset(clips, " , ")).toThrow(/empty/);
76
+ });
77
+ });
78
+ describe("parseCoverageFrames", () => {
79
+ const builder = [
80
+ "#!/usr/bin/env tsx",
81
+ "// Kite builder.",
82
+ "//",
83
+ "// | Feature | Clip | Frame |",
84
+ "// |---|---|---|",
85
+ "// | Slow push-in | `street` (S1) | 40 |",
86
+ "// | Music | `drums` | — |",
87
+ "// | Logo reveal | `logo` | 412 |",
88
+ "// | Chart | `chart` | 40 |",
89
+ "",
90
+ "// | Not | leading | 999 |",
91
+ "import x from 'y';",
92
+ "// | Late | table | 7 |"
93
+ ].join("\n");
94
+ it("reads the Frame column of the table in the leading comment", () => {
95
+ const { frames, skipped } = parseCoverageFrames(builder);
96
+ expect(frames).toEqual([40, 412, 40]);
97
+ expect(skipped).toEqual([{ row: "Music | `drums`", value: "—" }]);
98
+ });
99
+ it("reads a table inside a leading block comment", () => {
100
+ const source = [
101
+ "/**",
102
+ " * | Feature | Frame |",
103
+ " * | --- | --- |",
104
+ " * | Push | 12 |",
105
+ " */",
106
+ "export {};"
107
+ ].join("\n");
108
+ expect(parseCoverageFrames(source).frames).toEqual([12]);
109
+ });
110
+ it("refuses a file whose leading comment has no Frame table", () => {
111
+ expect(() => parseCoverageFrames("// | A | B |\n// |---|---|\n// | 1 | 2 |\nexport {};")).toThrow(/Frame/);
112
+ expect(() => parseCoverageFrames("export {};\n// | A | Frame |\n// |---|---|\n// | x | 1 |")).toThrow(/Frame/);
113
+ });
114
+ });
115
+ //# sourceMappingURL=timeline-render.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-render.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/timeline-render.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=timeline-score.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-score.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/timeline-score.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,100 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { evenlySpacedFrames, renderTimelineScore } from "../timeline-score.js";
3
+ const metric = (overrides) => ({
4
+ metric: "animationsPerSecond",
5
+ value: 1,
6
+ referenceMedian: 1,
7
+ ratio: 1,
8
+ credit: 1,
9
+ ...overrides
10
+ });
11
+ const result = (overrides = {}) => ({
12
+ score: 80,
13
+ rawScore: 80,
14
+ penalty: 0,
15
+ metrics: {
16
+ clipCount: 2,
17
+ visibleSeconds: 2,
18
+ animationsPerSecond: 1,
19
+ keyframesPerSecond: 1,
20
+ distinctAnimatedProperties: 1,
21
+ distinctEffectTypes: 1,
22
+ featureFlagsUsed: 1,
23
+ styleTracks: 1,
24
+ textAnimators: 1,
25
+ authoredTransitions: 1,
26
+ sceneCount: 1
27
+ },
28
+ metricScores: [metric({})],
29
+ reference: { entries: [{ slug: "kite", metrics: {} }], median: {} },
30
+ showcaseWarnings: [],
31
+ showcaseWarningCodeCounts: {},
32
+ validation: { ok: true, errors: [], warnings: [] },
33
+ ...overrides
34
+ });
35
+ describe("evenlySpacedFrames", () => {
36
+ it("spans first to last frame inclusive, deduped and sorted", () => {
37
+ expect(evenlySpacedFrames(100, 5)).toEqual([0, 25, 50, 74, 99]);
38
+ });
39
+ it("never asks for more frames than the timeline has", () => {
40
+ expect(evenlySpacedFrames(3, 12)).toEqual([0, 1, 2]);
41
+ });
42
+ it("returns frame 0 for a single-frame or empty timeline", () => {
43
+ expect(evenlySpacedFrames(1, 12)).toEqual([0]);
44
+ expect(evenlySpacedFrames(0, 12)).toEqual([0]);
45
+ });
46
+ });
47
+ describe("renderTimelineScore", () => {
48
+ it("reports the score, penalty and reference band", () => {
49
+ const lines = renderTimelineScore(result());
50
+ expect(lines[0]).toContain("80.0/100");
51
+ expect(lines[0]).toContain("raw 80.0");
52
+ expect(lines.find((l) => l.includes("Reference band"))).toContain("kite");
53
+ });
54
+ it("lists showcase warnings when present, penalizing once per distinct code", () => {
55
+ const lines = renderTimelineScore(result({
56
+ score: 65,
57
+ rawScore: 75,
58
+ penalty: 10,
59
+ showcaseWarnings: [
60
+ {
61
+ severity: "warning",
62
+ code: "showcase_text_collision",
63
+ message: "text overlaps text 1"
64
+ },
65
+ {
66
+ severity: "warning",
67
+ code: "showcase_text_collision",
68
+ message: "text overlaps text 2"
69
+ },
70
+ {
71
+ severity: "warning",
72
+ code: "showcase_camera_missing",
73
+ message: "no camera moves the scene"
74
+ }
75
+ ],
76
+ showcaseWarningCodeCounts: {
77
+ showcase_text_collision: 2,
78
+ showcase_camera_missing: 1
79
+ }
80
+ }));
81
+ expect(lines[0]).toContain("65.0/100");
82
+ expect(lines[0]).toContain("-10 for 2 distinct showcase warning code(s)");
83
+ expect(lines.some((l) => l.includes("showcase_text_collision ×2"))).toBe(true);
84
+ expect(lines.some((l) => l.includes("showcase_camera_missing ×1"))).toBe(true);
85
+ expect(lines.some((l) => l.includes("[showcase_text_collision] text overlaps text 1"))).toBe(true);
86
+ });
87
+ it("flags a document that failed validation", () => {
88
+ const lines = renderTimelineScore(result({
89
+ validation: {
90
+ ok: false,
91
+ errors: [
92
+ { severity: "error", code: "schema_invalid", message: "bad" }
93
+ ],
94
+ warnings: []
95
+ }
96
+ }));
97
+ expect(lines.some((l) => l.includes("1 validation error"))).toBe(true);
98
+ });
99
+ });
100
+ //# sourceMappingURL=timeline-score.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-score.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/timeline-score.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * `nodetool affected` — map changed files to the workspaces that need checking.
3
+ *
4
+ * With no file arguments it reads the working-tree changes from git. Prints the
5
+ * affected packages and the minimal build/test commands; `--json` for tooling.
6
+ */
7
+ import type { Command } from "commander";
8
+ export declare function registerAffectedCommand(program: Command): void;
9
+ //# sourceMappingURL=affected.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"affected.d.ts","sourceRoot":"","sources":["../../src/commands/affected.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAczC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwG9D"}
@@ -0,0 +1,122 @@
1
+ import { computeAffected, EXTRA_WORKSPACE_PATHS, TOP_LEVEL_WORKSPACES } from "../affected/affected.js";
2
+ export function registerAffectedCommand(program) {
3
+ program
4
+ .command("affected [files...]")
5
+ .description("Map changed files (or git working-tree changes) to the workspaces that must be rebuilt/tested")
6
+ .option("--base <ref>", "Compare against a git ref (e.g. main) instead of the working tree")
7
+ .option("--json", "Print the result as JSON")
8
+ .action(async (files, opts) => {
9
+ try {
10
+ const { readFileSync, readdirSync, existsSync } = await import("node:fs");
11
+ const { join, resolve, dirname } = await import("node:path");
12
+ const { fileURLToPath } = await import("node:url");
13
+ const { execSync } = await import("node:child_process");
14
+ const here = dirname(fileURLToPath(import.meta.url));
15
+ // dist layout: packages/cli/dist/commands → repo root is four up.
16
+ const repoRoot = resolve(here, "..", "..", "..", "..");
17
+ // Workspaces come from the root package.json, not from a scan of
18
+ // packages/ — `reliability/harness` is a workspace too, and scanning
19
+ // one directory reported every change under it as belonging to no
20
+ // workspace at all.
21
+ const rootPkg = JSON.parse(readFileSync(join(repoRoot, "package.json"), "utf8"));
22
+ const topLevel = new Set(TOP_LEVEL_WORKSPACES);
23
+ const dirs = [];
24
+ for (const entry of rootPkg.workspaces ?? []) {
25
+ const pattern = entry.replace(/\/$/, "");
26
+ if (!pattern.endsWith("/*")) {
27
+ dirs.push(pattern);
28
+ continue;
29
+ }
30
+ const parent = pattern.slice(0, -2);
31
+ if (!existsSync(join(repoRoot, parent)))
32
+ continue;
33
+ for (const child of readdirSync(join(repoRoot, parent), {
34
+ withFileTypes: true
35
+ })) {
36
+ if (child.isDirectory())
37
+ dirs.push(`${parent}/${child.name}`);
38
+ }
39
+ }
40
+ const packages = [];
41
+ for (const dir of dirs) {
42
+ // web/electron get their own command shape in computeAffected.
43
+ if (topLevel.has(dir))
44
+ continue;
45
+ const pkgJsonPath = join(repoRoot, dir, "package.json");
46
+ if (!existsSync(pkgJsonPath))
47
+ continue;
48
+ try {
49
+ const pkg = JSON.parse(readFileSync(pkgJsonPath, "utf8"));
50
+ if (!pkg.name)
51
+ continue;
52
+ const allDeps = {
53
+ ...(pkg.dependencies ?? {}),
54
+ ...(pkg.devDependencies ?? {})
55
+ };
56
+ packages.push({
57
+ name: pkg.name,
58
+ dir,
59
+ internalDeps: Object.keys(allDeps).filter((d) => d.startsWith("@nodetool-ai/")),
60
+ ownedPaths: [...(EXTRA_WORKSPACE_PATHS[pkg.name] ?? [])]
61
+ });
62
+ }
63
+ catch {
64
+ // A malformed package.json shouldn't abort the whole mapping.
65
+ }
66
+ }
67
+ let changedFiles = files;
68
+ if (changedFiles.length === 0) {
69
+ const cmd = opts.base
70
+ ? `git diff --name-only ${opts.base}...HEAD`
71
+ : "git status --porcelain";
72
+ const out = execSync(cmd, { cwd: repoRoot, encoding: "utf8" });
73
+ changedFiles = opts.base
74
+ ? out.split("\n").map((l) => l.trim()).filter(Boolean)
75
+ : out
76
+ .split("\n")
77
+ .map((l) => l.slice(3).trim())
78
+ .filter(Boolean);
79
+ }
80
+ const result = computeAffected(changedFiles, packages);
81
+ if (opts.json) {
82
+ console.log(JSON.stringify(result, null, 2));
83
+ }
84
+ else {
85
+ printAffected(result, changedFiles.length);
86
+ }
87
+ }
88
+ catch (e) {
89
+ console.error(String(e));
90
+ process.exit(1);
91
+ }
92
+ });
93
+ }
94
+ function printAffected(result, fileCount) {
95
+ if (fileCount === 0) {
96
+ console.log("\nNo changed files detected.");
97
+ return;
98
+ }
99
+ console.log(`\n${result.affected.length} affected workspace(s) from ${fileCount} changed file(s):`);
100
+ for (const name of result.affected) {
101
+ const tag = result.changed.includes(name) ? "changed" : "dependent";
102
+ const build = result.needsBuild.includes(name) ? " (rebuild)" : "";
103
+ console.log(` ${tag.padEnd(9)} ${name}${build}`);
104
+ }
105
+ if (result.unmatched.length > 0) {
106
+ console.log(`\n${result.unmatched.length} file(s) outside any workspace:`);
107
+ for (const f of result.unmatched.slice(0, 10))
108
+ console.log(` ${f}`);
109
+ if (result.unmatched.length > 10) {
110
+ console.log(` …and ${result.unmatched.length - 10} more`);
111
+ }
112
+ }
113
+ if (result.commands.length > 0) {
114
+ console.log("\nSuggested commands:");
115
+ for (const cmd of result.commands)
116
+ console.log(` ${cmd}`);
117
+ }
118
+ else {
119
+ console.log("\nNo workspace commands needed.");
120
+ }
121
+ }
122
+ //# sourceMappingURL=affected.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"affected.js","sourceRoot":"","sources":["../../src/commands/affected.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,33 @@
1
1
  /**
2
- * `nodetool agent` — load YAML agent configs and run them with full trace output.
2
+ * `nodetool agent` — run one CodeAct turn over the default toolbelt, with full
3
+ * trace output.
4
+ *
5
+ * The loop is the chat's loop: the belt is assembled by `buildCliAgentBelt`
6
+ * and the turn by `createCliCodeActTurn`, both shared with `--stdin` chat, so
7
+ * the provider is offered `execute_code` and the toolbelt lives in the sandbox.
8
+ * `create_plan` and `execute_plan` are on the belt, so an objective that wants
9
+ * a plan gets one and the `planning_update` / `task_update` events stream.
3
10
  *
4
11
  * Subcommands:
5
- * nodetool agent run <yaml-file> [--objective "..."] [--mode loop|plan|multi-agent]
6
- * nodetool agent test <yaml-file> # validate config + dry list of tools/provider
7
- * nodetool agent list <dir> # list YAML configs in a directory
12
+ * nodetool agent run --objective "..." # objective may also come from stdin
13
+ * nodetool agent diagnose <job_id> # aggregate a failed run into a report
8
14
  */
9
15
  import { Command } from "commander";
16
+ export interface RunOptions {
17
+ objective?: string;
18
+ provider?: string;
19
+ model?: string;
20
+ workspace?: string;
21
+ maxIterations?: string;
22
+ permissionMode?: string;
23
+ /** `--cost-cap <usd>`; `0` lifts the cap. Defaults to the agent settings. */
24
+ costCap?: string;
25
+ /** `--timeout <s>`; `0` leaves the run no time. Defaults to the settings. */
26
+ timeout?: string;
27
+ json?: boolean;
28
+ verbose?: boolean;
29
+ }
30
+ /** Exit code for the process: 0 when the turn finished without an error. */
31
+ export declare function runAgentCommand(opts: RunOptions): Promise<number>;
10
32
  export declare function registerAgentCommands(program: Command): void;
11
33
  //# sourceMappingURL=agent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwmBpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6C5D"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6JpC,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAcD,4EAA4E;AAC5E,wBAAsB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CA+NvE;AAgJD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+D5D"}