@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,316 @@
1
+ /**
2
+ * `workflows list|get`, `jobs list|get`, `assets list|get`.
3
+ *
4
+ * Each reads from the local SQLite database, or from a server when `--api-url`
5
+ * (or `NODETOOL_API_URL`) is set. The two sources return different records —
6
+ * the local model row carries every column, the server returns its declared
7
+ * response schema — so both are projected onto one field list per resource
8
+ * before anything is printed. Without that, `--json` handed an agent a
9
+ * different key set depending on an environment variable it never set.
10
+ *
11
+ * Each field list is the intersection of the model row and the server's
12
+ * response schema, so every key in the output is real on both paths: the
13
+ * server's derived fields (`etag`, `get_url`, `thumb_url`, `input_schema`) and
14
+ * the local-only blobs (a job's `graph` and `logs`) are both left out.
15
+ */
16
+ import { Workflow, Job, Asset } from "@nodetool-ai/models";
17
+ import { createApiClient } from "../api-client.js";
18
+ import { printCommandError } from "../command-errors.js";
19
+ import { printTable, asJson } from "./output.js";
20
+ const WORKFLOW_FIELDS = [
21
+ "id",
22
+ "access",
23
+ "name",
24
+ "tool_name",
25
+ "description",
26
+ "tags",
27
+ "thumbnail",
28
+ "thumbnail_url",
29
+ "graph",
30
+ "settings",
31
+ "package_name",
32
+ "path",
33
+ "run_mode",
34
+ "workspace_id",
35
+ "html_app",
36
+ "app_doc",
37
+ "created_at",
38
+ "updated_at"
39
+ ];
40
+ const JOB_FIELDS = [
41
+ "id",
42
+ "user_id",
43
+ "job_type",
44
+ "status",
45
+ "name",
46
+ "workflow_id",
47
+ "started_at",
48
+ "finished_at",
49
+ "error",
50
+ "cost"
51
+ ];
52
+ const ASSET_FIELDS = [
53
+ "id",
54
+ "user_id",
55
+ "parent_id",
56
+ "name",
57
+ "content_type",
58
+ "size",
59
+ "duration",
60
+ "metadata",
61
+ "sketch_document_id",
62
+ "workflow_id",
63
+ "node_id",
64
+ "job_id",
65
+ "timeline_id",
66
+ "created_at"
67
+ ];
68
+ /** Missing keys become null so both sources emit the same key set. */
69
+ function project(raw, fields) {
70
+ const row = {};
71
+ for (const field of fields) {
72
+ row[field] = raw[field] ?? null;
73
+ }
74
+ return row;
75
+ }
76
+ function emitList(opts, rows, fields, columns) {
77
+ const projected = rows.map((row) => project(row, fields));
78
+ if (opts.json) {
79
+ asJson(projected);
80
+ return;
81
+ }
82
+ printTable(projected, columns);
83
+ }
84
+ function emitOne(opts, raw, fields, columns) {
85
+ const projected = project(raw, fields);
86
+ if (opts.json) {
87
+ asJson(projected);
88
+ return;
89
+ }
90
+ printTable([projected], columns);
91
+ }
92
+ function parseLimit(limit) {
93
+ return Number.parseInt(limit ?? "100", 10);
94
+ }
95
+ export function registerResourceReadCommands(parents, deps) {
96
+ const { ensureDb, localUserId } = deps;
97
+ parents.workflows
98
+ .command("list")
99
+ .description("List workflows (reads the local database; --api-url for remote)")
100
+ .option("--api-url <url>", "Query a remote server instead of the local database", process.env["NODETOOL_API_URL"])
101
+ .option("--limit <n>", "Max results", "100")
102
+ .option("--json", "Output as JSON")
103
+ .action(async (opts) => {
104
+ try {
105
+ const limit = parseLimit(opts.limit);
106
+ let rows;
107
+ if (opts.apiUrl) {
108
+ const data = await createApiClient(opts.apiUrl).workflows.list.query({
109
+ limit
110
+ });
111
+ rows = data.workflows;
112
+ }
113
+ else {
114
+ ensureDb();
115
+ const [items] = await Workflow.paginate(localUserId, { limit });
116
+ rows = items.map((w) => ({ ...w }));
117
+ }
118
+ emitList(opts, rows, WORKFLOW_FIELDS, ["id", "name", "updated_at"]);
119
+ }
120
+ catch (e) {
121
+ printCommandError(e, opts.json);
122
+ process.exit(1);
123
+ }
124
+ });
125
+ parents.workflows
126
+ .command("get <workflow_id>")
127
+ .description("Get a workflow by ID (reads the local database; --api-url for remote)")
128
+ .option("--api-url <url>", "Query a remote server instead of the local database", process.env["NODETOOL_API_URL"])
129
+ .option("--json", "Output as JSON")
130
+ .action(async (workflowId, opts) => {
131
+ try {
132
+ let data;
133
+ if (opts.apiUrl) {
134
+ data = await createApiClient(opts.apiUrl).workflows.get.query({
135
+ id: workflowId
136
+ });
137
+ }
138
+ else {
139
+ ensureDb();
140
+ const wf = await Workflow.find(localUserId, workflowId);
141
+ if (!wf)
142
+ throw new Error(`Workflow not found: ${workflowId}`);
143
+ data = { ...wf };
144
+ }
145
+ emitOne(opts, data, WORKFLOW_FIELDS, [
146
+ "id",
147
+ "name",
148
+ "description",
149
+ "updated_at"
150
+ ]);
151
+ }
152
+ catch (e) {
153
+ printCommandError(e, opts.json);
154
+ process.exit(1);
155
+ }
156
+ });
157
+ parents.jobs
158
+ .command("list")
159
+ .description("List jobs (reads the local database; --api-url for remote)")
160
+ .option("--api-url <url>", "Query a remote server instead of the local database", process.env["NODETOOL_API_URL"])
161
+ .option("--workflow-id <id>", "Filter by workflow ID")
162
+ .option("--limit <n>", "Max results", "100")
163
+ .option("--json", "Output as JSON")
164
+ .action(async (opts) => {
165
+ try {
166
+ const limit = parseLimit(opts.limit);
167
+ let rows;
168
+ if (opts.apiUrl) {
169
+ const query = { limit };
170
+ if (opts.workflowId) {
171
+ query.workflow_id = opts.workflowId;
172
+ }
173
+ const data = await createApiClient(opts.apiUrl).jobs.list.query(query);
174
+ rows = data.jobs;
175
+ }
176
+ else {
177
+ ensureDb();
178
+ const page = { limit };
179
+ if (opts.workflowId) {
180
+ page.workflowId = opts.workflowId;
181
+ }
182
+ const [items] = await Job.paginate(localUserId, page);
183
+ rows = items.map((j) => ({ ...j }));
184
+ }
185
+ emitList(opts, rows, JOB_FIELDS, [
186
+ "id",
187
+ "status",
188
+ "workflow_id",
189
+ "started_at",
190
+ "cost"
191
+ ]);
192
+ }
193
+ catch (e) {
194
+ printCommandError(e, opts.json);
195
+ process.exit(1);
196
+ }
197
+ });
198
+ parents.jobs
199
+ .command("get <job_id>")
200
+ .description("Get a job by ID (reads the local database; --api-url for remote)")
201
+ .option("--api-url <url>", "Query a remote server instead of the local database", process.env["NODETOOL_API_URL"])
202
+ .option("--json", "Output as JSON")
203
+ .action(async (jobId, opts) => {
204
+ try {
205
+ let data;
206
+ if (opts.apiUrl) {
207
+ data = await createApiClient(opts.apiUrl).jobs.get.query({
208
+ id: jobId
209
+ });
210
+ }
211
+ else {
212
+ ensureDb();
213
+ const job = await Job.find(localUserId, jobId);
214
+ if (!job)
215
+ throw new Error(`Job not found: ${jobId}`);
216
+ data = { ...job };
217
+ }
218
+ emitOne(opts, data, JOB_FIELDS, [
219
+ "id",
220
+ "status",
221
+ "workflow_id",
222
+ "error",
223
+ "cost"
224
+ ]);
225
+ }
226
+ catch (e) {
227
+ printCommandError(e, opts.json);
228
+ process.exit(1);
229
+ }
230
+ });
231
+ parents.assets
232
+ .command("list")
233
+ .description("List assets (reads the local database; --api-url for remote)")
234
+ .option("--api-url <url>", "Query a remote server instead of the local database", process.env["NODETOOL_API_URL"])
235
+ .option("--query <q>", "Search query")
236
+ .option("--content-type <type>", "Filter by content type")
237
+ .option("--limit <n>", "Max results", "100")
238
+ .option("--json", "Output as JSON")
239
+ .action(async (opts) => {
240
+ try {
241
+ const limit = parseLimit(opts.limit);
242
+ let rows;
243
+ if (opts.apiUrl) {
244
+ const query = {
245
+ page_size: limit
246
+ };
247
+ if (opts.contentType) {
248
+ query.content_type = opts.contentType;
249
+ }
250
+ const data = await createApiClient(opts.apiUrl).assets.list.query(query);
251
+ rows = data.assets;
252
+ }
253
+ else {
254
+ ensureDb();
255
+ const page = { limit };
256
+ if (opts.contentType) {
257
+ page.contentType = opts.contentType;
258
+ }
259
+ const [items] = await Asset.paginate(localUserId, page);
260
+ rows = items.map((a) => ({ ...a }));
261
+ }
262
+ // --query has no server-side search; filter by name in memory (matches
263
+ // the direct path too, which paginates without a search term).
264
+ if (opts.query) {
265
+ const q = opts.query.toLowerCase();
266
+ rows = rows.filter((r) => String(r["name"] ?? "")
267
+ .toLowerCase()
268
+ .includes(q));
269
+ }
270
+ emitList(opts, rows, ASSET_FIELDS, [
271
+ "id",
272
+ "name",
273
+ "content_type",
274
+ "size"
275
+ ]);
276
+ }
277
+ catch (e) {
278
+ printCommandError(e, opts.json);
279
+ process.exit(1);
280
+ }
281
+ });
282
+ parents.assets
283
+ .command("get <asset_id>")
284
+ .description("Get an asset by ID (reads the local database; --api-url for remote)")
285
+ .option("--api-url <url>", "Query a remote server instead of the local database", process.env["NODETOOL_API_URL"])
286
+ .option("--json", "Output as JSON")
287
+ .action(async (assetId, opts) => {
288
+ try {
289
+ let data;
290
+ if (opts.apiUrl) {
291
+ data = await createApiClient(opts.apiUrl).assets.get.query({
292
+ id: assetId
293
+ });
294
+ }
295
+ else {
296
+ ensureDb();
297
+ const asset = await Asset.find(localUserId, assetId);
298
+ if (!asset)
299
+ throw new Error(`Asset not found: ${assetId}`);
300
+ data = { ...asset };
301
+ }
302
+ emitOne(opts, data, ASSET_FIELDS, [
303
+ "id",
304
+ "name",
305
+ "content_type",
306
+ "size",
307
+ "created_at"
308
+ ]);
309
+ }
310
+ catch (e) {
311
+ printCommandError(e, opts.json);
312
+ process.exit(1);
313
+ }
314
+ });
315
+ }
316
+ //# sourceMappingURL=resource-read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-read.js","sourceRoot":"","sources":["../../src/commands/resource-read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Command } from "commander";
2
+ export interface RunsCommandDependencies {
3
+ ensureDb: () => Promise<void>;
4
+ localUserId: string;
5
+ }
6
+ export declare function registerRunsCommands(program: Command, deps: RunsCommandDependencies): void;
7
+ //# sourceMappingURL=runs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../../src/commands/runs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC,MAAM,WAAW,uBAAuB;IAAG,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;CAAE;AAqJhG,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAkF1F"}
@@ -0,0 +1,302 @@
1
+ import { setTimeout as delay } from "node:timers/promises";
2
+ import { TRPCClientError } from "@trpc/client";
3
+ import { listRuns, getRun, getRunTrace, getRunLogs, readRunUpdates } from "@nodetool-ai/execution";
4
+ import { runGetOptionsSchema, runListOptionsSchema, runTraceOptionsSchema, runLogsOptionsSchema, runUpdatesOptionsSchema, TRACE_SPAN_LIMIT, TRACE_EVENT_LIMIT } from "@nodetool-ai/protocol";
5
+ import { createApiClient } from "../api-client.js";
6
+ import { printCommandError } from "../command-errors.js";
7
+ import { asJson, printKv, printTable } from "./output.js";
8
+ const TERMINAL_DRAIN_IDLE_MS = 1_000;
9
+ const TERMINAL_DRAIN_MAX_MS = 5_000;
10
+ async function reader(apiUrl, deps) {
11
+ if (apiUrl) {
12
+ const client = createApiClient(apiUrl);
13
+ return {
14
+ list: (options) => client.runs.list.query(options), get: (id, options) => client.runs.get.query({ id, ...options }),
15
+ trace: (id, options) => client.runs.trace.query({ id, ...options }),
16
+ logs: (id, options) => client.runs.logs.query({ id, ...options }),
17
+ updates: (id, options, signal) => client.runs.updates.query({ id, ...options }, { signal })
18
+ };
19
+ }
20
+ await deps.ensureDb();
21
+ return {
22
+ list: (options) => listRuns(deps.localUserId, options), get: (id, options) => getRun(deps.localUserId, id, options),
23
+ trace: (id, options) => getRunTrace(deps.localUserId, id, options),
24
+ logs: (id, options) => getRunLogs(deps.localUserId, id, options),
25
+ updates: (id, options) => readRunUpdates(deps.localUserId, id, options)
26
+ };
27
+ }
28
+ function integer(value, option, minimum, maximum) {
29
+ const parsed = Number(value);
30
+ if (!/^\d+$/.test(value) || !Number.isSafeInteger(parsed) || parsed < minimum || parsed > maximum) {
31
+ throw new Error(`${option} must be an integer between ${minimum} and ${maximum}`);
32
+ }
33
+ return parsed;
34
+ }
35
+ function attr(attributes, key) { const value = attributes[key]; return value === undefined || value === null || value === "" ? undefined : String(value); }
36
+ function clip(text, max) { const flat = text.replace(/\s+/g, " "); return flat.length > max ? `${flat.slice(0, max - 1)}…` : flat; }
37
+ /** The most identifying attribute of a span: the node for node spans, provider/model for LLM spans. */
38
+ function spanDetail(attributes) {
39
+ const node = attr(attributes, "node.id");
40
+ const type = attr(attributes, "node.type");
41
+ if (node) {
42
+ return clip(type ? `${node} (${type})` : node, 48);
43
+ }
44
+ const provider = attr(attributes, "llm.provider");
45
+ const model = attr(attributes, "llm.model");
46
+ return provider || model ? clip([provider, model].filter(Boolean).join("/"), 48) : "";
47
+ }
48
+ function fail(error, json) { printCommandError(error, json); process.exitCode = 1; }
49
+ function common(command) {
50
+ return command.option("--api-url <url>", "Read a server instead of the local database", process.env["NODETOOL_API_URL"])
51
+ .option("--json", "JSON result; tail emits NDJSON");
52
+ }
53
+ /** Follow coalesced durable snapshots. Event frames are emitted once per stable identity. */
54
+ async function tail(reader, id, options) {
55
+ let cursor = integer(options.cursor, "--cursor", 0, Number.MAX_SAFE_INTEGER);
56
+ const limit = integer(options.limit, "--limit", 1, 500);
57
+ const interval = integer(options.pollInterval, "--poll-interval", 10, 5_000);
58
+ const timeout = options.timeout === undefined ? null : integer(options.timeout, "--timeout", 1, 86_400) * 1_000;
59
+ const controller = new AbortController();
60
+ const interrupt = () => { controller.abort("interrupt"); };
61
+ process.once("SIGINT", interrupt);
62
+ const timer = timeout === null ? null : setTimeout(() => { controller.abort("timeout"); }, timeout);
63
+ const seenSpans = new Map();
64
+ const seenEvents = new Set();
65
+ const emit = (value, text) => {
66
+ if (options.json) {
67
+ console.log(JSON.stringify(value));
68
+ }
69
+ else {
70
+ console.log(text);
71
+ }
72
+ };
73
+ let first = true;
74
+ let terminalDrainStarted = null;
75
+ let lastProgressAt = Date.now();
76
+ let dedupLimitReported = false;
77
+ const dedupLimit = () => {
78
+ if (dedupLimitReported) {
79
+ return;
80
+ }
81
+ dedupLimitReported = true;
82
+ emit({ type: "gap", cursor, reason: "dedup_limit" }, "Deduplication capacity reached. Later replay may repeat records.");
83
+ };
84
+ try {
85
+ while (!controller.signal.aborted) {
86
+ let page;
87
+ try {
88
+ page = await reader.updates(id, runUpdatesOptionsSchema.parse({ cursor, limit, include_content: options.includeContent ?? false }), controller.signal);
89
+ }
90
+ catch (error) {
91
+ if (!options.apiUrl || !(error instanceof TRPCClientError) || error.data) {
92
+ throw error;
93
+ }
94
+ emit({ type: "reconnecting", cursor }, `Connection lost. Retrying from cursor ${cursor}.`);
95
+ await delay(interval, undefined, { signal: controller.signal });
96
+ continue;
97
+ }
98
+ controller.signal.throwIfAborted();
99
+ if (first || page.records.length > 0) {
100
+ emit({ type: "resnapshot", run_id: page.run.id, after_cursor: cursor, cursor: page.cursor, resnapshot_required: page.resnapshot_required,
101
+ content_state: page.content_state, content_expired: page.content_expired, truncated: page.truncated, incomplete: page.incomplete, limited: page.limited }, `Run ${page.run.id}: latest snapshots after cursor ${cursor} (intermediate updates may be coalesced).`);
102
+ first = false;
103
+ }
104
+ for (const update of page.records) {
105
+ if ((seenSpans.get(update.record.span_id) ?? -1) >= update.cursor) {
106
+ continue;
107
+ }
108
+ if (seenSpans.has(update.record.span_id) || seenSpans.size < TRACE_SPAN_LIMIT + 1) {
109
+ seenSpans.set(update.record.span_id, update.cursor);
110
+ }
111
+ else {
112
+ dedupLimit();
113
+ }
114
+ emit({ type: "span", ...update }, `${update.cursor} ${update.record.name} ${update.record.span_id} ${update.record.status.code}`);
115
+ for (const [index, event] of update.record.events.entries()) {
116
+ const eventId = event.id ?? `${update.record.span_id}:${index}`;
117
+ const key = `${update.record.span_id}:${eventId}`;
118
+ if (seenEvents.has(key)) {
119
+ continue;
120
+ }
121
+ if (seenEvents.size < TRACE_EVENT_LIMIT) {
122
+ seenEvents.add(key);
123
+ }
124
+ else {
125
+ dedupLimit();
126
+ }
127
+ emit({ type: "event", run_id: update.run_id, span_id: update.record.span_id, cursor: update.cursor, event: { ...event, id: eventId } }, `${event.time_ms} ${event.name} ${JSON.stringify(event.attributes ?? {})}`);
128
+ }
129
+ }
130
+ if (page.cursor > cursor) {
131
+ lastProgressAt = Date.now();
132
+ }
133
+ cursor = Math.max(cursor, page.cursor);
134
+ if (page.has_more) {
135
+ continue;
136
+ }
137
+ if (page.run.status !== "running") {
138
+ const now = Date.now();
139
+ if (terminalDrainStarted === null) {
140
+ terminalDrainStarted = now;
141
+ lastProgressAt = now;
142
+ }
143
+ if (page.trace_settled || now - lastProgressAt >= TERMINAL_DRAIN_IDLE_MS || now - terminalDrainStarted >= TERMINAL_DRAIN_MAX_MS) {
144
+ if (!page.trace_settled) {
145
+ emit({ type: "gap", cursor, reason: "terminal_trace_incomplete" }, "Run ended before all final span snapshots were stored. Resume from this cursor to check later.");
146
+ }
147
+ emit({ type: "terminal", run: page.run, cursor, trace_settled: page.trace_settled }, `Run ${page.run.id} ${page.run.status}. Cursor ${cursor}.`);
148
+ return;
149
+ }
150
+ }
151
+ await delay(interval, undefined, { signal: controller.signal });
152
+ }
153
+ }
154
+ catch (error) {
155
+ if (!controller.signal.aborted) {
156
+ throw error;
157
+ }
158
+ }
159
+ finally {
160
+ process.removeListener("SIGINT", interrupt);
161
+ if (timer !== null) {
162
+ clearTimeout(timer);
163
+ }
164
+ }
165
+ if (controller.signal.reason === "interrupt") {
166
+ emit({ type: "interrupted", cursor }, `Stopped following at cursor ${cursor}.`);
167
+ process.exitCode = 130;
168
+ return;
169
+ }
170
+ throw new Error(`Timed out following run ${id} at cursor ${cursor}`);
171
+ }
172
+ export function registerRunsCommands(program, deps) {
173
+ const runs = program.command("runs").description("Inspect durable app runs, workflow jobs and chat turns");
174
+ common(runs.command("list").description("List owned runs, newest first")
175
+ .option("--kind <kind>", "app, workflow or chat").option("--app-id <id>", "App filter")
176
+ .option("--instance-id <id>", "Instance filter").option("--workflow-id <id>", "Workflow filter")
177
+ .option("--thread-id <id>", "Chat thread filter").option("--status <status>", "running, completed, failed or cancelled")
178
+ .option("--origin <origin>", "ui, agent, cli, debug or public").option("--since <iso>", "Inclusive start time")
179
+ .option("--until <iso>", "Exclusive end time").option("--limit <n>", "Results, 1–100", "20")
180
+ .option("--cursor <cursor>", "Opaque next_cursor from the previous page"))
181
+ .action(async (options) => {
182
+ try {
183
+ const query = runListOptionsSchema.parse({ kind: options.kind, app_id: options.appId, instance_id: options.instanceId,
184
+ workflow_id: options.workflowId, thread_id: options.threadId, status: options.status, origin: options.origin,
185
+ since: options.since, until: options.until, limit: integer(options.limit, "--limit", 1, 100), cursor: options.cursor });
186
+ const result = await (await reader(options.apiUrl, deps)).list(query);
187
+ if (options.json) {
188
+ asJson(result);
189
+ }
190
+ else {
191
+ printTable(result.runs, ["id", "kind", "status", "origin", "started_at", "cost_usd"]);
192
+ if (result.next_cursor) {
193
+ console.log(`next_cursor: ${result.next_cursor}`);
194
+ }
195
+ }
196
+ }
197
+ catch (error) {
198
+ fail(error, options.json);
199
+ }
200
+ });
201
+ common(runs.command("show <id>").description("Read the run and bounded diagnostic summary")
202
+ .option("--include-content", "Read capped app run inputs and outputs"))
203
+ .action(async (id, options) => {
204
+ try {
205
+ const query = runGetOptionsSchema.parse({ include_content: options.includeContent ?? false });
206
+ const result = await (await reader(options.apiUrl, deps)).get(id, query);
207
+ if (options.json) {
208
+ asJson(result);
209
+ return;
210
+ }
211
+ printKv({ id: result.run.id, kind: result.run.kind, status: result.run.status, error: result.run.error,
212
+ cost_usd: result.run.cost_usd, first_failed_span_id: result.summary.first_failed_span_id,
213
+ content_state: result.summary.content_state, truncated: result.summary.truncated, incomplete: result.summary.incomplete });
214
+ if (result.summary.failure_path.length > 0) {
215
+ printTable(result.summary.failure_path, ["span_id", "name", "status", "duration_ms", "error"]);
216
+ }
217
+ if (options.includeContent && result.run.app) {
218
+ asJson(result.run.app);
219
+ }
220
+ }
221
+ catch (error) {
222
+ fail(error, options.json);
223
+ }
224
+ });
225
+ common(runs.command("trace <id>").description("Read the span tree")
226
+ .option("--depth <n>", "Tree depth, 0–64", "4").option("--focus <span-id>", "Focus a full 16-character span ID")
227
+ .option("--name <name>", "Span name filter").option("--errors-only", "Only failed spans and their ancestors")
228
+ .option("--limit <n>", "Spans, 1–500", "100").option("--include-content", "Read capped content on the focused span"))
229
+ .action(async (id, options) => {
230
+ try {
231
+ const query = runTraceOptionsSchema.parse({ depth: integer(options.depth, "--depth", 0, 64), focus_span_id: options.focus,
232
+ name: options.name, errors_only: options.errorsOnly ?? false, limit: integer(options.limit, "--limit", 1, 500), include_content: options.includeContent ?? false });
233
+ const result = await (await reader(options.apiUrl, deps)).trace(id, query);
234
+ if (options.json) {
235
+ asJson(result);
236
+ }
237
+ else {
238
+ printTable(result.nodes.map(({ record, depth }) => ({ span_id: record.span_id, name: `${" ".repeat(depth)}${record.name}`, status: record.status.code, duration_ms: record.duration_ms, detail: spanDetail(record.attributes) })));
239
+ printKv({ content_state: result.content_state, truncated: result.truncated, incomplete: result.incomplete, limited: result.limited });
240
+ if (options.includeContent) {
241
+ asJson(result.nodes.map(({ record }) => record));
242
+ }
243
+ }
244
+ }
245
+ catch (error) {
246
+ fail(error, options.json);
247
+ }
248
+ });
249
+ common(runs.command("logs <id>").description("Read stored span events, oldest first")
250
+ .option("--level <level>", "Log level filter").option("--source <source>", "Source filter").option("--span <span-id>", "Full span ID filter")
251
+ .option("--since-ms <time>", "Inclusive event timestamp in milliseconds").option("--until-ms <time>", "Exclusive event timestamp in milliseconds")
252
+ .option("--limit <n>", "Events, 1–500", "100").option("--cursor <cursor>", "Opaque next_cursor from previous page")
253
+ .option("--include-content", "Read capped event content"))
254
+ .action(async (id, options) => {
255
+ try {
256
+ const query = runLogsOptionsSchema.parse({ level: options.level, source: options.source, span_id: options.span,
257
+ since_ms: options.sinceMs === undefined ? undefined : Number(options.sinceMs), until_ms: options.untilMs === undefined ? undefined : Number(options.untilMs),
258
+ limit: integer(options.limit, "--limit", 1, 500), cursor: options.cursor, include_content: options.includeContent ?? false });
259
+ const result = await (await reader(options.apiUrl, deps)).logs(id, query);
260
+ if (options.json) {
261
+ asJson(result);
262
+ }
263
+ else {
264
+ if (options.includeContent) {
265
+ printTable(result.logs.map((event) => ({ ...event, message: clip(attr(event.attributes, "log.message") ?? "", 80), arguments: clip(attr(event.attributes, "log.arguments") ?? "", 40) })), ["time_ms", "level", "source", "span_id", "message", "arguments"]);
266
+ }
267
+ else {
268
+ printTable(result.logs, ["time_ms", "level", "source", "span_id", "name"]);
269
+ if (result.logs.length > 0) {
270
+ console.log("Messages are excluded. Pass --include-content to read them.");
271
+ }
272
+ }
273
+ printKv({ content_state: result.content_state, truncated: result.truncated, incomplete: result.incomplete, limited: result.limited });
274
+ if (result.next_cursor) {
275
+ console.log(`next_cursor: ${result.next_cursor}`);
276
+ }
277
+ }
278
+ }
279
+ catch (error) {
280
+ fail(error, options.json);
281
+ }
282
+ });
283
+ common(runs.command("tail <id>").description("Follow durable span snapshots and events until the run ends")
284
+ .option("--cursor <n>", "Resume after a durable cursor", "0").option("--limit <n>", "Snapshots per page, 1–500", "100")
285
+ .option("--poll-interval <ms>", "Polling interval, 10–5000 ms", "250").option("--timeout <seconds>", "Stop waiting after 1–86400 seconds")
286
+ .option("--include-content", "Read capped owner content"))
287
+ .action(async (id, options) => {
288
+ try {
289
+ await tail(await reader(options.apiUrl, deps), id, options);
290
+ }
291
+ catch (error) {
292
+ if (options.json) {
293
+ console.log(JSON.stringify({ type: "error", error: error instanceof Error ? error.message : String(error) }));
294
+ process.exitCode = 1;
295
+ }
296
+ else {
297
+ fail(error);
298
+ }
299
+ }
300
+ });
301
+ }
302
+ //# sourceMappingURL=runs.js.map