@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,15 @@
1
+ /**
2
+ * `nodetool costs` — inspect provider spend tracked in the local DB.
3
+ *
4
+ * Reads the local SQLite `predictions` table directly (in-process), so it works
5
+ * without a running server. Every provider call NodeTool makes is recorded as a
6
+ * Prediction — LLM calls with token counts, image/video/audio generation with
7
+ * the billing unit, quantity and unit price behind the charge.
8
+ *
9
+ * A call whose model is in no price catalog is still recorded, with a null
10
+ * cost. It shows up in `list` and is counted as `unpriced` in the aggregates,
11
+ * so an unknown price reads as unknown rather than as free.
12
+ */
13
+ import type { Command } from "commander";
14
+ export declare function registerCostsCommands(program: Command): void;
15
+ //# sourceMappingURL=costs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"costs.d.ts","sourceRoot":"","sources":["../../src/commands/costs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiCzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8L5D"}
@@ -0,0 +1,201 @@
1
+ /**
2
+ * `nodetool costs` — inspect provider spend tracked in the local DB.
3
+ *
4
+ * Reads the local SQLite `predictions` table directly (in-process), so it works
5
+ * without a running server. Every provider call NodeTool makes is recorded as a
6
+ * Prediction — LLM calls with token counts, image/video/audio generation with
7
+ * the billing unit, quantity and unit price behind the charge.
8
+ *
9
+ * A call whose model is in no price catalog is still recorded, with a null
10
+ * cost. It shows up in `list` and is counted as `unpriced` in the aggregates,
11
+ * so an unknown price reads as unknown rather than as free.
12
+ */
13
+ import { Prediction } from "@nodetool-ai/models";
14
+ import { asJson, printTable, printKv } from "./output.js";
15
+ import { setupLocalDb, LOCAL_USER_ID } from "./local-db.js";
16
+ function fail(e) {
17
+ console.error(String(e instanceof Error ? e.message : e));
18
+ process.exit(1);
19
+ }
20
+ function usd(n) {
21
+ return `$${(n ?? 0).toFixed(4)}`;
22
+ }
23
+ /** A cost cell that tells an unpriced call apart from a genuinely free one. */
24
+ function costCell(cost) {
25
+ return cost == null ? "unpriced" : usd(cost);
26
+ }
27
+ /** The units behind a unit-billed charge, e.g. "5 × seconds @ $0.2050". */
28
+ function unitsCell(call) {
29
+ if (call.billing_unit == null && call.unit_price == null)
30
+ return "";
31
+ const quantity = call.quantity ?? 1;
32
+ const unit = call.billing_unit ?? "run";
33
+ const price = call.unit_price == null ? "" : ` @ ${usd(call.unit_price)}`;
34
+ return `${quantity} × ${unit}${price}`;
35
+ }
36
+ export function registerCostsCommands(program) {
37
+ const costs = program
38
+ .command("costs")
39
+ .description("Inspect tracked LLM/provider spend");
40
+ costs
41
+ .command("summary")
42
+ .description("Overall spend plus per-provider and per-model breakdowns")
43
+ .option("--json", "Output as JSON")
44
+ .action(async (opts) => {
45
+ try {
46
+ await setupLocalDb();
47
+ const [byProvider, byModel] = await Promise.all([
48
+ Prediction.aggregateByProvider(LOCAL_USER_ID),
49
+ Prediction.aggregateByModel(LOCAL_USER_ID)
50
+ ]);
51
+ // Derive the overall totals by summing the provider aggregates rather
52
+ // than issuing a third full-table scan (aggregateByUser).
53
+ const overall = byProvider.reduce((acc, p) => ({
54
+ total_cost: acc.total_cost + p.total_cost,
55
+ total_input_tokens: acc.total_input_tokens + p.total_input_tokens,
56
+ total_output_tokens: acc.total_output_tokens + p.total_output_tokens,
57
+ total_tokens: acc.total_tokens + p.total_tokens,
58
+ call_count: acc.call_count + p.call_count,
59
+ unpriced_count: acc.unpriced_count + p.unpriced_count
60
+ }), {
61
+ total_cost: 0,
62
+ total_input_tokens: 0,
63
+ total_output_tokens: 0,
64
+ total_tokens: 0,
65
+ call_count: 0,
66
+ unpriced_count: 0
67
+ });
68
+ if (opts.json) {
69
+ asJson({ overall, by_provider: byProvider, by_model: byModel });
70
+ return;
71
+ }
72
+ console.log("\nOverall");
73
+ printKv({
74
+ total_cost: usd(overall.total_cost),
75
+ total_tokens: overall.total_tokens,
76
+ calls: overall.call_count,
77
+ unpriced_calls: overall.unpriced_count
78
+ });
79
+ if (overall.unpriced_count > 0) {
80
+ console.log(`\n${overall.unpriced_count} call(s) ran on a model no price ` +
81
+ `catalog covers, so the total above is a lower bound. ` +
82
+ `Run \`nodetool costs list\` to see them.`);
83
+ }
84
+ console.log("\nBy provider");
85
+ printTable(byProvider.map((p) => ({
86
+ provider: p.provider,
87
+ cost: usd(p.total_cost),
88
+ tokens: p.total_tokens,
89
+ calls: p.call_count,
90
+ unpriced: p.unpriced_count
91
+ })));
92
+ console.log("\nBy model");
93
+ printTable(byModel.map((m) => ({
94
+ provider: m.provider,
95
+ model: m.model,
96
+ cost: usd(m.total_cost),
97
+ tokens: m.total_tokens,
98
+ calls: m.call_count,
99
+ unpriced: m.unpriced_count
100
+ })));
101
+ console.log();
102
+ }
103
+ catch (e) {
104
+ fail(e);
105
+ }
106
+ });
107
+ costs
108
+ .command("list")
109
+ .description("List recent provider calls with cost, tokens and billed units")
110
+ .option("--provider <name>", "Filter by provider")
111
+ .option("--model <id>", "Filter by model")
112
+ .option("--limit <n>", "Max results", "50")
113
+ .option("--json", "Output as JSON")
114
+ .action(async (opts) => {
115
+ const limit = Number.parseInt(opts.limit, 10);
116
+ if (!Number.isFinite(limit) || limit <= 0) {
117
+ console.error(`Invalid --limit value: ${opts.limit}`);
118
+ process.exit(1);
119
+ }
120
+ try {
121
+ await setupLocalDb();
122
+ const page = { limit };
123
+ if (opts.provider) {
124
+ page.provider = opts.provider;
125
+ }
126
+ if (opts.model) {
127
+ page.model = opts.model;
128
+ }
129
+ const [calls] = await Prediction.paginate(LOCAL_USER_ID, page);
130
+ if (opts.json) {
131
+ asJson(calls);
132
+ return;
133
+ }
134
+ printTable(calls.map((c) => ({
135
+ created_at: c.created_at ?? "",
136
+ provider: c.provider,
137
+ model: c.model,
138
+ cost: costCell(c.cost),
139
+ in: c.input_tokens ?? "",
140
+ out: c.output_tokens ?? "",
141
+ units: unitsCell(c)
142
+ })));
143
+ }
144
+ catch (e) {
145
+ fail(e);
146
+ }
147
+ });
148
+ costs
149
+ .command("by-provider")
150
+ .description("Aggregate spend grouped by provider")
151
+ .option("--json", "Output as JSON")
152
+ .action(async (opts) => {
153
+ try {
154
+ await setupLocalDb();
155
+ const data = await Prediction.aggregateByProvider(LOCAL_USER_ID);
156
+ if (opts.json) {
157
+ asJson(data);
158
+ return;
159
+ }
160
+ printTable(data.map((p) => ({
161
+ provider: p.provider,
162
+ cost: usd(p.total_cost),
163
+ input_tokens: p.total_input_tokens,
164
+ output_tokens: p.total_output_tokens,
165
+ calls: p.call_count,
166
+ unpriced: p.unpriced_count
167
+ })));
168
+ }
169
+ catch (e) {
170
+ fail(e);
171
+ }
172
+ });
173
+ costs
174
+ .command("by-model")
175
+ .description("Aggregate spend grouped by model")
176
+ .option("--provider <name>", "Filter by provider")
177
+ .option("--json", "Output as JSON")
178
+ .action(async (opts) => {
179
+ try {
180
+ await setupLocalDb();
181
+ const data = await Prediction.aggregateByModel(LOCAL_USER_ID, opts.provider ? { provider: opts.provider } : {});
182
+ if (opts.json) {
183
+ asJson(data);
184
+ return;
185
+ }
186
+ printTable(data.map((m) => ({
187
+ provider: m.provider,
188
+ model: m.model,
189
+ cost: usd(m.total_cost),
190
+ input_tokens: m.total_input_tokens,
191
+ output_tokens: m.total_output_tokens,
192
+ calls: m.call_count,
193
+ unpriced: m.unpriced_count
194
+ })));
195
+ }
196
+ catch (e) {
197
+ fail(e);
198
+ }
199
+ });
200
+ }
201
+ //# sourceMappingURL=costs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"costs.js","sourceRoot":"","sources":["../../src/commands/costs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerDbCommands(program: Command): void;
3
+ //# sourceMappingURL=db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/commands/db.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0IzC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkIzD"}
@@ -0,0 +1,176 @@
1
+ import { MigrationRunner, PostgresJsMigrationAdapter } from "@nodetool-ai/models";
2
+ function resolveDatabaseUrl(opts) {
3
+ const url = opts.directUrl ??
4
+ opts.databaseUrl ??
5
+ process.env["DIRECT_URL"] ??
6
+ process.env["DATABASE_URL"];
7
+ if (!url) {
8
+ throw new Error("No PostgreSQL connection URL provided. Pass --direct-url/--database-url, " +
9
+ "or set DIRECT_URL or DATABASE_URL to your Supabase direct connection URL.");
10
+ }
11
+ return url;
12
+ }
13
+ function maskDatabaseUrl(url) {
14
+ try {
15
+ const parsed = new URL(url);
16
+ if (parsed.password) {
17
+ parsed.password = "***";
18
+ }
19
+ return parsed.toString();
20
+ }
21
+ catch {
22
+ return "(provided)";
23
+ }
24
+ }
25
+ async function withPostgresMigrationRunner(databaseUrl, fn) {
26
+ const { default: postgres } = await import("postgres");
27
+ const sql = postgres(databaseUrl, {
28
+ max: 1,
29
+ idle_timeout: 5,
30
+ connect_timeout: 30
31
+ });
32
+ const adapter = new PostgresJsMigrationAdapter(sql);
33
+ try {
34
+ return await fn(new MigrationRunner(adapter));
35
+ }
36
+ finally {
37
+ try {
38
+ await adapter.release();
39
+ }
40
+ finally {
41
+ await sql.end();
42
+ }
43
+ }
44
+ }
45
+ function printStatus(status, databaseUrl) {
46
+ console.log(`Database: ${maskDatabaseUrl(databaseUrl)}`);
47
+ console.log(`State: ${status.state}`);
48
+ console.log(`Current version: ${status.currentVersion ?? "(none)"}`);
49
+ console.log(`Applied migrations: ${status.applied.length}`);
50
+ console.log(`Pending migrations: ${status.pending.length}`);
51
+ if (status.pending.length > 0) {
52
+ console.log("\nPending:");
53
+ for (const migration of status.pending) {
54
+ console.log(` ${migration.version} ${migration.name}`);
55
+ }
56
+ }
57
+ }
58
+ function printMigrationList(versions, dryRun) {
59
+ if (versions.length === 0) {
60
+ console.log("No pending migrations.");
61
+ return;
62
+ }
63
+ console.log(dryRun
64
+ ? `Would apply ${versions.length} migration(s):`
65
+ : `Applied ${versions.length} migration(s):`);
66
+ for (const version of versions) {
67
+ console.log(` ${version}`);
68
+ }
69
+ }
70
+ function getErrorMessage(error) {
71
+ return error instanceof Error ? error.message : String(error);
72
+ }
73
+ async function runCliAction(action) {
74
+ try {
75
+ await action();
76
+ }
77
+ catch (error) {
78
+ console.error(getErrorMessage(error));
79
+ process.exit(1);
80
+ }
81
+ }
82
+ function addDatabaseUrlOptions(command) {
83
+ return command
84
+ .option("--direct-url <url>", "Supabase/PostgreSQL direct connection URL for migrations (preferred)")
85
+ .option("--database-url <url>", "Supabase/PostgreSQL connection URL (defaults to DIRECT_URL or DATABASE_URL)");
86
+ }
87
+ export function registerDbCommands(program) {
88
+ const db = program
89
+ .command("db")
90
+ .description("Database migration commands for PostgreSQL/Supabase");
91
+ addDatabaseUrlOptions(db
92
+ .command("status")
93
+ .description("Show PostgreSQL/Supabase migration status")
94
+ .option("--json", "Output as JSON")).action(async (opts) => {
95
+ await runCliAction(async () => {
96
+ const databaseUrl = resolveDatabaseUrl(opts);
97
+ const status = await withPostgresMigrationRunner(databaseUrl, (runner) => runner.status());
98
+ if (opts.json) {
99
+ console.log(JSON.stringify(status, null, 2));
100
+ return;
101
+ }
102
+ printStatus(status, databaseUrl);
103
+ });
104
+ });
105
+ addDatabaseUrlOptions(db
106
+ .command("migrate")
107
+ .description("Apply pending PostgreSQL/Supabase migrations")
108
+ .option("--target <version>", "Stop after applying this migration version")
109
+ .option("--dry-run", "Print pending migrations without applying them")
110
+ .option("--skip-checksums", "Skip checksum validation")
111
+ .option("--json", "Output as JSON")).action(async (opts) => {
112
+ await runCliAction(async () => {
113
+ const databaseUrl = resolveDatabaseUrl(opts);
114
+ const versions = await withPostgresMigrationRunner(databaseUrl, (runner) => {
115
+ const migrateOptions = {
116
+ dryRun: opts.dryRun ?? false,
117
+ validateChecksums: !(opts.skipChecksums ?? false)
118
+ };
119
+ if (opts.target) {
120
+ migrateOptions.target = opts.target;
121
+ }
122
+ return runner.migrate(migrateOptions);
123
+ });
124
+ if (opts.json) {
125
+ console.log(JSON.stringify({
126
+ dryRun: opts.dryRun ?? false,
127
+ migrations: versions
128
+ }, null, 2));
129
+ return;
130
+ }
131
+ printMigrationList(versions, opts.dryRun ?? false);
132
+ });
133
+ });
134
+ addDatabaseUrlOptions(db
135
+ .command("baseline")
136
+ .description("Mark existing PostgreSQL/Supabase tables as migrated")
137
+ .option("--force", "Clear and recreate migration tracking records")
138
+ .option("--json", "Output as JSON")).action(async (opts) => {
139
+ await runCliAction(async () => {
140
+ const databaseUrl = resolveDatabaseUrl(opts);
141
+ const baselined = await withPostgresMigrationRunner(databaseUrl, (runner) => runner.baseline(opts.force ?? false));
142
+ if (opts.json) {
143
+ console.log(JSON.stringify({ baselined }, null, 2));
144
+ return;
145
+ }
146
+ console.log(`Baselined ${baselined} migration(s).`);
147
+ });
148
+ });
149
+ addDatabaseUrlOptions(db
150
+ .command("rollback")
151
+ .description("Roll back PostgreSQL/Supabase migrations")
152
+ .option("--steps <n>", "Number of migrations to roll back", "1")
153
+ .option("--json", "Output as JSON")).action(async (opts) => {
154
+ await runCliAction(async () => {
155
+ const steps = Number.parseInt(opts.steps ?? "1", 10);
156
+ if (!Number.isInteger(steps) || steps < 1) {
157
+ throw new Error("--steps must be a positive integer");
158
+ }
159
+ const databaseUrl = resolveDatabaseUrl(opts);
160
+ const rolledBack = await withPostgresMigrationRunner(databaseUrl, (runner) => runner.rollback(steps));
161
+ if (opts.json) {
162
+ console.log(JSON.stringify({ rolledBack }, null, 2));
163
+ return;
164
+ }
165
+ if (rolledBack.length === 0) {
166
+ console.log("No migrations to roll back.");
167
+ return;
168
+ }
169
+ console.log(`Rolled back ${rolledBack.length} migration(s):`);
170
+ for (const version of rolledBack) {
171
+ console.log(` ${version}`);
172
+ }
173
+ });
174
+ });
175
+ }
176
+ //# sourceMappingURL=db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/commands/db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * The console summary printed after a timeline, sketch or JS-script debug run.
3
+ * Only the document-specific line and the bundle's document file differ.
4
+ */
5
+ interface DebugSummaryReport {
6
+ verdict: {
7
+ ok: boolean;
8
+ headline: string;
9
+ issues: string[];
10
+ warnings?: string[];
11
+ };
12
+ interactions: {
13
+ ok: boolean;
14
+ }[];
15
+ }
16
+ export declare function printDebugSummary(report: DebugSummaryReport, bundleDir: string, doc: {
17
+ label: string;
18
+ meta: string;
19
+ file: string;
20
+ }): void;
21
+ export {};
22
+ //# sourceMappingURL=debug-summary-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-summary-output.d.ts","sourceRoot":"","sources":["../../src/commands/debug-summary-output.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,UAAU,kBAAkB;IAC1B,OAAO,EAAE;QACP,EAAE,EAAE,OAAO,CAAC;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,YAAY,EAAE;QAAE,EAAE,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;CACjC;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,kBAAkB,EAC1B,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjD,IAAI,CAwBN"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * The console summary printed after a timeline, sketch or JS-script debug run.
3
+ * Only the document-specific line and the bundle's document file differ.
4
+ */
5
+ export function printDebugSummary(report, bundleDir, doc) {
6
+ const column = Math.max(doc.label.length, "session".length) + 1;
7
+ const row = (label, text) => ` ${`${label}:`.padEnd(column)} ${text}`;
8
+ const mark = report.verdict.ok ? "✅" : "❌";
9
+ console.log(`\n${mark} ${report.verdict.headline}`);
10
+ console.log(row(doc.label, doc.meta));
11
+ const failed = report.interactions.filter((i) => !i.ok).length;
12
+ if (report.interactions.length > 0) {
13
+ console.log(row("session", `${report.interactions.length} step(s), ${failed} failed`));
14
+ }
15
+ if (report.verdict.issues.length > 0) {
16
+ console.log("\nIssues:");
17
+ for (const issue of report.verdict.issues)
18
+ console.log(` - ${issue}`);
19
+ }
20
+ if (report.verdict.warnings && report.verdict.warnings.length > 0) {
21
+ console.log("\nWarnings:");
22
+ for (const warning of report.verdict.warnings)
23
+ console.log(` - ${warning}`);
24
+ }
25
+ console.log(`\nDebug bundle: ${bundleDir}`);
26
+ console.log(` report.md / report.json · ${doc.file}`);
27
+ }
28
+ //# sourceMappingURL=debug-summary-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-summary-output.js","sourceRoot":"","sources":["../../src/commands/debug-summary-output.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,MAAM,UAAU,iBAAiB,CAC/B,MAA0B,EAC1B,SAAiB,EACjB,GAAkD;IAElD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChE,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,IAAY,EAAU,EAAE,CAClD,KAAK,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;IAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;IAC/D,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CACT,GAAG,CAAC,SAAS,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,aAAa,MAAM,SAAS,CAAC,CAC1E,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACzB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ;YAC3C,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,mBAAmB,SAAS,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,+BAA+B,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `nodetool debug` — the workflow debug harness command.
3
+ *
4
+ * Runs a workflow end-to-end on the headless server and (optionally) in a real
5
+ * browser, then writes a debug bundle (workflow JSON, every message/log/output/
6
+ * error, an OpenTelemetry trace summary, plus browser console errors and a
7
+ * screenshot) and prints an agent-friendly summary. Heavy dependencies are
8
+ * imported lazily inside the action so command registration stays light and
9
+ * unit-testable.
10
+ */
11
+ import type { Command } from "commander";
12
+ export declare function registerDebugCommands(program: Command): void;
13
+ //# sourceMappingURL=debug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/commands/debug.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2BzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4H5D"}
@@ -0,0 +1,138 @@
1
+ import { formatInterventionLine, formatSupervisedSummary, summarizeInterventions } from "@nodetool-ai/execution/debug";
2
+ import { addSupervisorOptions, parseSupervisorFlags } from "../supervisor.js";
3
+ import { numericOptionParser } from "../numeric-options.js";
4
+ import { printCommandError } from "../command-errors.js";
5
+ export function registerDebugCommands(program) {
6
+ addSupervisorOptions(program
7
+ .command("debug <workflow_id_or_file>")
8
+ .description("Run a workflow end-to-end (server and/or browser) and collect a full debug bundle")
9
+ .option("--no-server", "Skip the headless server surface")
10
+ .option("--browser", "Also run the workflow in a real browser (Playwright) — expensive")
11
+ .option("--trace", "Capture an OpenTelemetry trace of the server run (timing/tokens/cost) — expensive")
12
+ .option("--stages", "Capture a canvas screenshot at every browser run stage (implies --browser) — expensive")
13
+ .option("--params <json>", "JSON params string keyed by input-node name")
14
+ .option("--out <dir>", "Bundle output directory (default: nodetool-debug/<id>-<timestamp>)")
15
+ .option("--timeout <ms>", "Per-surface run timeout in milliseconds", numericOptionParser("--timeout", { integer: true, min: 0 }))
16
+ .option("--json", "Print the full DebugReport as JSON to stdout")
17
+ .option("--watch", "Re-run on file change and print a diff of the verdict (file targets only)")).action(async (ref, opts) => {
18
+ try {
19
+ const { initDb, Workflow } = await import("@nodetool-ai/models");
20
+ const { initMasterKey } = await import("@nodetool-ai/security");
21
+ const { getDefaultDbPath } = await import("@nodetool-ai/config");
22
+ const { runDebug, runWatchLoop, snapshotDebugReport } = await import("../debug/index.js");
23
+ initDb(getDefaultDbPath());
24
+ try {
25
+ await initMasterKey();
26
+ }
27
+ catch {
28
+ // Secret decryption is best-effort for debug runs; a missing master
29
+ // key only affects nodes that need secrets.
30
+ }
31
+ const params = opts.params
32
+ ? JSON.parse(opts.params)
33
+ : {};
34
+ const loadFromDb = (id) => Workflow.get(id);
35
+ // In watch mode keep a stable bundle dir so each re-run overwrites
36
+ // rather than littering timestamped directories.
37
+ const supervisor = parseSupervisorFlags(opts);
38
+ const runOptions = {
39
+ server: opts.server,
40
+ browser: opts.browser ?? false,
41
+ trace: opts.trace ?? false,
42
+ stages: opts.stages ?? false,
43
+ params
44
+ };
45
+ if (supervisor) {
46
+ runOptions.supervisor = supervisor;
47
+ }
48
+ if (opts.out) {
49
+ runOptions.outDir = opts.out;
50
+ }
51
+ else if (opts.watch) {
52
+ runOptions.outDir = `nodetool-debug/${watchSlug(ref)}-watch`;
53
+ }
54
+ if (opts.timeout) {
55
+ runOptions.timeoutMs = opts.timeout;
56
+ }
57
+ const runOnce = () => runDebug(ref, runOptions, {
58
+ loadFromDb,
59
+ onLog: (line) => console.error(line.trimEnd())
60
+ });
61
+ const report = await runOnce();
62
+ if (opts.json) {
63
+ console.log(JSON.stringify(report, null, 2));
64
+ }
65
+ else {
66
+ printSummary(report);
67
+ }
68
+ if (!opts.watch) {
69
+ process.exit(report.verdict.ok ? 0 : 1);
70
+ }
71
+ // ── Watch mode ────────────────────────────────────────────────────
72
+ const { existsSync } = await import("node:fs");
73
+ const { resolve } = await import("node:path");
74
+ const watchPath = resolve(ref);
75
+ if (!existsSync(watchPath)) {
76
+ console.error(`\n--watch needs a file target to watch; "${ref}" is not a file on disk.`);
77
+ process.exit(1);
78
+ }
79
+ await runWatchLoop({
80
+ file: watchPath,
81
+ first: report,
82
+ run: runOnce,
83
+ snapshot: snapshotDebugReport,
84
+ log: (line) => console.error(line)
85
+ });
86
+ process.exit(0);
87
+ }
88
+ catch (e) {
89
+ printCommandError(e, opts.json);
90
+ process.exit(1);
91
+ }
92
+ });
93
+ }
94
+ function watchSlug(ref) {
95
+ return (ref
96
+ .replace(/[^a-zA-Z0-9_-]+/g, "-")
97
+ .replace(/^-+|-+$/g, "")
98
+ .slice(0, 40) || "workflow");
99
+ }
100
+ function printSummary(report) {
101
+ const mark = report.verdict.ok ? "✅" : "❌";
102
+ console.log(`\n${mark} ${report.verdict.headline}`);
103
+ if (report.server) {
104
+ console.log(` server: ${report.server.status} (${report.server.summary.counts.errored} node error(s))`);
105
+ const interventions = report.server.summary.interventions;
106
+ if (report.server.supervised && interventions.length > 0) {
107
+ for (const intervention of interventions) {
108
+ console.log(` ${formatInterventionLine(intervention)}`);
109
+ }
110
+ console.log(` ${formatSupervisedSummary(summarizeInterventions(interventions))}`);
111
+ }
112
+ }
113
+ if (report.browser) {
114
+ console.log(report.browser.unavailableReason
115
+ ? ` browser: skipped — ${report.browser.unavailableReason}`
116
+ : ` browser: ${report.browser.status} (${report.browser.consoleErrors.length} console error(s))`);
117
+ }
118
+ if (report.verdict.issues.length > 0) {
119
+ console.log("\nIssues:");
120
+ for (const issue of report.verdict.issues)
121
+ console.log(` - ${issue}`);
122
+ }
123
+ if (report.verdict.warnings && report.verdict.warnings.length > 0) {
124
+ console.log("\nWarnings:");
125
+ for (const warning of report.verdict.warnings)
126
+ console.log(` - ${warning}`);
127
+ }
128
+ if (report.bundleDir) {
129
+ const parts = ["report.md / report.json", "workflow.json"];
130
+ if (report.server)
131
+ parts.push("server/");
132
+ if (report.browser && !report.browser.unavailableReason)
133
+ parts.push("browser/");
134
+ console.log(`\nDebug bundle: ${report.bundleDir}`);
135
+ console.log(` ${parts.join(" · ")}`);
136
+ }
137
+ }
138
+ //# sourceMappingURL=debug.js.map