@vibeframe/cli 0.27.0

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 (420) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/.turbo/turbo-lint.log +21 -0
  3. package/.turbo/turbo-test.log +689 -0
  4. package/dist/agent/adapters/claude.d.ts +15 -0
  5. package/dist/agent/adapters/claude.d.ts.map +1 -0
  6. package/dist/agent/adapters/claude.js +119 -0
  7. package/dist/agent/adapters/claude.js.map +1 -0
  8. package/dist/agent/adapters/gemini.d.ts +15 -0
  9. package/dist/agent/adapters/gemini.d.ts.map +1 -0
  10. package/dist/agent/adapters/gemini.js +132 -0
  11. package/dist/agent/adapters/gemini.js.map +1 -0
  12. package/dist/agent/adapters/index.d.ts +27 -0
  13. package/dist/agent/adapters/index.d.ts.map +1 -0
  14. package/dist/agent/adapters/index.js +38 -0
  15. package/dist/agent/adapters/index.js.map +1 -0
  16. package/dist/agent/adapters/ollama.d.ts +20 -0
  17. package/dist/agent/adapters/ollama.d.ts.map +1 -0
  18. package/dist/agent/adapters/ollama.js +186 -0
  19. package/dist/agent/adapters/ollama.js.map +1 -0
  20. package/dist/agent/adapters/openai.d.ts +15 -0
  21. package/dist/agent/adapters/openai.d.ts.map +1 -0
  22. package/dist/agent/adapters/openai.js +92 -0
  23. package/dist/agent/adapters/openai.js.map +1 -0
  24. package/dist/agent/adapters/xai.d.ts +15 -0
  25. package/dist/agent/adapters/xai.d.ts.map +1 -0
  26. package/dist/agent/adapters/xai.js +95 -0
  27. package/dist/agent/adapters/xai.js.map +1 -0
  28. package/dist/agent/index.d.ts +69 -0
  29. package/dist/agent/index.d.ts.map +1 -0
  30. package/dist/agent/index.js +180 -0
  31. package/dist/agent/index.js.map +1 -0
  32. package/dist/agent/memory/index.d.ts +70 -0
  33. package/dist/agent/memory/index.d.ts.map +1 -0
  34. package/dist/agent/memory/index.js +132 -0
  35. package/dist/agent/memory/index.js.map +1 -0
  36. package/dist/agent/prompts/system.d.ts +6 -0
  37. package/dist/agent/prompts/system.d.ts.map +1 -0
  38. package/dist/agent/prompts/system.js +103 -0
  39. package/dist/agent/prompts/system.js.map +1 -0
  40. package/dist/agent/tools/ai-editing.d.ts +15 -0
  41. package/dist/agent/tools/ai-editing.d.ts.map +1 -0
  42. package/dist/agent/tools/ai-editing.js +763 -0
  43. package/dist/agent/tools/ai-editing.js.map +1 -0
  44. package/dist/agent/tools/ai-generation.d.ts +13 -0
  45. package/dist/agent/tools/ai-generation.d.ts.map +1 -0
  46. package/dist/agent/tools/ai-generation.js +973 -0
  47. package/dist/agent/tools/ai-generation.js.map +1 -0
  48. package/dist/agent/tools/ai-pipeline.d.ts +14 -0
  49. package/dist/agent/tools/ai-pipeline.d.ts.map +1 -0
  50. package/dist/agent/tools/ai-pipeline.js +961 -0
  51. package/dist/agent/tools/ai-pipeline.js.map +1 -0
  52. package/dist/agent/tools/ai.d.ts +13 -0
  53. package/dist/agent/tools/ai.d.ts.map +1 -0
  54. package/dist/agent/tools/ai.js +19 -0
  55. package/dist/agent/tools/ai.js.map +1 -0
  56. package/dist/agent/tools/batch.d.ts +6 -0
  57. package/dist/agent/tools/batch.d.ts.map +1 -0
  58. package/dist/agent/tools/batch.js +383 -0
  59. package/dist/agent/tools/batch.js.map +1 -0
  60. package/dist/agent/tools/e2e.test.d.ts +26 -0
  61. package/dist/agent/tools/e2e.test.d.ts.map +1 -0
  62. package/dist/agent/tools/e2e.test.js +397 -0
  63. package/dist/agent/tools/e2e.test.js.map +1 -0
  64. package/dist/agent/tools/export.d.ts +6 -0
  65. package/dist/agent/tools/export.d.ts.map +1 -0
  66. package/dist/agent/tools/export.js +171 -0
  67. package/dist/agent/tools/export.js.map +1 -0
  68. package/dist/agent/tools/filesystem.d.ts +6 -0
  69. package/dist/agent/tools/filesystem.d.ts.map +1 -0
  70. package/dist/agent/tools/filesystem.js +212 -0
  71. package/dist/agent/tools/filesystem.js.map +1 -0
  72. package/dist/agent/tools/index.d.ts +65 -0
  73. package/dist/agent/tools/index.d.ts.map +1 -0
  74. package/dist/agent/tools/index.js +120 -0
  75. package/dist/agent/tools/index.js.map +1 -0
  76. package/dist/agent/tools/integration.test.d.ts +11 -0
  77. package/dist/agent/tools/integration.test.d.ts.map +1 -0
  78. package/dist/agent/tools/integration.test.js +659 -0
  79. package/dist/agent/tools/integration.test.js.map +1 -0
  80. package/dist/agent/tools/media.d.ts +6 -0
  81. package/dist/agent/tools/media.d.ts.map +1 -0
  82. package/dist/agent/tools/media.js +616 -0
  83. package/dist/agent/tools/media.js.map +1 -0
  84. package/dist/agent/tools/project.d.ts +6 -0
  85. package/dist/agent/tools/project.d.ts.map +1 -0
  86. package/dist/agent/tools/project.js +284 -0
  87. package/dist/agent/tools/project.js.map +1 -0
  88. package/dist/agent/tools/timeline.d.ts +6 -0
  89. package/dist/agent/tools/timeline.d.ts.map +1 -0
  90. package/dist/agent/tools/timeline.js +873 -0
  91. package/dist/agent/tools/timeline.js.map +1 -0
  92. package/dist/agent/types.d.ts +59 -0
  93. package/dist/agent/types.d.ts.map +1 -0
  94. package/dist/agent/types.js +5 -0
  95. package/dist/agent/types.js.map +1 -0
  96. package/dist/commands/agent.d.ts +21 -0
  97. package/dist/commands/agent.d.ts.map +1 -0
  98. package/dist/commands/agent.js +290 -0
  99. package/dist/commands/agent.js.map +1 -0
  100. package/dist/commands/ai-analyze.d.ts +106 -0
  101. package/dist/commands/ai-analyze.d.ts.map +1 -0
  102. package/dist/commands/ai-analyze.js +327 -0
  103. package/dist/commands/ai-analyze.js.map +1 -0
  104. package/dist/commands/ai-animated-caption.d.ts +64 -0
  105. package/dist/commands/ai-animated-caption.d.ts.map +1 -0
  106. package/dist/commands/ai-animated-caption.js +272 -0
  107. package/dist/commands/ai-animated-caption.js.map +1 -0
  108. package/dist/commands/ai-audio.d.ts +20 -0
  109. package/dist/commands/ai-audio.d.ts.map +1 -0
  110. package/dist/commands/ai-audio.js +808 -0
  111. package/dist/commands/ai-audio.js.map +1 -0
  112. package/dist/commands/ai-broll.d.ts +15 -0
  113. package/dist/commands/ai-broll.d.ts.map +1 -0
  114. package/dist/commands/ai-broll.js +406 -0
  115. package/dist/commands/ai-broll.js.map +1 -0
  116. package/dist/commands/ai-edit-cli.d.ts +14 -0
  117. package/dist/commands/ai-edit-cli.d.ts.map +1 -0
  118. package/dist/commands/ai-edit-cli.js +579 -0
  119. package/dist/commands/ai-edit-cli.js.map +1 -0
  120. package/dist/commands/ai-edit.d.ts +398 -0
  121. package/dist/commands/ai-edit.d.ts.map +1 -0
  122. package/dist/commands/ai-edit.js +1019 -0
  123. package/dist/commands/ai-edit.js.map +1 -0
  124. package/dist/commands/ai-fill-gaps.d.ts +14 -0
  125. package/dist/commands/ai-fill-gaps.d.ts.map +1 -0
  126. package/dist/commands/ai-fill-gaps.js +451 -0
  127. package/dist/commands/ai-fill-gaps.js.map +1 -0
  128. package/dist/commands/ai-helpers.d.ts +20 -0
  129. package/dist/commands/ai-helpers.d.ts.map +1 -0
  130. package/dist/commands/ai-helpers.js +59 -0
  131. package/dist/commands/ai-helpers.js.map +1 -0
  132. package/dist/commands/ai-highlights.d.ts +127 -0
  133. package/dist/commands/ai-highlights.d.ts.map +1 -0
  134. package/dist/commands/ai-highlights.js +1026 -0
  135. package/dist/commands/ai-highlights.js.map +1 -0
  136. package/dist/commands/ai-image.d.ts +34 -0
  137. package/dist/commands/ai-image.d.ts.map +1 -0
  138. package/dist/commands/ai-image.js +653 -0
  139. package/dist/commands/ai-image.js.map +1 -0
  140. package/dist/commands/ai-motion.d.ts +50 -0
  141. package/dist/commands/ai-motion.d.ts.map +1 -0
  142. package/dist/commands/ai-motion.js +271 -0
  143. package/dist/commands/ai-motion.js.map +1 -0
  144. package/dist/commands/ai-narrate.d.ts +66 -0
  145. package/dist/commands/ai-narrate.d.ts.map +1 -0
  146. package/dist/commands/ai-narrate.js +329 -0
  147. package/dist/commands/ai-narrate.js.map +1 -0
  148. package/dist/commands/ai-review.d.ts +57 -0
  149. package/dist/commands/ai-review.d.ts.map +1 -0
  150. package/dist/commands/ai-review.js +251 -0
  151. package/dist/commands/ai-review.js.map +1 -0
  152. package/dist/commands/ai-script-pipeline-cli.d.ts +9 -0
  153. package/dist/commands/ai-script-pipeline-cli.d.ts.map +1 -0
  154. package/dist/commands/ai-script-pipeline-cli.js +1494 -0
  155. package/dist/commands/ai-script-pipeline-cli.js.map +1 -0
  156. package/dist/commands/ai-script-pipeline.d.ts +259 -0
  157. package/dist/commands/ai-script-pipeline.d.ts.map +1 -0
  158. package/dist/commands/ai-script-pipeline.js +1027 -0
  159. package/dist/commands/ai-script-pipeline.js.map +1 -0
  160. package/dist/commands/ai-suggest-edit.d.ts +14 -0
  161. package/dist/commands/ai-suggest-edit.d.ts.map +1 -0
  162. package/dist/commands/ai-suggest-edit.js +220 -0
  163. package/dist/commands/ai-suggest-edit.js.map +1 -0
  164. package/dist/commands/ai-video-fx.d.ts +14 -0
  165. package/dist/commands/ai-video-fx.d.ts.map +1 -0
  166. package/dist/commands/ai-video-fx.js +395 -0
  167. package/dist/commands/ai-video-fx.js.map +1 -0
  168. package/dist/commands/ai-video.d.ts +15 -0
  169. package/dist/commands/ai-video.d.ts.map +1 -0
  170. package/dist/commands/ai-video.js +785 -0
  171. package/dist/commands/ai-video.js.map +1 -0
  172. package/dist/commands/ai-viral.d.ts +15 -0
  173. package/dist/commands/ai-viral.d.ts.map +1 -0
  174. package/dist/commands/ai-viral.js +519 -0
  175. package/dist/commands/ai-viral.js.map +1 -0
  176. package/dist/commands/ai-visual-fx.d.ts +14 -0
  177. package/dist/commands/ai-visual-fx.d.ts.map +1 -0
  178. package/dist/commands/ai-visual-fx.js +505 -0
  179. package/dist/commands/ai-visual-fx.js.map +1 -0
  180. package/dist/commands/ai.d.ts +38 -0
  181. package/dist/commands/ai.d.ts.map +1 -0
  182. package/dist/commands/ai.js +225 -0
  183. package/dist/commands/ai.js.map +1 -0
  184. package/dist/commands/ai.test.d.ts +2 -0
  185. package/dist/commands/ai.test.d.ts.map +1 -0
  186. package/dist/commands/ai.test.js +554 -0
  187. package/dist/commands/ai.test.js.map +1 -0
  188. package/dist/commands/analyze.d.ts +16 -0
  189. package/dist/commands/analyze.d.ts.map +1 -0
  190. package/dist/commands/analyze.js +247 -0
  191. package/dist/commands/analyze.js.map +1 -0
  192. package/dist/commands/audio.d.ts +18 -0
  193. package/dist/commands/audio.d.ts.map +1 -0
  194. package/dist/commands/audio.js +539 -0
  195. package/dist/commands/audio.js.map +1 -0
  196. package/dist/commands/batch.d.ts +3 -0
  197. package/dist/commands/batch.d.ts.map +1 -0
  198. package/dist/commands/batch.js +366 -0
  199. package/dist/commands/batch.js.map +1 -0
  200. package/dist/commands/batch.test.d.ts +2 -0
  201. package/dist/commands/batch.test.d.ts.map +1 -0
  202. package/dist/commands/batch.test.js +203 -0
  203. package/dist/commands/batch.test.js.map +1 -0
  204. package/dist/commands/detect.d.ts +3 -0
  205. package/dist/commands/detect.d.ts.map +1 -0
  206. package/dist/commands/detect.js +273 -0
  207. package/dist/commands/detect.js.map +1 -0
  208. package/dist/commands/doctor.d.ts +6 -0
  209. package/dist/commands/doctor.d.ts.map +1 -0
  210. package/dist/commands/doctor.js +191 -0
  211. package/dist/commands/doctor.js.map +1 -0
  212. package/dist/commands/edit-cmd.d.ts +26 -0
  213. package/dist/commands/edit-cmd.d.ts.map +1 -0
  214. package/dist/commands/edit-cmd.js +870 -0
  215. package/dist/commands/edit-cmd.js.map +1 -0
  216. package/dist/commands/export.d.ts +39 -0
  217. package/dist/commands/export.d.ts.map +1 -0
  218. package/dist/commands/export.js +730 -0
  219. package/dist/commands/export.js.map +1 -0
  220. package/dist/commands/generate.d.ts +25 -0
  221. package/dist/commands/generate.d.ts.map +1 -0
  222. package/dist/commands/generate.js +1885 -0
  223. package/dist/commands/generate.js.map +1 -0
  224. package/dist/commands/media.d.ts +3 -0
  225. package/dist/commands/media.d.ts.map +1 -0
  226. package/dist/commands/media.js +165 -0
  227. package/dist/commands/media.js.map +1 -0
  228. package/dist/commands/output.d.ts +45 -0
  229. package/dist/commands/output.d.ts.map +1 -0
  230. package/dist/commands/output.js +122 -0
  231. package/dist/commands/output.js.map +1 -0
  232. package/dist/commands/pipeline.d.ts +19 -0
  233. package/dist/commands/pipeline.d.ts.map +1 -0
  234. package/dist/commands/pipeline.js +345 -0
  235. package/dist/commands/pipeline.js.map +1 -0
  236. package/dist/commands/project.d.ts +3 -0
  237. package/dist/commands/project.d.ts.map +1 -0
  238. package/dist/commands/project.js +139 -0
  239. package/dist/commands/project.js.map +1 -0
  240. package/dist/commands/project.test.d.ts +2 -0
  241. package/dist/commands/project.test.d.ts.map +1 -0
  242. package/dist/commands/project.test.js +105 -0
  243. package/dist/commands/project.test.js.map +1 -0
  244. package/dist/commands/sanitize.d.ts +21 -0
  245. package/dist/commands/sanitize.d.ts.map +1 -0
  246. package/dist/commands/sanitize.js +56 -0
  247. package/dist/commands/sanitize.js.map +1 -0
  248. package/dist/commands/schema.d.ts +11 -0
  249. package/dist/commands/schema.d.ts.map +1 -0
  250. package/dist/commands/schema.js +101 -0
  251. package/dist/commands/schema.js.map +1 -0
  252. package/dist/commands/setup.d.ts +6 -0
  253. package/dist/commands/setup.d.ts.map +1 -0
  254. package/dist/commands/setup.js +440 -0
  255. package/dist/commands/setup.js.map +1 -0
  256. package/dist/commands/timeline.d.ts +3 -0
  257. package/dist/commands/timeline.d.ts.map +1 -0
  258. package/dist/commands/timeline.js +469 -0
  259. package/dist/commands/timeline.js.map +1 -0
  260. package/dist/commands/timeline.test.d.ts +2 -0
  261. package/dist/commands/timeline.test.d.ts.map +1 -0
  262. package/dist/commands/timeline.test.js +320 -0
  263. package/dist/commands/timeline.test.js.map +1 -0
  264. package/dist/commands/validate.d.ts +32 -0
  265. package/dist/commands/validate.d.ts.map +1 -0
  266. package/dist/commands/validate.js +63 -0
  267. package/dist/commands/validate.js.map +1 -0
  268. package/dist/config/config.test.d.ts +2 -0
  269. package/dist/config/config.test.d.ts.map +1 -0
  270. package/dist/config/config.test.js +164 -0
  271. package/dist/config/config.test.js.map +1 -0
  272. package/dist/config/index.d.ts +35 -0
  273. package/dist/config/index.d.ts.map +1 -0
  274. package/dist/config/index.js +101 -0
  275. package/dist/config/index.js.map +1 -0
  276. package/dist/config/schema.d.ts +43 -0
  277. package/dist/config/schema.d.ts.map +1 -0
  278. package/dist/config/schema.js +42 -0
  279. package/dist/config/schema.js.map +1 -0
  280. package/dist/engine/index.d.ts +3 -0
  281. package/dist/engine/index.d.ts.map +1 -0
  282. package/dist/engine/index.js +2 -0
  283. package/dist/engine/index.js.map +1 -0
  284. package/dist/engine/project.d.ts +84 -0
  285. package/dist/engine/project.d.ts.map +1 -0
  286. package/dist/engine/project.js +355 -0
  287. package/dist/engine/project.js.map +1 -0
  288. package/dist/engine/project.test.d.ts +2 -0
  289. package/dist/engine/project.test.d.ts.map +1 -0
  290. package/dist/engine/project.test.js +599 -0
  291. package/dist/engine/project.test.js.map +1 -0
  292. package/dist/index.d.ts +7 -0
  293. package/dist/index.d.ts.map +1 -0
  294. package/dist/index.js +131 -0
  295. package/dist/index.js.map +1 -0
  296. package/dist/utils/api-key.d.ts +36 -0
  297. package/dist/utils/api-key.d.ts.map +1 -0
  298. package/dist/utils/api-key.js +211 -0
  299. package/dist/utils/api-key.js.map +1 -0
  300. package/dist/utils/api-key.test.d.ts +2 -0
  301. package/dist/utils/api-key.test.d.ts.map +1 -0
  302. package/dist/utils/api-key.test.js +35 -0
  303. package/dist/utils/api-key.test.js.map +1 -0
  304. package/dist/utils/audio.d.ts +23 -0
  305. package/dist/utils/audio.d.ts.map +1 -0
  306. package/dist/utils/audio.js +79 -0
  307. package/dist/utils/audio.js.map +1 -0
  308. package/dist/utils/exec-safe.d.ts +22 -0
  309. package/dist/utils/exec-safe.d.ts.map +1 -0
  310. package/dist/utils/exec-safe.js +62 -0
  311. package/dist/utils/exec-safe.js.map +1 -0
  312. package/dist/utils/first-run.d.ts +13 -0
  313. package/dist/utils/first-run.d.ts.map +1 -0
  314. package/dist/utils/first-run.js +48 -0
  315. package/dist/utils/first-run.js.map +1 -0
  316. package/dist/utils/provider-resolver.d.ts +15 -0
  317. package/dist/utils/provider-resolver.d.ts.map +1 -0
  318. package/dist/utils/provider-resolver.js +42 -0
  319. package/dist/utils/provider-resolver.js.map +1 -0
  320. package/dist/utils/remotion.d.ts +210 -0
  321. package/dist/utils/remotion.d.ts.map +1 -0
  322. package/dist/utils/remotion.js +731 -0
  323. package/dist/utils/remotion.js.map +1 -0
  324. package/dist/utils/subtitle.d.ts +65 -0
  325. package/dist/utils/subtitle.d.ts.map +1 -0
  326. package/dist/utils/subtitle.js +135 -0
  327. package/dist/utils/subtitle.js.map +1 -0
  328. package/dist/utils/subtitle.test.d.ts +2 -0
  329. package/dist/utils/subtitle.test.d.ts.map +1 -0
  330. package/dist/utils/subtitle.test.js +175 -0
  331. package/dist/utils/subtitle.test.js.map +1 -0
  332. package/dist/utils/tty.d.ts +45 -0
  333. package/dist/utils/tty.d.ts.map +1 -0
  334. package/dist/utils/tty.js +172 -0
  335. package/dist/utils/tty.js.map +1 -0
  336. package/package.json +102 -0
  337. package/src/agent/adapters/claude.ts +143 -0
  338. package/src/agent/adapters/gemini.ts +159 -0
  339. package/src/agent/adapters/index.ts +61 -0
  340. package/src/agent/adapters/ollama.ts +231 -0
  341. package/src/agent/adapters/openai.ts +116 -0
  342. package/src/agent/adapters/xai.ts +119 -0
  343. package/src/agent/index.ts +251 -0
  344. package/src/agent/memory/index.ts +151 -0
  345. package/src/agent/prompts/system.ts +106 -0
  346. package/src/agent/tools/ai-editing.ts +845 -0
  347. package/src/agent/tools/ai-generation.ts +1073 -0
  348. package/src/agent/tools/ai-pipeline.ts +1055 -0
  349. package/src/agent/tools/ai.ts +21 -0
  350. package/src/agent/tools/batch.ts +429 -0
  351. package/src/agent/tools/e2e.test.ts +545 -0
  352. package/src/agent/tools/export.ts +184 -0
  353. package/src/agent/tools/filesystem.ts +237 -0
  354. package/src/agent/tools/index.ts +150 -0
  355. package/src/agent/tools/integration.test.ts +775 -0
  356. package/src/agent/tools/media.ts +697 -0
  357. package/src/agent/tools/project.ts +313 -0
  358. package/src/agent/tools/timeline.ts +951 -0
  359. package/src/agent/types.ts +68 -0
  360. package/src/commands/agent.ts +340 -0
  361. package/src/commands/ai-analyze.ts +429 -0
  362. package/src/commands/ai-animated-caption.ts +390 -0
  363. package/src/commands/ai-audio.ts +941 -0
  364. package/src/commands/ai-broll.ts +490 -0
  365. package/src/commands/ai-edit-cli.ts +658 -0
  366. package/src/commands/ai-edit.ts +1542 -0
  367. package/src/commands/ai-fill-gaps.ts +566 -0
  368. package/src/commands/ai-helpers.ts +65 -0
  369. package/src/commands/ai-highlights.ts +1303 -0
  370. package/src/commands/ai-image.ts +761 -0
  371. package/src/commands/ai-motion.ts +347 -0
  372. package/src/commands/ai-narrate.ts +451 -0
  373. package/src/commands/ai-review.ts +309 -0
  374. package/src/commands/ai-script-pipeline-cli.ts +1710 -0
  375. package/src/commands/ai-script-pipeline.ts +1365 -0
  376. package/src/commands/ai-suggest-edit.ts +264 -0
  377. package/src/commands/ai-video-fx.ts +445 -0
  378. package/src/commands/ai-video.ts +915 -0
  379. package/src/commands/ai-viral.ts +595 -0
  380. package/src/commands/ai-visual-fx.ts +601 -0
  381. package/src/commands/ai.test.ts +627 -0
  382. package/src/commands/ai.ts +307 -0
  383. package/src/commands/analyze.ts +282 -0
  384. package/src/commands/audio.ts +644 -0
  385. package/src/commands/batch.test.ts +279 -0
  386. package/src/commands/batch.ts +440 -0
  387. package/src/commands/detect.ts +329 -0
  388. package/src/commands/doctor.ts +237 -0
  389. package/src/commands/edit-cmd.ts +1014 -0
  390. package/src/commands/export.ts +918 -0
  391. package/src/commands/generate.ts +2146 -0
  392. package/src/commands/media.ts +177 -0
  393. package/src/commands/output.ts +142 -0
  394. package/src/commands/pipeline.ts +398 -0
  395. package/src/commands/project.test.ts +127 -0
  396. package/src/commands/project.ts +149 -0
  397. package/src/commands/sanitize.ts +60 -0
  398. package/src/commands/schema.ts +130 -0
  399. package/src/commands/setup.ts +509 -0
  400. package/src/commands/timeline.test.ts +499 -0
  401. package/src/commands/timeline.ts +529 -0
  402. package/src/commands/validate.ts +77 -0
  403. package/src/config/config.test.ts +197 -0
  404. package/src/config/index.ts +125 -0
  405. package/src/config/schema.ts +82 -0
  406. package/src/engine/index.ts +2 -0
  407. package/src/engine/project.test.ts +702 -0
  408. package/src/engine/project.ts +439 -0
  409. package/src/index.ts +146 -0
  410. package/src/utils/api-key.test.ts +41 -0
  411. package/src/utils/api-key.ts +247 -0
  412. package/src/utils/audio.ts +83 -0
  413. package/src/utils/exec-safe.ts +75 -0
  414. package/src/utils/first-run.ts +52 -0
  415. package/src/utils/provider-resolver.ts +56 -0
  416. package/src/utils/remotion.ts +951 -0
  417. package/src/utils/subtitle.test.ts +227 -0
  418. package/src/utils/subtitle.ts +169 -0
  419. package/src/utils/tty.ts +196 -0
  420. package/tsconfig.json +20 -0
