@vibeframe/cli 0.55.0 → 0.55.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (497) hide show
  1. package/dist/index.js +63450 -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-audio-mux.d.ts +0 -75
  112. package/dist/commands/_shared/scene-audio-mux.d.ts.map +0 -1
  113. package/dist/commands/_shared/scene-audio-mux.js +0 -159
  114. package/dist/commands/_shared/scene-audio-mux.js.map +0 -1
  115. package/dist/commands/_shared/scene-audio-mux.test.d.ts +0 -7
  116. package/dist/commands/_shared/scene-audio-mux.test.d.ts.map +0 -1
  117. package/dist/commands/_shared/scene-audio-mux.test.js +0 -94
  118. package/dist/commands/_shared/scene-audio-mux.test.js.map +0 -1
  119. package/dist/commands/_shared/scene-audio-scan.d.ts +0 -94
  120. package/dist/commands/_shared/scene-audio-scan.d.ts.map +0 -1
  121. package/dist/commands/_shared/scene-audio-scan.js +0 -144
  122. package/dist/commands/_shared/scene-audio-scan.js.map +0 -1
  123. package/dist/commands/_shared/scene-audio-scan.test.d.ts +0 -6
  124. package/dist/commands/_shared/scene-audio-scan.test.d.ts.map +0 -1
  125. package/dist/commands/_shared/scene-audio-scan.test.js +0 -190
  126. package/dist/commands/_shared/scene-audio-scan.test.js.map +0 -1
  127. package/dist/commands/_shared/scene-html-emit.d.ts +0 -120
  128. package/dist/commands/_shared/scene-html-emit.d.ts.map +0 -1
  129. package/dist/commands/_shared/scene-html-emit.js +0 -422
  130. package/dist/commands/_shared/scene-html-emit.js.map +0 -1
  131. package/dist/commands/_shared/scene-html-emit.test.d.ts +0 -2
  132. package/dist/commands/_shared/scene-html-emit.test.d.ts.map +0 -1
  133. package/dist/commands/_shared/scene-html-emit.test.js +0 -396
  134. package/dist/commands/_shared/scene-html-emit.test.js.map +0 -1
  135. package/dist/commands/_shared/scene-lint.d.ts +0 -110
  136. package/dist/commands/_shared/scene-lint.d.ts.map +0 -1
  137. package/dist/commands/_shared/scene-lint.js +0 -207
  138. package/dist/commands/_shared/scene-lint.js.map +0 -1
  139. package/dist/commands/_shared/scene-lint.test.d.ts +0 -2
  140. package/dist/commands/_shared/scene-lint.test.d.ts.map +0 -1
  141. package/dist/commands/_shared/scene-lint.test.js +0 -208
  142. package/dist/commands/_shared/scene-lint.test.js.map +0 -1
  143. package/dist/commands/_shared/scene-project.d.ts +0 -101
  144. package/dist/commands/_shared/scene-project.d.ts.map +0 -1
  145. package/dist/commands/_shared/scene-project.js +0 -281
  146. package/dist/commands/_shared/scene-project.js.map +0 -1
  147. package/dist/commands/_shared/scene-project.test.d.ts +0 -2
  148. package/dist/commands/_shared/scene-project.test.d.ts.map +0 -1
  149. package/dist/commands/_shared/scene-project.test.js +0 -203
  150. package/dist/commands/_shared/scene-project.test.js.map +0 -1
  151. package/dist/commands/_shared/scene-render.d.ts +0 -85
  152. package/dist/commands/_shared/scene-render.d.ts.map +0 -1
  153. package/dist/commands/_shared/scene-render.js +0 -178
  154. package/dist/commands/_shared/scene-render.js.map +0 -1
  155. package/dist/commands/_shared/scene-render.test.d.ts +0 -2
  156. package/dist/commands/_shared/scene-render.test.d.ts.map +0 -1
  157. package/dist/commands/_shared/scene-render.test.js +0 -145
  158. package/dist/commands/_shared/scene-render.test.js.map +0 -1
  159. package/dist/commands/_shared/segments-to-scenes.d.ts +0 -85
  160. package/dist/commands/_shared/segments-to-scenes.d.ts.map +0 -1
  161. package/dist/commands/_shared/segments-to-scenes.js +0 -202
  162. package/dist/commands/_shared/segments-to-scenes.js.map +0 -1
  163. package/dist/commands/_shared/segments-to-scenes.test.d.ts +0 -2
  164. package/dist/commands/_shared/segments-to-scenes.test.d.ts.map +0 -1
  165. package/dist/commands/_shared/segments-to-scenes.test.js +0 -219
  166. package/dist/commands/_shared/segments-to-scenes.test.js.map +0 -1
  167. package/dist/commands/_shared/tts-resolve.d.ts +0 -75
  168. package/dist/commands/_shared/tts-resolve.d.ts.map +0 -1
  169. package/dist/commands/_shared/tts-resolve.js +0 -89
  170. package/dist/commands/_shared/tts-resolve.js.map +0 -1
  171. package/dist/commands/_shared/tts-resolve.test.d.ts +0 -6
  172. package/dist/commands/_shared/tts-resolve.test.d.ts.map +0 -1
  173. package/dist/commands/_shared/tts-resolve.test.js +0 -147
  174. package/dist/commands/_shared/tts-resolve.test.js.map +0 -1
  175. package/dist/commands/agent.d.ts +0 -21
  176. package/dist/commands/agent.d.ts.map +0 -1
  177. package/dist/commands/agent.js +0 -285
  178. package/dist/commands/agent.js.map +0 -1
  179. package/dist/commands/ai-analyze.d.ts +0 -106
  180. package/dist/commands/ai-analyze.d.ts.map +0 -1
  181. package/dist/commands/ai-analyze.js +0 -320
  182. package/dist/commands/ai-analyze.js.map +0 -1
  183. package/dist/commands/ai-animated-caption.d.ts +0 -64
  184. package/dist/commands/ai-animated-caption.d.ts.map +0 -1
  185. package/dist/commands/ai-animated-caption.js +0 -272
  186. package/dist/commands/ai-animated-caption.js.map +0 -1
  187. package/dist/commands/ai-audio.d.ts +0 -98
  188. package/dist/commands/ai-audio.d.ts.map +0 -1
  189. package/dist/commands/ai-audio.js +0 -1059
  190. package/dist/commands/ai-audio.js.map +0 -1
  191. package/dist/commands/ai-broll.d.ts +0 -15
  192. package/dist/commands/ai-broll.d.ts.map +0 -1
  193. package/dist/commands/ai-broll.js +0 -421
  194. package/dist/commands/ai-broll.js.map +0 -1
  195. package/dist/commands/ai-edit-cli.d.ts +0 -14
  196. package/dist/commands/ai-edit-cli.d.ts.map +0 -1
  197. package/dist/commands/ai-edit-cli.js +0 -585
  198. package/dist/commands/ai-edit-cli.js.map +0 -1
  199. package/dist/commands/ai-edit.d.ts +0 -398
  200. package/dist/commands/ai-edit.d.ts.map +0 -1
  201. package/dist/commands/ai-edit.js +0 -1060
  202. package/dist/commands/ai-edit.js.map +0 -1
  203. package/dist/commands/ai-fill-gaps.d.ts +0 -14
  204. package/dist/commands/ai-fill-gaps.d.ts.map +0 -1
  205. package/dist/commands/ai-fill-gaps.js +0 -447
  206. package/dist/commands/ai-fill-gaps.js.map +0 -1
  207. package/dist/commands/ai-helpers.d.ts +0 -20
  208. package/dist/commands/ai-helpers.d.ts.map +0 -1
  209. package/dist/commands/ai-helpers.js +0 -59
  210. package/dist/commands/ai-helpers.js.map +0 -1
  211. package/dist/commands/ai-highlights.d.ts +0 -127
  212. package/dist/commands/ai-highlights.d.ts.map +0 -1
  213. package/dist/commands/ai-highlights.js +0 -1053
  214. package/dist/commands/ai-highlights.js.map +0 -1
  215. package/dist/commands/ai-image.d.ts +0 -76
  216. package/dist/commands/ai-image.d.ts.map +0 -1
  217. package/dist/commands/ai-image.js +0 -858
  218. package/dist/commands/ai-image.js.map +0 -1
  219. package/dist/commands/ai-motion.d.ts +0 -50
  220. package/dist/commands/ai-motion.d.ts.map +0 -1
  221. package/dist/commands/ai-motion.js +0 -297
  222. package/dist/commands/ai-motion.js.map +0 -1
  223. package/dist/commands/ai-narrate.d.ts +0 -66
  224. package/dist/commands/ai-narrate.d.ts.map +0 -1
  225. package/dist/commands/ai-narrate.js +0 -332
  226. package/dist/commands/ai-narrate.js.map +0 -1
  227. package/dist/commands/ai-review.d.ts +0 -57
  228. package/dist/commands/ai-review.d.ts.map +0 -1
  229. package/dist/commands/ai-review.js +0 -270
  230. package/dist/commands/ai-review.js.map +0 -1
  231. package/dist/commands/ai-script-pipeline-cli.d.ts +0 -9
  232. package/dist/commands/ai-script-pipeline-cli.d.ts.map +0 -1
  233. package/dist/commands/ai-script-pipeline-cli.js +0 -502
  234. package/dist/commands/ai-script-pipeline-cli.js.map +0 -1
  235. package/dist/commands/ai-script-pipeline.d.ts +0 -305
  236. package/dist/commands/ai-script-pipeline.d.ts.map +0 -1
  237. package/dist/commands/ai-script-pipeline.js +0 -1546
  238. package/dist/commands/ai-script-pipeline.js.map +0 -1
  239. package/dist/commands/ai-suggest-edit.d.ts +0 -14
  240. package/dist/commands/ai-suggest-edit.d.ts.map +0 -1
  241. package/dist/commands/ai-suggest-edit.js +0 -215
  242. package/dist/commands/ai-suggest-edit.js.map +0 -1
  243. package/dist/commands/ai-video-fx.d.ts +0 -14
  244. package/dist/commands/ai-video-fx.d.ts.map +0 -1
  245. package/dist/commands/ai-video-fx.js +0 -396
  246. package/dist/commands/ai-video-fx.js.map +0 -1
  247. package/dist/commands/ai-video.d.ts +0 -91
  248. package/dist/commands/ai-video.d.ts.map +0 -1
  249. package/dist/commands/ai-video.js +0 -1055
  250. package/dist/commands/ai-video.js.map +0 -1
  251. package/dist/commands/ai-viral.d.ts +0 -15
  252. package/dist/commands/ai-viral.d.ts.map +0 -1
  253. package/dist/commands/ai-viral.js +0 -507
  254. package/dist/commands/ai-viral.js.map +0 -1
  255. package/dist/commands/ai-visual-fx.d.ts +0 -14
  256. package/dist/commands/ai-visual-fx.d.ts.map +0 -1
  257. package/dist/commands/ai-visual-fx.js +0 -521
  258. package/dist/commands/ai-visual-fx.js.map +0 -1
  259. package/dist/commands/ai.d.ts +0 -38
  260. package/dist/commands/ai.d.ts.map +0 -1
  261. package/dist/commands/ai.js +0 -225
  262. package/dist/commands/ai.js.map +0 -1
  263. package/dist/commands/ai.test.d.ts +0 -2
  264. package/dist/commands/ai.test.d.ts.map +0 -1
  265. package/dist/commands/ai.test.js +0 -557
  266. package/dist/commands/ai.test.js.map +0 -1
  267. package/dist/commands/analyze.d.ts +0 -16
  268. package/dist/commands/analyze.d.ts.map +0 -1
  269. package/dist/commands/analyze.js +0 -247
  270. package/dist/commands/analyze.js.map +0 -1
  271. package/dist/commands/audio.d.ts +0 -18
  272. package/dist/commands/audio.d.ts.map +0 -1
  273. package/dist/commands/audio.js +0 -539
  274. package/dist/commands/audio.js.map +0 -1
  275. package/dist/commands/batch.d.ts +0 -3
  276. package/dist/commands/batch.d.ts.map +0 -1
  277. package/dist/commands/batch.js +0 -419
  278. package/dist/commands/batch.js.map +0 -1
  279. package/dist/commands/batch.test.d.ts +0 -2
  280. package/dist/commands/batch.test.d.ts.map +0 -1
  281. package/dist/commands/batch.test.js +0 -203
  282. package/dist/commands/batch.test.js.map +0 -1
  283. package/dist/commands/context.d.ts +0 -7
  284. package/dist/commands/context.d.ts.map +0 -1
  285. package/dist/commands/context.js +0 -66
  286. package/dist/commands/context.js.map +0 -1
  287. package/dist/commands/demo.d.ts +0 -7
  288. package/dist/commands/demo.d.ts.map +0 -1
  289. package/dist/commands/demo.js +0 -192
  290. package/dist/commands/demo.js.map +0 -1
  291. package/dist/commands/detect.d.ts +0 -56
  292. package/dist/commands/detect.d.ts.map +0 -1
  293. package/dist/commands/detect.js +0 -464
  294. package/dist/commands/detect.js.map +0 -1
  295. package/dist/commands/doctor.d.ts +0 -6
  296. package/dist/commands/doctor.d.ts.map +0 -1
  297. package/dist/commands/doctor.js +0 -322
  298. package/dist/commands/doctor.js.map +0 -1
  299. package/dist/commands/edit-cmd.d.ts +0 -112
  300. package/dist/commands/edit-cmd.d.ts.map +0 -1
  301. package/dist/commands/edit-cmd.js +0 -1041
  302. package/dist/commands/edit-cmd.js.map +0 -1
  303. package/dist/commands/export.d.ts +0 -61
  304. package/dist/commands/export.d.ts.map +0 -1
  305. package/dist/commands/export.js +0 -980
  306. package/dist/commands/export.js.map +0 -1
  307. package/dist/commands/export.test.d.ts +0 -2
  308. package/dist/commands/export.test.d.ts.map +0 -1
  309. package/dist/commands/export.test.js +0 -107
  310. package/dist/commands/export.test.js.map +0 -1
  311. package/dist/commands/generate.d.ts +0 -84
  312. package/dist/commands/generate.d.ts.map +0 -1
  313. package/dist/commands/generate.js +0 -2030
  314. package/dist/commands/generate.js.map +0 -1
  315. package/dist/commands/media.d.ts +0 -3
  316. package/dist/commands/media.d.ts.map +0 -1
  317. package/dist/commands/media.js +0 -163
  318. package/dist/commands/media.js.map +0 -1
  319. package/dist/commands/output.d.ts +0 -51
  320. package/dist/commands/output.d.ts.map +0 -1
  321. package/dist/commands/output.js +0 -219
  322. package/dist/commands/output.js.map +0 -1
  323. package/dist/commands/output.test.d.ts +0 -2
  324. package/dist/commands/output.test.d.ts.map +0 -1
  325. package/dist/commands/output.test.js +0 -151
  326. package/dist/commands/output.test.js.map +0 -1
  327. package/dist/commands/pipeline.d.ts +0 -19
  328. package/dist/commands/pipeline.d.ts.map +0 -1
  329. package/dist/commands/pipeline.js +0 -345
  330. package/dist/commands/pipeline.js.map +0 -1
  331. package/dist/commands/project.d.ts +0 -3
  332. package/dist/commands/project.d.ts.map +0 -1
  333. package/dist/commands/project.js +0 -181
  334. package/dist/commands/project.js.map +0 -1
  335. package/dist/commands/project.test.d.ts +0 -2
  336. package/dist/commands/project.test.d.ts.map +0 -1
  337. package/dist/commands/project.test.js +0 -105
  338. package/dist/commands/project.test.js.map +0 -1
  339. package/dist/commands/run.d.ts +0 -15
  340. package/dist/commands/run.d.ts.map +0 -1
  341. package/dist/commands/run.js +0 -204
  342. package/dist/commands/run.js.map +0 -1
  343. package/dist/commands/sanitize.d.ts +0 -21
  344. package/dist/commands/sanitize.d.ts.map +0 -1
  345. package/dist/commands/sanitize.js +0 -56
  346. package/dist/commands/sanitize.js.map +0 -1
  347. package/dist/commands/scene.d.ts +0 -86
  348. package/dist/commands/scene.d.ts.map +0 -1
  349. package/dist/commands/scene.js +0 -728
  350. package/dist/commands/scene.js.map +0 -1
  351. package/dist/commands/scene.test.d.ts +0 -2
  352. package/dist/commands/scene.test.d.ts.map +0 -1
  353. package/dist/commands/scene.test.js +0 -219
  354. package/dist/commands/scene.test.js.map +0 -1
  355. package/dist/commands/schema.d.ts +0 -13
  356. package/dist/commands/schema.d.ts.map +0 -1
  357. package/dist/commands/schema.js +0 -218
  358. package/dist/commands/schema.js.map +0 -1
  359. package/dist/commands/setup.d.ts +0 -6
  360. package/dist/commands/setup.d.ts.map +0 -1
  361. package/dist/commands/setup.js +0 -461
  362. package/dist/commands/setup.js.map +0 -1
  363. package/dist/commands/timeline.d.ts +0 -3
  364. package/dist/commands/timeline.d.ts.map +0 -1
  365. package/dist/commands/timeline.js +0 -609
  366. package/dist/commands/timeline.js.map +0 -1
  367. package/dist/commands/timeline.test.d.ts +0 -2
  368. package/dist/commands/timeline.test.d.ts.map +0 -1
  369. package/dist/commands/timeline.test.js +0 -334
  370. package/dist/commands/timeline.test.js.map +0 -1
  371. package/dist/commands/validate.d.ts +0 -34
  372. package/dist/commands/validate.d.ts.map +0 -1
  373. package/dist/commands/validate.js +0 -70
  374. package/dist/commands/validate.js.map +0 -1
  375. package/dist/config/config.test.d.ts +0 -2
  376. package/dist/config/config.test.d.ts.map +0 -1
  377. package/dist/config/config.test.js +0 -164
  378. package/dist/config/config.test.js.map +0 -1
  379. package/dist/config/index.d.ts +0 -35
  380. package/dist/config/index.d.ts.map +0 -1
  381. package/dist/config/index.js +0 -101
  382. package/dist/config/index.js.map +0 -1
  383. package/dist/config/schema.d.ts +0 -52
  384. package/dist/config/schema.d.ts.map +0 -1
  385. package/dist/config/schema.js +0 -44
  386. package/dist/config/schema.js.map +0 -1
  387. package/dist/engine/index.d.ts +0 -3
  388. package/dist/engine/index.d.ts.map +0 -1
  389. package/dist/engine/index.js +0 -2
  390. package/dist/engine/index.js.map +0 -1
  391. package/dist/engine/project.d.ts +0 -84
  392. package/dist/engine/project.d.ts.map +0 -1
  393. package/dist/engine/project.js +0 -355
  394. package/dist/engine/project.js.map +0 -1
  395. package/dist/engine/project.test.d.ts +0 -2
  396. package/dist/engine/project.test.d.ts.map +0 -1
  397. package/dist/engine/project.test.js +0 -599
  398. package/dist/engine/project.test.js.map +0 -1
  399. package/dist/index.d.ts +0 -7
  400. package/dist/index.d.ts.map +0 -1
  401. package/dist/index.js.map +0 -1
  402. package/dist/pipeline/executor.d.ts +0 -19
  403. package/dist/pipeline/executor.d.ts.map +0 -1
  404. package/dist/pipeline/executor.js +0 -397
  405. package/dist/pipeline/executor.js.map +0 -1
  406. package/dist/pipeline/index.d.ts +0 -4
  407. package/dist/pipeline/index.d.ts.map +0 -1
  408. package/dist/pipeline/index.js +0 -2
  409. package/dist/pipeline/index.js.map +0 -1
  410. package/dist/pipeline/renderers/__tests__/html-template.test.d.ts +0 -2
  411. package/dist/pipeline/renderers/__tests__/html-template.test.d.ts.map +0 -1
  412. package/dist/pipeline/renderers/__tests__/html-template.test.js +0 -170
  413. package/dist/pipeline/renderers/__tests__/html-template.test.js.map +0 -1
  414. package/dist/pipeline/renderers/__tests__/integration.test.d.ts +0 -2
  415. package/dist/pipeline/renderers/__tests__/integration.test.d.ts.map +0 -1
  416. package/dist/pipeline/renderers/__tests__/integration.test.js +0 -175
  417. package/dist/pipeline/renderers/__tests__/integration.test.js.map +0 -1
  418. package/dist/pipeline/renderers/chrome.d.ts +0 -26
  419. package/dist/pipeline/renderers/chrome.d.ts.map +0 -1
  420. package/dist/pipeline/renderers/chrome.js +0 -48
  421. package/dist/pipeline/renderers/chrome.js.map +0 -1
  422. package/dist/pipeline/renderers/html-clips.d.ts +0 -20
  423. package/dist/pipeline/renderers/html-clips.d.ts.map +0 -1
  424. package/dist/pipeline/renderers/html-clips.js +0 -50
  425. package/dist/pipeline/renderers/html-clips.js.map +0 -1
  426. package/dist/pipeline/renderers/html-runtime.d.ts +0 -7
  427. package/dist/pipeline/renderers/html-runtime.d.ts.map +0 -1
  428. package/dist/pipeline/renderers/html-runtime.js +0 -80
  429. package/dist/pipeline/renderers/html-runtime.js.map +0 -1
  430. package/dist/pipeline/renderers/html-template.d.ts +0 -3
  431. package/dist/pipeline/renderers/html-template.d.ts.map +0 -1
  432. package/dist/pipeline/renderers/html-template.js +0 -36
  433. package/dist/pipeline/renderers/html-template.js.map +0 -1
  434. package/dist/pipeline/renderers/hyperframes.d.ts +0 -8
  435. package/dist/pipeline/renderers/hyperframes.d.ts.map +0 -1
  436. package/dist/pipeline/renderers/hyperframes.js +0 -63
  437. package/dist/pipeline/renderers/hyperframes.js.map +0 -1
  438. package/dist/pipeline/renderers/project-builder.d.ts +0 -8
  439. package/dist/pipeline/renderers/project-builder.d.ts.map +0 -1
  440. package/dist/pipeline/renderers/project-builder.js +0 -65
  441. package/dist/pipeline/renderers/project-builder.js.map +0 -1
  442. package/dist/pipeline/renderers/types.d.ts +0 -41
  443. package/dist/pipeline/renderers/types.d.ts.map +0 -1
  444. package/dist/pipeline/renderers/types.js +0 -11
  445. package/dist/pipeline/renderers/types.js.map +0 -1
  446. package/dist/pipeline/resolver.d.ts +0 -20
  447. package/dist/pipeline/resolver.d.ts.map +0 -1
  448. package/dist/pipeline/resolver.js +0 -74
  449. package/dist/pipeline/resolver.js.map +0 -1
  450. package/dist/pipeline/types.d.ts +0 -82
  451. package/dist/pipeline/types.d.ts.map +0 -1
  452. package/dist/pipeline/types.js +0 -8
  453. package/dist/pipeline/types.js.map +0 -1
  454. package/dist/utils/api-key.d.ts +0 -33
  455. package/dist/utils/api-key.d.ts.map +0 -1
  456. package/dist/utils/api-key.js +0 -228
  457. package/dist/utils/api-key.js.map +0 -1
  458. package/dist/utils/api-key.test.d.ts +0 -2
  459. package/dist/utils/api-key.test.d.ts.map +0 -1
  460. package/dist/utils/api-key.test.js +0 -35
  461. package/dist/utils/api-key.test.js.map +0 -1
  462. package/dist/utils/audio.d.ts +0 -23
  463. package/dist/utils/audio.d.ts.map +0 -1
  464. package/dist/utils/audio.js +0 -79
  465. package/dist/utils/audio.js.map +0 -1
  466. package/dist/utils/exec-safe.d.ts +0 -22
  467. package/dist/utils/exec-safe.d.ts.map +0 -1
  468. package/dist/utils/exec-safe.js +0 -62
  469. package/dist/utils/exec-safe.js.map +0 -1
  470. package/dist/utils/first-run.d.ts +0 -17
  471. package/dist/utils/first-run.d.ts.map +0 -1
  472. package/dist/utils/first-run.js +0 -73
  473. package/dist/utils/first-run.js.map +0 -1
  474. package/dist/utils/input-validation.d.ts +0 -27
  475. package/dist/utils/input-validation.d.ts.map +0 -1
  476. package/dist/utils/input-validation.js +0 -67
  477. package/dist/utils/input-validation.js.map +0 -1
  478. package/dist/utils/provider-resolver.d.ts +0 -19
  479. package/dist/utils/provider-resolver.d.ts.map +0 -1
  480. package/dist/utils/provider-resolver.js +0 -75
  481. package/dist/utils/provider-resolver.js.map +0 -1
  482. package/dist/utils/remotion.d.ts +0 -231
  483. package/dist/utils/remotion.d.ts.map +0 -1
  484. package/dist/utils/remotion.js +0 -879
  485. package/dist/utils/remotion.js.map +0 -1
  486. package/dist/utils/subtitle.d.ts +0 -65
  487. package/dist/utils/subtitle.d.ts.map +0 -1
  488. package/dist/utils/subtitle.js +0 -135
  489. package/dist/utils/subtitle.js.map +0 -1
  490. package/dist/utils/subtitle.test.d.ts +0 -2
  491. package/dist/utils/subtitle.test.d.ts.map +0 -1
  492. package/dist/utils/subtitle.test.js +0 -175
  493. package/dist/utils/subtitle.test.js.map +0 -1
  494. package/dist/utils/tty.d.ts +0 -45
  495. package/dist/utils/tty.d.ts.map +0 -1
  496. package/dist/utils/tty.js +0 -231
  497. 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