@nodetool-ai/cli 0.7.0-rc.23 → 0.8.1

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 (488) hide show
  1. package/README.md +79 -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 +50 -0
  8. package/dist/affected/affected.d.ts.map +1 -0
  9. package/dist/affected/affected.js +118 -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 +27 -0
  32. package/dist/app-debug/harness.d.ts.map +1 -0
  33. package/dist/app-debug/harness.js +93 -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 +979 -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 +85 -0
  48. package/dist/chat-codeact.d.ts.map +1 -0
  49. package/dist/chat-codeact.js +141 -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 +27 -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.test.d.ts +2 -0
  80. package/dist/commands/__tests__/timeline-render.test.d.ts.map +1 -0
  81. package/dist/commands/__tests__/timeline-render.test.js +115 -0
  82. package/dist/commands/__tests__/timeline-render.test.js.map +1 -0
  83. package/dist/commands/affected.d.ts +9 -0
  84. package/dist/commands/affected.d.ts.map +1 -0
  85. package/dist/commands/affected.js +122 -0
  86. package/dist/commands/affected.js.map +1 -0
  87. package/dist/commands/agent.d.ts +26 -4
  88. package/dist/commands/agent.d.ts.map +1 -1
  89. package/dist/commands/agent.js +327 -306
  90. package/dist/commands/agent.js.map +1 -1
  91. package/dist/commands/app.d.ts +3 -0
  92. package/dist/commands/app.d.ts.map +1 -0
  93. package/dist/commands/app.js +381 -0
  94. package/dist/commands/app.js.map +1 -0
  95. package/dist/commands/apps.d.ts +15 -0
  96. package/dist/commands/apps.d.ts.map +1 -0
  97. package/dist/commands/apps.js +180 -0
  98. package/dist/commands/apps.js.map +1 -0
  99. package/dist/commands/auth.d.ts +12 -0
  100. package/dist/commands/auth.d.ts.map +1 -0
  101. package/dist/commands/auth.js +154 -0
  102. package/dist/commands/auth.js.map +1 -0
  103. package/dist/commands/collections.d.ts +10 -0
  104. package/dist/commands/collections.d.ts.map +1 -0
  105. package/dist/commands/collections.js +257 -0
  106. package/dist/commands/collections.js.map +1 -0
  107. package/dist/commands/costs.d.ts +15 -0
  108. package/dist/commands/costs.d.ts.map +1 -0
  109. package/dist/commands/costs.js +201 -0
  110. package/dist/commands/costs.js.map +1 -0
  111. package/dist/commands/db.d.ts +3 -0
  112. package/dist/commands/db.d.ts.map +1 -0
  113. package/dist/commands/db.js +176 -0
  114. package/dist/commands/db.js.map +1 -0
  115. package/dist/commands/debug.d.ts +13 -0
  116. package/dist/commands/debug.d.ts.map +1 -0
  117. package/dist/commands/debug.js +138 -0
  118. package/dist/commands/debug.js.map +1 -0
  119. package/dist/commands/deploy-helpers.d.ts +49 -18
  120. package/dist/commands/deploy-helpers.d.ts.map +1 -1
  121. package/dist/commands/deploy-helpers.js +10 -276
  122. package/dist/commands/deploy-helpers.js.map +1 -1
  123. package/dist/commands/deploy.d.ts +0 -1
  124. package/dist/commands/deploy.d.ts.map +1 -1
  125. package/dist/commands/deploy.js +21 -217
  126. package/dist/commands/deploy.js.map +1 -1
  127. package/dist/commands/eval.d.ts +152 -0
  128. package/dist/commands/eval.d.ts.map +1 -0
  129. package/dist/commands/eval.js +688 -0
  130. package/dist/commands/eval.js.map +1 -0
  131. package/dist/commands/game.d.ts +4 -0
  132. package/dist/commands/game.d.ts.map +1 -0
  133. package/dist/commands/game.js +395 -0
  134. package/dist/commands/game.js.map +1 -0
  135. package/dist/commands/generate.d.ts +17 -0
  136. package/dist/commands/generate.d.ts.map +1 -0
  137. package/dist/commands/generate.js +324 -0
  138. package/dist/commands/generate.js.map +1 -0
  139. package/dist/commands/generations.d.ts +17 -0
  140. package/dist/commands/generations.d.ts.map +1 -0
  141. package/dist/commands/generations.js +408 -0
  142. package/dist/commands/generations.js.map +1 -0
  143. package/dist/commands/harness.d.ts +19 -0
  144. package/dist/commands/harness.d.ts.map +1 -0
  145. package/dist/commands/harness.js +361 -0
  146. package/dist/commands/harness.js.map +1 -0
  147. package/dist/commands/js-script-validation-output.d.ts +7 -0
  148. package/dist/commands/js-script-validation-output.d.ts.map +1 -0
  149. package/dist/commands/js-script-validation-output.js +5 -0
  150. package/dist/commands/js-script-validation-output.js.map +1 -0
  151. package/dist/commands/js-script-versions.d.ts +53 -0
  152. package/dist/commands/js-script-versions.d.ts.map +1 -0
  153. package/dist/commands/js-script-versions.js +89 -0
  154. package/dist/commands/js-script-versions.js.map +1 -0
  155. package/dist/commands/js-script.d.ts +29 -0
  156. package/dist/commands/js-script.d.ts.map +1 -0
  157. package/dist/commands/js-script.js +227 -0
  158. package/dist/commands/js-script.js.map +1 -0
  159. package/dist/commands/jtbd.d.ts +38 -0
  160. package/dist/commands/jtbd.d.ts.map +1 -0
  161. package/dist/commands/jtbd.js +261 -0
  162. package/dist/commands/jtbd.js.map +1 -0
  163. package/dist/commands/local-db.d.ts +16 -0
  164. package/dist/commands/local-db.d.ts.map +1 -0
  165. package/dist/commands/local-db.js +33 -0
  166. package/dist/commands/local-db.js.map +1 -0
  167. package/dist/commands/migrate-code-inputs.d.ts +24 -0
  168. package/dist/commands/migrate-code-inputs.d.ts.map +1 -0
  169. package/dist/commands/migrate-code-inputs.js +120 -0
  170. package/dist/commands/migrate-code-inputs.js.map +1 -0
  171. package/dist/commands/models-hf.js +4 -4
  172. package/dist/commands/models-hf.js.map +1 -1
  173. package/dist/commands/models-recommended.d.ts.map +1 -1
  174. package/dist/commands/models-recommended.js +16 -24
  175. package/dist/commands/models-recommended.js.map +1 -1
  176. package/dist/commands/node.d.ts +10 -0
  177. package/dist/commands/node.d.ts.map +1 -0
  178. package/dist/commands/node.js +72 -0
  179. package/dist/commands/node.js.map +1 -0
  180. package/dist/commands/output.d.ts +24 -0
  181. package/dist/commands/output.d.ts.map +1 -0
  182. package/dist/commands/output.js +132 -0
  183. package/dist/commands/output.js.map +1 -0
  184. package/dist/commands/package-helpers.d.ts +1 -7
  185. package/dist/commands/package-helpers.d.ts.map +1 -1
  186. package/dist/commands/package-helpers.js +3 -26
  187. package/dist/commands/package-helpers.js.map +1 -1
  188. package/dist/commands/package.js +2 -2
  189. package/dist/commands/package.js.map +1 -1
  190. package/dist/commands/packs.d.ts +13 -0
  191. package/dist/commands/packs.d.ts.map +1 -0
  192. package/dist/commands/packs.js +60 -0
  193. package/dist/commands/packs.js.map +1 -0
  194. package/dist/commands/reliability.d.ts +14 -0
  195. package/dist/commands/reliability.d.ts.map +1 -0
  196. package/dist/commands/reliability.js +80 -0
  197. package/dist/commands/reliability.js.map +1 -0
  198. package/dist/commands/resource-read.d.ts +28 -0
  199. package/dist/commands/resource-read.d.ts.map +1 -0
  200. package/dist/commands/resource-read.js +316 -0
  201. package/dist/commands/resource-read.js.map +1 -0
  202. package/dist/commands/sketch-validation-output.d.ts +7 -0
  203. package/dist/commands/sketch-validation-output.d.ts.map +1 -0
  204. package/dist/commands/sketch-validation-output.js +5 -0
  205. package/dist/commands/sketch-validation-output.js.map +1 -0
  206. package/dist/commands/sketch-versions.d.ts +66 -0
  207. package/dist/commands/sketch-versions.d.ts.map +1 -0
  208. package/dist/commands/sketch-versions.js +108 -0
  209. package/dist/commands/sketch-versions.js.map +1 -0
  210. package/dist/commands/sketch.d.ts +21 -0
  211. package/dist/commands/sketch.d.ts.map +1 -0
  212. package/dist/commands/sketch.js +117 -0
  213. package/dist/commands/sketch.js.map +1 -0
  214. package/dist/commands/storage.d.ts +24 -0
  215. package/dist/commands/storage.d.ts.map +1 -0
  216. package/dist/commands/storage.js +112 -0
  217. package/dist/commands/storage.js.map +1 -0
  218. package/dist/commands/telegram.d.ts +11 -0
  219. package/dist/commands/telegram.d.ts.map +1 -0
  220. package/dist/commands/telegram.js +66 -0
  221. package/dist/commands/telegram.js.map +1 -0
  222. package/dist/commands/timeline-render.d.ts +80 -0
  223. package/dist/commands/timeline-render.d.ts.map +1 -0
  224. package/dist/commands/timeline-render.js +465 -0
  225. package/dist/commands/timeline-render.js.map +1 -0
  226. package/dist/commands/timeline-validation-output.d.ts +7 -0
  227. package/dist/commands/timeline-validation-output.d.ts.map +1 -0
  228. package/dist/commands/timeline-validation-output.js +9 -0
  229. package/dist/commands/timeline-validation-output.js.map +1 -0
  230. package/dist/commands/timeline-versions.d.ts +72 -0
  231. package/dist/commands/timeline-versions.d.ts.map +1 -0
  232. package/dist/commands/timeline-versions.js +108 -0
  233. package/dist/commands/timeline-versions.js.map +1 -0
  234. package/dist/commands/timeline.d.ts +22 -0
  235. package/dist/commands/timeline.d.ts.map +1 -0
  236. package/dist/commands/timeline.js +119 -0
  237. package/dist/commands/timeline.js.map +1 -0
  238. package/dist/commands/validate.d.ts +22 -0
  239. package/dist/commands/validate.d.ts.map +1 -0
  240. package/dist/commands/validate.js +127 -0
  241. package/dist/commands/validate.js.map +1 -0
  242. package/dist/commands/validation-output.d.ts +25 -0
  243. package/dist/commands/validation-output.d.ts.map +1 -0
  244. package/dist/commands/validation-output.js +29 -0
  245. package/dist/commands/validation-output.js.map +1 -0
  246. package/dist/commands/version-commands.d.ts +94 -0
  247. package/dist/commands/version-commands.d.ts.map +1 -0
  248. package/dist/commands/version-commands.js +227 -0
  249. package/dist/commands/version-commands.js.map +1 -0
  250. package/dist/commands/worker-models.d.ts +13 -0
  251. package/dist/commands/worker-models.d.ts.map +1 -0
  252. package/dist/commands/worker-models.js +207 -0
  253. package/dist/commands/worker-models.js.map +1 -0
  254. package/dist/commands/worker.d.ts +23 -0
  255. package/dist/commands/worker.d.ts.map +1 -0
  256. package/dist/commands/worker.js +374 -0
  257. package/dist/commands/worker.js.map +1 -0
  258. package/dist/debug/browser-runner.d.ts +21 -0
  259. package/dist/debug/browser-runner.d.ts.map +1 -0
  260. package/dist/debug/browser-runner.js +196 -0
  261. package/dist/debug/browser-runner.js.map +1 -0
  262. package/dist/debug/collector.d.ts +9 -0
  263. package/dist/debug/collector.d.ts.map +1 -0
  264. package/dist/debug/collector.js +9 -0
  265. package/dist/debug/collector.js.map +1 -0
  266. package/dist/debug/diff.d.ts +48 -0
  267. package/dist/debug/diff.d.ts.map +1 -0
  268. package/dist/debug/diff.js +68 -0
  269. package/dist/debug/diff.js.map +1 -0
  270. package/dist/debug/harness.d.ts +11 -0
  271. package/dist/debug/harness.d.ts.map +1 -0
  272. package/dist/debug/harness.js +103 -0
  273. package/dist/debug/harness.js.map +1 -0
  274. package/dist/debug/index.d.ts +17 -0
  275. package/dist/debug/index.d.ts.map +1 -0
  276. package/dist/debug/index.js +16 -0
  277. package/dist/debug/index.js.map +1 -0
  278. package/dist/debug/markdown.d.ts +3 -0
  279. package/dist/debug/markdown.d.ts.map +1 -0
  280. package/dist/debug/markdown.js +127 -0
  281. package/dist/debug/markdown.js.map +1 -0
  282. package/dist/debug/server-runner.d.ts +22 -0
  283. package/dist/debug/server-runner.d.ts.map +1 -0
  284. package/dist/debug/server-runner.js +164 -0
  285. package/dist/debug/server-runner.js.map +1 -0
  286. package/dist/debug/target.d.ts +34 -0
  287. package/dist/debug/target.d.ts.map +1 -0
  288. package/dist/debug/target.js +104 -0
  289. package/dist/debug/target.js.map +1 -0
  290. package/dist/debug/trace.d.ts +30 -0
  291. package/dist/debug/trace.d.ts.map +1 -0
  292. package/dist/debug/trace.js +87 -0
  293. package/dist/debug/trace.js.map +1 -0
  294. package/dist/debug/types.d.ts +82 -0
  295. package/dist/debug/types.d.ts.map +1 -0
  296. package/dist/debug/types.js +13 -0
  297. package/dist/debug/types.js.map +1 -0
  298. package/dist/debug/verdict.d.ts +3 -0
  299. package/dist/debug/verdict.d.ts.map +1 -0
  300. package/dist/debug/verdict.js +78 -0
  301. package/dist/debug/verdict.js.map +1 -0
  302. package/dist/debug/watch.d.ts +23 -0
  303. package/dist/debug/watch.d.ts.map +1 -0
  304. package/dist/debug/watch.js +68 -0
  305. package/dist/debug/watch.js.map +1 -0
  306. package/dist/diagnose.d.ts +139 -0
  307. package/dist/diagnose.d.ts.map +1 -0
  308. package/dist/diagnose.js +418 -0
  309. package/dist/diagnose.js.map +1 -0
  310. package/dist/evals/graph-runner.d.ts +8 -0
  311. package/dist/evals/graph-runner.d.ts.map +1 -0
  312. package/dist/evals/graph-runner.js +136 -0
  313. package/dist/evals/graph-runner.js.map +1 -0
  314. package/dist/harness/capability-coverage.d.ts +161 -0
  315. package/dist/harness/capability-coverage.d.ts.map +1 -0
  316. package/dist/harness/capability-coverage.js +266 -0
  317. package/dist/harness/capability-coverage.js.map +1 -0
  318. package/dist/harness/capability-table.d.ts +17 -0
  319. package/dist/harness/capability-table.d.ts.map +1 -0
  320. package/dist/harness/capability-table.js +3576 -0
  321. package/dist/harness/capability-table.js.map +1 -0
  322. package/dist/harness/changed-files.d.ts +18 -0
  323. package/dist/harness/changed-files.d.ts.map +1 -0
  324. package/dist/harness/changed-files.js +76 -0
  325. package/dist/harness/changed-files.js.map +1 -0
  326. package/dist/harness/declared-capabilities.d.ts +12 -0
  327. package/dist/harness/declared-capabilities.d.ts.map +1 -0
  328. package/dist/harness/declared-capabilities.js +21 -0
  329. package/dist/harness/declared-capabilities.js.map +1 -0
  330. package/dist/harness/registry.d.ts +162 -0
  331. package/dist/harness/registry.d.ts.map +1 -0
  332. package/dist/harness/registry.js +1738 -0
  333. package/dist/harness/registry.js.map +1 -0
  334. package/dist/index.js +121 -130
  335. package/dist/index.js.map +1 -1
  336. package/dist/interaction-script.d.ts +17 -0
  337. package/dist/interaction-script.d.ts.map +1 -0
  338. package/dist/interaction-script.js +47 -0
  339. package/dist/interaction-script.js.map +1 -0
  340. package/dist/js-script-debug/harness.d.ts +114 -0
  341. package/dist/js-script-debug/harness.d.ts.map +1 -0
  342. package/dist/js-script-debug/harness.js +252 -0
  343. package/dist/js-script-debug/harness.js.map +1 -0
  344. package/dist/js-script-debug/index.d.ts +9 -0
  345. package/dist/js-script-debug/index.d.ts.map +1 -0
  346. package/dist/js-script-debug/index.js +9 -0
  347. package/dist/js-script-debug/index.js.map +1 -0
  348. package/dist/js-script-debug/interactions.d.ts +19 -0
  349. package/dist/js-script-debug/interactions.d.ts.map +1 -0
  350. package/dist/js-script-debug/interactions.js +17 -0
  351. package/dist/js-script-debug/interactions.js.map +1 -0
  352. package/dist/js-script-debug/target.d.ts +20 -0
  353. package/dist/js-script-debug/target.d.ts.map +1 -0
  354. package/dist/js-script-debug/target.js +78 -0
  355. package/dist/js-script-debug/target.js.map +1 -0
  356. package/dist/local-model-interfaces.d.ts +20 -0
  357. package/dist/local-model-interfaces.d.ts.map +1 -0
  358. package/dist/local-model-interfaces.js +64 -0
  359. package/dist/local-model-interfaces.js.map +1 -0
  360. package/dist/local-secrets.d.ts +3 -0
  361. package/dist/local-secrets.d.ts.map +1 -0
  362. package/dist/local-secrets.js +16 -0
  363. package/dist/local-secrets.js.map +1 -0
  364. package/dist/markdown.d.ts.map +1 -1
  365. package/dist/markdown.js +7 -2
  366. package/dist/markdown.js.map +1 -1
  367. package/dist/node/run-node.d.ts +28 -0
  368. package/dist/node/run-node.d.ts.map +1 -0
  369. package/dist/node/run-node.js +76 -0
  370. package/dist/node/run-node.js.map +1 -0
  371. package/dist/node-registry.d.ts +13 -0
  372. package/dist/node-registry.d.ts.map +1 -0
  373. package/dist/node-registry.js +36 -0
  374. package/dist/node-registry.js.map +1 -0
  375. package/dist/nodetool.js +845 -309
  376. package/dist/nodetool.js.map +1 -1
  377. package/dist/numeric-options.d.ts +22 -0
  378. package/dist/numeric-options.d.ts.map +1 -0
  379. package/dist/numeric-options.js +45 -0
  380. package/dist/numeric-options.js.map +1 -0
  381. package/dist/permission-gate.d.ts +55 -0
  382. package/dist/permission-gate.d.ts.map +1 -0
  383. package/dist/permission-gate.js +118 -0
  384. package/dist/permission-gate.js.map +1 -0
  385. package/dist/predicates.d.ts +6 -0
  386. package/dist/predicates.d.ts.map +1 -0
  387. package/dist/predicates.js +6 -0
  388. package/dist/predicates.js.map +1 -0
  389. package/dist/providers.d.ts +73 -10
  390. package/dist/providers.d.ts.map +1 -1
  391. package/dist/providers.js +329 -97
  392. package/dist/providers.js.map +1 -1
  393. package/dist/readline-input.d.ts +13 -19
  394. package/dist/readline-input.d.ts.map +1 -1
  395. package/dist/readline-input.js +201 -190
  396. package/dist/readline-input.js.map +1 -1
  397. package/dist/run-budget.d.ts +40 -0
  398. package/dist/run-budget.d.ts.map +1 -0
  399. package/dist/run-budget.js +119 -0
  400. package/dist/run-budget.js.map +1 -0
  401. package/dist/run-dsl-supervised.d.ts +11 -0
  402. package/dist/run-dsl-supervised.d.ts.map +1 -0
  403. package/dist/run-dsl-supervised.js +82 -0
  404. package/dist/run-dsl-supervised.js.map +1 -0
  405. package/dist/run-dsl.d.ts +23 -0
  406. package/dist/run-dsl.d.ts.map +1 -1
  407. package/dist/run-dsl.js +40 -9
  408. package/dist/run-dsl.js.map +1 -1
  409. package/dist/run-json.d.ts +24 -0
  410. package/dist/run-json.d.ts.map +1 -0
  411. package/dist/run-json.js +132 -0
  412. package/dist/run-json.js.map +1 -0
  413. package/dist/sandbox-catalog.d.ts +12 -0
  414. package/dist/sandbox-catalog.d.ts.map +1 -0
  415. package/dist/sandbox-catalog.js +27 -0
  416. package/dist/sandbox-catalog.js.map +1 -0
  417. package/dist/settings.d.ts +11 -10
  418. package/dist/settings.d.ts.map +1 -1
  419. package/dist/settings.js +71 -13
  420. package/dist/settings.js.map +1 -1
  421. package/dist/sketch-debug/harness.d.ts +87 -0
  422. package/dist/sketch-debug/harness.d.ts.map +1 -0
  423. package/dist/sketch-debug/harness.js +178 -0
  424. package/dist/sketch-debug/harness.js.map +1 -0
  425. package/dist/sketch-debug/index.d.ts +9 -0
  426. package/dist/sketch-debug/index.d.ts.map +1 -0
  427. package/dist/sketch-debug/index.js +9 -0
  428. package/dist/sketch-debug/index.js.map +1 -0
  429. package/dist/sketch-debug/interactions.d.ts +19 -0
  430. package/dist/sketch-debug/interactions.d.ts.map +1 -0
  431. package/dist/sketch-debug/interactions.js +17 -0
  432. package/dist/sketch-debug/interactions.js.map +1 -0
  433. package/dist/sketch-debug/target.d.ts +48 -0
  434. package/dist/sketch-debug/target.d.ts.map +1 -0
  435. package/dist/sketch-debug/target.js +138 -0
  436. package/dist/sketch-debug/target.js.map +1 -0
  437. package/dist/stdin.d.ts +18 -19
  438. package/dist/stdin.d.ts.map +1 -1
  439. package/dist/stdin.js +159 -157
  440. package/dist/stdin.js.map +1 -1
  441. package/dist/supervisor.d.ts +97 -0
  442. package/dist/supervisor.d.ts.map +1 -0
  443. package/dist/supervisor.js +194 -0
  444. package/dist/supervisor.js.map +1 -0
  445. package/dist/terminal-clipboard.d.ts +3 -0
  446. package/dist/terminal-clipboard.d.ts.map +1 -0
  447. package/dist/terminal-clipboard.js +24 -0
  448. package/dist/terminal-clipboard.js.map +1 -0
  449. package/dist/terminal-mouse.d.ts +24 -0
  450. package/dist/terminal-mouse.d.ts.map +1 -0
  451. package/dist/terminal-mouse.js +84 -0
  452. package/dist/terminal-mouse.js.map +1 -0
  453. package/dist/terminal-screen.d.ts +41 -0
  454. package/dist/terminal-screen.d.ts.map +1 -0
  455. package/dist/terminal-screen.js +228 -0
  456. package/dist/terminal-screen.js.map +1 -0
  457. package/dist/timeline-debug/harness.d.ts +79 -0
  458. package/dist/timeline-debug/harness.d.ts.map +1 -0
  459. package/dist/timeline-debug/harness.js +155 -0
  460. package/dist/timeline-debug/harness.js.map +1 -0
  461. package/dist/timeline-debug/index.d.ts +9 -0
  462. package/dist/timeline-debug/index.d.ts.map +1 -0
  463. package/dist/timeline-debug/index.js +9 -0
  464. package/dist/timeline-debug/index.js.map +1 -0
  465. package/dist/timeline-debug/interactions.d.ts +19 -0
  466. package/dist/timeline-debug/interactions.d.ts.map +1 -0
  467. package/dist/timeline-debug/interactions.js +17 -0
  468. package/dist/timeline-debug/interactions.js.map +1 -0
  469. package/dist/timeline-debug/target.d.ts +34 -0
  470. package/dist/timeline-debug/target.d.ts.map +1 -0
  471. package/dist/timeline-debug/target.js +132 -0
  472. package/dist/timeline-debug/target.js.map +1 -0
  473. package/dist/tool-format.d.ts +54 -0
  474. package/dist/tool-format.d.ts.map +1 -0
  475. package/dist/tool-format.js +360 -0
  476. package/dist/tool-format.js.map +1 -0
  477. package/dist/useExecutionState.d.ts.map +1 -1
  478. package/dist/useExecutionState.js +8 -4
  479. package/dist/useExecutionState.js.map +1 -1
  480. package/dist/validate/index.d.ts +28 -0
  481. package/dist/validate/index.d.ts.map +1 -0
  482. package/dist/validate/index.js +51 -0
  483. package/dist/validate/index.js.map +1 -0
  484. package/dist/websocket-client.d.ts +78 -15
  485. package/dist/websocket-client.d.ts.map +1 -1
  486. package/dist/websocket-client.js +497 -171
  487. package/dist/websocket-client.js.map +1 -1
  488. package/package.json +62 -31
