@vibeframe/cli 0.54.0 → 0.55.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 (481) hide show
  1. package/dist/index.js +63452 -233
  2. package/package.json +11 -6
  3. package/dist/agent/adapters/claude.d.ts +0 -15
  4. package/dist/agent/adapters/claude.d.ts.map +0 -1
  5. package/dist/agent/adapters/claude.js +0 -119
  6. package/dist/agent/adapters/claude.js.map +0 -1
  7. package/dist/agent/adapters/gemini.d.ts +0 -15
  8. package/dist/agent/adapters/gemini.d.ts.map +0 -1
  9. package/dist/agent/adapters/gemini.js +0 -132
  10. package/dist/agent/adapters/gemini.js.map +0 -1
  11. package/dist/agent/adapters/index.d.ts +0 -28
  12. package/dist/agent/adapters/index.d.ts.map +0 -1
  13. package/dist/agent/adapters/index.js +0 -43
  14. package/dist/agent/adapters/index.js.map +0 -1
  15. package/dist/agent/adapters/ollama.d.ts +0 -20
  16. package/dist/agent/adapters/ollama.d.ts.map +0 -1
  17. package/dist/agent/adapters/ollama.js +0 -186
  18. package/dist/agent/adapters/ollama.js.map +0 -1
  19. package/dist/agent/adapters/openai.d.ts +0 -15
  20. package/dist/agent/adapters/openai.d.ts.map +0 -1
  21. package/dist/agent/adapters/openai.js +0 -92
  22. package/dist/agent/adapters/openai.js.map +0 -1
  23. package/dist/agent/adapters/openrouter.d.ts +0 -16
  24. package/dist/agent/adapters/openrouter.d.ts.map +0 -1
  25. package/dist/agent/adapters/openrouter.js +0 -100
  26. package/dist/agent/adapters/openrouter.js.map +0 -1
  27. package/dist/agent/adapters/openrouter.test.d.ts +0 -5
  28. package/dist/agent/adapters/openrouter.test.d.ts.map +0 -1
  29. package/dist/agent/adapters/openrouter.test.js +0 -73
  30. package/dist/agent/adapters/openrouter.test.js.map +0 -1
  31. package/dist/agent/adapters/xai.d.ts +0 -15
  32. package/dist/agent/adapters/xai.d.ts.map +0 -1
  33. package/dist/agent/adapters/xai.js +0 -95
  34. package/dist/agent/adapters/xai.js.map +0 -1
  35. package/dist/agent/index.d.ts +0 -69
  36. package/dist/agent/index.d.ts.map +0 -1
  37. package/dist/agent/index.js +0 -180
  38. package/dist/agent/index.js.map +0 -1
  39. package/dist/agent/memory/index.d.ts +0 -70
  40. package/dist/agent/memory/index.d.ts.map +0 -1
  41. package/dist/agent/memory/index.js +0 -132
  42. package/dist/agent/memory/index.js.map +0 -1
  43. package/dist/agent/prompts/system.d.ts +0 -6
  44. package/dist/agent/prompts/system.d.ts.map +0 -1
  45. package/dist/agent/prompts/system.js +0 -103
  46. package/dist/agent/prompts/system.js.map +0 -1
  47. package/dist/agent/tools/ai-editing.d.ts +0 -15
  48. package/dist/agent/tools/ai-editing.d.ts.map +0 -1
  49. package/dist/agent/tools/ai-editing.js +0 -763
  50. package/dist/agent/tools/ai-editing.js.map +0 -1
  51. package/dist/agent/tools/ai-generation.d.ts +0 -13
  52. package/dist/agent/tools/ai-generation.d.ts.map +0 -1
  53. package/dist/agent/tools/ai-generation.js +0 -973
  54. package/dist/agent/tools/ai-generation.js.map +0 -1
  55. package/dist/agent/tools/ai-pipeline.d.ts +0 -14
  56. package/dist/agent/tools/ai-pipeline.d.ts.map +0 -1
  57. package/dist/agent/tools/ai-pipeline.js +0 -961
  58. package/dist/agent/tools/ai-pipeline.js.map +0 -1
  59. package/dist/agent/tools/ai.d.ts +0 -13
  60. package/dist/agent/tools/ai.d.ts.map +0 -1
  61. package/dist/agent/tools/ai.js +0 -19
  62. package/dist/agent/tools/ai.js.map +0 -1
  63. package/dist/agent/tools/batch.d.ts +0 -6
  64. package/dist/agent/tools/batch.d.ts.map +0 -1
  65. package/dist/agent/tools/batch.js +0 -383
  66. package/dist/agent/tools/batch.js.map +0 -1
  67. package/dist/agent/tools/e2e.test.d.ts +0 -26
  68. package/dist/agent/tools/e2e.test.d.ts.map +0 -1
  69. package/dist/agent/tools/e2e.test.js +0 -397
  70. package/dist/agent/tools/e2e.test.js.map +0 -1
  71. package/dist/agent/tools/export.d.ts +0 -6
  72. package/dist/agent/tools/export.d.ts.map +0 -1
  73. package/dist/agent/tools/export.js +0 -171
  74. package/dist/agent/tools/export.js.map +0 -1
  75. package/dist/agent/tools/filesystem.d.ts +0 -6
  76. package/dist/agent/tools/filesystem.d.ts.map +0 -1
  77. package/dist/agent/tools/filesystem.js +0 -212
  78. package/dist/agent/tools/filesystem.js.map +0 -1
  79. package/dist/agent/tools/index.d.ts +0 -66
  80. package/dist/agent/tools/index.d.ts.map +0 -1
  81. package/dist/agent/tools/index.js +0 -123
  82. package/dist/agent/tools/index.js.map +0 -1
  83. package/dist/agent/tools/integration.test.d.ts +0 -11
  84. package/dist/agent/tools/integration.test.d.ts.map +0 -1
  85. package/dist/agent/tools/integration.test.js +0 -659
  86. package/dist/agent/tools/integration.test.js.map +0 -1
  87. package/dist/agent/tools/media.d.ts +0 -6
  88. package/dist/agent/tools/media.d.ts.map +0 -1
  89. package/dist/agent/tools/media.js +0 -616
  90. package/dist/agent/tools/media.js.map +0 -1
  91. package/dist/agent/tools/project.d.ts +0 -6
  92. package/dist/agent/tools/project.d.ts.map +0 -1
  93. package/dist/agent/tools/project.js +0 -284
  94. package/dist/agent/tools/project.js.map +0 -1
  95. package/dist/agent/tools/scene.d.ts +0 -17
  96. package/dist/agent/tools/scene.d.ts.map +0 -1
  97. package/dist/agent/tools/scene.js +0 -263
  98. package/dist/agent/tools/scene.js.map +0 -1
  99. package/dist/agent/tools/scene.test.d.ts +0 -2
  100. package/dist/agent/tools/scene.test.d.ts.map +0 -1
  101. package/dist/agent/tools/scene.test.js +0 -139
  102. package/dist/agent/tools/scene.test.js.map +0 -1
  103. package/dist/agent/tools/timeline.d.ts +0 -6
  104. package/dist/agent/tools/timeline.d.ts.map +0 -1
  105. package/dist/agent/tools/timeline.js +0 -875
  106. package/dist/agent/tools/timeline.js.map +0 -1
  107. package/dist/agent/types.d.ts +0 -59
  108. package/dist/agent/types.d.ts.map +0 -1
  109. package/dist/agent/types.js +0 -5
  110. package/dist/agent/types.js.map +0 -1
  111. package/dist/commands/_shared/scene-html-emit.d.ts +0 -120
  112. package/dist/commands/_shared/scene-html-emit.d.ts.map +0 -1
  113. package/dist/commands/_shared/scene-html-emit.js +0 -422
  114. package/dist/commands/_shared/scene-html-emit.js.map +0 -1
  115. package/dist/commands/_shared/scene-html-emit.test.d.ts +0 -2
  116. package/dist/commands/_shared/scene-html-emit.test.d.ts.map +0 -1
  117. package/dist/commands/_shared/scene-html-emit.test.js +0 -396
  118. package/dist/commands/_shared/scene-html-emit.test.js.map +0 -1
  119. package/dist/commands/_shared/scene-lint.d.ts +0 -110
  120. package/dist/commands/_shared/scene-lint.d.ts.map +0 -1
  121. package/dist/commands/_shared/scene-lint.js +0 -207
  122. package/dist/commands/_shared/scene-lint.js.map +0 -1
  123. package/dist/commands/_shared/scene-lint.test.d.ts +0 -2
  124. package/dist/commands/_shared/scene-lint.test.d.ts.map +0 -1
  125. package/dist/commands/_shared/scene-lint.test.js +0 -208
  126. package/dist/commands/_shared/scene-lint.test.js.map +0 -1
  127. package/dist/commands/_shared/scene-project.d.ts +0 -101
  128. package/dist/commands/_shared/scene-project.d.ts.map +0 -1
  129. package/dist/commands/_shared/scene-project.js +0 -281
  130. package/dist/commands/_shared/scene-project.js.map +0 -1
  131. package/dist/commands/_shared/scene-project.test.d.ts +0 -2
  132. package/dist/commands/_shared/scene-project.test.d.ts.map +0 -1
  133. package/dist/commands/_shared/scene-project.test.js +0 -203
  134. package/dist/commands/_shared/scene-project.test.js.map +0 -1
  135. package/dist/commands/_shared/scene-render.d.ts +0 -79
  136. package/dist/commands/_shared/scene-render.d.ts.map +0 -1
  137. package/dist/commands/_shared/scene-render.js +0 -138
  138. package/dist/commands/_shared/scene-render.js.map +0 -1
  139. package/dist/commands/_shared/scene-render.test.d.ts +0 -2
  140. package/dist/commands/_shared/scene-render.test.d.ts.map +0 -1
  141. package/dist/commands/_shared/scene-render.test.js +0 -145
  142. package/dist/commands/_shared/scene-render.test.js.map +0 -1
  143. package/dist/commands/_shared/segments-to-scenes.d.ts +0 -85
  144. package/dist/commands/_shared/segments-to-scenes.d.ts.map +0 -1
  145. package/dist/commands/_shared/segments-to-scenes.js +0 -202
  146. package/dist/commands/_shared/segments-to-scenes.js.map +0 -1
  147. package/dist/commands/_shared/segments-to-scenes.test.d.ts +0 -2
  148. package/dist/commands/_shared/segments-to-scenes.test.d.ts.map +0 -1
  149. package/dist/commands/_shared/segments-to-scenes.test.js +0 -219
  150. package/dist/commands/_shared/segments-to-scenes.test.js.map +0 -1
  151. package/dist/commands/_shared/tts-resolve.d.ts +0 -75
  152. package/dist/commands/_shared/tts-resolve.d.ts.map +0 -1
  153. package/dist/commands/_shared/tts-resolve.js +0 -89
  154. package/dist/commands/_shared/tts-resolve.js.map +0 -1
  155. package/dist/commands/_shared/tts-resolve.test.d.ts +0 -6
  156. package/dist/commands/_shared/tts-resolve.test.d.ts.map +0 -1
  157. package/dist/commands/_shared/tts-resolve.test.js +0 -147
  158. package/dist/commands/_shared/tts-resolve.test.js.map +0 -1
  159. package/dist/commands/agent.d.ts +0 -21
  160. package/dist/commands/agent.d.ts.map +0 -1
  161. package/dist/commands/agent.js +0 -285
  162. package/dist/commands/agent.js.map +0 -1
  163. package/dist/commands/ai-analyze.d.ts +0 -106
  164. package/dist/commands/ai-analyze.d.ts.map +0 -1
  165. package/dist/commands/ai-analyze.js +0 -320
  166. package/dist/commands/ai-analyze.js.map +0 -1
  167. package/dist/commands/ai-animated-caption.d.ts +0 -64
  168. package/dist/commands/ai-animated-caption.d.ts.map +0 -1
  169. package/dist/commands/ai-animated-caption.js +0 -272
  170. package/dist/commands/ai-animated-caption.js.map +0 -1
  171. package/dist/commands/ai-audio.d.ts +0 -98
  172. package/dist/commands/ai-audio.d.ts.map +0 -1
  173. package/dist/commands/ai-audio.js +0 -1059
  174. package/dist/commands/ai-audio.js.map +0 -1
  175. package/dist/commands/ai-broll.d.ts +0 -15
  176. package/dist/commands/ai-broll.d.ts.map +0 -1
  177. package/dist/commands/ai-broll.js +0 -421
  178. package/dist/commands/ai-broll.js.map +0 -1
  179. package/dist/commands/ai-edit-cli.d.ts +0 -14
  180. package/dist/commands/ai-edit-cli.d.ts.map +0 -1
  181. package/dist/commands/ai-edit-cli.js +0 -585
  182. package/dist/commands/ai-edit-cli.js.map +0 -1
  183. package/dist/commands/ai-edit.d.ts +0 -398
  184. package/dist/commands/ai-edit.d.ts.map +0 -1
  185. package/dist/commands/ai-edit.js +0 -1060
  186. package/dist/commands/ai-edit.js.map +0 -1
  187. package/dist/commands/ai-fill-gaps.d.ts +0 -14
  188. package/dist/commands/ai-fill-gaps.d.ts.map +0 -1
  189. package/dist/commands/ai-fill-gaps.js +0 -447
  190. package/dist/commands/ai-fill-gaps.js.map +0 -1
  191. package/dist/commands/ai-helpers.d.ts +0 -20
  192. package/dist/commands/ai-helpers.d.ts.map +0 -1
  193. package/dist/commands/ai-helpers.js +0 -59
  194. package/dist/commands/ai-helpers.js.map +0 -1
  195. package/dist/commands/ai-highlights.d.ts +0 -127
  196. package/dist/commands/ai-highlights.d.ts.map +0 -1
  197. package/dist/commands/ai-highlights.js +0 -1053
  198. package/dist/commands/ai-highlights.js.map +0 -1
  199. package/dist/commands/ai-image.d.ts +0 -76
  200. package/dist/commands/ai-image.d.ts.map +0 -1
  201. package/dist/commands/ai-image.js +0 -858
  202. package/dist/commands/ai-image.js.map +0 -1
  203. package/dist/commands/ai-motion.d.ts +0 -50
  204. package/dist/commands/ai-motion.d.ts.map +0 -1
  205. package/dist/commands/ai-motion.js +0 -297
  206. package/dist/commands/ai-motion.js.map +0 -1
  207. package/dist/commands/ai-narrate.d.ts +0 -66
  208. package/dist/commands/ai-narrate.d.ts.map +0 -1
  209. package/dist/commands/ai-narrate.js +0 -332
  210. package/dist/commands/ai-narrate.js.map +0 -1
  211. package/dist/commands/ai-review.d.ts +0 -57
  212. package/dist/commands/ai-review.d.ts.map +0 -1
  213. package/dist/commands/ai-review.js +0 -270
  214. package/dist/commands/ai-review.js.map +0 -1
  215. package/dist/commands/ai-script-pipeline-cli.d.ts +0 -9
  216. package/dist/commands/ai-script-pipeline-cli.d.ts.map +0 -1
  217. package/dist/commands/ai-script-pipeline-cli.js +0 -502
  218. package/dist/commands/ai-script-pipeline-cli.js.map +0 -1
  219. package/dist/commands/ai-script-pipeline.d.ts +0 -305
  220. package/dist/commands/ai-script-pipeline.d.ts.map +0 -1
  221. package/dist/commands/ai-script-pipeline.js +0 -1546
  222. package/dist/commands/ai-script-pipeline.js.map +0 -1
  223. package/dist/commands/ai-suggest-edit.d.ts +0 -14
  224. package/dist/commands/ai-suggest-edit.d.ts.map +0 -1
  225. package/dist/commands/ai-suggest-edit.js +0 -215
  226. package/dist/commands/ai-suggest-edit.js.map +0 -1
  227. package/dist/commands/ai-video-fx.d.ts +0 -14
  228. package/dist/commands/ai-video-fx.d.ts.map +0 -1
  229. package/dist/commands/ai-video-fx.js +0 -396
  230. package/dist/commands/ai-video-fx.js.map +0 -1
  231. package/dist/commands/ai-video.d.ts +0 -91
  232. package/dist/commands/ai-video.d.ts.map +0 -1
  233. package/dist/commands/ai-video.js +0 -1055
  234. package/dist/commands/ai-video.js.map +0 -1
  235. package/dist/commands/ai-viral.d.ts +0 -15
  236. package/dist/commands/ai-viral.d.ts.map +0 -1
  237. package/dist/commands/ai-viral.js +0 -507
  238. package/dist/commands/ai-viral.js.map +0 -1
  239. package/dist/commands/ai-visual-fx.d.ts +0 -14
  240. package/dist/commands/ai-visual-fx.d.ts.map +0 -1
  241. package/dist/commands/ai-visual-fx.js +0 -521
  242. package/dist/commands/ai-visual-fx.js.map +0 -1
  243. package/dist/commands/ai.d.ts +0 -38
  244. package/dist/commands/ai.d.ts.map +0 -1
  245. package/dist/commands/ai.js +0 -225
  246. package/dist/commands/ai.js.map +0 -1
  247. package/dist/commands/ai.test.d.ts +0 -2
  248. package/dist/commands/ai.test.d.ts.map +0 -1
  249. package/dist/commands/ai.test.js +0 -557
  250. package/dist/commands/ai.test.js.map +0 -1
  251. package/dist/commands/analyze.d.ts +0 -16
  252. package/dist/commands/analyze.d.ts.map +0 -1
  253. package/dist/commands/analyze.js +0 -247
  254. package/dist/commands/analyze.js.map +0 -1
  255. package/dist/commands/audio.d.ts +0 -18
  256. package/dist/commands/audio.d.ts.map +0 -1
  257. package/dist/commands/audio.js +0 -539
  258. package/dist/commands/audio.js.map +0 -1
  259. package/dist/commands/batch.d.ts +0 -3
  260. package/dist/commands/batch.d.ts.map +0 -1
  261. package/dist/commands/batch.js +0 -419
  262. package/dist/commands/batch.js.map +0 -1
  263. package/dist/commands/batch.test.d.ts +0 -2
  264. package/dist/commands/batch.test.d.ts.map +0 -1
  265. package/dist/commands/batch.test.js +0 -203
  266. package/dist/commands/batch.test.js.map +0 -1
  267. package/dist/commands/context.d.ts +0 -7
  268. package/dist/commands/context.d.ts.map +0 -1
  269. package/dist/commands/context.js +0 -66
  270. package/dist/commands/context.js.map +0 -1
  271. package/dist/commands/demo.d.ts +0 -7
  272. package/dist/commands/demo.d.ts.map +0 -1
  273. package/dist/commands/demo.js +0 -192
  274. package/dist/commands/demo.js.map +0 -1
  275. package/dist/commands/detect.d.ts +0 -56
  276. package/dist/commands/detect.d.ts.map +0 -1
  277. package/dist/commands/detect.js +0 -464
  278. package/dist/commands/detect.js.map +0 -1
  279. package/dist/commands/doctor.d.ts +0 -6
  280. package/dist/commands/doctor.d.ts.map +0 -1
  281. package/dist/commands/doctor.js +0 -322
  282. package/dist/commands/doctor.js.map +0 -1
  283. package/dist/commands/edit-cmd.d.ts +0 -112
  284. package/dist/commands/edit-cmd.d.ts.map +0 -1
  285. package/dist/commands/edit-cmd.js +0 -1041
  286. package/dist/commands/edit-cmd.js.map +0 -1
  287. package/dist/commands/export.d.ts +0 -61
  288. package/dist/commands/export.d.ts.map +0 -1
  289. package/dist/commands/export.js +0 -980
  290. package/dist/commands/export.js.map +0 -1
  291. package/dist/commands/export.test.d.ts +0 -2
  292. package/dist/commands/export.test.d.ts.map +0 -1
  293. package/dist/commands/export.test.js +0 -107
  294. package/dist/commands/export.test.js.map +0 -1
  295. package/dist/commands/generate.d.ts +0 -84
  296. package/dist/commands/generate.d.ts.map +0 -1
  297. package/dist/commands/generate.js +0 -2030
  298. package/dist/commands/generate.js.map +0 -1
  299. package/dist/commands/media.d.ts +0 -3
  300. package/dist/commands/media.d.ts.map +0 -1
  301. package/dist/commands/media.js +0 -163
  302. package/dist/commands/media.js.map +0 -1
  303. package/dist/commands/output.d.ts +0 -51
  304. package/dist/commands/output.d.ts.map +0 -1
  305. package/dist/commands/output.js +0 -219
  306. package/dist/commands/output.js.map +0 -1
  307. package/dist/commands/output.test.d.ts +0 -2
  308. package/dist/commands/output.test.d.ts.map +0 -1
  309. package/dist/commands/output.test.js +0 -151
  310. package/dist/commands/output.test.js.map +0 -1
  311. package/dist/commands/pipeline.d.ts +0 -19
  312. package/dist/commands/pipeline.d.ts.map +0 -1
  313. package/dist/commands/pipeline.js +0 -345
  314. package/dist/commands/pipeline.js.map +0 -1
  315. package/dist/commands/project.d.ts +0 -3
  316. package/dist/commands/project.d.ts.map +0 -1
  317. package/dist/commands/project.js +0 -181
  318. package/dist/commands/project.js.map +0 -1
  319. package/dist/commands/project.test.d.ts +0 -2
  320. package/dist/commands/project.test.d.ts.map +0 -1
  321. package/dist/commands/project.test.js +0 -105
  322. package/dist/commands/project.test.js.map +0 -1
  323. package/dist/commands/run.d.ts +0 -15
  324. package/dist/commands/run.d.ts.map +0 -1
  325. package/dist/commands/run.js +0 -204
  326. package/dist/commands/run.js.map +0 -1
  327. package/dist/commands/sanitize.d.ts +0 -21
  328. package/dist/commands/sanitize.d.ts.map +0 -1
  329. package/dist/commands/sanitize.js +0 -56
  330. package/dist/commands/sanitize.js.map +0 -1
  331. package/dist/commands/scene.d.ts +0 -86
  332. package/dist/commands/scene.d.ts.map +0 -1
  333. package/dist/commands/scene.js +0 -719
  334. package/dist/commands/scene.js.map +0 -1
  335. package/dist/commands/scene.test.d.ts +0 -2
  336. package/dist/commands/scene.test.d.ts.map +0 -1
  337. package/dist/commands/scene.test.js +0 -219
  338. package/dist/commands/scene.test.js.map +0 -1
  339. package/dist/commands/schema.d.ts +0 -13
  340. package/dist/commands/schema.d.ts.map +0 -1
  341. package/dist/commands/schema.js +0 -218
  342. package/dist/commands/schema.js.map +0 -1
  343. package/dist/commands/setup.d.ts +0 -6
  344. package/dist/commands/setup.d.ts.map +0 -1
  345. package/dist/commands/setup.js +0 -461
  346. package/dist/commands/setup.js.map +0 -1
  347. package/dist/commands/timeline.d.ts +0 -3
  348. package/dist/commands/timeline.d.ts.map +0 -1
  349. package/dist/commands/timeline.js +0 -609
  350. package/dist/commands/timeline.js.map +0 -1
  351. package/dist/commands/timeline.test.d.ts +0 -2
  352. package/dist/commands/timeline.test.d.ts.map +0 -1
  353. package/dist/commands/timeline.test.js +0 -334
  354. package/dist/commands/timeline.test.js.map +0 -1
  355. package/dist/commands/validate.d.ts +0 -34
  356. package/dist/commands/validate.d.ts.map +0 -1
  357. package/dist/commands/validate.js +0 -70
  358. package/dist/commands/validate.js.map +0 -1
  359. package/dist/config/config.test.d.ts +0 -2
  360. package/dist/config/config.test.d.ts.map +0 -1
  361. package/dist/config/config.test.js +0 -164
  362. package/dist/config/config.test.js.map +0 -1
  363. package/dist/config/index.d.ts +0 -35
  364. package/dist/config/index.d.ts.map +0 -1
  365. package/dist/config/index.js +0 -101
  366. package/dist/config/index.js.map +0 -1
  367. package/dist/config/schema.d.ts +0 -52
  368. package/dist/config/schema.d.ts.map +0 -1
  369. package/dist/config/schema.js +0 -44
  370. package/dist/config/schema.js.map +0 -1
  371. package/dist/engine/index.d.ts +0 -3
  372. package/dist/engine/index.d.ts.map +0 -1
  373. package/dist/engine/index.js +0 -2
  374. package/dist/engine/index.js.map +0 -1
  375. package/dist/engine/project.d.ts +0 -84
  376. package/dist/engine/project.d.ts.map +0 -1
  377. package/dist/engine/project.js +0 -355
  378. package/dist/engine/project.js.map +0 -1
  379. package/dist/engine/project.test.d.ts +0 -2
  380. package/dist/engine/project.test.d.ts.map +0 -1
  381. package/dist/engine/project.test.js +0 -599
  382. package/dist/engine/project.test.js.map +0 -1
  383. package/dist/index.d.ts +0 -7
  384. package/dist/index.d.ts.map +0 -1
  385. package/dist/index.js.map +0 -1
  386. package/dist/pipeline/executor.d.ts +0 -19
  387. package/dist/pipeline/executor.d.ts.map +0 -1
  388. package/dist/pipeline/executor.js +0 -397
  389. package/dist/pipeline/executor.js.map +0 -1
  390. package/dist/pipeline/index.d.ts +0 -4
  391. package/dist/pipeline/index.d.ts.map +0 -1
  392. package/dist/pipeline/index.js +0 -2
  393. package/dist/pipeline/index.js.map +0 -1
  394. package/dist/pipeline/renderers/__tests__/html-template.test.d.ts +0 -2
  395. package/dist/pipeline/renderers/__tests__/html-template.test.d.ts.map +0 -1
  396. package/dist/pipeline/renderers/__tests__/html-template.test.js +0 -170
  397. package/dist/pipeline/renderers/__tests__/html-template.test.js.map +0 -1
  398. package/dist/pipeline/renderers/__tests__/integration.test.d.ts +0 -2
  399. package/dist/pipeline/renderers/__tests__/integration.test.d.ts.map +0 -1
  400. package/dist/pipeline/renderers/__tests__/integration.test.js +0 -175
  401. package/dist/pipeline/renderers/__tests__/integration.test.js.map +0 -1
  402. package/dist/pipeline/renderers/chrome.d.ts +0 -26
  403. package/dist/pipeline/renderers/chrome.d.ts.map +0 -1
  404. package/dist/pipeline/renderers/chrome.js +0 -48
  405. package/dist/pipeline/renderers/chrome.js.map +0 -1
  406. package/dist/pipeline/renderers/html-clips.d.ts +0 -20
  407. package/dist/pipeline/renderers/html-clips.d.ts.map +0 -1
  408. package/dist/pipeline/renderers/html-clips.js +0 -50
  409. package/dist/pipeline/renderers/html-clips.js.map +0 -1
  410. package/dist/pipeline/renderers/html-runtime.d.ts +0 -7
  411. package/dist/pipeline/renderers/html-runtime.d.ts.map +0 -1
  412. package/dist/pipeline/renderers/html-runtime.js +0 -80
  413. package/dist/pipeline/renderers/html-runtime.js.map +0 -1
  414. package/dist/pipeline/renderers/html-template.d.ts +0 -3
  415. package/dist/pipeline/renderers/html-template.d.ts.map +0 -1
  416. package/dist/pipeline/renderers/html-template.js +0 -36
  417. package/dist/pipeline/renderers/html-template.js.map +0 -1
  418. package/dist/pipeline/renderers/hyperframes.d.ts +0 -8
  419. package/dist/pipeline/renderers/hyperframes.d.ts.map +0 -1
  420. package/dist/pipeline/renderers/hyperframes.js +0 -63
  421. package/dist/pipeline/renderers/hyperframes.js.map +0 -1
  422. package/dist/pipeline/renderers/project-builder.d.ts +0 -8
  423. package/dist/pipeline/renderers/project-builder.d.ts.map +0 -1
  424. package/dist/pipeline/renderers/project-builder.js +0 -65
  425. package/dist/pipeline/renderers/project-builder.js.map +0 -1
  426. package/dist/pipeline/renderers/types.d.ts +0 -41
  427. package/dist/pipeline/renderers/types.d.ts.map +0 -1
  428. package/dist/pipeline/renderers/types.js +0 -11
  429. package/dist/pipeline/renderers/types.js.map +0 -1
  430. package/dist/pipeline/resolver.d.ts +0 -20
  431. package/dist/pipeline/resolver.d.ts.map +0 -1
  432. package/dist/pipeline/resolver.js +0 -74
  433. package/dist/pipeline/resolver.js.map +0 -1
  434. package/dist/pipeline/types.d.ts +0 -82
  435. package/dist/pipeline/types.d.ts.map +0 -1
  436. package/dist/pipeline/types.js +0 -8
  437. package/dist/pipeline/types.js.map +0 -1
  438. package/dist/utils/api-key.d.ts +0 -33
  439. package/dist/utils/api-key.d.ts.map +0 -1
  440. package/dist/utils/api-key.js +0 -228
  441. package/dist/utils/api-key.js.map +0 -1
  442. package/dist/utils/api-key.test.d.ts +0 -2
  443. package/dist/utils/api-key.test.d.ts.map +0 -1
  444. package/dist/utils/api-key.test.js +0 -35
  445. package/dist/utils/api-key.test.js.map +0 -1
  446. package/dist/utils/audio.d.ts +0 -23
  447. package/dist/utils/audio.d.ts.map +0 -1
  448. package/dist/utils/audio.js +0 -79
  449. package/dist/utils/audio.js.map +0 -1
  450. package/dist/utils/exec-safe.d.ts +0 -22
  451. package/dist/utils/exec-safe.d.ts.map +0 -1
  452. package/dist/utils/exec-safe.js +0 -62
  453. package/dist/utils/exec-safe.js.map +0 -1
  454. package/dist/utils/first-run.d.ts +0 -17
  455. package/dist/utils/first-run.d.ts.map +0 -1
  456. package/dist/utils/first-run.js +0 -73
  457. package/dist/utils/first-run.js.map +0 -1
  458. package/dist/utils/input-validation.d.ts +0 -27
  459. package/dist/utils/input-validation.d.ts.map +0 -1
  460. package/dist/utils/input-validation.js +0 -67
  461. package/dist/utils/input-validation.js.map +0 -1
  462. package/dist/utils/provider-resolver.d.ts +0 -19
  463. package/dist/utils/provider-resolver.d.ts.map +0 -1
  464. package/dist/utils/provider-resolver.js +0 -75
  465. package/dist/utils/provider-resolver.js.map +0 -1
  466. package/dist/utils/remotion.d.ts +0 -231
  467. package/dist/utils/remotion.d.ts.map +0 -1
  468. package/dist/utils/remotion.js +0 -879
  469. package/dist/utils/remotion.js.map +0 -1
  470. package/dist/utils/subtitle.d.ts +0 -65
  471. package/dist/utils/subtitle.d.ts.map +0 -1
  472. package/dist/utils/subtitle.js +0 -135
  473. package/dist/utils/subtitle.js.map +0 -1
  474. package/dist/utils/subtitle.test.d.ts +0 -2
  475. package/dist/utils/subtitle.test.d.ts.map +0 -1
  476. package/dist/utils/subtitle.test.js +0 -175
  477. package/dist/utils/subtitle.test.js.map +0 -1
  478. package/dist/utils/tty.d.ts +0 -45
  479. package/dist/utils/tty.d.ts.map +0 -1
  480. package/dist/utils/tty.js +0 -231
  481. package/dist/utils/tty.js.map +0 -1
