@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,763 +0,0 @@
1
- /**
2
- * @module ai-editing
3
- * @description Agent tools for post-production editing (text overlay, review,
4
- * silence cut, jump cut, captions, noise reduction, fade, thumbnail,
5
- * SRT translation). FFmpeg-based and AI-assisted editing tools for agent use.
6
- * Most tools work without API keys (FFmpeg-only), some use Gemini or OpenAI.
7
- *
8
- * ## Tools: edit_text_overlay, analyze_review, edit_silence_cut, edit_jump_cut, edit_caption,
9
- * edit_noise_reduce, edit_fade, generate_thumbnail, edit_translate_srt
10
- * ## Dependencies: FFmpeg, Gemini (optional), OpenAI/Whisper (optional)
11
- * @see MODELS.md for the Single Source of Truth (SSOT) on supported providers/models
12
- */
13
- import { resolve } from "node:path";
14
- import { executeTextOverlay, executeSilenceCut, executeJumpCut, executeCaption, executeNoiseReduce, executeFade, executeTranslateSrt, } from "../../commands/ai-edit.js";
15
- import { executeReview } from "../../commands/ai-review.js";
16
- import { executeThumbnailBestFrame } from "../../commands/ai-image.js";
17
- import { sanitizeAIResult } from "../../commands/sanitize.js";
18
- // ============================================================================
19
- // Tool Definitions
20
- // ============================================================================
21
- const textOverlayDef = {
22
- name: "edit_text_overlay",
23
- description: "Apply text overlays to a video using FFmpeg drawtext. Supports 4 style presets: lower-third, center-bold, subtitle, minimal. Auto-detects font and scales based on video resolution.",
24
- parameters: {
25
- type: "object",
26
- properties: {
27
- videoPath: {
28
- type: "string",
29
- description: "Path to input video file",
30
- },
31
- texts: {
32
- type: "array",
33
- items: { type: "string", description: "Text line to overlay" },
34
- description: "Text lines to overlay (multiple lines stack vertically)",
35
- },
36
- outputPath: {
37
- type: "string",
38
- description: "Output video file path",
39
- },
40
- style: {
41
- type: "string",
42
- description: "Overlay style preset",
43
- enum: ["lower-third", "center-bold", "subtitle", "minimal"],
44
- },
45
- fontSize: {
46
- type: "number",
47
- description: "Font size in pixels (auto-calculated if omitted)",
48
- },
49
- fontColor: {
50
- type: "string",
51
- description: "Font color (default: white)",
52
- },
53
- fadeDuration: {
54
- type: "number",
55
- description: "Fade in/out duration in seconds (default: 0.3)",
56
- },
57
- startTime: {
58
- type: "number",
59
- description: "Start time for overlay in seconds (default: 0)",
60
- },
61
- endTime: {
62
- type: "number",
63
- description: "End time for overlay in seconds (default: video duration)",
64
- },
65
- },
66
- required: ["videoPath", "texts", "outputPath"],
67
- },
68
- };
69
- const reviewDef = {
70
- name: "analyze_review",
71
- description: "Review video quality using Gemini AI. Analyzes pacing, color, text readability, audio-visual sync, and composition. Can auto-apply fixable corrections (color grading). Returns structured feedback with scores and recommendations.",
72
- parameters: {
73
- type: "object",
74
- properties: {
75
- videoPath: {
76
- type: "string",
77
- description: "Path to video file to review",
78
- },
79
- storyboardPath: {
80
- type: "string",
81
- description: "Optional path to storyboard JSON for context",
82
- },
83
- autoApply: {
84
- type: "boolean",
85
- description: "Automatically apply fixable corrections (default: false)",
86
- },
87
- verify: {
88
- type: "boolean",
89
- description: "Run verification pass after applying fixes (default: false)",
90
- },
91
- model: {
92
- type: "string",
93
- description: "Gemini model: flash (default), flash-2.5, pro",
94
- enum: ["flash", "flash-2.5", "pro"],
95
- },
96
- outputPath: {
97
- type: "string",
98
- description: "Output path for corrected video (when autoApply is true)",
99
- },
100
- },
101
- required: ["videoPath"],
102
- },
103
- };
104
- const silenceCutDef = {
105
- name: "edit_silence_cut",
106
- description: "Remove silent segments from a video. Default uses FFmpeg silencedetect (free, no API key). Use useGemini=true for smart context-aware detection via Gemini Video Understanding — distinguishes dead air from intentional pauses using visual+audio analysis.",
107
- parameters: {
108
- type: "object",
109
- properties: {
110
- videoPath: {
111
- type: "string",
112
- description: "Path to input video file",
113
- },
114
- outputPath: {
115
- type: "string",
116
- description: "Output file path (default: <name>-cut.<ext>)",
117
- },
118
- noiseThreshold: {
119
- type: "number",
120
- description: "Silence threshold in dB (default: -30). Lower = more sensitive. FFmpeg mode only.",
121
- },
122
- minDuration: {
123
- type: "number",
124
- description: "Minimum silence duration in seconds to cut (default: 0.5)",
125
- },
126
- padding: {
127
- type: "number",
128
- description: "Padding around non-silent segments in seconds (default: 0.1)",
129
- },
130
- analyzeOnly: {
131
- type: "boolean",
132
- description: "Only detect silence without cutting (default: false)",
133
- },
134
- useGemini: {
135
- type: "boolean",
136
- description: "Use Gemini Video Understanding for context-aware silence detection (default: false). Requires GOOGLE_API_KEY.",
137
- },
138
- model: {
139
- type: "string",
140
- description: "Gemini model to use (default: flash). Options: flash, flash-2.5, pro",
141
- },
142
- lowRes: {
143
- type: "boolean",
144
- description: "Low resolution mode for longer videos (Gemini only)",
145
- },
146
- },
147
- required: ["videoPath"],
148
- },
149
- };
150
- const jumpCutDef = {
151
- name: "edit_jump_cut",
152
- description: "Remove filler words (um, uh, like, etc.) from video using Whisper word-level timestamps + FFmpeg concat. Requires OpenAI API key. Detects filler words, cuts them out, and stitches remaining segments with stream copy (fast, no re-encode).",
153
- parameters: {
154
- type: "object",
155
- properties: {
156
- videoPath: {
157
- type: "string",
158
- description: "Path to input video file",
159
- },
160
- outputPath: {
161
- type: "string",
162
- description: "Output file path (default: <name>-jumpcut.<ext>)",
163
- },
164
- fillers: {
165
- type: "array",
166
- items: { type: "string", description: "A filler word to detect" },
167
- description: "Custom filler words to detect (default: um, uh, like, you know, etc.)",
168
- },
169
- padding: {
170
- type: "number",
171
- description: "Padding around cuts in seconds (default: 0.05)",
172
- },
173
- language: {
174
- type: "string",
175
- description: "Language code for transcription (e.g., en, ko)",
176
- },
177
- analyzeOnly: {
178
- type: "boolean",
179
- description: "Only detect fillers without cutting (default: false)",
180
- },
181
- },
182
- required: ["videoPath"],
183
- },
184
- };
185
- const captionDef = {
186
- name: "edit_caption",
187
- description: "Transcribe video with Whisper and burn styled captions using FFmpeg. Requires OpenAI API key. 4 style presets: minimal, bold (default), outline, karaoke. Auto-sizes font based on video resolution.",
188
- parameters: {
189
- type: "object",
190
- properties: {
191
- videoPath: {
192
- type: "string",
193
- description: "Path to input video file",
194
- },
195
- outputPath: {
196
- type: "string",
197
- description: "Output file path (default: <name>-captioned.<ext>)",
198
- },
199
- style: {
200
- type: "string",
201
- description: "Caption style preset",
202
- enum: ["minimal", "bold", "outline", "karaoke"],
203
- },
204
- fontSize: {
205
- type: "number",
206
- description: "Font size in pixels (auto-calculated based on resolution if omitted)",
207
- },
208
- fontColor: {
209
- type: "string",
210
- description: "Font color (default: white)",
211
- },
212
- language: {
213
- type: "string",
214
- description: "Language code for transcription (e.g., en, ko)",
215
- },
216
- position: {
217
- type: "string",
218
- description: "Caption position",
219
- enum: ["top", "center", "bottom"],
220
- },
221
- },
222
- required: ["videoPath"],
223
- },
224
- };
225
- const noiseReduceDef = {
226
- name: "edit_noise_reduce",
227
- description: "Remove background noise from audio/video using FFmpeg afftdn filter. No API key needed. Three strength presets: low, medium (default), high. High adds bandpass filtering.",
228
- parameters: {
229
- type: "object",
230
- properties: {
231
- inputPath: {
232
- type: "string",
233
- description: "Path to input audio or video file",
234
- },
235
- outputPath: {
236
- type: "string",
237
- description: "Output file path (default: <name>-denoised.<ext>)",
238
- },
239
- strength: {
240
- type: "string",
241
- description: "Noise reduction strength",
242
- enum: ["low", "medium", "high"],
243
- },
244
- noiseFloor: {
245
- type: "number",
246
- description: "Custom noise floor in dB (overrides strength preset)",
247
- },
248
- },
249
- required: ["inputPath"],
250
- },
251
- };
252
- const fadeDef = {
253
- name: "edit_fade",
254
- description: "Apply fade in/out effects to video using FFmpeg. No API key needed. Supports video-only, audio-only, or both. Configurable fade durations.",
255
- parameters: {
256
- type: "object",
257
- properties: {
258
- videoPath: {
259
- type: "string",
260
- description: "Path to input video file",
261
- },
262
- outputPath: {
263
- type: "string",
264
- description: "Output file path (default: <name>-faded.<ext>)",
265
- },
266
- fadeIn: {
267
- type: "number",
268
- description: "Fade-in duration in seconds (default: 1)",
269
- },
270
- fadeOut: {
271
- type: "number",
272
- description: "Fade-out duration in seconds (default: 1)",
273
- },
274
- audioOnly: {
275
- type: "boolean",
276
- description: "Apply fade to audio only (default: false)",
277
- },
278
- videoOnly: {
279
- type: "boolean",
280
- description: "Apply fade to video only (default: false)",
281
- },
282
- },
283
- required: ["videoPath"],
284
- },
285
- };
286
- const thumbnailBestFrameDef = {
287
- name: "generate_thumbnail",
288
- description: "Extract the best thumbnail frame from a video using Gemini AI analysis + FFmpeg frame extraction. Requires GOOGLE_API_KEY. Finds visually striking, well-composed frames.",
289
- parameters: {
290
- type: "object",
291
- properties: {
292
- videoPath: {
293
- type: "string",
294
- description: "Path to input video file",
295
- },
296
- outputPath: {
297
- type: "string",
298
- description: "Output image path (default: <name>-thumbnail.png)",
299
- },
300
- prompt: {
301
- type: "string",
302
- description: "Custom prompt for frame selection analysis",
303
- },
304
- model: {
305
- type: "string",
306
- description: "Gemini model to use",
307
- enum: ["flash", "flash-2.5", "pro"],
308
- },
309
- },
310
- required: ["videoPath"],
311
- },
312
- };
313
- const translateSrtDef = {
314
- name: "edit_translate_srt",
315
- description: "Translate SRT subtitle file to another language using Claude or OpenAI. Preserves timestamps. Batches segments for efficiency.",
316
- parameters: {
317
- type: "object",
318
- properties: {
319
- srtPath: {
320
- type: "string",
321
- description: "Path to input SRT file",
322
- },
323
- outputPath: {
324
- type: "string",
325
- description: "Output file path (default: <name>-<target>.srt)",
326
- },
327
- targetLanguage: {
328
- type: "string",
329
- description: "Target language (e.g., ko, es, fr, ja, zh)",
330
- },
331
- provider: {
332
- type: "string",
333
- description: "Translation provider",
334
- enum: ["claude", "openai"],
335
- },
336
- sourceLanguage: {
337
- type: "string",
338
- description: "Source language (auto-detected if omitted)",
339
- },
340
- },
341
- required: ["srtPath", "targetLanguage"],
342
- },
343
- };
344
- // ============================================================================
345
- // Tool Handlers
346
- // ============================================================================
347
- const textOverlayHandler = async (args) => {
348
- const { videoPath, texts, outputPath, style, fontSize, fontColor, fadeDuration, startTime, endTime } = args;
349
- if (!videoPath || !texts || texts.length === 0 || !outputPath) {
350
- return {
351
- toolCallId: "",
352
- success: false,
353
- output: "",
354
- error: "videoPath, texts (non-empty array), and outputPath are required",
355
- };
356
- }
357
- const result = await executeTextOverlay({
358
- videoPath,
359
- texts,
360
- outputPath,
361
- style,
362
- fontSize,
363
- fontColor,
364
- fadeDuration,
365
- startTime,
366
- endTime,
367
- });
368
- if (!result.success) {
369
- return {
370
- toolCallId: "",
371
- success: false,
372
- output: "",
373
- error: result.error || "Text overlay failed",
374
- };
375
- }
376
- return {
377
- toolCallId: "",
378
- success: true,
379
- output: `Text overlay applied: ${result.outputPath}`,
380
- };
381
- };
382
- const reviewHandler = async (args) => {
383
- const { videoPath, storyboardPath, autoApply, verify, model, outputPath } = args;
384
- if (!videoPath) {
385
- return {
386
- toolCallId: "",
387
- success: false,
388
- output: "",
389
- error: "videoPath is required",
390
- };
391
- }
392
- const result = await executeReview({
393
- videoPath,
394
- storyboardPath,
395
- autoApply,
396
- verify,
397
- model,
398
- outputPath,
399
- });
400
- if (!result.success) {
401
- return {
402
- toolCallId: "",
403
- success: false,
404
- output: "",
405
- error: result.error || "Video review failed",
406
- };
407
- }
408
- const fb = sanitizeAIResult(result.feedback);
409
- let output = `Video Review: ${fb.overallScore}/10\n`;
410
- output += `Pacing: ${fb.categories.pacing.score}/10, Color: ${fb.categories.color.score}/10, `;
411
- output += `Text: ${fb.categories.textReadability.score}/10, AV Sync: ${fb.categories.audioVisualSync.score}/10, `;
412
- output += `Composition: ${fb.categories.composition.score}/10\n`;
413
- if (result.appliedFixes && result.appliedFixes.length > 0) {
414
- output += `Applied fixes: ${sanitizeAIResult(result.appliedFixes).join("; ")}\n`;
415
- }
416
- if (result.verificationScore !== undefined) {
417
- output += `Verification score: ${result.verificationScore}/10\n`;
418
- }
419
- if (fb.recommendations.length > 0) {
420
- output += `Recommendations: ${fb.recommendations.join("; ")}`;
421
- }
422
- return {
423
- toolCallId: "",
424
- success: true,
425
- output,
426
- };
427
- };
428
- const silenceCutHandler = async (args, context) => {
429
- const videoPath = resolve(context.workingDirectory, args.videoPath);
430
- const ext = videoPath.split(".").pop() || "mp4";
431
- const name = videoPath.replace(/\.[^.]+$/, "");
432
- const outputPath = args.outputPath
433
- ? resolve(context.workingDirectory, args.outputPath)
434
- : `${name}-cut.${ext}`;
435
- try {
436
- const result = await executeSilenceCut({
437
- videoPath,
438
- outputPath,
439
- noiseThreshold: args.noiseThreshold,
440
- minDuration: args.minDuration,
441
- padding: args.padding,
442
- analyzeOnly: args.analyzeOnly,
443
- useGemini: args.useGemini,
444
- model: args.model,
445
- lowRes: args.lowRes,
446
- });
447
- if (!result.success) {
448
- return {
449
- toolCallId: "",
450
- success: false,
451
- output: "",
452
- error: result.error || "Silence cut failed",
453
- };
454
- }
455
- const lines = [];
456
- lines.push(`Detection method: ${result.method === "gemini" ? "Gemini Video Understanding" : "FFmpeg silencedetect"}`);
457
- lines.push(`Total duration: ${result.totalDuration.toFixed(1)}s`);
458
- lines.push(`Silent periods: ${result.silentPeriods.length}`);
459
- lines.push(`Silent duration: ${result.silentDuration.toFixed(1)}s`);
460
- lines.push(`Non-silent duration: ${(result.totalDuration - result.silentDuration).toFixed(1)}s`);
461
- if (result.outputPath) {
462
- lines.push(`Output: ${result.outputPath}`);
463
- }
464
- return {
465
- toolCallId: "",
466
- success: true,
467
- output: lines.join("\n"),
468
- };
469
- }
470
- catch (error) {
471
- return {
472
- toolCallId: "",
473
- success: false,
474
- output: "",
475
- error: `Silence cut failed: ${error instanceof Error ? error.message : String(error)}`,
476
- };
477
- }
478
- };
479
- const jumpCutHandler = async (args, context) => {
480
- const videoPath = resolve(context.workingDirectory, args.videoPath);
481
- const ext = videoPath.split(".").pop() || "mp4";
482
- const name = videoPath.replace(/\.[^.]+$/, "");
483
- const outputPath = args.outputPath
484
- ? resolve(context.workingDirectory, args.outputPath)
485
- : `${name}-jumpcut.${ext}`;
486
- try {
487
- const result = await executeJumpCut({
488
- videoPath,
489
- outputPath,
490
- fillers: args.fillers,
491
- padding: args.padding,
492
- language: args.language,
493
- analyzeOnly: args.analyzeOnly,
494
- });
495
- if (!result.success) {
496
- return {
497
- toolCallId: "",
498
- success: false,
499
- output: "",
500
- error: result.error || "Jump cut failed",
501
- };
502
- }
503
- const lines = [];
504
- lines.push(`Total duration: ${result.totalDuration.toFixed(1)}s`);
505
- lines.push(`Filler words found: ${result.fillerCount}`);
506
- lines.push(`Filler duration: ${result.fillerDuration.toFixed(1)}s`);
507
- lines.push(`Clean duration: ${(result.totalDuration - result.fillerDuration).toFixed(1)}s`);
508
- if (result.fillers && result.fillers.length > 0) {
509
- lines.push("");
510
- lines.push("Detected fillers:");
511
- for (const filler of result.fillers) {
512
- lines.push(` "${filler.word}" at ${filler.start.toFixed(2)}s - ${filler.end.toFixed(2)}s`);
513
- }
514
- }
515
- if (result.outputPath) {
516
- lines.push(`Output: ${result.outputPath}`);
517
- }
518
- return {
519
- toolCallId: "",
520
- success: true,
521
- output: lines.join("\n"),
522
- };
523
- }
524
- catch (error) {
525
- return {
526
- toolCallId: "",
527
- success: false,
528
- output: "",
529
- error: `Jump cut failed: ${error instanceof Error ? error.message : String(error)}`,
530
- };
531
- }
532
- };
533
- const captionHandler = async (args, context) => {
534
- const videoPath = resolve(context.workingDirectory, args.videoPath);
535
- const ext = videoPath.split(".").pop() || "mp4";
536
- const name = videoPath.replace(/\.[^.]+$/, "");
537
- const outputPath = args.outputPath
538
- ? resolve(context.workingDirectory, args.outputPath)
539
- : `${name}-captioned.${ext}`;
540
- try {
541
- const result = await executeCaption({
542
- videoPath,
543
- outputPath,
544
- style: args.style,
545
- fontSize: args.fontSize,
546
- fontColor: args.fontColor,
547
- language: args.language,
548
- position: args.position,
549
- });
550
- if (!result.success) {
551
- return {
552
- toolCallId: "",
553
- success: false,
554
- output: "",
555
- error: result.error || "Caption failed",
556
- };
557
- }
558
- const lines = [];
559
- lines.push(`Captions applied: ${result.outputPath}`);
560
- lines.push(`Segments transcribed: ${result.segmentCount}`);
561
- if (result.srtPath) {
562
- lines.push(`SRT file: ${result.srtPath}`);
563
- }
564
- return {
565
- toolCallId: "",
566
- success: true,
567
- output: lines.join("\n"),
568
- };
569
- }
570
- catch (error) {
571
- return {
572
- toolCallId: "",
573
- success: false,
574
- output: "",
575
- error: `Caption failed: ${error instanceof Error ? error.message : String(error)}`,
576
- };
577
- }
578
- };
579
- const noiseReduceHandler = async (args, context) => {
580
- const inputPath = resolve(context.workingDirectory, args.inputPath);
581
- const ext = inputPath.split(".").pop() || "mp4";
582
- const name = inputPath.replace(/\.[^.]+$/, "");
583
- const outputPath = args.outputPath
584
- ? resolve(context.workingDirectory, args.outputPath)
585
- : `${name}-denoised.${ext}`;
586
- try {
587
- const result = await executeNoiseReduce({
588
- inputPath,
589
- outputPath,
590
- strength: args.strength,
591
- noiseFloor: args.noiseFloor,
592
- });
593
- if (!result.success) {
594
- return {
595
- toolCallId: "",
596
- success: false,
597
- output: "",
598
- error: result.error || "Noise reduction failed",
599
- };
600
- }
601
- const lines = [];
602
- lines.push(`Noise reduction applied: ${result.outputPath}`);
603
- lines.push(`Input duration: ${result.inputDuration.toFixed(1)}s`);
604
- return {
605
- toolCallId: "",
606
- success: true,
607
- output: lines.join("\n"),
608
- };
609
- }
610
- catch (error) {
611
- return {
612
- toolCallId: "",
613
- success: false,
614
- output: "",
615
- error: `Noise reduction failed: ${error instanceof Error ? error.message : String(error)}`,
616
- };
617
- }
618
- };
619
- const fadeHandler = async (args, context) => {
620
- const videoPath = resolve(context.workingDirectory, args.videoPath);
621
- const ext = videoPath.split(".").pop() || "mp4";
622
- const name = videoPath.replace(/\.[^.]+$/, "");
623
- const outputPath = args.outputPath
624
- ? resolve(context.workingDirectory, args.outputPath)
625
- : `${name}-faded.${ext}`;
626
- try {
627
- const result = await executeFade({
628
- videoPath,
629
- outputPath,
630
- fadeIn: args.fadeIn,
631
- fadeOut: args.fadeOut,
632
- audioOnly: args.audioOnly,
633
- videoOnly: args.videoOnly,
634
- });
635
- if (!result.success) {
636
- return {
637
- toolCallId: "",
638
- success: false,
639
- output: "",
640
- error: result.error || "Fade failed",
641
- };
642
- }
643
- const lines = [];
644
- lines.push(`Fade effects applied: ${result.outputPath}`);
645
- lines.push(`Total duration: ${result.totalDuration.toFixed(1)}s`);
646
- if (result.fadeInApplied)
647
- lines.push(`Fade-in applied`);
648
- if (result.fadeOutApplied)
649
- lines.push(`Fade-out applied`);
650
- return {
651
- toolCallId: "",
652
- success: true,
653
- output: lines.join("\n"),
654
- };
655
- }
656
- catch (error) {
657
- return {
658
- toolCallId: "",
659
- success: false,
660
- output: "",
661
- error: `Fade failed: ${error instanceof Error ? error.message : String(error)}`,
662
- };
663
- }
664
- };
665
- const thumbnailBestFrameHandler = async (args, context) => {
666
- const videoPath = resolve(context.workingDirectory, args.videoPath);
667
- const name = videoPath.replace(/\.[^.]+$/, "");
668
- const outputPath = args.outputPath
669
- ? resolve(context.workingDirectory, args.outputPath)
670
- : `${name}-thumbnail.png`;
671
- try {
672
- const result = await executeThumbnailBestFrame({
673
- videoPath,
674
- outputPath,
675
- prompt: args.prompt,
676
- model: args.model,
677
- });
678
- if (!result.success) {
679
- return {
680
- toolCallId: "",
681
- success: false,
682
- output: "",
683
- error: result.error || "Best frame extraction failed",
684
- };
685
- }
686
- const lines = [];
687
- lines.push(`Best frame extracted: ${result.outputPath}`);
688
- lines.push(`Timestamp: ${result.timestamp.toFixed(2)}s`);
689
- if (result.reason)
690
- lines.push(`Reason: ${sanitizeAIResult(result.reason)}`);
691
- return {
692
- toolCallId: "",
693
- success: true,
694
- output: lines.join("\n"),
695
- };
696
- }
697
- catch (error) {
698
- return {
699
- toolCallId: "",
700
- success: false,
701
- output: "",
702
- error: `Best frame extraction failed: ${error instanceof Error ? error.message : String(error)}`,
703
- };
704
- }
705
- };
706
- const translateSrtHandler = async (args, context) => {
707
- const srtPath = resolve(context.workingDirectory, args.srtPath);
708
- const target = args.targetLanguage;
709
- const ext = srtPath.split(".").pop() || "srt";
710
- const name = srtPath.replace(/\.[^.]+$/, "");
711
- const outputPath = args.outputPath
712
- ? resolve(context.workingDirectory, args.outputPath)
713
- : `${name}-${target}.${ext}`;
714
- try {
715
- const result = await executeTranslateSrt({
716
- srtPath,
717
- outputPath,
718
- targetLanguage: target,
719
- provider: args.provider,
720
- sourceLanguage: args.sourceLanguage,
721
- });
722
- if (!result.success) {
723
- return {
724
- toolCallId: "",
725
- success: false,
726
- output: "",
727
- error: result.error || "Translation failed",
728
- };
729
- }
730
- const lines = [];
731
- lines.push(`Translation complete: ${result.outputPath}`);
732
- lines.push(`Segments translated: ${result.segmentCount}`);
733
- lines.push(`Target language: ${result.targetLanguage}`);
734
- return {
735
- toolCallId: "",
736
- success: true,
737
- output: lines.join("\n"),
738
- };
739
- }
740
- catch (error) {
741
- return {
742
- toolCallId: "",
743
- success: false,
744
- output: "",
745
- error: `Translation failed: ${error instanceof Error ? error.message : String(error)}`,
746
- };
747
- }
748
- };
749
- // ============================================================================
750
- // Registration
751
- // ============================================================================
752
- export function registerEditingTools(registry) {
753
- registry.register(textOverlayDef, textOverlayHandler);
754
- registry.register(reviewDef, reviewHandler);
755
- registry.register(silenceCutDef, silenceCutHandler);
756
- registry.register(jumpCutDef, jumpCutHandler);
757
- registry.register(captionDef, captionHandler);
758
- registry.register(noiseReduceDef, noiseReduceHandler);
759
- registry.register(fadeDef, fadeHandler);
760
- registry.register(thumbnailBestFrameDef, thumbnailBestFrameHandler);
761
- registry.register(translateSrtDef, translateSrtHandler);
762
- }
763
- //# sourceMappingURL=ai-editing.js.map