@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,197 @@
1
+ /**
2
+ * Headless ("server") debug surface: runs a workflow through
3
+ * `@nodetool-ai/execution`'s `ExecutionSession` exactly as
4
+ * `nodetool workflows run` does, but captures the full processing-message
5
+ * stream and the OpenTelemetry trace instead of just the final outputs.
6
+ *
7
+ * This is integration code — it pulls in the node registries, runtime context,
8
+ * and Python bridge — so it is exercised end-to-end rather than unit-tested.
9
+ */
10
+ import { getDefaultAssetsPath } from "@nodetool-ai/config";
11
+ import { getSecret, Project, Workflow } from "@nodetool-ai/models";
12
+ import { ExecutionSession, isExecutionPreflightError } from "@nodetool-ai/execution";
13
+ import { ProcessingContext } from "@nodetool-ai/runtime";
14
+ import { FileStorageAdapter } from "@nodetool-ai/storage";
15
+ import { summarizeInterventions } from "@nodetool-ai/execution/debug";
16
+ import { createGraphNodeTypeResolver } from "@nodetool-ai/node-sdk";
17
+ import { buildFullRegistry } from "../node-registry.js";
18
+ import { createSupervisorHandle, recordSupervisorCost, streamInterventionLines } from "../supervisor.js";
19
+ import { isRecord } from "../predicates.js";
20
+ import { collectExecutionSummary } from "./collector.js";
21
+ import { readTraceSummary } from "./trace.js";
22
+ /** An output_update carrying a streamed audio chunk's samples. */
23
+ const isAudioChunkOutputUpdate = (message) => {
24
+ if (message.type !== "output_update")
25
+ return false;
26
+ const value = message.value;
27
+ return (isRecord(value) &&
28
+ value.type === "chunk" &&
29
+ value.content_type === "audio");
30
+ };
31
+ /**
32
+ * The project a server run of this workflow uses: the stored workflow's
33
+ * project, else the user's Personal project, where uploads land. Without it
34
+ * project-scoped capabilities such as `get_asset` reject every asset.
35
+ */
36
+ async function resolveRunProjectId(workflowId) {
37
+ const workflow = workflowId ? await Workflow.find("1", workflowId) : null;
38
+ return workflow?.project_id ?? (await Project.ensurePersonal("1")).id;
39
+ }
40
+ export async function runOnServer(input) {
41
+ const { graph, workflowId, params } = input;
42
+ const startedAt = Date.now();
43
+ const registry = buildFullRegistry();
44
+ const jobId = `debug-${Date.now()}`;
45
+ // Match a server run's workspace assignment so file/workspace nodes land in
46
+ // the same place a real run would.
47
+ const { resolveWorkflowWorkspace } = await import("@nodetool-ai/websocket");
48
+ const workspace = await resolveWorkflowWorkspace(workflowId ?? null, "1");
49
+ const contextInit = {
50
+ jobId,
51
+ workflowId,
52
+ userId: "1",
53
+ projectId: await resolveRunProjectId(workflowId),
54
+ secretResolver: getSecret,
55
+ storage: new FileStorageAdapter(getDefaultAssetsPath()),
56
+ workspace,
57
+ // The debug bundle crosses a JSON boundary. Store generated media so raw
58
+ // RGBA frames and image collections remain encoded, compact references.
59
+ assetOutputMode: "storage_url"
60
+ };
61
+ const context = input.context ? input.context.copy({ jobId, workflowId, workspace }) : new ProcessingContext(contextInit);
62
+ // ExecutionSession owns editor-only-node pruning (Comment/Group/Reroute —
63
+ // the web editor prunes them at serialize time; without this every
64
+ // commented example would die with "Unknown node type"), graph hydration,
65
+ // Python-bridge connection, and executor resolution (registry → Python
66
+ // bridge → throw) — the three steps this surface used to hand-roll.
67
+ // `limits.runTimeoutMs` replaces the old `withTimeout` race: instead of
68
+ // resolving a synthetic result while abandoning a still-running kernel, the
69
+ // facade calls `session.cancel("timeout")`, which actually tears the run
70
+ // down, and `session.result` only settles once that teardown completes.
71
+ // Supervision plumbs through the facade — the one integration point every
72
+ // surface shares (docs/workflow-supervisor-design.md §7).
73
+ const supervisor = input.supervisor
74
+ ? await createSupervisorHandle({ config: input.supervisor, context })
75
+ : null;
76
+ const sessionOptions = {
77
+ graph,
78
+ registry,
79
+ // Registry alone hydrates node flags but not `propertyTypes`, and
80
+ // correlation analysis reads list-ness only from that map — so every
81
+ // `list[...]` handle read as non-list here and a stream arriving on one
82
+ // collapsed to empty scope, keeping the last value. `Directed Film to
83
+ // Timeline` animated one shot of N under `debug` and all N under
84
+ // `workflows run`, which is backwards for a harness whose whole job is
85
+ // to reproduce a run. Same resolver `workflows run` and the websocket
86
+ // runner already pass.
87
+ resolveNodeType: createGraphNodeTypeResolver(registry).resolveNodeType,
88
+ jobId,
89
+ workflowId,
90
+ params,
91
+ context,
92
+ limits: { runTimeoutMs: input.timeoutMs }
93
+ };
94
+ // Capture is retention, so it stays off unless a supervised run needs the
95
+ // stream to print its `⛨` lines as they happen.
96
+ if (supervisor) {
97
+ sessionOptions.supervisor = supervisor.handle;
98
+ sessionOptions.captureMessages = true;
99
+ }
100
+ // A live host relays everything emitted on the run's context. That is a
101
+ // superset of RunResult.messages: a node can emit on its own, and an Agent
102
+ // node's tool calls (what a mini app's Agent Activity widget shows) only
103
+ // ever travel that way. The realtime-audio firehose stays out, as it does
104
+ // from the runner's own retention.
105
+ const relayed = [];
106
+ const detachRelay = context.addMessageListener((message) => {
107
+ if (!isAudioChunkOutputUpdate(message))
108
+ relayed.push(message);
109
+ });
110
+ // A run this runtime cannot honour (unknown model, unregistered provider,
111
+ // missing credential) is refused by `create()` before the kernel starts.
112
+ // The harness's job is to report why a run did not happen, so the refusal
113
+ // becomes a failed report rather than a thrown stack.
114
+ let session;
115
+ try {
116
+ session = await ExecutionSession.create(sessionOptions);
117
+ }
118
+ catch (err) {
119
+ detachRelay();
120
+ if (!isExecutionPreflightError(err))
121
+ throw err;
122
+ supervisor?.handle.close();
123
+ const summary = collectExecutionSummary([]);
124
+ summary.status = "failed";
125
+ summary.error = err.message;
126
+ return {
127
+ report: {
128
+ surface: "server",
129
+ ok: false,
130
+ status: "failed",
131
+ error: err.message,
132
+ durationMs: Date.now() - startedAt,
133
+ summary,
134
+ trace: null
135
+ },
136
+ rawMessages: []
137
+ };
138
+ }
139
+ const interventionLines = supervisor
140
+ ? streamInterventionLines(session.messages, input.onInterventionLine ?? ((line) => console.error(line)))
141
+ : Promise.resolve();
142
+ // `session.result` never rejects — kernel failures (including an unknown
143
+ // node type surfaced during executor resolution) resolve as `status:
144
+ // "failed"` instead of throwing, so no try/catch is needed here.
145
+ const result = await session.result;
146
+ await interventionLines;
147
+ supervisor?.handle.close();
148
+ const timedOut = session.cancelReason === "timeout";
149
+ detachRelay();
150
+ const messages = relayed.length > 0 ? relayed : (result.messages ?? []);
151
+ const summary = collectExecutionSummary(messages);
152
+ // The runner's RunResult status is authoritative; fall back to the message
153
+ // stream's view if it's missing.
154
+ summary.status = result.status ?? summary.status;
155
+ const error = result.error ??
156
+ (timedOut
157
+ ? `Debug server run exceeded timeout (${input.timeoutMs}ms)`
158
+ : undefined);
159
+ if (error && !summary.error)
160
+ summary.error = error;
161
+ // Spans are written eagerly via SimpleSpanProcessor, but the underlying
162
+ // WriteStream flushes async — give it a beat before reading the file back.
163
+ let trace = null;
164
+ if (input.tracePath) {
165
+ await new Promise((r) => setTimeout(r, 250));
166
+ trace = await readTraceSummary(input.tracePath);
167
+ }
168
+ const interventions = result.interventions ?? [];
169
+ if (supervisor && interventions.length > 0) {
170
+ await recordSupervisorCost({
171
+ interventions,
172
+ jobId,
173
+ workflowId,
174
+ userId: "1",
175
+ providerId: supervisor.providerId,
176
+ model: supervisor.model
177
+ });
178
+ }
179
+ const report = {
180
+ surface: "server",
181
+ ok: result.status === "completed",
182
+ status: result.status ?? summary.status,
183
+ error: error ?? summary.error,
184
+ durationMs: Date.now() - startedAt,
185
+ summary,
186
+ trace
187
+ };
188
+ if (supervisor) {
189
+ report.supervised = {
190
+ provider: supervisor.providerId,
191
+ model: supervisor.model,
192
+ summary: summarizeInterventions(interventions)
193
+ };
194
+ }
195
+ return { report, rawMessages: messages };
196
+ }
197
+ //# sourceMappingURL=server-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-runner.js","sourceRoot":"","sources":["../../src/debug/server-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { DebugGraph, DebugTargetInfo } from "./types.js";
2
+ export interface ResolvedTarget {
3
+ info: DebugTargetInfo;
4
+ graph: DebugGraph;
5
+ /** Params discovered in a file's `params` field, merged under caller params. */
6
+ fileParams: Record<string, unknown>;
7
+ /** The workflow's app-builder document (`app_doc`), when present. */
8
+ appDoc: unknown;
9
+ }
10
+ /** A path-shaped ref, as opposed to a database id. */
11
+ export declare function looksLikeFile(ref: string): boolean;
12
+ /** A DSL ref, which has to be executed rather than read. */
13
+ export declare function looksLikeDsl(ref: string): boolean;
14
+ /**
15
+ * Read a file target's JSON: a `.json` file straight off disk, or the JSON a
16
+ * DSL file prints when executed.
17
+ */
18
+ export declare function readFileTarget(ref: string): Promise<{
19
+ raw: unknown;
20
+ source: "json" | "dsl";
21
+ }>;
22
+ /** Convert ReactFlow `node.data` to kernel `node.properties` in place. */
23
+ export declare function normalizeGraph(graph: DebugGraph): DebugGraph;
24
+ /**
25
+ * Load a workflow from a file (JSON or DSL) or the local DB.
26
+ *
27
+ * `loadFromDb` is injected so this module stays free of a hard `@nodetool-ai/models`
28
+ * import at module load (keeps it light for the command-registration test path).
29
+ */
30
+ export declare function resolveTarget(ref: string, loadFromDb: (id: string) => Promise<{
31
+ graph: DebugGraph;
32
+ app_doc?: unknown;
33
+ } | null>): Promise<ResolvedTarget>;
34
+ //# sourceMappingURL=target.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target.d.ts","sourceRoot":"","sources":["../../src/debug/target.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE9D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,EAAE,UAAU,CAAC;IAClB,gFAAgF;IAChF,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,qEAAqE;IACrE,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,sDAAsD;AACtD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQlD;AAED,4DAA4D;AAC5D,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAA;CAAE,CAAC,CAcnD;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAW5D;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAAC,GACnF,OAAO,CAAC,cAAc,CAAC,CA2CzB"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Resolves a workflow debug target (DB id, JSON file, or TypeScript DSL file)
3
+ * into a normalized runner-shape graph plus metadata.
4
+ *
5
+ * Mirrors the resolution + normalization the `workflows run` command does so the
6
+ * debug harness executes the exact same graph the runner would.
7
+ */
8
+ import { readFileSync } from "node:fs";
9
+ import { dirname, resolve } from "node:path";
10
+ /** A path-shaped ref, as opposed to a database id. */
11
+ export function looksLikeFile(ref) {
12
+ return (ref.endsWith(".json") ||
13
+ ref.endsWith(".ts") ||
14
+ ref.endsWith(".tsx") ||
15
+ ref.includes("/") ||
16
+ ref.includes("\\"));
17
+ }
18
+ /** A DSL ref, which has to be executed rather than read. */
19
+ export function looksLikeDsl(ref) {
20
+ return ref.endsWith(".ts") || ref.endsWith(".tsx");
21
+ }
22
+ /**
23
+ * Read a file target's JSON: a `.json` file straight off disk, or the JSON a
24
+ * DSL file prints when executed.
25
+ */
26
+ export async function readFileTarget(ref) {
27
+ if (looksLikeDsl(ref)) {
28
+ // DSL file: execute via tsx and capture the emitted JSON workflow.
29
+ // execFileSync, not execSync: the path goes through argv, so quotes or
30
+ // `$(...)` in a file name stay a file name instead of becoming shell.
31
+ const { execFileSync } = await import("node:child_process");
32
+ const output = execFileSync("npx", ["tsx", resolve(ref)], {
33
+ encoding: "utf8",
34
+ cwd: dirname(resolve(ref)),
35
+ timeout: 30000
36
+ });
37
+ return { raw: JSON.parse(output.trim()), source: "dsl" };
38
+ }
39
+ return { raw: JSON.parse(readFileSync(ref, "utf8")), source: "json" };
40
+ }
41
+ /** Convert ReactFlow `node.data` to kernel `node.properties` in place. */
42
+ export function normalizeGraph(graph) {
43
+ return {
44
+ nodes: (graph.nodes ?? []).map((n) => {
45
+ if (n.properties === undefined && n.data !== undefined) {
46
+ const { data, ...rest } = n;
47
+ return { ...rest, properties: data };
48
+ }
49
+ return n;
50
+ }),
51
+ edges: graph.edges ?? []
52
+ };
53
+ }
54
+ /**
55
+ * Load a workflow from a file (JSON or DSL) or the local DB.
56
+ *
57
+ * `loadFromDb` is injected so this module stays free of a hard `@nodetool-ai/models`
58
+ * import at module load (keeps it light for the command-registration test path).
59
+ */
60
+ export async function resolveTarget(ref, loadFromDb) {
61
+ let raw;
62
+ let source;
63
+ let workflowId;
64
+ const fileParams = {};
65
+ if (looksLikeFile(ref)) {
66
+ const file = await readFileTarget(ref);
67
+ raw = file.raw;
68
+ source = file.source;
69
+ workflowId = raw.workflow_id ?? raw.id ?? null;
70
+ if (raw.params)
71
+ Object.assign(fileParams, raw.params);
72
+ }
73
+ else {
74
+ const wf = await loadFromDb(ref);
75
+ if (!wf)
76
+ throw new Error(`Workflow not found: ${ref}`);
77
+ raw = wf;
78
+ workflowId = ref;
79
+ source = "id";
80
+ }
81
+ const rawGraph = raw.graph ?? raw;
82
+ if (!rawGraph?.nodes || !rawGraph?.edges) {
83
+ throw new Error("Invalid workflow: missing nodes or edges");
84
+ }
85
+ // A truthy non-array (`"nodes": 3`, `"edges": {}`) clears the check above and
86
+ // used to reach `.map()` below as a raw TypeError.
87
+ if (!Array.isArray(rawGraph.nodes) || !Array.isArray(rawGraph.edges)) {
88
+ throw new Error("Invalid workflow: nodes and edges must be arrays");
89
+ }
90
+ const graph = normalizeGraph(rawGraph);
91
+ return {
92
+ info: {
93
+ ref,
94
+ source,
95
+ workflowId,
96
+ nodeCount: graph.nodes.length,
97
+ edgeCount: graph.edges.length
98
+ },
99
+ graph,
100
+ fileParams,
101
+ appDoc: raw.app_doc ?? null
102
+ };
103
+ }
104
+ //# sourceMappingURL=target.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target.js","sourceRoot":"","sources":["../../src/debug/target.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { TraceSummary } from "./types.js";
2
+ /** One span as serialized by the JSONL trace exporter. */
3
+ export interface TraceSpan {
4
+ trace_id: string;
5
+ span_id: string;
6
+ parent_span_id: string | null;
7
+ name: string;
8
+ kind: string;
9
+ start_time_ms: number;
10
+ end_time_ms: number;
11
+ duration_ms: number;
12
+ status: {
13
+ code: string;
14
+ message?: string;
15
+ };
16
+ attributes: Record<string, unknown>;
17
+ events: Array<{
18
+ name: string;
19
+ time_ms: number;
20
+ attributes?: Record<string, unknown>;
21
+ }>;
22
+ resource: Record<string, unknown>;
23
+ }
24
+ /** Parse a JSONL trace file body, skipping blank/corrupt lines. */
25
+ export declare function parseTraceJsonl(text: string): TraceSpan[];
26
+ /** Roll spans up into a `TraceSummary`. */
27
+ export declare function summarizeSpans(spans: TraceSpan[]): TraceSummary;
28
+ /** Read + summarize a trace file. Returns null when the file is missing/empty. */
29
+ export declare function readTraceSummary(path: string): Promise<TraceSummary | null>;
30
+ //# sourceMappingURL=trace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/debug/trace.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,0DAA0D;AAC1D,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IACvF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAID,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,CAYzD;AAOD,2CAA2C;AAC3C,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,YAAY,CA2C/D;AAED,kFAAkF;AAClF,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAUjF"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Reads and summarizes the OpenTelemetry JSONL trace a debug run produces.
3
+ *
4
+ * The runtime's `JsonlFileSpanExporter` writes one span per line in the shape
5
+ * documented in AGENTS.md (workflow.run → node.process → agent.* → llm.*). We
6
+ * roll those up into per-name timing plus token/cost totals from the
7
+ * `gen_ai.usage.*` attributes carried by every llm.chat / llm.stream span.
8
+ */
9
+ import { readFile } from "node:fs/promises";
10
+ import { isNumber } from "../predicates.js";
11
+ const SLOWEST_LIMIT = 10;
12
+ /** Parse a JSONL trace file body, skipping blank/corrupt lines. */
13
+ export function parseTraceJsonl(text) {
14
+ const spans = [];
15
+ for (const line of text.split("\n")) {
16
+ const trimmed = line.trim();
17
+ if (!trimmed)
18
+ continue;
19
+ try {
20
+ spans.push(JSON.parse(trimmed));
21
+ }
22
+ catch {
23
+ // Ignore partial/corrupt lines (e.g. a crash mid-write).
24
+ }
25
+ }
26
+ return spans;
27
+ }
28
+ function numAttr(attrs, key) {
29
+ const v = attrs[key];
30
+ return isNumber(v) ? v : 0;
31
+ }
32
+ /** Roll spans up into a `TraceSummary`. */
33
+ export function summarizeSpans(spans) {
34
+ const byName = {};
35
+ let inputTokens = 0;
36
+ let outputTokens = 0;
37
+ let totalTokens = 0;
38
+ let costUsd = 0;
39
+ let minStart = Number.POSITIVE_INFINITY;
40
+ let maxEnd = Number.NEGATIVE_INFINITY;
41
+ for (const span of spans) {
42
+ const bucket = (byName[span.name] ??= { count: 0, totalDurationMs: 0 });
43
+ bucket.count += 1;
44
+ bucket.totalDurationMs += span.duration_ms;
45
+ if (Number.isFinite(span.start_time_ms))
46
+ minStart = Math.min(minStart, span.start_time_ms);
47
+ if (Number.isFinite(span.end_time_ms))
48
+ maxEnd = Math.max(maxEnd, span.end_time_ms);
49
+ const a = span.attributes ?? {};
50
+ inputTokens += numAttr(a, "gen_ai.usage.input_tokens");
51
+ outputTokens += numAttr(a, "gen_ai.usage.output_tokens");
52
+ totalTokens += numAttr(a, "gen_ai.usage.total_tokens");
53
+ costUsd += numAttr(a, "gen_ai.usage.cost_usd");
54
+ }
55
+ const slowest = spans
56
+ .slice()
57
+ .sort((x, y) => y.duration_ms - x.duration_ms)
58
+ .slice(0, SLOWEST_LIMIT)
59
+ .map((s) => ({ name: s.name, durationMs: s.duration_ms, status: s.status?.code ?? "UNSET" }));
60
+ return {
61
+ spanCount: spans.length,
62
+ totalDurationMs: spans.length > 0 && minStart !== Number.POSITIVE_INFINITY ? maxEnd - minStart : null,
63
+ tokens: {
64
+ input: inputTokens,
65
+ output: outputTokens,
66
+ total: totalTokens || inputTokens + outputTokens
67
+ },
68
+ costUsd,
69
+ byName,
70
+ slowest
71
+ };
72
+ }
73
+ /** Read + summarize a trace file. Returns null when the file is missing/empty. */
74
+ export async function readTraceSummary(path) {
75
+ let text;
76
+ try {
77
+ text = await readFile(path, "utf8");
78
+ }
79
+ catch {
80
+ return null;
81
+ }
82
+ const spans = parseTraceJsonl(text);
83
+ if (spans.length === 0)
84
+ return null;
85
+ return summarizeSpans(spans);
86
+ }
87
+ //# sourceMappingURL=trace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.js","sourceRoot":"","sources":["../../src/debug/trace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Shared types for the workflow debug harness.
3
+ *
4
+ * The harness runs a workflow end-to-end on two surfaces — the headless server
5
+ * (kernel `WorkflowRunner`) and a real browser (the `e2e_runner` page driven by
6
+ * Playwright) — and folds everything worth inspecting into a single
7
+ * `DebugReport`: the workflow graph JSON, every processing message (logs, node
8
+ * IO, outputs, edges, LLM calls), an OpenTelemetry span summary, browser console
9
+ * errors and a screenshot. The report is written to a bundle directory and also
10
+ * returned so an agent can iterate without re-parsing files.
11
+ */
12
+ import type { DebugGraph, DebugTargetInfo, DebugVerdict, ExecutionSummary, ServerRunReport } from "@nodetool-ai/execution/debug";
13
+ import type { SupervisorRunConfig } from "../supervisor.js";
14
+ export type { DebugError, DebugGraph, DebugTargetInfo, DebugVerdict, EdgeDebug, ExecutionSummary, LlmCallDebug, LogEntry, NodeDebug, NodeOutput, RunVerdict, ServerRunReport, TraceSummary } from "@nodetool-ai/execution/debug";
15
+ /** A canvas screenshot captured at one stage of the browser run. */
16
+ interface BrowserStageShot {
17
+ /** 0-based capture order. */
18
+ index: number;
19
+ /** Run status at capture time (running until the final frame). */
20
+ status: string;
21
+ /** Bundle-relative path to the screenshot. */
22
+ file: string;
23
+ }
24
+ export interface BrowserRunReport {
25
+ surface: "browser";
26
+ ok: boolean;
27
+ status: string;
28
+ error: string | null;
29
+ durationMs: number | null;
30
+ summary: ExecutionSummary;
31
+ consoleErrors: string[];
32
+ /** Bundle-relative path to the final settled screenshot. */
33
+ screenshotFile?: string;
34
+ /** Canvas screenshots captured at successive stages of the run. */
35
+ stages?: BrowserStageShot[];
36
+ /** Bundle-relative path to the raw browser RunRecord JSON. */
37
+ recordFile?: string;
38
+ /** Set when the browser surface could not run (missing deps / browser). */
39
+ unavailableReason?: string;
40
+ }
41
+ export interface DebugReport {
42
+ generatedAt: string;
43
+ target: DebugTargetInfo;
44
+ /** The workflow graph JSON (runner shape). */
45
+ workflow: DebugGraph;
46
+ server: ServerRunReport | null;
47
+ browser: BrowserRunReport | null;
48
+ verdict: DebugVerdict;
49
+ /** Absolute path to the on-disk bundle, when one was written. */
50
+ bundleDir: string | null;
51
+ }
52
+ /** Options that drive a debug run. */
53
+ export interface DebugOptions {
54
+ /** Run the headless server surface. Default true. */
55
+ server?: boolean;
56
+ /** Run the real-browser surface (Playwright). Expensive; default false. */
57
+ browser?: boolean;
58
+ /**
59
+ * Capture an OpenTelemetry trace of the server run (timing/tokens/cost).
60
+ * Expensive — loads the OTel SDK and adds per-span overhead. Default false.
61
+ */
62
+ trace?: boolean;
63
+ /**
64
+ * On the browser surface, capture a canvas screenshot at every stage of the
65
+ * run instead of only the final frame. Expensive; implies `browser`. Default
66
+ * false.
67
+ */
68
+ stages?: boolean;
69
+ /** Input params keyed by input-node name. */
70
+ params?: Record<string, unknown>;
71
+ /** Bundle output directory. When omitted a timestamped dir is generated. */
72
+ outDir?: string;
73
+ /** Per-surface run timeout, ms. */
74
+ timeoutMs?: number;
75
+ /**
76
+ * Supervise the server surface (`--supervise` and its bounds). The browser
77
+ * surface runs the workflow through the web runtime, which has no supervisor
78
+ * of its own until the editor toggle ships, so it is unaffected.
79
+ */
80
+ supervisor?: SupervisorRunConfig;
81
+ }
82
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/debug/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,eAAe,EAChB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,YAAY,EACV,UAAU,EACV,UAAU,EACV,eAAe,EACf,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,UAAU,EACV,UAAU,EACV,eAAe,EACf,YAAY,EACb,MAAM,8BAA8B,CAAC;AAEtC,oEAAoE;AACpE,UAAU,gBAAgB;IACxB,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,SAAS,CAAC;IACnB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mEAAmE;IACnE,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC5B,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;IACxB,8CAA8C;IAC9C,QAAQ,EAAE,UAAU,CAAC;IACrB,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjC,OAAO,EAAE,YAAY,CAAC;IACtB,iEAAiE;IACjE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,sCAAsC;AACtC,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,mBAAmB,CAAC;CAClC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Shared types for the workflow debug harness.
3
+ *
4
+ * The harness runs a workflow end-to-end on two surfaces — the headless server
5
+ * (kernel `WorkflowRunner`) and a real browser (the `e2e_runner` page driven by
6
+ * Playwright) — and folds everything worth inspecting into a single
7
+ * `DebugReport`: the workflow graph JSON, every processing message (logs, node
8
+ * IO, outputs, edges, LLM calls), an OpenTelemetry span summary, browser console
9
+ * errors and a screenshot. The report is written to a bundle directory and also
10
+ * returned so an agent can iterate without re-parsing files.
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/debug/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
@@ -0,0 +1,3 @@
1
+ import type { BrowserRunReport, DebugVerdict, ServerRunReport } from "./types.js";
2
+ export declare function buildVerdict(server: ServerRunReport | null, browser: BrowserRunReport | null): DebugVerdict;
3
+ //# sourceMappingURL=verdict.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verdict.d.ts","sourceRoot":"","sources":["../../src/debug/verdict.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,wBAAgB,YAAY,CAC1B,MAAM,EAAE,eAAe,GAAG,IAAI,EAC9B,OAAO,EAAE,gBAAgB,GAAG,IAAI,GAC/B,YAAY,CAgFd"}