@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,80 @@
1
+ /**
2
+ * `nodetool timeline render` — render a timeline's picture through the GPU
3
+ * compositor behind the Render Timeline node, from a JSON file or a
4
+ * `timeline_sequences` row id.
5
+ *
6
+ * Outputs an encoded video, individual PNG stills, or one contact-sheet PNG.
7
+ * Stills and sheets show the exported pixels for frame-by-frame review.
8
+ *
9
+ * Video exports mix the timeline audio after compositing the picture.
10
+ */
11
+ import type { Command } from "commander";
12
+ import type { TimelineSequenceRecord } from "../timeline-debug/target.js";
13
+ interface TimelineRenderCliOptions {
14
+ out?: string;
15
+ format?: string;
16
+ frames?: string;
17
+ stills?: boolean;
18
+ sheet?: string | boolean;
19
+ only?: string;
20
+ scale?: string;
21
+ bitrate?: string;
22
+ json?: boolean;
23
+ }
24
+ /**
25
+ * Parse a frame selection such as `0-89` or `175,290,380-390` into sorted,
26
+ * unique frame indices. Ranges are inclusive. An index at or past
27
+ * `totalFrames` is an error, so a typo does not render an empty selection.
28
+ */
29
+ export declare function parseFrameSpec(spec: string, totalFrames: number): number[];
30
+ /** The clip fields `--only` reads. */
31
+ interface SubsetClip {
32
+ id: string;
33
+ name?: string;
34
+ parentId?: string;
35
+ matte?: {
36
+ sourceClipId: string;
37
+ };
38
+ }
39
+ /**
40
+ * The clips `--only` renders: every clip whose id or name is in the
41
+ * comma-separated list, the children of a selected group, and what those clips
42
+ * need to render as they do in context — their ancestor groups (whose
43
+ * transforms they inherit) and their matte source clips. Document order is
44
+ * kept. A token that matches no clip is an error.
45
+ */
46
+ export declare function selectClipSubset<T extends SubsetClip>(clips: T[], list: string): T[];
47
+ /** A coverage row whose Frame cell is not a frame index. */
48
+ export interface SkippedCoverageRow {
49
+ /** The row's other cells, joined as they read in the table. */
50
+ row: string;
51
+ value: string;
52
+ }
53
+ /**
54
+ * Read the frame indices a builder claims from the Markdown table in its
55
+ * leading comment whose last column is "Frame". A row whose Frame cell is not
56
+ * a non-negative integer (a dash for audio, say) is returned in `skipped`.
57
+ * Frames keep table order; `parseFrameSpec` sorts them and checks the range.
58
+ */
59
+ export declare function parseCoverageFrames(source: string): {
60
+ frames: number[];
61
+ skipped: SkippedCoverageRow[];
62
+ };
63
+ export declare function registerTimelineRenderCommand(timeline: Command, loadSequence: () => Promise<(id: string) => Promise<TimelineSequenceRecord | null>>): void;
64
+ interface TimelineRenderResult {
65
+ out: string;
66
+ format: string;
67
+ stills: boolean;
68
+ sheet: boolean;
69
+ frames: number;
70
+ width: number;
71
+ height: number;
72
+ fps: number;
73
+ elapsedMs: number;
74
+ skippedClips: string[];
75
+ /** Coverage rows `--frames coverage:<file>` could not read a frame from. */
76
+ coverageSkipped?: SkippedCoverageRow[];
77
+ }
78
+ export declare function runTimelineRender(ref: string, opts: TimelineRenderCliOptions, loadSequence: (id: string) => Promise<TimelineSequenceRecord | null>, renderComposited?: typeof import("@nodetool-ai/video-nodes/nodes/timeline/compositeRender").renderTimelineComposited): Promise<TimelineRenderResult>;
79
+ export {};
80
+ //# sourceMappingURL=timeline-render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-render.d.ts","sourceRoot":"","sources":["../../src/commands/timeline-render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAK1E,UAAU,wBAAwB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CA2B1E;AAED,sCAAsC;AACtC,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;CAClC;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,UAAU,EACnD,KAAK,EAAE,CAAC,EAAE,EACV,IAAI,EAAE,MAAM,GACX,CAAC,EAAE,CAqEL;AAED,4DAA4D;AAC5D,MAAM,WAAW,kBAAkB;IACjC,+DAA+D;IAC/D,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG;IACnD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,kBAAkB,EAAE,CAAC;CAC/B,CA0DA;AAyFD,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,OAAO,EACjB,YAAY,EAAE,MAAM,OAAO,CACzB,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CACvD,GACA,IAAI,CA0DN;AAED,UAAU,oBAAoB;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,4EAA4E;IAC5E,eAAe,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACxC;AAkBD,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,wBAAwB,EAC9B,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,EACpE,gBAAgB,CAAC,EAAE,cACjB,yDAAyD,EACzD,wBAAwB,GACzB,OAAO,CAAC,oBAAoB,CAAC,CAyM/B"}
@@ -0,0 +1,465 @@
1
+ import { printCommandError } from "../command-errors.js";
2
+ /** A contact sheet past this many frames has cells too small to review. */
3
+ const MAX_SHEET_FRAMES = 60;
4
+ /**
5
+ * Parse a frame selection such as `0-89` or `175,290,380-390` into sorted,
6
+ * unique frame indices. Ranges are inclusive. An index at or past
7
+ * `totalFrames` is an error, so a typo does not render an empty selection.
8
+ */
9
+ export function parseFrameSpec(spec, totalFrames) {
10
+ const frames = new Set();
11
+ for (const part of spec.split(",")) {
12
+ const token = part.trim();
13
+ if (token === "")
14
+ continue;
15
+ const match = /^(\d+)(?:-(\d+))?$/.exec(token);
16
+ if (!match) {
17
+ throw new Error(`Invalid frame selection "${token}". Use indices and inclusive ranges, e.g. 175,290,380-390.`);
18
+ }
19
+ const first = Number(match[1]);
20
+ const last = match[2] === undefined ? first : Number(match[2]);
21
+ if (last < first) {
22
+ throw new Error(`Frame range "${token}" ends before it starts.`);
23
+ }
24
+ if (last >= totalFrames) {
25
+ throw new Error(`Frame ${last} is outside the timeline, which has frames 0-${totalFrames - 1}.`);
26
+ }
27
+ for (let frame = first; frame <= last; frame++)
28
+ frames.add(frame);
29
+ }
30
+ if (frames.size === 0) {
31
+ throw new Error("The frame selection is empty.");
32
+ }
33
+ return [...frames].sort((a, b) => a - b);
34
+ }
35
+ /**
36
+ * The clips `--only` renders: every clip whose id or name is in the
37
+ * comma-separated list, the children of a selected group, and what those clips
38
+ * need to render as they do in context — their ancestor groups (whose
39
+ * transforms they inherit) and their matte source clips. Document order is
40
+ * kept. A token that matches no clip is an error.
41
+ */
42
+ export function selectClipSubset(clips, list) {
43
+ const tokens = list
44
+ .split(",")
45
+ .map((token) => token.trim())
46
+ .filter((token) => token !== "");
47
+ if (tokens.length === 0) {
48
+ throw new Error("The --only list is empty.");
49
+ }
50
+ const unmatched = tokens.filter((token) => !clips.some((clip) => clip.id === token || clip.name === token));
51
+ if (unmatched.length > 0) {
52
+ throw new Error(`No clip has the id or name ${unmatched.map((t) => `"${t}"`).join(", ")}.`);
53
+ }
54
+ const byId = new Map(clips.map((clip) => [clip.id, clip]));
55
+ const children = new Map();
56
+ for (const clip of clips) {
57
+ if (clip.parentId === undefined) {
58
+ continue;
59
+ }
60
+ const siblings = children.get(clip.parentId) ?? [];
61
+ siblings.push(clip.id);
62
+ children.set(clip.parentId, siblings);
63
+ }
64
+ const kept = new Set();
65
+ const pending = [];
66
+ // A root brings its whole subtree; everything kept brings its ancestors and
67
+ // its matte source, which is itself a root.
68
+ const addRoot = (id) => {
69
+ const stack = [id];
70
+ while (stack.length > 0) {
71
+ const next = stack.pop();
72
+ if (next === undefined) {
73
+ break;
74
+ }
75
+ if (kept.has(next) || !byId.has(next)) {
76
+ continue;
77
+ }
78
+ kept.add(next);
79
+ pending.push(next);
80
+ stack.push(...(children.get(next) ?? []));
81
+ }
82
+ };
83
+ for (const clip of clips) {
84
+ if (tokens.includes(clip.id) || tokens.includes(clip.name ?? "")) {
85
+ addRoot(clip.id);
86
+ }
87
+ }
88
+ while (pending.length > 0) {
89
+ const next = pending.pop();
90
+ const clip = next === undefined ? undefined : byId.get(next);
91
+ if (clip === undefined) {
92
+ continue;
93
+ }
94
+ if (clip.parentId !== undefined && !kept.has(clip.parentId)) {
95
+ if (byId.has(clip.parentId)) {
96
+ kept.add(clip.parentId);
97
+ pending.push(clip.parentId);
98
+ }
99
+ }
100
+ if (clip.matte) {
101
+ addRoot(clip.matte.sourceClipId);
102
+ }
103
+ }
104
+ return clips.filter((clip) => kept.has(clip.id));
105
+ }
106
+ /**
107
+ * Read the frame indices a builder claims from the Markdown table in its
108
+ * leading comment whose last column is "Frame". A row whose Frame cell is not
109
+ * a non-negative integer (a dash for audio, say) is returned in `skipped`.
110
+ * Frames keep table order; `parseFrameSpec` sorts them and checks the range.
111
+ */
112
+ export function parseCoverageFrames(source) {
113
+ const comment = [];
114
+ let inBlock = false;
115
+ for (const raw of source.split(/\r?\n/)) {
116
+ const line = raw.trim();
117
+ if (inBlock) {
118
+ if (line.endsWith("*/")) {
119
+ inBlock = false;
120
+ }
121
+ comment.push(line.replace(/\*\/$/, "").replace(/^\*\s?/, ""));
122
+ }
123
+ else if (line.startsWith("#!") || (line === "" && comment.length === 0)) {
124
+ continue;
125
+ }
126
+ else if (line.startsWith("//")) {
127
+ comment.push(line.replace(/^\/\/\s?/, ""));
128
+ }
129
+ else if (line.startsWith("/*")) {
130
+ inBlock = !line.endsWith("*/");
131
+ comment.push(line.replace(/^\/\*+\s?/, "").replace(/\*\/$/, ""));
132
+ }
133
+ else {
134
+ break;
135
+ }
136
+ }
137
+ const cellsOf = (line) => line
138
+ .trim()
139
+ .replace(/^\|/, "")
140
+ .replace(/\|$/, "")
141
+ .split("|")
142
+ .map((cell) => cell.trim());
143
+ const header = comment.findIndex((line) => line.trim().startsWith("|") &&
144
+ cellsOf(line).at(-1)?.toLowerCase() === "frame");
145
+ if (header === -1) {
146
+ throw new Error('The leading comment has no Markdown table whose last column is "Frame".');
147
+ }
148
+ const frames = [];
149
+ const skipped = [];
150
+ for (const line of comment.slice(header + 1)) {
151
+ if (!line.trim().startsWith("|")) {
152
+ break;
153
+ }
154
+ const cells = cellsOf(line);
155
+ if (cells.every((cell) => /^:?-+:?$/.test(cell))) {
156
+ continue;
157
+ }
158
+ const value = cells.at(-1) ?? "";
159
+ if (/^\d+$/.test(value)) {
160
+ frames.push(Number(value));
161
+ }
162
+ else {
163
+ skipped.push({ row: cells.slice(0, -1).join(" | "), value });
164
+ }
165
+ }
166
+ return { frames, skipped };
167
+ }
168
+ /** Round a scaled dimension down to an even number, as H.264 requires. */
169
+ function evenScaled(size, scale) {
170
+ return Math.max(2, Math.floor((size * scale) / 2) * 2);
171
+ }
172
+ function positiveNumber(value, flag) {
173
+ if (value === undefined) {
174
+ return undefined;
175
+ }
176
+ const parsed = Number(value);
177
+ if (!Number.isFinite(parsed) || parsed <= 0) {
178
+ throw new Error(`${flag} must be a positive number (got "${value}").`);
179
+ }
180
+ return parsed;
181
+ }
182
+ /** A file-system-safe name for the default output path. */
183
+ function slugOf(name) {
184
+ const slug = name
185
+ .toLowerCase()
186
+ .replace(/[^a-z0-9]+/g, "-")
187
+ .replace(/^-+|-+$/g, "");
188
+ return slug || "timeline";
189
+ }
190
+ /**
191
+ * The shipped `package://` assets in a checkout, which the server serves from
192
+ * `packages/base-nodes/nodetool/assets`. The runtime reads that directory when
193
+ * `NODETOOL_PACKAGE_ASSETS_DIR` names it and otherwise asks a running server,
194
+ * so without this a rendered example's stills need the server up.
195
+ */
196
+ async function checkoutPackageAssetsDir() {
197
+ const { existsSync } = await import("node:fs");
198
+ const { createRequire } = await import("node:module");
199
+ const path = await import("node:path");
200
+ try {
201
+ const entry = createRequire(import.meta.url).resolve("@nodetool-ai/base-nodes");
202
+ const dir = path.resolve(path.dirname(entry), "..", "nodetool", "assets");
203
+ return existsSync(dir) ? dir : null;
204
+ }
205
+ catch {
206
+ // Not installed beside the CLI: package assets resolve over HTTP.
207
+ return null;
208
+ }
209
+ }
210
+ /**
211
+ * Resolve clip assets to local files through the local asset store. The
212
+ * database opens on the first asset a clip needs, so a pure motion-graphics
213
+ * timeline renders without one.
214
+ */
215
+ async function localAssetResolver(workDir) {
216
+ let files;
217
+ const open = async () => {
218
+ const { initDb } = await import("@nodetool-ai/models");
219
+ const { getDefaultAssetsPath, getDefaultDbPath } = await import("@nodetool-ai/config");
220
+ const { ProcessingContext } = await import("@nodetool-ai/runtime");
221
+ const { FileStorageAdapter } = await import("@nodetool-ai/storage");
222
+ const { AssetFiles } = await import("@nodetool-ai/video-nodes/nodes/timeline/assetFiles");
223
+ const packageAssets = await checkoutPackageAssetsDir();
224
+ initDb(getDefaultDbPath());
225
+ const context = new ProcessingContext({
226
+ jobId: `timeline-render-${Date.now()}`,
227
+ workflowId: null,
228
+ userId: "1",
229
+ storage: new FileStorageAdapter(getDefaultAssetsPath()),
230
+ ...(packageAssets && {
231
+ environment: { NODETOOL_PACKAGE_ASSETS_DIR: packageAssets }
232
+ })
233
+ });
234
+ return new AssetFiles(workDir, context);
235
+ };
236
+ return async (assetId) => {
237
+ files ??= open();
238
+ return (await files).path(assetId);
239
+ };
240
+ }
241
+ export function registerTimelineRenderCommand(timeline, loadSequence) {
242
+ timeline
243
+ .command("render <timeline_id_or_file>")
244
+ .description("Render a timeline through the GPU compositor the Render Timeline node uses. Takes a timeline JSON file or a timeline_sequences row id. Writes a video with audio, stills, or a contact sheet")
245
+ .option("--out <path>", "Output file, or the output directory with loose --stills (default: nodetool-render/<name>.<ext>, <name>-frames/, or <name>-sheet.png)")
246
+ .option("--format <format>", "mp4, webm, mov or png_sequence", "mp4")
247
+ .option("--frames <spec>", "Render only these frames: indices and inclusive ranges, e.g. 0-89 or 175,290,380-390, or coverage:<file> for the Frame column of the table in a builder file's leading comment")
248
+ .option("--stills", "Write each selected frame as frame_<index>.png instead of encoding a video")
249
+ .option("--sheet [columns]", `Write the selected frames as one labelled contact-sheet PNG instead of loose stills (default 3 columns, at most ${MAX_SHEET_FRAMES} frames)`)
250
+ .option("--only <clips>", "Render only these clips, by comma-separated name or id, with their ancestor groups, the children of a selected group, and their matte sources")
251
+ .option("--scale <n>", "Render at this fraction of the sequence size, e.g. 0.5 for a fast draft", "1")
252
+ .option("--bitrate <bps>", "Video bitrate in bits per second")
253
+ .option("--json", "Print the result as JSON")
254
+ .action(async (ref, opts) => {
255
+ try {
256
+ const result = await runTimelineRender(ref, opts, await loadSequence());
257
+ if (opts.json) {
258
+ console.log(JSON.stringify(result, null, 2));
259
+ }
260
+ else {
261
+ console.log(`${result.frames} frame(s) at ${result.width}x${result.height} in ${(result.elapsedMs / 1000).toFixed(1)}s -> ${result.out}`);
262
+ for (const { row, value } of result.coverageSkipped ?? []) {
263
+ console.log(`Skipped coverage row "${row}": "${value}" is not a frame index`);
264
+ }
265
+ if (result.skippedClips.length > 0) {
266
+ console.log(`Skipped clips: ${result.skippedClips.join(", ")}`);
267
+ }
268
+ }
269
+ process.exit(0);
270
+ }
271
+ catch (e) {
272
+ printCommandError(e, opts.json);
273
+ process.exit(1);
274
+ }
275
+ });
276
+ }
277
+ function sheetColumns(value) {
278
+ if (value === undefined || value === false) {
279
+ return undefined;
280
+ }
281
+ if (value === true) {
282
+ return 3;
283
+ }
284
+ const columns = Number(value);
285
+ if (!Number.isInteger(columns) || columns < 1) {
286
+ throw new Error(`--sheet takes a whole number of columns (got "${value}").`);
287
+ }
288
+ return columns;
289
+ }
290
+ export async function runTimelineRender(ref, opts, loadSequence, renderComposited) {
291
+ const fs = await import("node:fs/promises");
292
+ const os = await import("node:os");
293
+ const path = await import("node:path");
294
+ const { resolveTimelineTarget } = await import("../timeline-debug/target.js");
295
+ const { renderTimelineComposited } = await import("@nodetool-ai/video-nodes/nodes/timeline/compositeRender");
296
+ const { resolveTimelineOutput } = await import("@nodetool-ai/video-nodes/nodes/timeline/outputFormats");
297
+ const { encodeRgbaPng } = await import("@nodetool-ai/video-nodes/nodes/timeline/pngSequence");
298
+ const { mixCompositedTimelineAudio } = await import("@nodetool-ai/video-nodes/nodes/timeline");
299
+ const { contactSheetLayout, createContactSheet } = await import("@nodetool-ai/video-nodes/nodes/timeline/contactSheet");
300
+ const resolved = await resolveTimelineTarget(ref, { loadSequence });
301
+ const { target, meta } = resolved;
302
+ const fps = meta.fps && meta.fps > 0 ? meta.fps : 30;
303
+ const scale = positiveNumber(opts.scale, "--scale") ?? 1;
304
+ const sequenceWidth = meta.width && meta.width > 0 ? meta.width : 1920;
305
+ const sequenceHeight = meta.height && meta.height > 0 ? meta.height : 1080;
306
+ const width = evenScaled(sequenceWidth, scale);
307
+ const height = evenScaled(sequenceHeight, scale);
308
+ const durationMs = meta.durationMs && meta.durationMs > 0
309
+ ? meta.durationMs
310
+ : resolved.document.clips.reduce((end, clip) => Math.max(end, clip.startMs + clip.durationMs), 0);
311
+ if (durationMs <= 0) {
312
+ throw new Error("The timeline has zero duration: it has no clips.");
313
+ }
314
+ const totalFrames = Math.max(1, Math.round((durationMs / 1000) * fps));
315
+ // Duration and frame count come from the whole document, so an --only
316
+ // render keeps the timeline's frame indices.
317
+ const document = opts.only
318
+ ? {
319
+ ...resolved.document,
320
+ clips: selectClipSubset(resolved.document.clips, opts.only)
321
+ }
322
+ : resolved.document;
323
+ let frames;
324
+ let coverageSkipped;
325
+ if (opts.frames?.startsWith("coverage:")) {
326
+ const file = path.resolve(opts.frames.slice("coverage:".length));
327
+ const coverage = parseCoverageFrames(await fs.readFile(file, "utf8"));
328
+ if (coverage.frames.length === 0) {
329
+ throw new Error(`The coverage table in ${file} names no frame index.`);
330
+ }
331
+ frames = parseFrameSpec(coverage.frames.join(","), totalFrames);
332
+ coverageSkipped = coverage.skipped;
333
+ }
334
+ else if (opts.frames) {
335
+ frames = parseFrameSpec(opts.frames, totalFrames);
336
+ }
337
+ const columns = sheetColumns(opts.sheet);
338
+ const sheetFrames = columns === undefined
339
+ ? undefined
340
+ : (frames ?? Array.from({ length: totalFrames }, (_, frame) => frame));
341
+ if (sheetFrames && sheetFrames.length > MAX_SHEET_FRAMES) {
342
+ throw new Error(`A contact sheet of ${sheetFrames.length} frames is too small to review. Pick at most ${MAX_SHEET_FRAMES} with --frames.`);
343
+ }
344
+ const stills = opts.stills === true || sheetFrames !== undefined;
345
+ const bitrate = positiveNumber(opts.bitrate, "--bitrate");
346
+ const output = resolveTimelineOutput({
347
+ format: opts.format,
348
+ ...(bitrate !== undefined && { bitrate })
349
+ });
350
+ const name = target.name ?? path.basename(ref).replace(/\.json$/i, "");
351
+ const out = path.resolve(opts.out ??
352
+ path.join("nodetool-render", sheetFrames
353
+ ? `${slugOf(name)}-sheet.png`
354
+ : stills
355
+ ? `${slugOf(name)}-frames`
356
+ : `${slugOf(name)}.${output.extension}`));
357
+ const sheetOutIsDirectory = sheetFrames !== undefined &&
358
+ ((await fs.stat(out).catch(() => undefined))?.isDirectory() ||
359
+ opts.out?.endsWith(path.sep));
360
+ const sheetOut = sheetOutIsDirectory
361
+ ? path.join(out, `${slugOf(name)}-sheet.png`)
362
+ : out;
363
+ // A sheet is one file; loose stills fill a directory.
364
+ const stillsDir = stills && !sheetFrames;
365
+ await fs.mkdir(stillsDir ? out : path.dirname(sheetOut), { recursive: true });
366
+ const sheet = sheetFrames &&
367
+ createContactSheet(contactSheetLayout({
368
+ count: sheetFrames.length,
369
+ columns: columns ?? 3,
370
+ frameWidth: width,
371
+ frameHeight: height
372
+ }));
373
+ const sheetCell = new Map(sheetFrames?.map((frame, index) => [frame, index]));
374
+ const workDir = await fs.mkdtemp(path.join(os.tmpdir(), "nodetool-render-"));
375
+ const now = new Date().toISOString();
376
+ const selected = frames?.length ?? totalFrames;
377
+ let lastTenth = -1;
378
+ const started = Date.now();
379
+ try {
380
+ const sequence = {
381
+ id: target.kind === "id" ? ref : slugOf(name),
382
+ projectId: "cli",
383
+ name,
384
+ fps,
385
+ width: sequenceWidth,
386
+ height: sequenceHeight,
387
+ durationMs,
388
+ ...document,
389
+ createdAt: now,
390
+ updatedAt: now
391
+ };
392
+ const resolveAssetPath = await localAssetResolver(workDir);
393
+ const basePath = stills
394
+ ? sheetOut
395
+ : path.join(workDir, `composited.${output.extension}`);
396
+ console.error(`Rendering ${selected} frame(s) at ${width}x${height}. The first frame compiles the GPU pipelines and can take a while.`);
397
+ const render = renderComposited ?? renderTimelineComposited;
398
+ const { skippedClips } = await render({
399
+ sequence,
400
+ width,
401
+ height,
402
+ fps,
403
+ durationMs,
404
+ resolveAssetPath,
405
+ outPath: basePath,
406
+ output,
407
+ ...(frames && { frames }),
408
+ ...(stills && {
409
+ writeFrame: async (frame, rgba) => {
410
+ if (sheet) {
411
+ const index = sheetCell.get(frame);
412
+ if (index === undefined) {
413
+ throw new Error(`Rendered frame ${frame} is absent from the sheet selection.`);
414
+ }
415
+ sheet.draw(index, String(frame), rgba, width, height);
416
+ return;
417
+ }
418
+ const file = path.join(out, `frame_${String(frame).padStart(6, "0")}.png`);
419
+ await fs.writeFile(file, encodeRgbaPng(rgba, width, height));
420
+ }
421
+ }),
422
+ onProgress: (done, total) => {
423
+ const tenth = Math.floor((done / total) * 10);
424
+ if (tenth !== lastTenth) {
425
+ lastTenth = tenth;
426
+ console.error(`frame ${done}/${total}`);
427
+ }
428
+ }
429
+ });
430
+ if (sheet)
431
+ await fs.writeFile(sheetOut, sheet.encode());
432
+ if (!stills) {
433
+ const mixedPath = frames || output.format === "png_sequence"
434
+ ? basePath
435
+ : await mixCompositedTimelineAudio({
436
+ sequence,
437
+ basePath,
438
+ workDir,
439
+ output,
440
+ resolveAssetPath
441
+ });
442
+ if (frames) {
443
+ console.error("Audio is omitted when --frames selects video frames.");
444
+ }
445
+ await fs.copyFile(mixedPath, out);
446
+ }
447
+ return {
448
+ out: sheetOut,
449
+ format: stills ? "png" : output.format,
450
+ stills,
451
+ sheet: sheet !== undefined,
452
+ frames: selected,
453
+ width,
454
+ height,
455
+ fps,
456
+ elapsedMs: Date.now() - started,
457
+ skippedClips,
458
+ ...(coverageSkipped && { coverageSkipped })
459
+ };
460
+ }
461
+ finally {
462
+ await fs.rm(workDir, { recursive: true, force: true });
463
+ }
464
+ }
465
+ //# sourceMappingURL=timeline-render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-render.js","sourceRoot":"","sources":["../../src/commands/timeline-render.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Human-readable rendering of a `TimelineValidation`, shared by
3
+ * `timeline validate` and `timeline versions restore`.
4
+ */
5
+ import type { TimelineValidation } from "@nodetool-ai/execution/timeline-debug";
6
+ export declare function renderTimelineValidation(validation: TimelineValidation): string[];
7
+ //# sourceMappingURL=timeline-validation-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-validation-output.d.ts","sourceRoot":"","sources":["../../src/commands/timeline-validation-output.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAEV,kBAAkB,EACnB,MAAM,uCAAuC,CAAC;AAG/C,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,kBAAkB,GAC7B,MAAM,EAAE,CAQV"}
@@ -0,0 +1,9 @@
1
+ import { issueLocation, renderValidation } from "./validation-output.js";
2
+ export function renderTimelineValidation(validation) {
3
+ return renderValidation(validation, (issue) => issue.clipId != null
4
+ ? ` [clip ${issue.clipId}]`
5
+ : issue.trackId != null
6
+ ? ` [track ${issue.trackId}]`
7
+ : issueLocation(issue));
8
+ }
9
+ //# sourceMappingURL=timeline-validation-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-validation-output.js","sourceRoot":"","sources":["../../src/commands/timeline-validation-output.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEzE,MAAM,UAAU,wBAAwB,CACtC,UAA8B;IAE9B,OAAO,gBAAgB,CAAC,UAAU,EAAE,CAAC,KAAyB,EAAE,EAAE,CAChE,KAAK,CAAC,MAAM,IAAI,IAAI;QAClB,CAAC,CAAC,UAAU,KAAK,CAAC,MAAM,GAAG;QAC3B,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI;YACrB,CAAC,CAAC,WAAW,KAAK,CAAC,OAAO,GAAG;YAC7B,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAC3B,CAAC;AACJ,CAAC"}