@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,197 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
2
+ import { resolve } from "node:path";
3
+ import { rm, mkdir, readFile } from "node:fs/promises";
4
+ import { tmpdir } from "node:os";
5
+ import {
6
+ createDefaultConfig,
7
+ PROVIDER_NAMES,
8
+ PROVIDER_ENV_VARS,
9
+ type VibeConfig,
10
+ } from "./schema.js";
11
+
12
+ // Mock homedir for tests
13
+ const TEST_HOME = resolve(tmpdir(), `vibe-config-test-${Date.now()}`);
14
+
15
+ vi.mock("node:os", async () => {
16
+ const actual = await vi.importActual("node:os");
17
+ return {
18
+ ...(actual as object),
19
+ homedir: () => TEST_HOME,
20
+ };
21
+ });
22
+
23
+ // Import after mock
24
+ const { loadConfig, saveConfig, isConfigured, CONFIG_DIR, CONFIG_PATH } = await import("./index.js");
25
+
26
+ describe("Config Schema", () => {
27
+ describe("createDefaultConfig", () => {
28
+ it("creates a valid default configuration", () => {
29
+ const config = createDefaultConfig();
30
+
31
+ expect(config.version).toBe("1.0.0");
32
+ expect(config.llm.provider).toBe("claude");
33
+ expect(config.providers).toEqual({});
34
+ expect(config.defaults.aspectRatio).toBe("16:9");
35
+ expect(config.defaults.exportQuality).toBe("standard");
36
+ expect(config.repl.autoSave).toBe(true);
37
+ });
38
+ });
39
+
40
+ describe("PROVIDER_NAMES", () => {
41
+ it("has display names for all providers", () => {
42
+ expect(PROVIDER_NAMES.claude).toBe("Claude (Anthropic)");
43
+ expect(PROVIDER_NAMES.openai).toBe("GPT-4 (OpenAI)");
44
+ expect(PROVIDER_NAMES.gemini).toBe("Gemini (Google)");
45
+ expect(PROVIDER_NAMES.ollama).toBe("Ollama (Local)");
46
+ });
47
+ });
48
+
49
+ describe("PROVIDER_ENV_VARS", () => {
50
+ it("has environment variables for all providers", () => {
51
+ expect(PROVIDER_ENV_VARS.anthropic).toBe("ANTHROPIC_API_KEY");
52
+ expect(PROVIDER_ENV_VARS.openai).toBe("OPENAI_API_KEY");
53
+ expect(PROVIDER_ENV_VARS.google).toBe("GOOGLE_API_KEY");
54
+ expect(PROVIDER_ENV_VARS.elevenlabs).toBe("ELEVENLABS_API_KEY");
55
+ expect(PROVIDER_ENV_VARS.runway).toBe("RUNWAY_API_SECRET");
56
+ expect(PROVIDER_ENV_VARS.kling).toBe("KLING_API_KEY");
57
+ expect(PROVIDER_ENV_VARS.replicate).toBe("REPLICATE_API_TOKEN");
58
+ });
59
+ });
60
+ });
61
+
62
+ describe("Config Loader", () => {
63
+ beforeEach(async () => {
64
+ // Clean up test directory
65
+ try {
66
+ await rm(TEST_HOME, { recursive: true, force: true });
67
+ } catch {
68
+ // Ignore
69
+ }
70
+ });
71
+
72
+ afterEach(async () => {
73
+ // Clean up test directory
74
+ try {
75
+ await rm(TEST_HOME, { recursive: true, force: true });
76
+ } catch {
77
+ // Ignore
78
+ }
79
+ });
80
+
81
+ describe("loadConfig", () => {
82
+ it("returns null when config does not exist", async () => {
83
+ const config = await loadConfig();
84
+ expect(config).toBeNull();
85
+ });
86
+
87
+ it("loads existing config", async () => {
88
+ // Create config directory and file
89
+ await mkdir(CONFIG_DIR, { recursive: true });
90
+ const testConfig: VibeConfig = {
91
+ version: "1.0.0",
92
+ llm: { provider: "openai" },
93
+ providers: { openai: "test-key" },
94
+ defaults: { aspectRatio: "9:16", exportQuality: "high" },
95
+ repl: { autoSave: false },
96
+ };
97
+
98
+ const { writeFile: fsWrite } = await import("node:fs/promises");
99
+ const { stringify } = await import("yaml");
100
+ await fsWrite(CONFIG_PATH, stringify(testConfig), "utf-8");
101
+
102
+ const loaded = await loadConfig();
103
+ expect(loaded).not.toBeNull();
104
+ expect(loaded?.llm.provider).toBe("openai");
105
+ expect(loaded?.providers.openai).toBe("test-key");
106
+ expect(loaded?.defaults.aspectRatio).toBe("9:16");
107
+ expect(loaded?.repl.autoSave).toBe(false);
108
+ });
109
+
110
+ it("merges with defaults for missing fields", async () => {
111
+ await mkdir(CONFIG_DIR, { recursive: true });
112
+ const partialConfig = {
113
+ version: "1.0.0",
114
+ llm: { provider: "gemini" },
115
+ providers: {},
116
+ defaults: {},
117
+ repl: {},
118
+ };
119
+
120
+ const { writeFile: fsWrite } = await import("node:fs/promises");
121
+ const { stringify } = await import("yaml");
122
+ await fsWrite(CONFIG_PATH, stringify(partialConfig), "utf-8");
123
+
124
+ const loaded = await loadConfig();
125
+ expect(loaded?.llm.provider).toBe("gemini");
126
+ expect(loaded?.defaults.aspectRatio).toBe("16:9"); // Default
127
+ expect(loaded?.repl.autoSave).toBe(true); // Default
128
+ });
129
+ });
130
+
131
+ describe("saveConfig", () => {
132
+ it("creates config directory and file", async () => {
133
+ const config = createDefaultConfig();
134
+ config.llm.provider = "openai";
135
+ config.providers.openai = "sk-test-123";
136
+
137
+ await saveConfig(config);
138
+
139
+ const content = await readFile(CONFIG_PATH, "utf-8");
140
+ expect(content).toContain("provider: openai");
141
+ expect(content).toContain("openai: sk-test-123");
142
+ });
143
+
144
+ it("overwrites existing config", async () => {
145
+ const config1 = createDefaultConfig();
146
+ config1.llm.provider = "claude";
147
+ await saveConfig(config1);
148
+
149
+ const config2 = createDefaultConfig();
150
+ config2.llm.provider = "gemini";
151
+ await saveConfig(config2);
152
+
153
+ const loaded = await loadConfig();
154
+ expect(loaded?.llm.provider).toBe("gemini");
155
+ });
156
+ });
157
+
158
+ describe("isConfigured", () => {
159
+ it("returns false when no config exists", async () => {
160
+ const configured = await isConfigured();
161
+ expect(configured).toBe(false);
162
+ });
163
+
164
+ it("returns false when config exists but no API key", async () => {
165
+ const config = createDefaultConfig();
166
+ await saveConfig(config);
167
+
168
+ const configured = await isConfigured();
169
+ expect(configured).toBe(false);
170
+ });
171
+
172
+ it("returns true when API key is in config", async () => {
173
+ const config = createDefaultConfig();
174
+ config.llm.provider = "claude";
175
+ config.providers.anthropic = "test-key";
176
+ await saveConfig(config);
177
+
178
+ const configured = await isConfigured();
179
+ expect(configured).toBe(true);
180
+ });
181
+
182
+ it("returns true when API key is in environment", async () => {
183
+ const config = createDefaultConfig();
184
+ config.llm.provider = "openai";
185
+ await saveConfig(config);
186
+
187
+ // Set environment variable
188
+ process.env.OPENAI_API_KEY = "test-env-key";
189
+
190
+ const configured = await isConfigured();
191
+ expect(configured).toBe(true);
192
+
193
+ // Clean up
194
+ delete process.env.OPENAI_API_KEY;
195
+ });
196
+ });
197
+ });
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Configuration loader/saver for VibeFrame CLI
3
+ * Config stored at ~/.vibeframe/config.yaml
4
+ */
5
+
6
+ import { resolve } from "node:path";
7
+ import { homedir } from "node:os";
8
+ import { readFile, writeFile, mkdir, access } from "node:fs/promises";
9
+ import { parse, stringify } from "yaml";
10
+ import { type VibeConfig, createDefaultConfig, PROVIDER_ENV_VARS } from "./schema.js";
11
+
12
+ /** Config directory path */
13
+ export const CONFIG_DIR = resolve(homedir(), ".vibeframe");
14
+
15
+ /** Config file path */
16
+ export const CONFIG_PATH = resolve(CONFIG_DIR, "config.yaml");
17
+
18
+ /**
19
+ * Load configuration from ~/.vibeframe/config.yaml
20
+ * Returns null if config doesn't exist
21
+ */
22
+ export async function loadConfig(): Promise<VibeConfig | null> {
23
+ try {
24
+ await access(CONFIG_PATH);
25
+ const content = await readFile(CONFIG_PATH, "utf-8");
26
+ const config = parse(content) as VibeConfig;
27
+
28
+ // Merge with defaults to ensure all fields exist
29
+ const defaults = createDefaultConfig();
30
+ return {
31
+ ...defaults,
32
+ ...config,
33
+ llm: { ...defaults.llm, ...config.llm },
34
+ providers: { ...defaults.providers, ...config.providers },
35
+ defaults: { ...defaults.defaults, ...config.defaults },
36
+ repl: { ...defaults.repl, ...config.repl },
37
+ };
38
+ } catch {
39
+ return null;
40
+ }
41
+ }
42
+
43
+ /**
44
+ * Save configuration to ~/.vibeframe/config.yaml
45
+ */
46
+ export async function saveConfig(config: VibeConfig): Promise<void> {
47
+ // Ensure config directory exists
48
+ await mkdir(CONFIG_DIR, { recursive: true });
49
+
50
+ // Write config as YAML
51
+ const content = stringify(config, {
52
+ indent: 2,
53
+ lineWidth: 0, // Don't wrap lines
54
+ });
55
+
56
+ await writeFile(CONFIG_PATH, content, "utf-8");
57
+ }
58
+
59
+ /**
60
+ * Check if configuration exists and has required API key
61
+ */
62
+ export async function isConfigured(): Promise<boolean> {
63
+ const config = await loadConfig();
64
+ if (!config) return false;
65
+
66
+ // Check if primary LLM provider has API key
67
+ const provider = config.llm.provider;
68
+ const providerKey = provider === "gemini" ? "google" : provider === "claude" ? "anthropic" : provider;
69
+
70
+ // Check config first, then environment
71
+ if (config.providers[providerKey as keyof typeof config.providers]) {
72
+ return true;
73
+ }
74
+
75
+ const envVar = PROVIDER_ENV_VARS[providerKey];
76
+ if (envVar && process.env[envVar]) {
77
+ return true;
78
+ }
79
+
80
+ return false;
81
+ }
82
+
83
+ /**
84
+ * Get API key from config, then environment
85
+ * @param providerKey Provider key (e.g., "anthropic", "openai")
86
+ * @returns API key or undefined
87
+ */
88
+ export async function getApiKeyFromConfig(
89
+ providerKey: string
90
+ ): Promise<string | undefined> {
91
+ const config = await loadConfig();
92
+
93
+ // Check config first
94
+ if (config?.providers[providerKey as keyof typeof config.providers]) {
95
+ return config.providers[providerKey as keyof typeof config.providers];
96
+ }
97
+
98
+ // Fall back to environment variable
99
+ const envVar = PROVIDER_ENV_VARS[providerKey];
100
+ if (envVar) {
101
+ return process.env[envVar];
102
+ }
103
+
104
+ return undefined;
105
+ }
106
+
107
+ /**
108
+ * Update a specific provider API key in config
109
+ */
110
+ export async function updateProviderKey(
111
+ providerKey: string,
112
+ apiKey: string
113
+ ): Promise<void> {
114
+ let config = await loadConfig();
115
+ if (!config) {
116
+ config = createDefaultConfig();
117
+ }
118
+
119
+ config.providers[providerKey as keyof typeof config.providers] = apiKey;
120
+ await saveConfig(config);
121
+ }
122
+
123
+ // Re-export types
124
+ export type { VibeConfig, LLMProvider } from "./schema.js";
125
+ export { createDefaultConfig, PROVIDER_NAMES, PROVIDER_ENV_VARS } from "./schema.js";
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Configuration schema for VibeFrame CLI
3
+ * Stored at ~/.vibeframe/config.yaml
4
+ */
5
+
6
+ export type LLMProvider = "claude" | "openai" | "gemini" | "ollama" | "xai";
7
+
8
+ export interface VibeConfig {
9
+ /** Config file version */
10
+ version: string;
11
+
12
+ /** LLM provider settings */
13
+ llm: {
14
+ /** Primary LLM provider for AI commands */
15
+ provider: LLMProvider;
16
+ };
17
+
18
+ /** API keys for various providers */
19
+ providers: {
20
+ anthropic?: string;
21
+ openai?: string;
22
+ google?: string;
23
+ elevenlabs?: string;
24
+ runway?: string;
25
+ kling?: string;
26
+ imgbb?: string;
27
+ replicate?: string;
28
+ xai?: string;
29
+ };
30
+
31
+ /** Default settings for new projects */
32
+ defaults: {
33
+ aspectRatio: "16:9" | "9:16" | "1:1" | "4:5";
34
+ exportQuality: "draft" | "standard" | "high" | "ultra";
35
+ };
36
+
37
+ /** REPL settings */
38
+ repl: {
39
+ /** Auto-save project after each command */
40
+ autoSave: boolean;
41
+ };
42
+ }
43
+
44
+ /** Provider display names */
45
+ export const PROVIDER_NAMES: Record<LLMProvider, string> = {
46
+ claude: "Claude (Anthropic)",
47
+ openai: "GPT-4 (OpenAI)",
48
+ gemini: "Gemini (Google)",
49
+ ollama: "Ollama (Local)",
50
+ xai: "Grok (xAI)",
51
+ };
52
+
53
+ /** Environment variable mappings */
54
+ export const PROVIDER_ENV_VARS: Record<string, string> = {
55
+ anthropic: "ANTHROPIC_API_KEY",
56
+ openai: "OPENAI_API_KEY",
57
+ google: "GOOGLE_API_KEY",
58
+ elevenlabs: "ELEVENLABS_API_KEY",
59
+ runway: "RUNWAY_API_SECRET",
60
+ kling: "KLING_API_KEY",
61
+ imgbb: "IMGBB_API_KEY",
62
+ replicate: "REPLICATE_API_TOKEN",
63
+ xai: "XAI_API_KEY",
64
+ };
65
+
66
+ /** Default configuration */
67
+ export function createDefaultConfig(): VibeConfig {
68
+ return {
69
+ version: "1.0.0",
70
+ llm: {
71
+ provider: "claude",
72
+ },
73
+ providers: {},
74
+ defaults: {
75
+ aspectRatio: "16:9",
76
+ exportQuality: "standard",
77
+ },
78
+ repl: {
79
+ autoSave: true,
80
+ },
81
+ };
82
+ }
@@ -0,0 +1,2 @@
1
+ export { Project, generateId } from "./project.js";
2
+ export type { ProjectFile } from "./project.js";