@@ -1,875 +0,0 @@
1
- /**
2
- * Timeline Tools - Add sources, clips, tracks, effects, and edit timeline
3
- */
4
- import { readFile, writeFile, stat } from "node:fs/promises";
5
- import { resolve, basename, extname } from "node:path";
6
- import { Project } from "../../engine/index.js";
7
- import { ffprobeDuration } from "../../utils/exec-safe.js";
8
- // Helper to detect media type from file extension
9
- function detectMediaType(path) {
10
- const ext = extname(path).toLowerCase();
11
- const videoExts = [".mp4", ".mov", ".webm", ".avi", ".mkv"];
12
- const audioExts = [".mp3", ".wav", ".ogg", ".m4a", ".aac"];
13
- const imageExts = [".jpg", ".jpeg", ".png", ".gif", ".webp"];
14
- if (videoExts.includes(ext))
15
- return "video";
16
- if (audioExts.includes(ext))
17
- return "audio";
18
- if (imageExts.includes(ext))
19
- return "image";
20
- if (ext === ".lottie")
21
- return "lottie";
22
- return "video";
23
- }
24
- // Helper to get media duration using ffprobe
25
- async function getMediaDuration(filePath, mediaType) {
26
- if (mediaType === "image" || mediaType === "lottie") {
27
- return 5; // Default 5 seconds for images/lottie (no inherent duration)
28
- }
29
- try {
30
- return await ffprobeDuration(filePath);
31
- }
32
- catch {
33
- return 5;
34
- }
35
- }
36
- // Helper to resolve project path
37
- async function resolveProjectPath(inputPath, cwd) {
38
- const filePath = resolve(cwd, inputPath);
39
- try {
40
- const stats = await stat(filePath);
41
- if (stats.isDirectory()) {
42
- return resolve(filePath, "project.vibe.json");
43
- }
44
- }
45
- catch {
46
- // Path doesn't exist
47
- }
48
- return filePath;
49
- }
50
- // Helper to load project
51
- async function loadProject(path, cwd) {
52
- const filePath = await resolveProjectPath(path, cwd);
53
- const content = await readFile(filePath, "utf-8");
54
- const data = JSON.parse(content);
55
- const project = Project.fromJSON(data);
56
- return { project, filePath };
57
- }
58
- // Helper to save project
59
- async function saveProject(project, filePath) {
60
- await writeFile(filePath, JSON.stringify(project.toJSON(), null, 2), "utf-8");
61
- }
62
- // Tool Definitions
63
- const addSourceDef = {
64
- name: "timeline_add_source",
65
- description: "Add a media source (video, audio, or image) to the project",
66
- parameters: {
67
- type: "object",
68
- properties: {
69
- project: {
70
- type: "string",
71
- description: "Project file path",
72
- },
73
- media: {
74
- type: "string",
75
- description: "Media file path to add",
76
- },
77
- name: {
78
- type: "string",
79
- description: "Source name (defaults to filename)",
80
- },
81
- type: {
82
- type: "string",
83
- description: "Media type (video, audio, image) - auto-detected if not specified",
84
- enum: ["video", "audio", "image"],
85
- },
86
- duration: {
87
- type: "number",
88
- description: "Duration in seconds (required for images, auto-detected for video/audio)",
89
- },
90
- },
91
- required: ["project", "media"],
92
- },
93
- };
94
- const addClipDef = {
95
- name: "timeline_add_clip",
96
- description: "Add a clip to the timeline from an existing source",
97
- parameters: {
98
- type: "object",
99
- properties: {
100
- project: {
101
- type: "string",
102
- description: "Project file path",
103
- },
104
- sourceId: {
105
- type: "string",
106
- description: "Source ID to create clip from",
107
- },
108
- trackId: {
109
- type: "string",
110
- description: "Track ID (defaults to first matching track)",
111
- },
112
- startTime: {
113
- type: "number",
114
- description: "Start time in timeline (seconds)",
115
- },
116
- duration: {
117
- type: "number",
118
- description: "Clip duration (defaults to source duration)",
119
- },
120
- offset: {
121
- type: "number",
122
- description: "Source start offset (seconds)",
123
- },
124
- },
125
- required: ["project", "sourceId"],
126
- },
127
- };
128
- const addTrackDef = {
129
- name: "timeline_add_track",
130
- description: "Add a new track to the timeline",
131
- parameters: {
132
- type: "object",
133
- properties: {
134
- project: {
135
- type: "string",
136
- description: "Project file path",
137
- },
138
- type: {
139
- type: "string",
140
- description: "Track type (video or audio)",
141
- enum: ["video", "audio"],
142
- },
143
- name: {
144
- type: "string",
145
- description: "Track name",
146
- },
147
- },
148
- required: ["project", "type"],
149
- },
150
- };
151
- const addEffectDef = {
152
- name: "timeline_add_effect",
153
- description: "Add an effect to a clip",
154
- parameters: {
155
- type: "object",
156
- properties: {
157
- project: {
158
- type: "string",
159
- description: "Project file path",
160
- },
161
- clipId: {
162
- type: "string",
163
- description: "Clip ID to add effect to",
164
- },
165
- effectType: {
166
- type: "string",
167
- description: "Effect type",
168
- enum: ["fadeIn", "fadeOut", "blur", "brightness", "contrast", "saturation", "speed", "volume"],
169
- },
170
- startTime: {
171
- type: "number",
172
- description: "Effect start time relative to clip (seconds)",
173
- },
174
- duration: {
175
- type: "number",
176
- description: "Effect duration (defaults to clip duration)",
177
- },
178
- params: {
179
- type: "object",
180
- description: "Effect-specific parameters",
181
- },
182
- },
183
- required: ["project", "clipId", "effectType"],
184
- },
185
- };
186
- const trimDef = {
187
- name: "timeline_trim",
188
- description: "Trim a clip (adjust start time or duration)",
189
- parameters: {
190
- type: "object",
191
- properties: {
192
- project: {
193
- type: "string",
194
- description: "Project file path",
195
- },
196
- clipId: {
197
- type: "string",
198
- description: "Clip ID to trim",
199
- },
200
- startTime: {
201
- type: "number",
202
- description: "New start time",
203
- },
204
- duration: {
205
- type: "number",
206
- description: "New duration",
207
- },
208
- },
209
- required: ["project", "clipId"],
210
- },
211
- };
212
- const splitDef = {
213
- name: "timeline_split",
214
- description: "Split a clip at a specific time, creating two clips",
215
- parameters: {
216
- type: "object",
217
- properties: {
218
- project: {
219
- type: "string",
220
- description: "Project file path",
221
- },
222
- clipId: {
223
- type: "string",
224
- description: "Clip ID to split",
225
- },
226
- time: {
227
- type: "number",
228
- description: "Split time relative to clip start (seconds)",
229
- },
230
- },
231
- required: ["project", "clipId", "time"],
232
- },
233
- };
234
- const moveDef = {
235
- name: "timeline_move",
236
- description: "Move a clip to a new position or track",
237
- parameters: {
238
- type: "object",
239
- properties: {
240
- project: {
241
- type: "string",
242
- description: "Project file path",
243
- },
244
- clipId: {
245
- type: "string",
246
- description: "Clip ID to move",
247
- },
248
- startTime: {
249
- type: "number",
250
- description: "New start time",
251
- },
252
- trackId: {
253
- type: "string",
254
- description: "New track ID",
255
- },
256
- },
257
- required: ["project", "clipId"],
258
- },
259
- };
260
- const deleteDef = {
261
- name: "timeline_delete",
262
- description: "Delete a clip from the timeline",
263
- parameters: {
264
- type: "object",
265
- properties: {
266
- project: {
267
- type: "string",
268
- description: "Project file path",
269
- },
270
- clipId: {
271
- type: "string",
272
- description: "Clip ID to delete",
273
- },
274
- },
275
- required: ["project", "clipId"],
276
- },
277
- };
278
- const duplicateDef = {
279
- name: "timeline_duplicate",
280
- description: "Duplicate a clip",
281
- parameters: {
282
- type: "object",
283
- properties: {
284
- project: {
285
- type: "string",
286
- description: "Project file path",
287
- },
288
- clipId: {
289
- type: "string",
290
- description: "Clip ID to duplicate",
291
- },
292
- startTime: {
293
- type: "number",
294
- description: "Start time for duplicate (default: after original)",
295
- },
296
- },
297
- required: ["project", "clipId"],
298
- },
299
- };
300
- const listDef = {
301
- name: "timeline_list",
302
- description: "List timeline contents (sources, tracks, clips)",
303
- parameters: {
304
- type: "object",
305
- properties: {
306
- project: {
307
- type: "string",
308
- description: "Project file path",
309
- },
310
- type: {
311
- type: "string",
312
- description: "What to list (all, sources, tracks, clips)",
313
- enum: ["all", "sources", "tracks", "clips"],
314
- },
315
- },
316
- required: ["project"],
317
- },
318
- };
319
- const clearDef = {
320
- name: "timeline_clear",
321
- description: "Clear timeline contents (remove clips, tracks, or sources)",
322
- parameters: {
323
- type: "object",
324
- properties: {
325
- project: {
326
- type: "string",
327
- description: "Project file path",
328
- },
329
- what: {
330
- type: "string",
331
- description: "What to clear: clips (default), tracks, sources, or all",
332
- enum: ["clips", "tracks", "sources", "all"],
333
- },
334
- keepTracks: {
335
- type: "boolean",
336
- description: "When clearing 'all', keep default empty tracks (default: true)",
337
- },
338
- },
339
- required: ["project"],
340
- },
341
- };
342
- // Tool Handlers
343
- const addSource = async (args, context) => {
344
- const projectPath = (args.project || args.path);
345
- const mediaPath = args.media;
346
- try {
347
- const { project, filePath } = await loadProject(projectPath, context.workingDirectory);
348
- const absMediaPath = resolve(context.workingDirectory, mediaPath);
349
- const mediaName = args.name || basename(mediaPath);
350
- const mediaType = args.type || detectMediaType(mediaPath);
351
- const duration = args.duration || await getMediaDuration(absMediaPath, mediaType);
352
- const source = project.addSource({
353
- name: mediaName,
354
- type: mediaType,
355
- url: absMediaPath,
356
- duration,
357
- });
358
- await saveProject(project, filePath);
359
- return {
360
- toolCallId: "",
361
- success: true,
362
- output: `Source added: ${source.id}\nName: ${mediaName}\nType: ${mediaType}\nDuration: ${duration.toFixed(1)}s`,
363
- };
364
- }
365
- catch (error) {
366
- return {
367
- toolCallId: "",
368
- success: false,
369
- output: "",
370
- error: `Failed to add source: ${error instanceof Error ? error.message : String(error)}`,
371
- };
372
- }
373
- };
374
- const addClip = async (args, context) => {
375
- const projectPath = (args.project || args.path);
376
- const sourceId = args.sourceId;
377
- try {
378
- const { project, filePath } = await loadProject(projectPath, context.workingDirectory);
379
- const source = project.getSource(sourceId);
380
- if (!source) {
381
- return {
382
- toolCallId: "",
383
- success: false,
384
- output: "",
385
- error: `Source not found: ${sourceId}`,
386
- };
387
- }
388
- // Find track
389
- let trackId = args.trackId;
390
- if (!trackId) {
391
- const trackType = source.type === "audio" ? "audio" : "video";
392
- const tracks = project.getTracksByType(trackType);
393
- if (tracks.length === 0) {
394
- return {
395
- toolCallId: "",
396
- success: false,
397
- output: "",
398
- error: `No ${trackType} track found. Create one first with timeline_add_track.`,
399
- };
400
- }
401
- trackId = tracks[0].id;
402
- }
403
- const startTime = args.startTime || 0;
404
- const offset = args.offset || 0;
405
- const duration = args.duration || source.duration;
406
- const clip = project.addClip({
407
- sourceId,
408
- trackId,
409
- startTime,
410
- duration,
411
- sourceStartOffset: offset,
412
- sourceEndOffset: offset + duration,
413
- });
414
- await saveProject(project, filePath);
415
- return {
416
- toolCallId: "",
417
- success: true,
418
- output: `Clip added: ${clip.id}\nSource: ${source.name}\nTrack: ${trackId}\nStart: ${startTime}s\nDuration: ${duration.toFixed(1)}s`,
419
- };
420
- }
421
- catch (error) {
422
- return {
423
- toolCallId: "",
424
- success: false,
425
- output: "",
426
- error: `Failed to add clip: ${error instanceof Error ? error.message : String(error)}`,
427
- };
428
- }
429
- };
430
- const addTrack = async (args, context) => {
431
- const projectPath = (args.project || args.path);
432
- const type = args.type;
433
- try {
434
- const { project, filePath } = await loadProject(projectPath, context.workingDirectory);
435
- const existingTracks = project.getTracksByType(type);
436
- const trackName = args.name || `${type.charAt(0).toUpperCase() + type.slice(1)} ${existingTracks.length + 1}`;
437
- const order = project.getTracks().length;
438
- const track = project.addTrack({
439
- name: trackName,
440
- type,
441
- order,
442
- isMuted: false,
443
- isLocked: false,
444
- isVisible: true,
445
- });
446
- await saveProject(project, filePath);
447
- return {
448
- toolCallId: "",
449
- success: true,
450
- output: `Track added: ${track.id}\nName: ${trackName}\nType: ${type}`,
451
- };
452
- }
453
- catch (error) {
454
- return {
455
- toolCallId: "",
456
- success: false,
457
- output: "",
458
- error: `Failed to add track: ${error instanceof Error ? error.message : String(error)}`,
459
- };
460
- }
461
- };
462
- const addEffect = async (args, context) => {
463
- const projectPath = (args.project || args.path);
464
- const clipId = args.clipId;
465
- const effectType = args.effectType;
466
- try {
467
- const { project, filePath } = await loadProject(projectPath, context.workingDirectory);
468
- const clip = project.getClip(clipId);
469
- if (!clip) {
470
- return {
471
- toolCallId: "",
472
- success: false,
473
- output: "",
474
- error: `Clip not found: ${clipId}`,
475
- };
476
- }
477
- const startTime = args.startTime || 0;
478
- const duration = args.duration || clip.duration;
479
- const rawParams = args.params || {};
480
- const params = {};
481
- for (const [key, value] of Object.entries(rawParams)) {
482
- if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
483
- params[key] = value;
484
- }
485
- }
486
- const effect = project.addEffect(clipId, {
487
- type: effectType,
488
- startTime,
489
- duration,
490
- params,
491
- });
492
- if (!effect) {
493
- return {
494
- toolCallId: "",
495
- success: false,
496
- output: "",
497
- error: "Failed to add effect",
498
- };
499
- }
500
- await saveProject(project, filePath);
501
- return {
502
- toolCallId: "",
503
- success: true,
504
- output: `Effect added: ${effect.id}\nType: ${effectType}\nStart: ${startTime}s\nDuration: ${duration.toFixed(1)}s`,
505
- };
506
- }
507
- catch (error) {
508
- return {
509
- toolCallId: "",
510
- success: false,
511
- output: "",
512
- error: `Failed to add effect: ${error instanceof Error ? error.message : String(error)}`,
513
- };
514
- }
515
- };
516
- const trim = async (args, context) => {
517
- const projectPath = (args.project || args.path);
518
- const clipId = args.clipId;
519
- try {
520
- const { project, filePath } = await loadProject(projectPath, context.workingDirectory);
521
- const clip = project.getClip(clipId);
522
- if (!clip) {
523
- return {
524
- toolCallId: "",
525
- success: false,
526
- output: "",
527
- error: `Clip not found: ${clipId}`,
528
- };
529
- }
530
- if (args.startTime !== undefined) {
531
- project.trimClipStart(clipId, args.startTime);
532
- }
533
- if (args.duration !== undefined) {
534
- project.trimClipEnd(clipId, args.duration);
535
- }
536
- await saveProject(project, filePath);
537
- const updated = project.getClip(clipId);
538
- return {
539
- toolCallId: "",
540
- success: true,
541
- output: `Clip trimmed: ${clipId}\nStart: ${updated.startTime}s\nDuration: ${updated.duration.toFixed(1)}s`,
542
- };
543
- }
544
- catch (error) {
545
- return {
546
- toolCallId: "",
547
- success: false,
548
- output: "",
549
- error: `Failed to trim clip: ${error instanceof Error ? error.message : String(error)}`,
550
- };
551
- }
552
- };
553
- const split = async (args, context) => {
554
- const projectPath = (args.project || args.path);
555
- const clipId = args.clipId;
556
- const splitTime = args.time;
557
- try {
558
- const { project, filePath } = await loadProject(projectPath, context.workingDirectory);
559
- const clip = project.getClip(clipId);
560
- if (!clip) {
561
- return {
562
- toolCallId: "",
563
- success: false,
564
- output: "",
565
- error: `Clip not found: ${clipId}`,
566
- };
567
- }
568
- if (splitTime <= 0 || splitTime >= clip.duration) {
569
- return {
570
- toolCallId: "",
571
- success: false,
572
- output: "",
573
- error: `Invalid split time. Must be between 0 and ${clip.duration}s`,
574
- };
575
- }
576
- const result = project.splitClip(clipId, splitTime);
577
- if (!result) {
578
- return {
579
- toolCallId: "",
580
- success: false,
581
- output: "",
582
- error: "Failed to split clip",
583
- };
584
- }
585
- await saveProject(project, filePath);
586
- const [first, second] = result;
587
- return {
588
- toolCallId: "",
589
- success: true,
590
- output: `Clip split:\nFirst: ${first.id} (${first.duration.toFixed(2)}s)\nSecond: ${second.id} (${second.duration.toFixed(2)}s)`,
591
- };
592
- }
593
- catch (error) {
594
- return {
595
- toolCallId: "",
596
- success: false,
597
- output: "",
598
- error: `Failed to split clip: ${error instanceof Error ? error.message : String(error)}`,
599
- };
600
- }
601
- };
602
- const move = async (args, context) => {
603
- const projectPath = (args.project || args.path);
604
- const clipId = args.clipId;
605
- try {
606
- const { project, filePath } = await loadProject(projectPath, context.workingDirectory);
607
- const clip = project.getClip(clipId);
608
- if (!clip) {
609
- return {
610
- toolCallId: "",
611
- success: false,
612
- output: "",
613
- error: `Clip not found: ${clipId}`,
614
- };
615
- }
616
- const newTime = args.startTime !== undefined ? args.startTime : clip.startTime;
617
- const newTrack = args.trackId || clip.trackId;
618
- const moved = project.moveClip(clipId, newTrack, newTime);
619
- if (!moved) {
620
- return {
621
- toolCallId: "",
622
- success: false,
623
- output: "",
624
- error: "Failed to move clip",
625
- };
626
- }
627
- await saveProject(project, filePath);
628
- const updated = project.getClip(clipId);
629
- return {
630
- toolCallId: "",
631
- success: true,
632
- output: `Clip moved: ${clipId}\nTrack: ${updated.trackId}\nStart: ${updated.startTime}s`,
633
- };
634
- }
635
- catch (error) {
636
- return {
637
- toolCallId: "",
638
- success: false,
639
- output: "",
640
- error: `Failed to move clip: ${error instanceof Error ? error.message : String(error)}`,
641
- };
642
- }
643
- };
644
- const deleteClip = async (args, context) => {
645
- const projectPath = (args.project || args.path);
646
- const clipId = args.clipId;
647
- try {
648
- const { project, filePath } = await loadProject(projectPath, context.workingDirectory);
649
- const clip = project.getClip(clipId);
650
- if (!clip) {
651
- return {
652
- toolCallId: "",
653
- success: false,
654
- output: "",
655
- error: `Clip not found: ${clipId}`,
656
- };
657
- }
658
- const removed = project.removeClip(clipId);
659
- if (!removed) {
660
- return {
661
- toolCallId: "",
662
- success: false,
663
- output: "",
664
- error: "Failed to delete clip",
665
- };
666
- }
667
- await saveProject(project, filePath);
668
- return {
669
- toolCallId: "",
670
- success: true,
671
- output: `Clip deleted: ${clipId}`,
672
- };
673
- }
674
- catch (error) {
675
- return {
676
- toolCallId: "",
677
- success: false,
678
- output: "",
679
- error: `Failed to delete clip: ${error instanceof Error ? error.message : String(error)}`,
680
- };
681
- }
682
- };
683
- const duplicate = async (args, context) => {
684
- const projectPath = (args.project || args.path);
685
- const clipId = args.clipId;
686
- try {
687
- const { project, filePath } = await loadProject(projectPath, context.workingDirectory);
688
- const clip = project.getClip(clipId);
689
- if (!clip) {
690
- return {
691
- toolCallId: "",
692
- success: false,
693
- output: "",
694
- error: `Clip not found: ${clipId}`,
695
- };
696
- }
697
- const offsetTime = args.startTime;
698
- const duplicated = project.duplicateClip(clipId, offsetTime);
699
- if (!duplicated) {
700
- return {
701
- toolCallId: "",
702
- success: false,
703
- output: "",
704
- error: "Failed to duplicate clip",
705
- };
706
- }
707
- await saveProject(project, filePath);
708
- return {
709
- toolCallId: "",
710
- success: true,
711
- output: `Clip duplicated: ${duplicated.id}\nStart: ${duplicated.startTime}s\nDuration: ${duplicated.duration.toFixed(1)}s`,
712
- };
713
- }
714
- catch (error) {
715
- return {
716
- toolCallId: "",
717
- success: false,
718
- output: "",
719
- error: `Failed to duplicate clip: ${error instanceof Error ? error.message : String(error)}`,
720
- };
721
- }
722
- };
723
- const list = async (args, context) => {
724
- // Accept both 'project' and 'path' for robustness (LLMs sometimes use alternative names)
725
- const projectPath = (args.project || args.path);
726
- const listType = args.type || "all";
727
- try {
728
- const { project } = await loadProject(projectPath, context.workingDirectory);
729
- const output = [];
730
- if (listType === "all" || listType === "sources") {
731
- output.push("## Sources");
732
- const sources = project.getSources();
733
- if (sources.length === 0) {
734
- output.push(" (none)");
735
- }
736
- else {
737
- for (const source of sources) {
738
- output.push(` ${source.id}: ${source.name} (${source.type}, ${source.duration.toFixed(1)}s)`);
739
- }
740
- }
741
- }
742
- if (listType === "all" || listType === "tracks") {
743
- output.push("\n## Tracks");
744
- const tracks = project.getTracks();
745
- for (const track of tracks) {
746
- const status = [
747
- track.isMuted ? "muted" : null,
748
- track.isLocked ? "locked" : null,
749
- !track.isVisible ? "hidden" : null,
750
- ].filter(Boolean).join(", ");
751
- output.push(` ${track.id}: ${track.name} (${track.type})${status ? ` [${status}]` : ""}`);
752
- }
753
- }
754
- if (listType === "all" || listType === "clips") {
755
- output.push("\n## Clips");
756
- const clips = project.getClips();
757
- if (clips.length === 0) {
758
- output.push(" (none)");
759
- }
760
- else {
761
- for (const clip of clips) {
762
- const source = project.getSource(clip.sourceId);
763
- const effects = clip.effects.length > 0 ? ` [effects: ${clip.effects.map((e) => e.type).join(", ")}]` : "";
764
- output.push(` ${clip.id}: ${source?.name || "unknown"} @ ${clip.startTime}s (${clip.duration.toFixed(1)}s)${effects}`);
765
- }
766
- }
767
- }
768
- return {
769
- toolCallId: "",
770
- success: true,
771
- output: output.join("\n"),
772
- };
773
- }
774
- catch (error) {
775
- return {
776
- toolCallId: "",
777
- success: false,
778
- output: "",
779
- error: `Failed to list timeline: ${error instanceof Error ? error.message : String(error)}`,
780
- };
781
- }
782
- };
783
- const clear = async (args, context) => {
784
- const projectPath = (args.project || args.path);
785
- const what = args.what || "clips";
786
- const keepTracks = args.keepTracks !== false; // default true
787
- try {
788
- const { project, filePath } = await loadProject(projectPath, context.workingDirectory);
789
- const removed = {
790
- clips: 0,
791
- tracks: 0,
792
- sources: 0,
793
- };
794
- // Remove clips
795
- if (what === "clips" || what === "all") {
796
- const clips = project.getClips();
797
- for (const clip of clips) {
798
- project.removeClip(clip.id);
799
- removed.clips++;
800
- }
801
- }
802
- // Remove tracks
803
- if (what === "tracks" || what === "all") {
804
- const tracks = project.getTracks();
805
- for (const track of tracks) {
806
- project.removeTrack(track.id);
807
- removed.tracks++;
808
- }
809
- // Re-add default tracks if keepTracks
810
- if (what === "all" && keepTracks) {
811
- project.addTrack({
812
- name: "Video 1",
813
- type: "video",
814
- order: 1,
815
- isMuted: false,
816
- isLocked: false,
817
- isVisible: true,
818
- });
819
- project.addTrack({
820
- name: "Audio 1",
821
- type: "audio",
822
- order: 0,
823
- isMuted: false,
824
- isLocked: false,
825
- isVisible: true,
826
- });
827
- }
828
- }
829
- // Remove sources
830
- if (what === "sources" || what === "all") {
831
- const sources = project.getSources();
832
- for (const source of sources) {
833
- project.removeSource(source.id);
834
- removed.sources++;
835
- }
836
- }
837
- await saveProject(project, filePath);
838
- // Build output message
839
- const parts = [];
840
- if (removed.clips > 0)
841
- parts.push(`${removed.clips} clips`);
842
- if (removed.tracks > 0)
843
- parts.push(`${removed.tracks} tracks`);
844
- if (removed.sources > 0)
845
- parts.push(`${removed.sources} sources`);
846
- return {
847
- toolCallId: "",
848
- success: true,
849
- output: parts.length > 0 ? `Cleared: ${parts.join(", ")}` : "Nothing to clear",
850
- };
851
- }
852
- catch (error) {
853
- return {
854
- toolCallId: "",
855
- success: false,
856
- output: "",
857
- error: `Failed to clear timeline: ${error instanceof Error ? error.message : String(error)}`,
858
- };
859
- }
860
- };
861
- // Registration function
862
- export function registerTimelineTools(registry) {
863
- registry.register(addSourceDef, addSource);
864
- registry.register(addClipDef, addClip);
865
- registry.register(addTrackDef, addTrack);
866
- registry.register(addEffectDef, addEffect);
867
- registry.register(trimDef, trim);
868
- registry.register(splitDef, split);
869
- registry.register(moveDef, move);
870
- registry.register(deleteDef, deleteClip);
871
- registry.register(duplicateDef, duplicate);
872
- registry.register(listDef, list);
873
- registry.register(clearDef, clear);
874
- }
875
- //# sourceMappingURL=timeline.js.map