@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
package/dist/settings.js CHANGED
@@ -1,11 +1,59 @@
1
1
  import { homedir } from "node:os";
2
2
  import { join } from "node:path";
3
3
  import { readFile, writeFile, mkdir } from "node:fs/promises";
4
+ /**
5
+ * Tools the chat turn is broken without, added to a settings file that predates
6
+ * them. The `nodetool.*` object model documents these namespaces, so a belt
7
+ * missing one turns a documented call into "tool not in this toolbelt" —
8
+ * which is what `nodetool.models.pick()` did until `find_model` landed here.
9
+ * They need no credential of their own: each resolves its provider from the
10
+ * model it is handed, or reports that none is configured.
11
+ */
12
+ export const ALWAYS_ENABLED_TOOLS = [
13
+ // Local interactive chat only; the stdin and server belts never register it.
14
+ "bash",
15
+ // Documents.
16
+ "extract_pdf_text",
17
+ "convert_pdf_to_markdown",
18
+ "convert_document",
19
+ // Discovery: providers, models, node types.
20
+ "find_model",
21
+ "list_models",
22
+ "list_provider_models",
23
+ "search_nodes",
24
+ "get_node_info",
25
+ "list_nodes",
26
+ // Generation, and reading back what it produced.
27
+ "generate_image",
28
+ "edit_image",
29
+ "generate_video",
30
+ "animate_image",
31
+ "generate_video_from_references",
32
+ "generate_speech",
33
+ "transcribe_audio",
34
+ "read_media_bytes",
35
+ // Headless storyboard lifecycle.
36
+ "list_storyboards",
37
+ "create_storyboard",
38
+ "get_storyboard",
39
+ "edit_storyboard",
40
+ "render_storyboard_stills",
41
+ "render_storyboard_clips",
42
+ "revise_storyboard_clip",
43
+ "assemble_storyboard_timeline",
44
+ "extract_script_from_storyboard",
45
+ // Headless script lifecycle (also available for older saved settings).
46
+ "list_scripts",
47
+ "create_script",
48
+ "get_script",
49
+ "edit_script",
50
+ "voice_script_lines",
51
+ "assemble_script_timeline",
52
+ "derive_storyboard_from_script"
53
+ ];
4
54
  export const DEFAULT_SETTINGS = {
5
55
  provider: detectDefaultProvider(),
6
56
  model: detectDefaultModel(),
7
- agentMode: false,
8
- agentPlanner: "graph",
9
57
  enabledTools: [
10
58
  "read_file",
11
59
  "write_file",
@@ -16,9 +64,7 @@ export const DEFAULT_SETTINGS = {
16
64
  "download_file",
17
65
  "http_request",
18
66
  "browser",
19
- "screenshot",
20
- "run_code",
21
- "calculator",
67
+ "take_screenshot",
22
68
  // NodeTool MCP tools
23
69
  "list_workflows",
24
70
  "get_workflow",
@@ -27,18 +73,17 @@ export const DEFAULT_SETTINGS = {
27
73
  "validate_workflow",
28
74
  "get_example_workflow",
29
75
  "export_workflow_digraph",
30
- "list_nodes",
31
- "search_nodes",
32
- "get_node_info",
33
76
  "list_jobs",
34
77
  "get_job",
35
78
  "get_job_logs",
36
79
  "start_background_job",
37
80
  "list_assets",
38
81
  "get_asset",
39
- "list_models"
40
- ],
41
- workspace: process.cwd()
82
+ "asset_search",
83
+ "save_asset",
84
+ "read_asset",
85
+ ...ALWAYS_ENABLED_TOOLS
86
+ ]
42
87
  };
43
88
  function detectDefaultProvider() {
44
89
  if (process.env["ANTHROPIC_API_KEY"])
@@ -57,17 +102,30 @@ function detectDefaultModel() {
57
102
  case "openai":
58
103
  return "gpt-4o";
59
104
  case "gemini":
60
- return "gemini-2.0-flash";
105
+ return "gemini-3.5-flash";
61
106
  default:
62
107
  return "llama3.2";
63
108
  }
64
109
  }
65
110
  const SETTINGS_DIR = join(homedir(), ".nodetool");
66
111
  const SETTINGS_FILE = join(SETTINGS_DIR, "chat-settings.json");
112
+ /**
113
+ * Drop legacy fields from older settings files: agent-mode / planner toggles
114
+ * (the unified chat agent has no mode) and `workspace` (it now always defaults
115
+ * to the current directory and is never persisted).
116
+ */
117
+ function migrateSettings(raw) {
118
+ const { agentMode: _dropMode, agentPlanner: _dropPlanner, workspace: _dropWorkspace, ...rest } = raw;
119
+ void _dropMode;
120
+ void _dropPlanner;
121
+ void _dropWorkspace;
122
+ return rest;
123
+ }
67
124
  export async function loadSettings() {
68
125
  try {
69
126
  const content = await readFile(SETTINGS_FILE, "utf-8");
70
- return { ...DEFAULT_SETTINGS, ...JSON.parse(content) };
127
+ const parsed = JSON.parse(content);
128
+ return { ...DEFAULT_SETTINGS, ...migrateSettings(parsed) };
71
129
  }
72
130
  catch {
73
131
  return { ...DEFAULT_SETTINGS };
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAiB9D,MAAM,CAAC,MAAM,gBAAgB,GAAiB;IAC5C,QAAQ,EAAE,qBAAqB,EAAE;IACjC,KAAK,EAAE,kBAAkB,EAAE;IAC3B,SAAS,EAAE,KAAK;IAChB,YAAY,EAAE,OAAO;IACrB,YAAY,EAAE;QACZ,WAAW;QACX,YAAY;QACZ,WAAW;QACX,gBAAgB;QAChB,MAAM;QACN,MAAM;QACN,eAAe;QACf,cAAc;QACd,SAAS;QACT,YAAY;QACZ,UAAU;QACV,YAAY;QACZ,qBAAqB;QACrB,gBAAgB;QAChB,cAAc;QACd,iBAAiB;QACjB,cAAc;QACd,mBAAmB;QACnB,sBAAsB;QACtB,yBAAyB;QACzB,YAAY;QACZ,cAAc;QACd,eAAe;QACf,WAAW;QACX,SAAS;QACT,cAAc;QACd,sBAAsB;QACtB,aAAa;QACb,WAAW;QACX,aAAa;KACd;IACD,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE;CACzB,CAAC;AAEF,SAAS,qBAAqB;IAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAAE,OAAO,WAAW,CAAC;IACzD,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAAE,OAAO,QAAQ,CAAC;IACnD,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAAE,OAAO,QAAQ,CAAC;IACnD,OAAO,QAAQ,CAAC,CAAC,iBAAiB;AACpC,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAC;IACrC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,WAAW;YACd,OAAO,mBAAmB,CAAC;QAC7B,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,QAAQ;YACX,OAAO,kBAAkB,CAAC;QAC5B;YACE,OAAO,UAAU,CAAC;IACtB,CAAC;AACH,CAAC;AAED,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AAClD,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;AAE/D,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO,EAAE,GAAG,gBAAgB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACjC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAA+B;IAE/B,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,MAAM,YAAY,EAAE,CAAC;QACrC,MAAM,SAAS,CACb,aAAa,EACb,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CACrD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,8BAA8B;IAChC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import type { SketchDebugReport, SketchInteractionRecord, SketchValidation } from "@nodetool-ai/execution/sketch-debug";
2
+ import type { SketchInteractionStep } from "./interactions.js";
3
+ import { type ResolvedSketchTarget, type SketchCanvasSettings, type SketchTargetDeps } from "./target.js";
4
+ /** The pieces of the shared core this host calls. */
5
+ export interface SketchDebugCore {
6
+ validateSketchDocument: (raw: unknown, meta?: SketchCanvasSettings) => SketchValidation | Promise<SketchValidation>;
7
+ buildSketchDebugReport: (input: {
8
+ target: SketchDebugReport["target"];
9
+ document: unknown;
10
+ meta?: SketchCanvasSettings;
11
+ interactions?: SketchInteractionRecord[];
12
+ finalState?: unknown;
13
+ finalDocument?: unknown;
14
+ }) => SketchDebugReport | Promise<SketchDebugReport>;
15
+ renderSketchReportMarkdown: (report: SketchDebugReport) => string;
16
+ }
17
+ /** The bridge surface this host drives — one tool per `ui_sketch_*` name. */
18
+ export interface SketchBridgeTool {
19
+ name: string;
20
+ /**
21
+ * HOLDOUT (anti-slop/no-unknown-returns): a `ui_sketch_*` tool answers in
22
+ * the open tool-result domain, and the bridge that implements this lives in
23
+ * `@nodetool-ai/agents`.
24
+ */
25
+ execute: (args: Record<string, unknown>) => Promise<unknown>;
26
+ }
27
+ /** One layer of the bridge's snapshot. */
28
+ export interface SketchBridgeLayer {
29
+ id: string;
30
+ name: string;
31
+ type: "raster" | "mask" | "group";
32
+ visible: boolean;
33
+ opacity: number;
34
+ blendMode: string;
35
+ hasBinding?: boolean;
36
+ }
37
+ /** The bridge's snapshot after a session (`SketchBridgeFinalState`). */
38
+ export interface SketchBridgeSnapshot {
39
+ width?: number;
40
+ height?: number;
41
+ backgroundColor?: string;
42
+ activeLayerId?: string | null;
43
+ layers?: SketchBridgeLayer[];
44
+ }
45
+ export interface SketchBridge {
46
+ tools: SketchBridgeTool[];
47
+ finalState: () => SketchBridgeSnapshot;
48
+ }
49
+ export type CreateSketchBridge = (initial: {
50
+ name?: string;
51
+ width?: number;
52
+ height?: number;
53
+ layers?: {
54
+ name: string;
55
+ type?: "raster" | "mask";
56
+ }[];
57
+ }) => SketchBridge;
58
+ export interface SketchDebugDeps extends SketchTargetDeps {
59
+ /** Defaults to `@nodetool-ai/execution/sketch-debug`. */
60
+ core?: SketchDebugCore;
61
+ /** Defaults to `createSketchToolBridge` from `@nodetool-ai/agents`. */
62
+ createBridge?: CreateSketchBridge;
63
+ onLog?: (line: string) => void;
64
+ }
65
+ export interface SketchDebugOptions {
66
+ interact?: SketchInteractionStep[];
67
+ outDir?: string;
68
+ }
69
+ export interface SketchValidateResult {
70
+ target: ResolvedSketchTarget["target"];
71
+ validation: SketchValidation;
72
+ }
73
+ export interface SketchDebugResult {
74
+ report: SketchDebugReport;
75
+ bundleDir: string;
76
+ }
77
+ /** Load a sketch and validate it — no bridge, no bundle. */
78
+ export declare function runSketchValidate(ref: string, deps: SketchDebugDeps): Promise<SketchValidateResult>;
79
+ /**
80
+ * Replay `--interact` against the headless bridge and write the bundle.
81
+ *
82
+ * A failing step is recorded and the script continues: a run that stops at the
83
+ * first error hides every problem behind it, and the report is what the caller
84
+ * came for.
85
+ */
86
+ export declare function runSketchDebug(ref: string, options: SketchDebugOptions, deps: SketchDebugDeps): Promise<SketchDebugResult>;
87
+ //# sourceMappingURL=harness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../src/sketch-debug/harness.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * The sketch debug harness: the CLI host around the shared validator.
3
+ *
4
+ * `runSketchValidate` is the cheap pre-flight — load an image document, check
5
+ * it, report. `runSketchDebug` additionally replays a scripted edit session
6
+ * against the headless `ui_sketch_*` bridge (the one the tool-loop eval
7
+ * drives), validates the document the session left behind, and writes a
8
+ * self-contained bundle.
9
+ *
10
+ * Everything that could pull in a heavy package is injected with a lazy
11
+ * default: the validator core (`@nodetool-ai/execution/sketch-debug`) and the
12
+ * bridge factory (`@nodetool-ai/agents`). Tests supply their own and load
13
+ * neither.
14
+ */
15
+ import { mkdir, writeFile } from "node:fs/promises";
16
+ import { join, resolve } from "node:path";
17
+ import { runInteractionSteps } from "../interaction-script.js";
18
+ import { resolveSketchTarget } from "./target.js";
19
+ async function loadCore() {
20
+ const core = await import("@nodetool-ai/execution/sketch-debug");
21
+ return {
22
+ validateSketchDocument: (raw, meta) => core.validateSketchDocument(raw, meta),
23
+ buildSketchDebugReport: (input) => core.buildSketchDebugReport(input),
24
+ renderSketchReportMarkdown: (report) => core.renderSketchReportMarkdown(report)
25
+ };
26
+ }
27
+ async function loadBridgeFactory() {
28
+ const { createSketchToolBridge } = await import("@nodetool-ai/agents");
29
+ return (initial) =>
30
+ // SAFETY: the eval-surface bridge in @nodetool-ai/agents implements this
31
+ // exact tool list and snapshot — it is the bridge this type describes. The
32
+ // two packages declare the sketch document types independently, and that
33
+ // duplication is the only reason the structures do not line up.
34
+ createSketchToolBridge(initial);
35
+ }
36
+ function defaultOutDir(ref) {
37
+ const slug = ref
38
+ .replace(/[^a-zA-Z0-9_-]+/g, "-")
39
+ .replace(/^-+|-+$/g, "")
40
+ .slice(0, 40) || "sketch";
41
+ const stamp = new Date().toISOString().replace(/[:.]/g, "-");
42
+ return resolve(`nodetool-debug/sketch-${slug}-${stamp}`);
43
+ }
44
+ /** Load a sketch and validate it — no bridge, no bundle. */
45
+ export async function runSketchValidate(ref, deps) {
46
+ const resolved = await resolveSketchTarget(ref, deps);
47
+ const core = deps.core ?? (await loadCore());
48
+ const validation = await core.validateSketchDocument(resolved.raw, resolved.meta);
49
+ return { target: resolved.target, validation };
50
+ }
51
+ function reconstructDocument(snapshot, resolved) {
52
+ const layers = (snapshot.layers ?? []).map((layer) => ({
53
+ id: layer.id,
54
+ name: layer.name,
55
+ type: layer.type,
56
+ visible: layer.visible,
57
+ locked: false,
58
+ opacity: layer.opacity,
59
+ blendMode: layer.blendMode,
60
+ data: null
61
+ }));
62
+ const activeLayerId = snapshot.activeLayerId ?? "";
63
+ const background = snapshot.backgroundColor ??
64
+ resolved.document.canvas.backgroundColor ??
65
+ resolved.meta.backgroundColor;
66
+ const canvas = {
67
+ width: snapshot.width ?? resolved.document.canvas.width ?? 0,
68
+ height: snapshot.height ?? resolved.document.canvas.height ?? 0
69
+ };
70
+ if (background !== undefined) {
71
+ canvas.backgroundColor = background;
72
+ }
73
+ return {
74
+ sketch: {
75
+ version: resolved.document.version,
76
+ canvas,
77
+ layers,
78
+ activeLayerId,
79
+ maskLayerId: null
80
+ },
81
+ layerBindings: []
82
+ };
83
+ }
84
+ /**
85
+ * Replay `--interact` against the headless bridge and write the bundle.
86
+ *
87
+ * A failing step is recorded and the script continues: a run that stops at the
88
+ * first error hides every problem behind it, and the report is what the caller
89
+ * came for.
90
+ */
91
+ export async function runSketchDebug(ref, options, deps) {
92
+ const resolved = await resolveSketchTarget(ref, deps);
93
+ const core = deps.core ?? (await loadCore());
94
+ const steps = options.interact ?? [];
95
+ const interactions = [];
96
+ let snapshot;
97
+ if (steps.length > 0) {
98
+ const createBridge = deps.createBridge ?? (await loadBridgeFactory());
99
+ const bridgeInit = {
100
+ // The bridge seeds names and types only; a group layer has no headless
101
+ // equivalent, so it enters the stack as a raster.
102
+ layers: resolved.document.layers.map((layer) => ({
103
+ name: layer.name,
104
+ type: layer.type === "mask" ? "mask" : "raster"
105
+ }))
106
+ };
107
+ if (resolved.target.name) {
108
+ bridgeInit.name = resolved.target.name;
109
+ }
110
+ if (resolved.document.canvas.width !== undefined) {
111
+ bridgeInit.width = resolved.document.canvas.width;
112
+ }
113
+ if (resolved.document.canvas.height !== undefined) {
114
+ bridgeInit.height = resolved.document.canvas.height;
115
+ }
116
+ const bridge = createBridge(bridgeInit);
117
+ interactions.push(...(await runInteractionSteps(steps, bridge.tools, "sketch", deps.onLog)));
118
+ snapshot = bridge.finalState();
119
+ }
120
+ const finalDocument = snapshot
121
+ ? reconstructDocument(snapshot, resolved)
122
+ : undefined;
123
+ const reportInput = {
124
+ target: resolved.target,
125
+ document: resolved.raw,
126
+ meta: resolved.meta,
127
+ interactions
128
+ };
129
+ if (snapshot) {
130
+ reportInput.finalState = snapshot;
131
+ }
132
+ if (finalDocument) {
133
+ reportInput.finalDocument = finalDocument;
134
+ }
135
+ const report = await core.buildSketchDebugReport(reportInput);
136
+ const bundleDir = options.outDir
137
+ ? resolve(options.outDir)
138
+ : defaultOutDir(ref);
139
+ await mkdir(bundleDir, { recursive: true });
140
+ await writeFile(join(bundleDir, "sketch.json"), JSON.stringify(resolved.raw, null, 2), "utf8");
141
+ await writeFile(join(bundleDir, "report.json"), JSON.stringify(report, null, 2), "utf8");
142
+ await writeFile(join(bundleDir, "report.md"), core.renderSketchReportMarkdown(report), "utf8");
143
+ return { report, bundleDir };
144
+ }
145
+ //# sourceMappingURL=harness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness.js","sourceRoot":"","sources":["../../src/sketch-debug/harness.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The CLI host for the sketch debug harness: target resolution, the
3
+ * `--interact` script, and the bundle writer. The rules themselves live in
4
+ * `@nodetool-ai/execution/sketch-debug`.
5
+ */
6
+ export { runSketchDebug, runSketchValidate, type CreateSketchBridge, type SketchBridge, type SketchBridgeLayer, type SketchBridgeSnapshot, type SketchBridgeTool, type SketchDebugCore, type SketchDebugDeps, type SketchDebugOptions, type SketchDebugResult, type SketchValidateResult } from "./harness.js";
7
+ export { normalizeToolName, parseInteractionScript, type SketchInteractionStep } from "./interactions.js";
8
+ export { resolveSketchTarget, type ImageDocumentRecord, type ResolvedSketchTarget, type SketchCanvasSettings, type SketchDocumentView, type SketchLayerView, type SketchTargetDeps } from "./target.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sketch-debug/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,qBAAqB,EAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mBAAmB,EACnB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The CLI host for the sketch debug harness: target resolution, the
3
+ * `--interact` script, and the bundle writer. The rules themselves live in
4
+ * `@nodetool-ai/execution/sketch-debug`.
5
+ */
6
+ export { runSketchDebug, runSketchValidate } from "./harness.js";
7
+ export { normalizeToolName, parseInteractionScript } from "./interactions.js";
8
+ export { resolveSketchTarget } from "./target.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sketch-debug/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,cAAc,EACd,iBAAiB,EAWlB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EAEvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mBAAmB,EAOpB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * The `--interact` script for `nodetool sketch debug`.
3
+ *
4
+ * A step names one sketch tool and the input to call it with:
5
+ *
6
+ * ```json
7
+ * [{"tool": "add_layer", "input": {"name": "Glow", "type": "raster"}},
8
+ * {"tool": "ui_sketch_set_layer_props",
9
+ * "input": {"target": "Glow", "opacity": 0.5, "blendMode": "multiply"}}]
10
+ * ```
11
+ *
12
+ * Both spellings resolve to the same tool: the `ui_sketch_` prefix is what the
13
+ * bridge and the browser call it, and typing it for every step is noise.
14
+ */
15
+ import { type InteractionStep } from "../interaction-script.js";
16
+ /** One parsed step, with the tool name in its canonical `ui_sketch_*` form. */
17
+ export type SketchInteractionStep = InteractionStep;
18
+ export declare const normalizeToolName: (name: string) => string, parseInteractionScript: (json: string) => InteractionStep[];
19
+ //# sourceMappingURL=interactions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactions.d.ts","sourceRoot":"","sources":["../../src/sketch-debug/interactions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,0BAA0B,CAAC;AAElC,+EAA+E;AAC/E,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAC;AAEpD,eAAO,MAAQ,iBAAiB,4BAAE,sBAAsB,qCAIrD,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * The `--interact` script for `nodetool sketch debug`.
3
+ *
4
+ * A step names one sketch tool and the input to call it with:
5
+ *
6
+ * ```json
7
+ * [{"tool": "add_layer", "input": {"name": "Glow", "type": "raster"}},
8
+ * {"tool": "ui_sketch_set_layer_props",
9
+ * "input": {"target": "Glow", "opacity": 0.5, "blendMode": "multiply"}}]
10
+ * ```
11
+ *
12
+ * Both spellings resolve to the same tool: the `ui_sketch_` prefix is what the
13
+ * bridge and the browser call it, and typing it for every step is noise.
14
+ */
15
+ import { createInteractionScript } from "../interaction-script.js";
16
+ export const { normalizeToolName, parseInteractionScript } = createInteractionScript("ui_sketch_", '{"tool":"add_layer","input":{"name":"Glow"}}');
17
+ //# sourceMappingURL=interactions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactions.js","sourceRoot":"","sources":["../../src/sketch-debug/interactions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EACL,uBAAuB,EAExB,MAAM,0BAA0B,CAAC;AAKlC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,GACxD,uBAAuB,CACrB,YAAY,EACZ,8CAA8C,CAC/C,CAAC"}
@@ -0,0 +1,48 @@
1
+ import type { SketchDebugTarget } from "@nodetool-ai/execution/sketch-debug";
2
+ /** An `image_documents` row as the harness needs it. */
3
+ export interface ImageDocumentRecord {
4
+ id: string;
5
+ name?: string | null;
6
+ width?: number;
7
+ height?: number;
8
+ /** camelCase on the API response, snake_case on the row. */
9
+ backgroundColor?: string;
10
+ background_color?: string;
11
+ /** The stored document — a JSON string or an already-parsed object. */
12
+ document: unknown;
13
+ }
14
+ export interface SketchTargetDeps {
15
+ /** Load an image document by DB id. */
16
+ loadDocument: (id: string) => Promise<ImageDocumentRecord | null>;
17
+ }
18
+ /** The canvas settings the row carries beside the document. */
19
+ export interface SketchCanvasSettings {
20
+ width?: number;
21
+ height?: number;
22
+ backgroundColor?: string;
23
+ }
24
+ /** The layer stack, read down to what the headless bridge can be seeded with. */
25
+ export interface SketchLayerView {
26
+ id: string;
27
+ name: string;
28
+ type: "raster" | "mask" | "group";
29
+ }
30
+ /** The document read as a canvas plus a layer stack. */
31
+ export interface SketchDocumentView {
32
+ version: number;
33
+ canvas: SketchCanvasSettings;
34
+ layers: SketchLayerView[];
35
+ activeLayerId: string;
36
+ maskLayerId: string | null;
37
+ }
38
+ export interface ResolvedSketchTarget {
39
+ target: SketchDebugTarget;
40
+ /** The document exactly as loaded — validation's input, unrepaired. */
41
+ raw: unknown;
42
+ /** The same document, read as a canvas + layer stack. */
43
+ document: SketchDocumentView;
44
+ meta: SketchCanvasSettings;
45
+ }
46
+ /** Resolve a sketch target: a JSON file path or an image document row id. */
47
+ export declare function resolveSketchTarget(ref: string, deps: SketchTargetDeps): Promise<ResolvedSketchTarget>;
48
+ //# sourceMappingURL=target.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target.d.ts","sourceRoot":"","sources":["../../src/sketch-debug/target.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAgB7E,wDAAwD;AACxD,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uEAAuE;IACvE,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,uCAAuC;IACvC,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;CACnE;AAED,+DAA+D;AAC/D,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,iFAAiF;AACjF,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;CACnC;AAED,wDAAwD;AACxD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,uEAAuE;IACvE,GAAG,EAAE,OAAO,CAAC;IACb,yDAAyD;IACzD,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,IAAI,EAAE,oBAAoB,CAAC;CAC5B;AA8ED,6EAA6E;AAC7E,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,oBAAoB,CAAC,CAiD/B"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Resolves a sketch debug target into an image document plus its canvas
3
+ * settings.
4
+ *
5
+ * A sketch is named two ways, and both end up in the same shape:
6
+ *
7
+ * - a **JSON file** — either a bare `ImageDocumentData` (`sketch` +
8
+ * `layerBindings`) or a wrapper carrying one under `document`, as the
9
+ * `image_documents` row and the `sketch.get` response do;
10
+ * - an **image_documents row id**, read through an injected loader so this
11
+ * module needs no database.
12
+ *
13
+ * A path that exists on disk wins over an id, so a file named like an id is
14
+ * still readable.
15
+ */
16
+ import { existsSync, readFileSync } from "node:fs";
17
+ import { isFiniteNumber, isRecord, isString } from "../predicates.js";
18
+ const numberOr = (value) => isFiniteNumber(value) ? value : undefined;
19
+ /** Read width/height/background off whatever wrapper carried the document. */
20
+ function settingsOf(raw) {
21
+ if (!isRecord(raw))
22
+ return {};
23
+ const settings = {};
24
+ const width = numberOr(raw.width);
25
+ const height = numberOr(raw.height);
26
+ const background = isString(raw.backgroundColor)
27
+ ? raw.backgroundColor
28
+ : isString(raw.background_color)
29
+ ? raw.background_color
30
+ : undefined;
31
+ if (width !== undefined)
32
+ settings.width = width;
33
+ if (height !== undefined)
34
+ settings.height = height;
35
+ if (background !== undefined)
36
+ settings.backgroundColor = background;
37
+ return settings;
38
+ }
39
+ /** A document is anything with a `sketch` object and a `layerBindings` array. */
40
+ const looksLikeDocument = (value) => isRecord(value) &&
41
+ isRecord(value.sketch) &&
42
+ Array.isArray(value.layerBindings);
43
+ /**
44
+ * The document a target carries, unwrapping a `document` field (string or
45
+ * object) when there is one. Never throws — an unreadable document is a
46
+ * validation finding, not a crash.
47
+ */
48
+ function documentOf(raw) {
49
+ // SAFETY: a target is read from a JSON file or a json column, so every
50
+ // branch below carries decoded JSON.
51
+ if (!isRecord(raw))
52
+ return raw;
53
+ const inner = raw.document;
54
+ if (isString(inner)) {
55
+ try {
56
+ return JSON.parse(inner);
57
+ }
58
+ catch {
59
+ return inner;
60
+ }
61
+ }
62
+ // SAFETY: same JSON provenance as the branch above.
63
+ if (inner !== undefined)
64
+ return inner;
65
+ return raw;
66
+ }
67
+ const layerType = (value) => value === "mask" || value === "group" ? value : "raster";
68
+ /** Read a document as a canvas + layer stack, defaulting what is missing. */
69
+ function asDocument(raw) {
70
+ const record = isRecord(raw) ? raw : {};
71
+ const sketch = isRecord(record.sketch) ? record.sketch : {};
72
+ const layers = [];
73
+ for (const entry of Array.isArray(sketch.layers) ? sketch.layers : []) {
74
+ if (!isRecord(entry) || !isString(entry.id))
75
+ continue;
76
+ layers.push({
77
+ id: entry.id,
78
+ name: isString(entry.name) ? entry.name : entry.id,
79
+ type: layerType(entry.type)
80
+ });
81
+ }
82
+ return {
83
+ version: numberOr(sketch.version) ?? 1,
84
+ canvas: settingsOf(sketch.canvas),
85
+ layers,
86
+ activeLayerId: isString(sketch.activeLayerId) ? sketch.activeLayerId : "",
87
+ maskLayerId: isString(sketch.maskLayerId) ? sketch.maskLayerId : null
88
+ };
89
+ }
90
+ /** Resolve a sketch target: a JSON file path or an image document row id. */
91
+ export async function resolveSketchTarget(ref, deps) {
92
+ if (existsSync(ref)) {
93
+ let parsed;
94
+ try {
95
+ parsed = JSON.parse(readFileSync(ref, "utf8"));
96
+ }
97
+ catch (e) {
98
+ throw new Error(`${ref} is not valid JSON: ${e.message}`);
99
+ }
100
+ const raw = documentOf(parsed);
101
+ if (!looksLikeDocument(raw)) {
102
+ throw new Error(`${ref} is not an image document (no \`sketch\`/\`layerBindings\`, and no \`document\` field carrying them).`);
103
+ }
104
+ const name = isRecord(parsed) && isString(parsed.name)
105
+ ? parsed.name
106
+ : undefined;
107
+ const document = asDocument(raw);
108
+ const target = { kind: "file", ref };
109
+ if (name) {
110
+ target.name = name;
111
+ }
112
+ return {
113
+ target,
114
+ raw,
115
+ document,
116
+ // The wrapper's own width/height, never the canvas's: the validator
117
+ // compares the two, so folding one into the other hides the mismatch.
118
+ meta: settingsOf(parsed)
119
+ };
120
+ }
121
+ const record = await deps.loadDocument(ref);
122
+ if (!record) {
123
+ throw new Error(`Image document not found: ${ref}`);
124
+ }
125
+ const raw = documentOf(record);
126
+ const document = asDocument(raw);
127
+ const target = { kind: "id", ref };
128
+ if (record.name) {
129
+ target.name = record.name;
130
+ }
131
+ return {
132
+ target,
133
+ raw,
134
+ document,
135
+ meta: settingsOf(record)
136
+ };
137
+ }
138
+ //# sourceMappingURL=target.js.map