@@ -0,0 +1,397 @@
1
+ /**
2
+ * E2E Tests: AI Pipeline Tools with Real API Calls
3
+ *
4
+ * ⚠️ WARNING: These tests make REAL API calls and incur COSTS!
5
+ *
6
+ * To run these tests:
7
+ * RUN_E2E=1 pnpm vitest run src/agent/tools/e2e.test.ts
8
+ *
9
+ * Required API keys (set in ~/.vibeframe/config.yaml or env):
10
+ * - ANTHROPIC_API_KEY (Claude - storyboard)
11
+ * - GOOGLE_API_KEY (Gemini - image, video analysis)
12
+ * - OPENAI_API_KEY (Whisper - transcription)
13
+ * - ELEVENLABS_API_KEY (TTS)
14
+ *
15
+ * Estimated costs per full run:
16
+ * - ai_gemini_video: ~$0.01-0.05 (depending on video length)
17
+ * - ai_storyboard: ~$0.01-0.02
18
+ * - ai_image (gemini): Free tier available
19
+ * - ai_tts: ~$0.01-0.05 (depending on text length)
20
+ * - ai_script_to_video (images-only): ~$0.05-0.20
21
+ * - ai_highlights (with Gemini): ~$0.05-0.20
22
+ *
23
+ * Total estimated cost: $0.10-0.50 per full run
24
+ */
25
+ import { describe, it, expect, beforeAll, afterAll } from "vitest";
26
+ import { existsSync, mkdirSync } from "node:fs";
27
+ import { resolve, join } from "node:path";
28
+ import { execSync } from "node:child_process";
29
+ import { ToolRegistry } from "./index.js";
30
+ import { registerAITools } from "./ai.js";
31
+ // Skip all tests unless RUN_E2E is set
32
+ const RUN_E2E = process.env.RUN_E2E === "1" || process.env.RUN_E2E === "true";
33
+ // Test output directory
34
+ const TEST_OUTPUT_DIR = resolve(process.cwd(), ".e2e-test-output");
35
+ // Mock context for tool execution
36
+ const createContext = (subdir) => ({
37
+ workingDirectory: subdir ? join(TEST_OUTPUT_DIR, subdir) : TEST_OUTPUT_DIR,
38
+ projectPath: null,
39
+ });
40
+ // Check if required API keys are available
41
+ function checkApiKey(keyName) {
42
+ // Check environment
43
+ if (process.env[keyName])
44
+ return true;
45
+ // Check config file
46
+ try {
47
+ const configPath = resolve(process.env.HOME || "~", ".vibeframe", "config.yaml");
48
+ if (existsSync(configPath)) {
49
+ const content = execSync(`cat "${configPath}"`, { encoding: "utf-8" });
50
+ const keyMapping = {
51
+ GOOGLE_API_KEY: "google:",
52
+ ANTHROPIC_API_KEY: "anthropic:",
53
+ OPENAI_API_KEY: "openai:",
54
+ ELEVENLABS_API_KEY: "elevenlabs:",
55
+ };
56
+ if (keyMapping[keyName] && content.includes(keyMapping[keyName])) {
57
+ return true;
58
+ }
59
+ }
60
+ }
61
+ catch {
62
+ // Ignore errors
63
+ }
64
+ return false;
65
+ }
66
+ // Print cost warning
67
+ function printCostWarning() {
68
+ console.log("\n");
69
+ console.log("⚠️ ═══════════════════════════════════════════════════════════");
70
+ console.log("⚠️ E2E TESTS - REAL API CALLS - COSTS WILL BE INCURRED");
71
+ console.log("⚠️ ═══════════════════════════════════════════════════════════");
72
+ console.log("⚠️ Estimated cost: $0.10-0.50 per full run");
73
+ console.log("⚠️ ═══════════════════════════════════════════════════════════");
74
+ console.log("\n");
75
+ }
76
+ describe.skipIf(!RUN_E2E)("E2E: AI Pipeline Tools", () => {
77
+ let registry;
78
+ beforeAll(() => {
79
+ printCostWarning();
80
+ // Setup registry
81
+ registry = new ToolRegistry();
82
+ registerAITools(registry);
83
+ // Create test output directory
84
+ if (!existsSync(TEST_OUTPUT_DIR)) {
85
+ mkdirSync(TEST_OUTPUT_DIR, { recursive: true });
86
+ }
87
+ console.log(`📁 Test output directory: ${TEST_OUTPUT_DIR}`);
88
+ });
89
+ afterAll(() => {
90
+ console.log("\n");
91
+ console.log("✅ E2E tests completed");
92
+ console.log(`📁 Output files saved to: ${TEST_OUTPUT_DIR}`);
93
+ console.log("💡 Run 'rm -rf .e2e-test-output' to clean up");
94
+ console.log("\n");
95
+ });
96
+ describe("analyze_video", () => {
97
+ const hasKey = checkApiKey("GOOGLE_API_KEY");
98
+ it.skipIf(!hasKey)("analyzes a sample video with Gemini", async () => {
99
+ console.log("\n🎬 Testing ai_gemini_video...");
100
+ // Create a simple test video using FFmpeg
101
+ const testVideoPath = join(TEST_OUTPUT_DIR, "test-video.mp4");
102
+ if (!existsSync(testVideoPath)) {
103
+ console.log(" Creating test video with FFmpeg...");
104
+ try {
105
+ execSync(`ffmpeg -f lavfi -i color=c=blue:s=320x240:d=3 -f lavfi -i anullsrc=r=44100:cl=stereo -t 3 -c:v libx264 -c:a aac "${testVideoPath}" -y`, { stdio: "pipe" });
106
+ }
107
+ catch {
108
+ console.log(" ⚠️ FFmpeg not available, skipping video creation");
109
+ return;
110
+ }
111
+ }
112
+ const handler = registry.getHandler("analyze_video");
113
+ expect(handler).toBeDefined();
114
+ const result = await handler({
115
+ source: testVideoPath,
116
+ prompt: "Describe what you see in this video in one sentence.",
117
+ model: "flash",
118
+ }, createContext());
119
+ console.log(` Result: ${result.success ? "✅" : "❌"}`);
120
+ if (result.success) {
121
+ console.log(` Response: ${result.output.substring(0, 100)}...`);
122
+ }
123
+ else {
124
+ console.log(` Error: ${result.error}`);
125
+ }
126
+ expect(result.success).toBe(true);
127
+ expect(result.output).toBeTruthy();
128
+ }, 60000 // 60s timeout
129
+ );
130
+ it.skipIf(!hasKey)("handles YouTube URL", async () => {
131
+ console.log("\n🎬 Testing ai_gemini_video with YouTube URL...");
132
+ const handler = registry.getHandler("analyze_video");
133
+ // Use a short, public domain video
134
+ const result = await handler({
135
+ source: "https://www.youtube.com/watch?v=jNQXAC9IVRw", // "Me at the zoo" - first YouTube video
136
+ prompt: "What is shown in this video? Answer in one sentence.",
137
+ model: "flash",
138
+ }, createContext());
139
+ console.log(` Result: ${result.success ? "✅" : "❌"}`);
140
+ if (result.success) {
141
+ console.log(` Response: ${result.output.substring(0, 100)}...`);
142
+ }
143
+ else {
144
+ console.log(` Error: ${result.error}`);
145
+ }
146
+ // YouTube support may vary, so we just check it doesn't crash
147
+ expect(result).toBeDefined();
148
+ }, 120000 // 120s timeout for YouTube
149
+ );
150
+ });
151
+ describe("generate_storyboard", () => {
152
+ const hasKey = checkApiKey("ANTHROPIC_API_KEY");
153
+ it.skipIf(!hasKey)("generates storyboard from script", async () => {
154
+ console.log("\n📝 Testing ai_storyboard...");
155
+ const handler = registry.getHandler("generate_storyboard");
156
+ expect(handler).toBeDefined();
157
+ const result = await handler({
158
+ script: "A robot learns to dance. First awkward moves, then graceful spins.",
159
+ targetDuration: 10,
160
+ output: "test-storyboard.json",
161
+ }, createContext());
162
+ console.log(` Result: ${result.success ? "✅" : "❌"}`);
163
+ if (result.success) {
164
+ console.log(` Output: ${result.output.substring(0, 150)}...`);
165
+ }
166
+ else {
167
+ console.log(` Error: ${result.error}`);
168
+ }
169
+ expect(result.success).toBe(true);
170
+ }, 60000);
171
+ });
172
+ describe("generate_image", () => {
173
+ const hasGeminiKey = checkApiKey("GOOGLE_API_KEY");
174
+ it.skipIf(!hasGeminiKey)("generates image with Gemini", async () => {
175
+ console.log("\n🖼️ Testing ai_image (Gemini)...");
176
+ const handler = registry.getHandler("generate_image");
177
+ expect(handler).toBeDefined();
178
+ const result = await handler({
179
+ prompt: "A simple blue square on white background",
180
+ output: "test-image-gemini.png",
181
+ provider: "gemini",
182
+ }, createContext());
183
+ console.log(` Result: ${result.success ? "✅" : "❌"}`);
184
+ if (result.success) {
185
+ console.log(` Output: ${result.output}`);
186
+ const imagePath = join(TEST_OUTPUT_DIR, "test-image-gemini.png");
187
+ console.log(` File exists: ${existsSync(imagePath)}`);
188
+ }
189
+ else {
190
+ console.log(` Error: ${result.error}`);
191
+ }
192
+ expect(result.success).toBe(true);
193
+ }, 60000);
194
+ });
195
+ describe("generate_speech", () => {
196
+ const hasKey = checkApiKey("ELEVENLABS_API_KEY");
197
+ it.skipIf(!hasKey)("generates speech from text", async () => {
198
+ console.log("\n🎙️ Testing ai_tts...");
199
+ const handler = registry.getHandler("generate_speech");
200
+ expect(handler).toBeDefined();
201
+ const result = await handler({
202
+ text: "Hello, this is a test of the text to speech system.",
203
+ output: "test-tts.mp3",
204
+ }, createContext());
205
+ console.log(` Result: ${result.success ? "✅" : "❌"}`);
206
+ if (result.success) {
207
+ console.log(` Output: ${result.output}`);
208
+ const audioPath = join(TEST_OUTPUT_DIR, "test-tts.mp3");
209
+ console.log(` File exists: ${existsSync(audioPath)}`);
210
+ }
211
+ else {
212
+ console.log(` Error: ${result.error}`);
213
+ }
214
+ expect(result.success).toBe(true);
215
+ }, 30000);
216
+ });
217
+ describe("generate_sound_effect", () => {
218
+ const hasKey = checkApiKey("ELEVENLABS_API_KEY");
219
+ it.skipIf(!hasKey)("generates sound effect", async () => {
220
+ console.log("\n🔊 Testing ai_sfx...");
221
+ const handler = registry.getHandler("generate_sound_effect");
222
+ expect(handler).toBeDefined();
223
+ const result = await handler({
224
+ prompt: "short beep notification sound",
225
+ output: "test-sfx.mp3",
226
+ duration: 1,
227
+ }, createContext());
228
+ console.log(` Result: ${result.success ? "✅" : "❌"}`);
229
+ if (result.success) {
230
+ console.log(` Output: ${result.output}`);
231
+ }
232
+ else {
233
+ console.log(` Error: ${result.error}`);
234
+ }
235
+ expect(result.success).toBe(true);
236
+ }, 30000);
237
+ });
238
+ describe("pipeline_script_to_video (images-only)", () => {
239
+ const hasClaudeKey = checkApiKey("ANTHROPIC_API_KEY");
240
+ const hasGeminiKey = checkApiKey("GOOGLE_API_KEY");
241
+ const hasTTSKey = checkApiKey("ELEVENLABS_API_KEY");
242
+ it.skipIf(!hasClaudeKey || !hasGeminiKey)("generates images from script (no video, no voiceover)", async () => {
243
+ console.log("\n🎬 Testing ai_script_to_video (images-only)...");
244
+ console.log(" ⚠️ This test may take 1-2 minutes");
245
+ // Create subdirectory for this test
246
+ const outputDir = join(TEST_OUTPUT_DIR, "script-to-video-test");
247
+ if (!existsSync(outputDir)) {
248
+ mkdirSync(outputDir, { recursive: true });
249
+ }
250
+ const handler = registry.getHandler("pipeline_script_to_video");
251
+ expect(handler).toBeDefined();
252
+ const result = await handler({
253
+ script: "A sunrise over mountains. Birds flying in the sky.",
254
+ outputDir: "script-to-video-test",
255
+ imageProvider: "gemini",
256
+ imagesOnly: true,
257
+ noVoiceover: true,
258
+ }, createContext());
259
+ console.log(` Result: ${result.success ? "✅" : "❌"}`);
260
+ if (result.success) {
261
+ console.log(` Output: ${result.output.substring(0, 200)}...`);
262
+ // Check if files were created
263
+ const storyboardPath = join(outputDir, "storyboard.json");
264
+ console.log(` Storyboard exists: ${existsSync(storyboardPath)}`);
265
+ }
266
+ else {
267
+ console.log(` Error: ${result.error}`);
268
+ }
269
+ expect(result.success).toBe(true);
270
+ }, 180000 // 3 minutes timeout
271
+ );
272
+ it.skipIf(!hasClaudeKey || !hasGeminiKey || !hasTTSKey)("generates images with voiceover (no video)", async () => {
273
+ console.log("\n🎬 Testing ai_script_to_video (images + voiceover)...");
274
+ console.log(" ⚠️ This test may take 2-3 minutes");
275
+ const outputDir = join(TEST_OUTPUT_DIR, "script-to-video-with-tts");
276
+ if (!existsSync(outputDir)) {
277
+ mkdirSync(outputDir, { recursive: true });
278
+ }
279
+ const handler = registry.getHandler("pipeline_script_to_video");
280
+ const result = await handler({
281
+ script: "Welcome to our demo. This is amazing technology.",
282
+ outputDir: "script-to-video-with-tts",
283
+ imageProvider: "gemini",
284
+ imagesOnly: true,
285
+ // voiceover enabled by default
286
+ }, createContext());
287
+ console.log(` Result: ${result.success ? "✅" : "❌"}`);
288
+ if (result.success) {
289
+ console.log(` Output: ${result.output.substring(0, 200)}...`);
290
+ }
291
+ else {
292
+ console.log(` Error: ${result.error}`);
293
+ }
294
+ expect(result.success).toBe(true);
295
+ }, 300000 // 5 minutes timeout
296
+ );
297
+ });
298
+ describe("pipeline_highlights (with Gemini)", () => {
299
+ const hasGeminiKey = checkApiKey("GOOGLE_API_KEY");
300
+ it.skipIf(!hasGeminiKey)("extracts highlights from video using Gemini", async () => {
301
+ console.log("\n🎯 Testing ai_highlights (Gemini)...");
302
+ // Create test video with FFmpeg
303
+ const testVideoPath = join(TEST_OUTPUT_DIR, "test-highlights-video.mp4");
304
+ if (!existsSync(testVideoPath)) {
305
+ console.log(" Creating 10s test video with FFmpeg...");
306
+ try {
307
+ // Create a 10 second video with changing colors
308
+ execSync(`ffmpeg -f lavfi -i "color=c=red:s=320x240:d=3,format=yuv420p[v0];` +
309
+ `color=c=green:s=320x240:d=4,format=yuv420p[v1];` +
310
+ `color=c=blue:s=320x240:d=3,format=yuv420p[v2];` +
311
+ `[v0][v1][v2]concat=n=3:v=1:a=0" ` +
312
+ `-f lavfi -i anullsrc=r=44100:cl=stereo -t 10 ` +
313
+ `-c:v libx264 -c:a aac "${testVideoPath}" -y`, { stdio: "pipe" });
314
+ }
315
+ catch {
316
+ console.log(" ⚠️ FFmpeg not available, skipping");
317
+ return;
318
+ }
319
+ }
320
+ const handler = registry.getHandler("pipeline_highlights");
321
+ expect(handler).toBeDefined();
322
+ const result = await handler({
323
+ media: testVideoPath,
324
+ useGemini: true,
325
+ count: 2,
326
+ criteria: "all",
327
+ }, createContext());
328
+ console.log(` Result: ${result.success ? "✅" : "❌"}`);
329
+ if (result.success) {
330
+ console.log(` Output: ${result.output.substring(0, 200)}...`);
331
+ }
332
+ else {
333
+ console.log(` Error: ${result.error}`);
334
+ }
335
+ // May not find highlights in simple test video, but should not error
336
+ expect(result.success).toBe(true);
337
+ }, 120000);
338
+ });
339
+ describe("pipeline_auto_shorts (analyze-only)", () => {
340
+ const hasGeminiKey = checkApiKey("GOOGLE_API_KEY");
341
+ it.skipIf(!hasGeminiKey)("analyzes video for shorts (no generation)", async () => {
342
+ console.log("\n📱 Testing ai_auto_shorts (analyze-only)...");
343
+ const testVideoPath = join(TEST_OUTPUT_DIR, "test-highlights-video.mp4");
344
+ // Reuse video from highlights test or create if needed
345
+ if (!existsSync(testVideoPath)) {
346
+ console.log(" Creating test video...");
347
+ try {
348
+ execSync(`ffmpeg -f lavfi -i color=c=blue:s=320x240:d=10 -f lavfi -i anullsrc=r=44100:cl=stereo -t 10 -c:v libx264 -c:a aac "${testVideoPath}" -y`, { stdio: "pipe" });
349
+ }
350
+ catch {
351
+ console.log(" ⚠️ FFmpeg not available, skipping");
352
+ return;
353
+ }
354
+ }
355
+ const handler = registry.getHandler("pipeline_auto_shorts");
356
+ expect(handler).toBeDefined();
357
+ const result = await handler({
358
+ video: testVideoPath,
359
+ analyzeOnly: true,
360
+ useGemini: true,
361
+ count: 1,
362
+ }, createContext());
363
+ console.log(` Result: ${result.success ? "✅" : "❌"}`);
364
+ if (result.success) {
365
+ console.log(` Output: ${result.output.substring(0, 200)}...`);
366
+ }
367
+ else {
368
+ console.log(` Error: ${result.error}`);
369
+ }
370
+ expect(result.success).toBe(true);
371
+ }, 120000);
372
+ });
373
+ });
374
+ // Summary test to show what was tested
375
+ describe.skipIf(!RUN_E2E)("E2E Summary", () => {
376
+ it("prints API key status", () => {
377
+ console.log("\n");
378
+ console.log("📊 API Key Status:");
379
+ console.log("─".repeat(50));
380
+ const keys = [
381
+ { name: "GOOGLE_API_KEY", desc: "Gemini (image, video)" },
382
+ { name: "ANTHROPIC_API_KEY", desc: "Claude (storyboard)" },
383
+ { name: "OPENAI_API_KEY", desc: "Whisper (transcription)" },
384
+ { name: "ELEVENLABS_API_KEY", desc: "TTS, SFX" },
385
+ { name: "RUNWAY_API_SECRET", desc: "Video generation" },
386
+ { name: "KLING_API_KEY", desc: "Video generation" },
387
+ ];
388
+ for (const key of keys) {
389
+ const hasKey = checkApiKey(key.name);
390
+ const status = hasKey ? "✅" : "❌";
391
+ console.log(` ${status} ${key.name.padEnd(25)} - ${key.desc}`);
392
+ }
393
+ console.log("─".repeat(50));
394
+ console.log("\n");
395
+ });
396
+ });
397
+ //# sourceMappingURL=e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2e.test.js","sourceRoot":"","sources":["../../../src/agent/tools/e2e.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Export Tools - Export projects to video, audio, or subtitles
3
+ */
4
+ import type { ToolRegistry } from "./index.js";
5
+ export declare function registerExportTools(registry: ToolRegistry): void;
6
+ //# sourceMappingURL=export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../src/agent/tools/export.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,YAAY,CAAC;AA8K5D,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAIhE"}
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Export Tools - Export projects to video, audio, or subtitles
3
+ */
4
+ import { resolve, basename } from "node:path";
5
+ import { runExport } from "../../commands/export.js";
6
+ // Tool Definitions
7
+ const exportVideoDef = {
8
+ name: "export_video",
9
+ description: "Export a project to a video file",
10
+ parameters: {
11
+ type: "object",
12
+ properties: {
13
+ project: {
14
+ type: "string",
15
+ description: "Project file path",
16
+ },
17
+ output: {
18
+ type: "string",
19
+ description: "Output video file path",
20
+ },
21
+ format: {
22
+ type: "string",
23
+ description: "Output format (mp4, webm, mov)",
24
+ enum: ["mp4", "webm", "mov"],
25
+ },
26
+ preset: {
27
+ type: "string",
28
+ description: "Quality preset (draft, standard, high, ultra)",
29
+ enum: ["draft", "standard", "high", "ultra"],
30
+ },
31
+ overwrite: {
32
+ type: "boolean",
33
+ description: "Overwrite existing file",
34
+ },
35
+ },
36
+ required: ["project"],
37
+ },
38
+ };
39
+ const exportAudioDef = {
40
+ name: "export_audio",
41
+ description: "Export audio track from a project",
42
+ parameters: {
43
+ type: "object",
44
+ properties: {
45
+ project: {
46
+ type: "string",
47
+ description: "Project file path",
48
+ },
49
+ output: {
50
+ type: "string",
51
+ description: "Output audio file path",
52
+ },
53
+ format: {
54
+ type: "string",
55
+ description: "Output format (mp3, wav, aac)",
56
+ enum: ["mp3", "wav", "aac"],
57
+ },
58
+ },
59
+ required: ["project"],
60
+ },
61
+ };
62
+ const exportSubtitlesDef = {
63
+ name: "export_subtitles",
64
+ description: "Export subtitles from transcription",
65
+ parameters: {
66
+ type: "object",
67
+ properties: {
68
+ project: {
69
+ type: "string",
70
+ description: "Project file path",
71
+ },
72
+ output: {
73
+ type: "string",
74
+ description: "Output subtitle file path",
75
+ },
76
+ format: {
77
+ type: "string",
78
+ description: "Subtitle format (srt, vtt)",
79
+ enum: ["srt", "vtt"],
80
+ },
81
+ },
82
+ required: ["project"],
83
+ },
84
+ };
85
+ // Tool Handlers
86
+ const exportVideo = async (args, context) => {
87
+ const projectPath = args.project;
88
+ const format = args.format || "mp4";
89
+ const preset = args.preset || "standard";
90
+ const overwrite = args.overwrite || false;
91
+ // Determine output path
92
+ const output = args.output ||
93
+ `${basename(projectPath, ".vibe.json")}.${format}`;
94
+ const absProjectPath = resolve(context.workingDirectory, projectPath);
95
+ const absOutputPath = resolve(context.workingDirectory, output);
96
+ try {
97
+ const result = await runExport(absProjectPath, absOutputPath, {
98
+ format: format,
99
+ preset,
100
+ overwrite,
101
+ });
102
+ if (!result.success) {
103
+ return {
104
+ toolCallId: "",
105
+ success: false,
106
+ output: "",
107
+ error: result.message,
108
+ };
109
+ }
110
+ return {
111
+ toolCallId: "",
112
+ success: true,
113
+ output: `Video exported: ${output}\nFormat: ${format}\nPreset: ${preset}`,
114
+ };
115
+ }
116
+ catch (error) {
117
+ return {
118
+ toolCallId: "",
119
+ success: false,
120
+ output: "",
121
+ error: `Failed to export video: ${error instanceof Error ? error.message : String(error)}`,
122
+ };
123
+ }
124
+ };
125
+ const exportAudio = async (_args, _context) => {
126
+ try {
127
+ // Audio export would be implemented similarly to video export
128
+ // For now, provide a helpful message
129
+ return {
130
+ toolCallId: "",
131
+ success: false,
132
+ output: "",
133
+ error: "Audio-only export not yet implemented. Use export_video and extract audio with FFmpeg: ffmpeg -i video.mp4 -vn -acodec mp3 audio.mp3",
134
+ };
135
+ }
136
+ catch (error) {
137
+ return {
138
+ toolCallId: "",
139
+ success: false,
140
+ output: "",
141
+ error: `Failed to export audio: ${error instanceof Error ? error.message : String(error)}`,
142
+ };
143
+ }
144
+ };
145
+ const exportSubtitles = async (_args, _context) => {
146
+ try {
147
+ // Subtitle export would extract transcription data from project
148
+ // For now, provide a helpful message
149
+ return {
150
+ toolCallId: "",
151
+ success: false,
152
+ output: "",
153
+ error: "Subtitle export not yet implemented. Use ai_transcribe to generate subtitles from audio: ai_transcribe audio.mp3 --output subtitles.srt",
154
+ };
155
+ }
156
+ catch (error) {
157
+ return {
158
+ toolCallId: "",
159
+ success: false,
160
+ output: "",
161
+ error: `Failed to export subtitles: ${error instanceof Error ? error.message : String(error)}`,
162
+ };
163
+ }
164
+ };
165
+ // Registration function
166
+ export function registerExportTools(registry) {
167
+ registry.register(exportVideoDef, exportVideo);
168
+ registry.register(exportAudioDef, exportAudio);
169
+ registry.register(exportSubtitlesDef, exportSubtitles);
170
+ }
171
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/agent/tools/export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Filesystem Tools - List, read, write, and check files
3
+ */
4
+ import type { ToolRegistry } from "./index.js";
5
+ export declare function registerFilesystemTools(registry: ToolRegistry): void;
6
+ //# sourceMappingURL=filesystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../../src/agent/tools/filesystem.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,YAAY,CAAC;AAiO5D,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAKpE"}