@@ -0,0 +1,194 @@
1
+ /**
2
+ * The CLI's supervisor surface: five flags, one handle, and the lines a
3
+ * supervised run prints.
4
+ *
5
+ * Flag parsing and model-spec resolution are pure so they can be unit-tested
6
+ * without a provider, a database, or a kernel. Everything that needs a
7
+ * provider or the agents package is behind a dynamic import, so an
8
+ * unsupervised run loads none of it.
9
+ *
10
+ * The handle goes to `ExecutionSessionOptions.supervisor` — the one
11
+ * integration point every surface shares (docs/workflow-supervisor-design.md
12
+ * §7). No CLI code touches `WorkflowRunner`.
13
+ */
14
+ import { formatInterventionLine, formatSupervisedSummary, summarizeInterventions } from "@nodetool-ai/execution/debug";
15
+ import { parseNumericOption } from "./numeric-options.js";
16
+ import { isNumber } from "./predicates.js";
17
+ /**
18
+ * Model used when `--supervise` is given without `--supervisor-model`.
19
+ * `NODETOOL_SUPERVISOR_MODEL` overrides it.
20
+ */
21
+ export const DEFAULT_SUPERVISOR_MODEL = "anthropic/claude-sonnet-4-6";
22
+ /** Register the supervisor flags on a run-shaped command. */
23
+ export function addSupervisorOptions(command) {
24
+ return command
25
+ .option("--supervise", "Let a supervisor agent decide what to do when a node fails (retry / repair / skip / fail)")
26
+ .option("--max-decisions <n>", "Supervisor decisions allowed in this run (default: 10)")
27
+ .option("--max-retries <n>", "Supervisor retries allowed per node invocation (default: 2)")
28
+ .option("--supervisor-cost-cap <usd>", "Ceiling on supervisor spend for this run, in USD (default: 0.50)")
29
+ .option("--supervisor-model <provider/model>", `Model that supervises the run (default: ${DEFAULT_SUPERVISOR_MODEL})`);
30
+ }
31
+ function positiveInt(value, flag) {
32
+ return parseNumericOption(value, flag, { integer: true, min: 0 });
33
+ }
34
+ function positiveNumber(value, flag) {
35
+ return parseNumericOption(value, flag, { min: 0 });
36
+ }
37
+ /**
38
+ * Turn the flags into a config, or `null` when the run is unsupervised.
39
+ *
40
+ * A bound passed without `--supervise` is a mistake worth reporting: it reads
41
+ * as "supervision, bounded", and silently running unsupervised would hide a
42
+ * failure the user asked to be handled.
43
+ */
44
+ export function parseSupervisorFlags(opts) {
45
+ const bounded = opts.maxDecisions !== undefined ||
46
+ opts.maxRetries !== undefined ||
47
+ opts.supervisorCostCap !== undefined ||
48
+ opts.supervisorModel !== undefined;
49
+ if (!opts.supervise) {
50
+ if (bounded) {
51
+ throw new Error("Supervisor options were given without --supervise; add --supervise or drop them.");
52
+ }
53
+ return null;
54
+ }
55
+ const config = {
56
+ modelSpec: opts.supervisorModel ??
57
+ process.env.NODETOOL_SUPERVISOR_MODEL ??
58
+ DEFAULT_SUPERVISOR_MODEL
59
+ };
60
+ if (opts.maxDecisions !== undefined) {
61
+ config.maxDecisions = positiveInt(opts.maxDecisions, "--max-decisions");
62
+ }
63
+ if (opts.maxRetries !== undefined) {
64
+ config.maxRetriesPerNode = positiveInt(opts.maxRetries, "--max-retries");
65
+ }
66
+ if (opts.supervisorCostCap !== undefined) {
67
+ config.maxCostUsd = positiveNumber(opts.supervisorCostCap, "--supervisor-cost-cap");
68
+ }
69
+ return config;
70
+ }
71
+ /**
72
+ * Split `provider/model` into its parts.
73
+ *
74
+ * Model ids themselves contain slashes (`openrouter/openai/gpt-5.4-mini`), so
75
+ * the split is decided by the registry rather than by counting separators:
76
+ * the leading segment is the provider only if a provider by that name is
77
+ * registered.
78
+ */
79
+ export function parseModelSpec(spec, isRegisteredProvider) {
80
+ const cut = spec.indexOf("/");
81
+ const head = cut === -1 ? spec : spec.slice(0, cut);
82
+ if (cut === -1 || !isRegisteredProvider(head.toLowerCase())) {
83
+ throw new Error(`--supervisor-model must be "<provider>/<model>" with a registered provider ` +
84
+ `(got "${spec}"). Example: anthropic/claude-sonnet-4-6.`);
85
+ }
86
+ return { providerId: head.toLowerCase(), model: spec.slice(cut + 1) };
87
+ }
88
+ /**
89
+ * Build the bounded, LLM-backed handle. Imports are dynamic so the agents
90
+ * package and a provider are loaded only for a run that asked for them.
91
+ */
92
+ export async function createSupervisorHandle(init) {
93
+ const [{ BoundedHandle }, { SupervisorAgent }, { listRegisteredProviderIds }] = await Promise.all([
94
+ import("@nodetool-ai/kernel"),
95
+ import("@nodetool-ai/agents"),
96
+ import("@nodetool-ai/runtime")
97
+ ]);
98
+ const { createProviderStrict } = await import("./providers.js");
99
+ const { providerId, model } = parseModelSpec(init.config.modelSpec, (id) => listRegisteredProviderIds().includes(id));
100
+ const provider = await createProviderStrict(providerId);
101
+ const agentOptions = {
102
+ provider,
103
+ model,
104
+ // The supervisor reads and writes the run's memory (`supervisor:` keys)
105
+ // but must not push its own provider chatter into the run's message
106
+ // stream — the CLI drains that stream for `⛨` lines — so it gets a
107
+ // listener-free copy, matching the agent surface.
108
+ context: init.context.copy({
109
+ shareMemory: true,
110
+ inheritMessageListeners: false
111
+ })
112
+ };
113
+ if (init.config.maxCostUsd !== undefined) {
114
+ agentOptions.maxCostUsd = init.config.maxCostUsd;
115
+ }
116
+ const agent = new SupervisorAgent(agentOptions);
117
+ const bounds = {};
118
+ if (init.config.maxDecisions !== undefined) {
119
+ bounds.maxDecisions = init.config.maxDecisions;
120
+ }
121
+ if (init.config.maxRetriesPerNode !== undefined) {
122
+ bounds.maxRetriesPerNode = init.config.maxRetriesPerNode;
123
+ }
124
+ const handle = new BoundedHandle(agent, bounds);
125
+ return { handle, providerId, model };
126
+ }
127
+ /**
128
+ * Print one `⛨` line per decision as it happens, by draining the session's
129
+ * message stream. Lines go to stderr so `--json` stdout stays parseable.
130
+ */
131
+ export async function streamInterventionLines(messages, write = (line) => console.error(line)) {
132
+ for await (const message of messages) {
133
+ if (message.type !== "supervisor_decision")
134
+ continue;
135
+ const intervention = {
136
+ escalation: message.escalation,
137
+ verdict: message.verdict,
138
+ decidedBy: message.decided_by
139
+ };
140
+ if (isNumber(message.cost)) {
141
+ intervention.costUsd = message.cost;
142
+ }
143
+ write(formatInterventionLine(intervention));
144
+ }
145
+ }
146
+ /** The run's closing supervised line. Nothing is printed for a clean run. */
147
+ export function printSupervisedSummary(interventions, write = (line) => console.log(line)) {
148
+ if (interventions.length === 0)
149
+ return;
150
+ write(formatSupervisedSummary(summarizeInterventions(interventions)));
151
+ }
152
+ /**
153
+ * Write supervisor spend into the prediction ledger `nodetool costs` reads.
154
+ *
155
+ * One row per decision that cost money, attributed to the run (workflow id,
156
+ * plus the job id in metadata — the ledger has no job column) and tagged
157
+ * `supervisor` in `node_type`, so supervision is separable from the spend of
158
+ * the workflow it supervised. Best-effort: a ledger failure never fails a run
159
+ * that already finished. Returns the number of rows written.
160
+ */
161
+ export async function recordSupervisorCost(attribution) {
162
+ const billable = attribution.interventions.filter((i) => isNumber(i.costUsd) && i.costUsd > 0);
163
+ if (billable.length === 0)
164
+ return 0;
165
+ const { Prediction } = await import("@nodetool-ai/models");
166
+ let written = 0;
167
+ for (const intervention of billable) {
168
+ try {
169
+ await Prediction.create({
170
+ user_id: attribution.userId,
171
+ provider: attribution.providerId,
172
+ model: attribution.model,
173
+ node_id: intervention.escalation.nodeId,
174
+ node_type: "supervisor",
175
+ workflow_id: attribution.workflowId,
176
+ cost: intervention.costUsd,
177
+ status: "completed",
178
+ metadata: {
179
+ kind: "supervisor",
180
+ job_id: attribution.jobId,
181
+ decided_by: intervention.decidedBy,
182
+ verdict: intervention.verdict.action,
183
+ escalated_node_type: intervention.escalation.nodeType
184
+ }
185
+ });
186
+ written += 1;
187
+ }
188
+ catch (err) {
189
+ console.error(`Failed to record supervisor cost: ${err instanceof Error ? err.message : String(err)}`);
190
+ }
191
+ }
192
+ return written;
193
+ }
194
+ //# sourceMappingURL=supervisor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../src/supervisor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Copy locally when a clipboard program is available, then use OSC 52 as fallback. */
2
+ export declare function copyTerminalText(value: string, output: NodeJS.WriteStream, platform?: NodeJS.Platform): Promise<void>;
3
+ //# sourceMappingURL=terminal-clipboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-clipboard.d.ts","sourceRoot":"","sources":["../src/terminal-clipboard.ts"],"names":[],"mappings":"AAEA,uFAAuF;AACvF,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,CAAC,WAAW,EAC1B,QAAQ,kBAAmB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAkBf"}
@@ -0,0 +1,24 @@
1
+ import { spawn } from "node:child_process";
2
+ /** Copy locally when a clipboard program is available, then use OSC 52 as fallback. */
3
+ export async function copyTerminalText(value, output, platform = process.platform) {
4
+ const candidates = platform === "darwin"
5
+ ? [["pbcopy"]]
6
+ : platform === "win32"
7
+ ? [["clip"]]
8
+ : [["wl-copy"], ["xclip", "-selection", "clipboard"], ["xsel", "--clipboard", "--input"]];
9
+ for (const [command, ...args] of candidates) {
10
+ if (!command)
11
+ continue;
12
+ const copied = await new Promise((resolve) => {
13
+ const child = spawn(command, args, { stdio: ["pipe", "ignore", "ignore"] });
14
+ child.on("error", () => resolve(false));
15
+ child.on("close", (code) => resolve(code === 0));
16
+ child.stdin.on("error", () => resolve(false));
17
+ child.stdin.end(value);
18
+ });
19
+ if (copied)
20
+ return;
21
+ }
22
+ output.write(`\u001b]52;c;${Buffer.from(value).toString("base64")}\u0007`);
23
+ }
24
+ //# sourceMappingURL=terminal-clipboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-clipboard.js","sourceRoot":"","sources":["../src/terminal-clipboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,uFAAuF;AACvF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAa,EACb,MAA0B,EAC1B,QAAQ,GAAG,OAAO,CAAC,QAAQ;IAE3B,MAAM,UAAU,GAAG,QAAQ,KAAK,QAAQ;QACtC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACd,CAAC,CAAC,QAAQ,KAAK,OAAO;YACpB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACZ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC;IAC9F,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,UAAU,EAAE,CAAC;QAC5C,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;YACpD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC5E,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YACxC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9C,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;QACH,IAAI,MAAM;YAAE,OAAO;IACrB,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,eAAe,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { EventEmitter } from "node:events";
2
+ import { PassThrough } from "node:stream";
3
+ export interface MouseEvent {
4
+ readonly action: "down" | "move" | "up" | "wheel";
5
+ readonly x: number;
6
+ readonly y: number;
7
+ readonly direction?: -1 | 1;
8
+ }
9
+ export declare class MouseInput extends PassThrough {
10
+ private readonly source;
11
+ readonly events: EventEmitter<[never]>;
12
+ readonly isTTY: boolean;
13
+ private pending;
14
+ private readonly decoder;
15
+ private flushTimer;
16
+ constructor(source: NodeJS.ReadStream);
17
+ get isRaw(): boolean;
18
+ setRawMode(raw: boolean): this;
19
+ ref(): this;
20
+ unref(): this;
21
+ close(): void;
22
+ private readonly receive;
23
+ }
24
+ //# sourceMappingURL=terminal-mouse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-mouse.d.ts","sourceRoot":"","sources":["../src/terminal-mouse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC;IAClD,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;CAC7B;AAKD,qBAAa,UAAW,SAAQ,WAAW;IAO7B,OAAO,CAAC,QAAQ,CAAC,MAAM;IANnC,QAAQ,CAAC,MAAM,wBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IACrD,OAAO,CAAC,UAAU,CAA4C;IAE9D,YAA6B,MAAM,EAAE,MAAM,CAAC,UAAU,EAIrD;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAG7B;IAED,GAAG,IAAI,IAAI,CAGV;IAED,KAAK,IAAI,IAAI,CAGZ;IAED,KAAK,IAAI,IAAI,CAIZ;IAED,OAAO,CAAC,QAAQ,CAAC,OAAO,CAsCtB;CACH"}
@@ -0,0 +1,84 @@
1
+ import { EventEmitter } from "node:events";
2
+ import { PassThrough } from "node:stream";
3
+ import { StringDecoder } from "node:string_decoder";
4
+ const ESC = String.fromCharCode(27);
5
+ const MOUSE_PREFIX = `${ESC}[<`;
6
+ export class MouseInput extends PassThrough {
7
+ source;
8
+ events = new EventEmitter();
9
+ isTTY;
10
+ pending = "";
11
+ decoder = new StringDecoder("utf8");
12
+ flushTimer;
13
+ constructor(source) {
14
+ super();
15
+ this.source = source;
16
+ this.isTTY = Boolean(source.isTTY);
17
+ source.on("data", this.receive);
18
+ }
19
+ get isRaw() {
20
+ return Boolean(this.source.isRaw);
21
+ }
22
+ setRawMode(raw) {
23
+ this.source.setRawMode(raw);
24
+ return this;
25
+ }
26
+ ref() {
27
+ this.source.ref();
28
+ return this;
29
+ }
30
+ unref() {
31
+ this.source.unref();
32
+ return this;
33
+ }
34
+ close() {
35
+ this.source.off("data", this.receive);
36
+ if (this.flushTimer)
37
+ clearTimeout(this.flushTimer);
38
+ this.end();
39
+ }
40
+ receive = (chunk) => {
41
+ this.pending += Buffer.isBuffer(chunk) ? this.decoder.write(chunk) : chunk;
42
+ let keyboard = "";
43
+ while (this.pending) {
44
+ const start = this.pending.indexOf(MOUSE_PREFIX);
45
+ if (start < 0) {
46
+ const possible = [MOUSE_PREFIX, `${ESC}[`, ESC].find((prefix) => this.pending.endsWith(prefix)) ?? "";
47
+ keyboard += this.pending.slice(0, this.pending.length - possible.length);
48
+ this.pending = possible;
49
+ break;
50
+ }
51
+ keyboard += this.pending.slice(0, start);
52
+ this.pending = this.pending.slice(start);
53
+ const match = /^(\d+);(\d+);(\d+)([Mm])/.exec(this.pending.slice(MOUSE_PREFIX.length));
54
+ if (match) {
55
+ this.pending = this.pending.slice(MOUSE_PREFIX.length + match[0].length);
56
+ const code = Number(match[1]);
57
+ const x = Number(match[2]);
58
+ const y = Number(match[3]);
59
+ if (code === 64 || code === 65) {
60
+ this.events.emit("mouse", { action: "wheel", x, y, direction: code === 64 ? -1 : 1 });
61
+ }
62
+ else if ((code & 3) === 0 || match[4] === "m") {
63
+ this.events.emit("mouse", { action: match[4] === "m" ? "up" : (code & 32) ? "move" : "down", x, y });
64
+ }
65
+ continue;
66
+ }
67
+ if (/^[\d;]*$/.test(this.pending.slice(MOUSE_PREFIX.length)))
68
+ break;
69
+ keyboard += this.pending[0];
70
+ this.pending = this.pending.slice(1);
71
+ }
72
+ if (keyboard)
73
+ this.write(keyboard);
74
+ if (this.flushTimer)
75
+ clearTimeout(this.flushTimer);
76
+ if (this.pending) {
77
+ this.flushTimer = setTimeout(() => {
78
+ this.write(this.pending);
79
+ this.pending = "";
80
+ }, 40);
81
+ }
82
+ };
83
+ }
84
+ //# sourceMappingURL=terminal-mouse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-mouse.js","sourceRoot":"","sources":["../src/terminal-mouse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import React from "react";
2
+ import type { EventEmitter } from "node:events";
3
+ export interface ChatMessage {
4
+ readonly id: string;
5
+ readonly role: "user" | "assistant" | "tool" | "system";
6
+ readonly content: string;
7
+ readonly toolName?: string;
8
+ readonly toolArgs?: Record<string, unknown>;
9
+ readonly rendered?: string;
10
+ }
11
+ /** Remove terminal commands from external text before adding our own styling. */
12
+ export declare function terminalText(text: string): string;
13
+ export declare function terminalLines(text: string, width: number): string[];
14
+ export declare function useTerminalSize(): {
15
+ columns: number;
16
+ rows: number;
17
+ };
18
+ /** Restore the caller's screen even when Ink exits through a signal. */
19
+ export declare function enterTerminalScreen(output: NodeJS.WriteStream): () => void;
20
+ export declare function messageLines(message: ChatMessage, width: number, details: boolean): string[];
21
+ interface TranscriptProps {
22
+ readonly messages: readonly ChatMessage[];
23
+ readonly live: string;
24
+ readonly width: number;
25
+ readonly height: number;
26
+ readonly details: boolean;
27
+ readonly resetKey: string;
28
+ readonly startAtTop?: boolean;
29
+ readonly mouseEvents?: EventEmitter;
30
+ readonly screenY?: number;
31
+ readonly screenX?: number;
32
+ }
33
+ interface Position {
34
+ readonly line: number;
35
+ readonly column: number;
36
+ }
37
+ export declare function selectedTranscriptText(lines: readonly string[], from: Position, to: Position): string;
38
+ export declare function transcriptLines(messages: readonly ChatMessage[], width: number, details: boolean): string[];
39
+ export declare function Transcript({ messages, live, width, height, details, resetKey, startAtTop, mouseEvents, screenY, screenX }: TranscriptProps): React.ReactElement;
40
+ export {};
41
+ //# sourceMappingURL=terminal-screen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-screen.d.ts","sourceRoot":"","sources":["../src/terminal-screen.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAE3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAchD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAC;IACxD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAInE;AAED,wBAAgB,eAAe,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAenE;AAED,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,GAAG,MAAM,IAAI,CAa1E;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,GACf,MAAM,EAAE,CA2CV;AAED,UAAU,eAAe;IACvB,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,UAAU,QAAQ;IAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAgBrE,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,GAAG,MAAM,CASrG;AAiBD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,SAAS,WAAW,EAAE,EAChC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,GACf,MAAM,EAAE,CAaV;AAED,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,IAAI,EACJ,KAAK,EACL,MAAM,EACN,OAAO,EACP,QAAQ,EACR,UAAkB,EAClB,WAAW,EACX,OAAW,EACX,OAAW,EACZ,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CAkHtC"}
@@ -0,0 +1,228 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useRef, useState } from "react";
3
+ import { Box, Text, useInput, useStdout } from "ink";
4
+ import { stripVTControlCharacters } from "node:util";
5
+ import chalk from "chalk";
6
+ import wrapAnsi from "wrap-ansi";
7
+ import stringWidth from "string-width";
8
+ import { copyTerminalText } from "./terminal-clipboard.js";
9
+ import { friendlyToolName, formatToolParams, formatToolDiff, formatToolCode } from "./tool-format.js";
10
+ /** Remove terminal commands from external text before adding our own styling. */
11
+ export function terminalText(text) {
12
+ return stripVTControlCharacters(text).replace(/\p{Cc}/gu, (character) => character === "\n" || character === "\t" ? character : "");
13
+ }
14
+ export function terminalLines(text, width) {
15
+ return wrapAnsi(text, Math.max(1, width), { hard: true, trim: false }).split("\n");
16
+ }
17
+ export function useTerminalSize() {
18
+ const { stdout } = useStdout();
19
+ const [size, setSize] = useState(() => ({
20
+ columns: stdout.columns || 80,
21
+ rows: stdout.rows || 24
22
+ }));
23
+ useEffect(() => {
24
+ const resize = () => setSize({ columns: stdout.columns || 80, rows: stdout.rows || 24 });
25
+ stdout.on("resize", resize);
26
+ return () => {
27
+ stdout.off("resize", resize);
28
+ };
29
+ }, [stdout]);
30
+ return size;
31
+ }
32
+ /** Restore the caller's screen even when Ink exits through a signal. */
33
+ export function enterTerminalScreen(output) {
34
+ if (!output.isTTY) {
35
+ return () => { };
36
+ }
37
+ output.write("\u001b[?1049h\u001b[H\u001b[?25l\u001b[?2004h\u001b[?1000h\u001b[?1002h\u001b[?1006h");
38
+ let restored = false;
39
+ return () => {
40
+ if (restored) {
41
+ return;
42
+ }
43
+ restored = true;
44
+ output.write("\u001b[?1006l\u001b[?1002l\u001b[?1000l\u001b[?2004l\u001b[?25h\u001b[?1049l");
45
+ };
46
+ }
47
+ export function messageLines(message, width, details) {
48
+ const content = terminalText(message.content);
49
+ if (message.role === "tool") {
50
+ const name = message.toolName ?? "tool";
51
+ const title = `${friendlyToolName(name)} ${formatToolParams(name, message.toolArgs)}`;
52
+ const body = details ? content : content.split("\n").slice(0, 2).join("\n");
53
+ const lines = [
54
+ chalk.cyan(terminalText(title)),
55
+ ...terminalLines(body, width).map((line) => chalk.dim(line))
56
+ ];
57
+ if (details && message.toolArgs) {
58
+ lines.push(...terminalLines(terminalText(JSON.stringify(message.toolArgs, null, 2)), width).map((line) => chalk.dim(line)));
59
+ }
60
+ if (details) {
61
+ for (const line of formatToolCode(name, message.toolArgs) ?? []) {
62
+ lines.push(chalk.dim(terminalText(line)));
63
+ }
64
+ for (const line of formatToolDiff(name, message.toolArgs) ?? []) {
65
+ const text = terminalText(`${line.sign} ${line.text}`);
66
+ lines.push(line.sign === "+"
67
+ ? chalk.green(text)
68
+ : line.sign === "-"
69
+ ? chalk.red(text)
70
+ : chalk.dim(text));
71
+ }
72
+ }
73
+ return ["", ...lines.flatMap((line) => terminalLines(line, width))];
74
+ }
75
+ if (message.role === "system") {
76
+ return terminalLines(chalk.dim(content), width);
77
+ }
78
+ const heading = message.role === "user"
79
+ ? chalk.cyan.bold("You")
80
+ : chalk.green.bold("NodeTool");
81
+ return ["", heading, ...terminalLines(message.rendered ?? content, width)];
82
+ }
83
+ const graphemes = new Intl.Segmenter(undefined, { granularity: "grapheme" });
84
+ function plainLine(line) {
85
+ return stripVTControlCharacters(line);
86
+ }
87
+ function columnIndex(line, column) {
88
+ let cell = 0;
89
+ for (const part of graphemes.segment(line)) {
90
+ if (cell >= column)
91
+ return part.index;
92
+ cell += stringWidth(part.segment);
93
+ }
94
+ return line.length;
95
+ }
96
+ export function selectedTranscriptText(lines, from, to) {
97
+ const [first, last] = from.line < to.line || (from.line === to.line && from.column <= to.column)
98
+ ? [from, to] : [to, from];
99
+ return lines.slice(first.line, last.line + 1).map((raw, offset) => {
100
+ const line = plainLine(raw);
101
+ const start = offset === 0 ? columnIndex(line, first.column) : 0;
102
+ const end = first.line + offset === last.line ? columnIndex(line, last.column) : line.length;
103
+ return line.slice(start, end);
104
+ }).join("\n");
105
+ }
106
+ function highlightLine(raw, lineNumber, from, to) {
107
+ const [first, last] = from.line < to.line || (from.line === to.line && from.column <= to.column)
108
+ ? [from, to] : [to, from];
109
+ if (lineNumber < first.line || lineNumber > last.line)
110
+ return raw;
111
+ const line = plainLine(raw);
112
+ const start = lineNumber === first.line ? columnIndex(line, first.column) : 0;
113
+ const end = lineNumber === last.line ? columnIndex(line, last.column) : line.length;
114
+ return line.slice(0, start) + chalk.inverse(line.slice(start, end)) + line.slice(end);
115
+ }
116
+ const layoutCache = new WeakMap();
117
+ export function transcriptLines(messages, width, details) {
118
+ const lines = [];
119
+ for (const message of messages) {
120
+ let cached = layoutCache.get(message);
121
+ if (!cached || cached.width !== width || cached.details !== details) {
122
+ cached = { width, details, lines: messageLines(message, width, details) };
123
+ layoutCache.set(message, cached);
124
+ }
125
+ for (const line of cached.lines) {
126
+ lines.push(line);
127
+ }
128
+ }
129
+ return lines;
130
+ }
131
+ export function Transcript({ messages, live, width, height, details, resetKey, startAtTop = false, mouseEvents, screenY = 4, screenX = 2 }) {
132
+ const [top, setTop] = useState(startAtTop ? 0 : null);
133
+ const [selection, setSelection] = useState(null);
134
+ const [copyNotice, setCopyNotice] = useState(false);
135
+ const noticeTimer = useRef(null);
136
+ const dragging = useRef(null);
137
+ useEffect(() => () => {
138
+ if (noticeTimer.current)
139
+ clearTimeout(noticeTimer.current);
140
+ }, []);
141
+ useEffect(() => {
142
+ setTop(startAtTop ? 0 : null);
143
+ setSelection(null);
144
+ setCopyNotice(false);
145
+ if (noticeTimer.current)
146
+ clearTimeout(noticeTimer.current);
147
+ }, [resetKey, startAtTop]);
148
+ const lines = transcriptLines(messages, width, details);
149
+ if (live) {
150
+ lines.push("", chalk.green("NodeTool"), ...terminalLines(terminalText(live), width));
151
+ }
152
+ if (!lines.length) {
153
+ lines.push("", chalk.cyan.bold("What would you like to make?"), "", ...terminalLines("Build a workflow, create media, explore your files, or ask a question.", width), "", chalk.dim("/model Choose a model"), chalk.dim("/sessions Continue a conversation"), chalk.dim("/help Commands and keyboard shortcuts"));
154
+ }
155
+ const contentHeight = Math.max(1, height - 1);
156
+ const bottom = Math.max(0, lines.length - contentHeight);
157
+ const start = top === null ? bottom : Math.min(top, bottom);
158
+ const current = useRef({ lines, start, bottom, contentHeight, width });
159
+ current.current = { lines, start, bottom, contentHeight, width };
160
+ useEffect(() => {
161
+ if (!mouseEvents)
162
+ return;
163
+ const onMouse = (event) => {
164
+ const view = current.current;
165
+ if (event.action === "wheel") {
166
+ if (event.y >= screenY && event.y < screenY + view.contentHeight && event.x >= screenX && event.x < screenX + view.width) {
167
+ const next = Math.max(0, Math.min(view.bottom, view.start + (event.direction ?? 1) * 3));
168
+ setTop(next === view.bottom ? null : next);
169
+ setSelection(null);
170
+ }
171
+ return;
172
+ }
173
+ const inside = event.y >= screenY && event.y < screenY + view.contentHeight && event.x >= screenX && event.x < screenX + view.width;
174
+ if (!inside && !dragging.current)
175
+ return;
176
+ const position = {
177
+ line: Math.max(0, Math.min(view.lines.length - 1, view.start + event.y - screenY)),
178
+ column: Math.max(0, Math.min(view.width, event.x - screenX))
179
+ };
180
+ if (event.action === "down" && inside) {
181
+ dragging.current = position;
182
+ setSelection({ from: position, to: position });
183
+ }
184
+ else if (dragging.current && event.action === "move") {
185
+ setSelection({ from: dragging.current, to: position });
186
+ }
187
+ else if (dragging.current && event.action === "up") {
188
+ const from = dragging.current;
189
+ dragging.current = null;
190
+ setSelection(null);
191
+ const value = selectedTranscriptText(view.lines, from, position);
192
+ if (value) {
193
+ void copyTerminalText(value, process.stdout).then(() => {
194
+ setCopyNotice(true);
195
+ if (noticeTimer.current)
196
+ clearTimeout(noticeTimer.current);
197
+ noticeTimer.current = setTimeout(() => {
198
+ setCopyNotice(false);
199
+ noticeTimer.current = null;
200
+ }, 1800);
201
+ });
202
+ }
203
+ }
204
+ };
205
+ mouseEvents.on("mouse", onMouse);
206
+ return () => { mouseEvents.off("mouse", onMouse); };
207
+ }, [mouseEvents, screenX, screenY]);
208
+ useInput((input, key) => {
209
+ if (key.pageUp) {
210
+ setTop(Math.max(0, start - contentHeight));
211
+ }
212
+ if (key.pageDown) {
213
+ setTop(start + contentHeight >= bottom ? null : start + contentHeight);
214
+ }
215
+ if (key.ctrl && key.home) {
216
+ setTop(0);
217
+ }
218
+ if ((key.ctrl && key.end) || (key.ctrl && input === "g")) {
219
+ setTop(null);
220
+ }
221
+ });
222
+ return (_jsxs(Box, { flexDirection: "column", width: width, height: height, overflow: "hidden", children: [_jsx(Box, { height: contentHeight, flexDirection: "column", flexShrink: 0, children: _jsx(Text, { children: lines.slice(start, start + contentHeight).map((line, offset) => selection ? highlightLine(line, start + offset, selection.from, selection.to) : line).join("\n") }) }), _jsx(Text, { dimColor: true, wrap: "truncate", children: copyNotice
223
+ ? "Copied to clipboard"
224
+ : start < bottom
225
+ ? `History · ${bottom - start} lines below · Ctrl+G latest`
226
+ : "" })] }));
227
+ }
228
+ //# sourceMappingURL=terminal-screen.js.map