whale-code 6.5.4 → 6.5.6

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 (853) hide show
  1. package/README.md +39 -31
  2. package/bin/{swagmanager-mcp.js → whale-code.js} +17 -2
  3. package/dist/cli/app.js +148 -72
  4. package/dist/cli/app.js.map +1 -0
  5. package/dist/cli/chat/AgentSelector.js +105 -10
  6. package/dist/cli/chat/AgentSelector.js.map +1 -0
  7. package/dist/cli/chat/ChatApp.d.ts +31 -0
  8. package/dist/cli/chat/ChatApp.js +539 -286
  9. package/dist/cli/chat/ChatApp.js.map +1 -0
  10. package/dist/cli/chat/ChatInput.js +1088 -770
  11. package/dist/cli/chat/ChatInput.js.map +1 -0
  12. package/dist/cli/chat/MarkdownText.js +39 -14
  13. package/dist/cli/chat/MarkdownText.js.map +1 -0
  14. package/dist/cli/chat/MemoryManager.js +181 -46
  15. package/dist/cli/chat/MemoryManager.js.map +1 -0
  16. package/dist/cli/chat/MessageList.d.ts +2 -3
  17. package/dist/cli/chat/MessageList.js +186 -45
  18. package/dist/cli/chat/MessageList.js.map +1 -0
  19. package/dist/cli/chat/ModelSelector.js +282 -63
  20. package/dist/cli/chat/ModelSelector.js.map +1 -0
  21. package/dist/cli/chat/NodeManager.js +165 -75
  22. package/dist/cli/chat/NodeManager.js.map +1 -0
  23. package/dist/cli/chat/NodeSelector.js +171 -30
  24. package/dist/cli/chat/NodeSelector.js.map +1 -0
  25. package/dist/cli/chat/PlanApproval.js +281 -57
  26. package/dist/cli/chat/PlanApproval.js.map +1 -0
  27. package/dist/cli/chat/RewindViewer.js +559 -144
  28. package/dist/cli/chat/RewindViewer.js.map +1 -0
  29. package/dist/cli/chat/SessionManager.js +137 -30
  30. package/dist/cli/chat/SessionManager.js.map +1 -0
  31. package/dist/cli/chat/SlashMenu.js +293 -164
  32. package/dist/cli/chat/SlashMenu.js.map +1 -0
  33. package/dist/cli/chat/StatusBar.js +172 -9
  34. package/dist/cli/chat/StatusBar.js.map +1 -0
  35. package/dist/cli/chat/StoreSelector.js +147 -18
  36. package/dist/cli/chat/StoreSelector.js.map +1 -0
  37. package/dist/cli/chat/StreamingText.d.ts +1 -5
  38. package/dist/cli/chat/StreamingText.js +22 -7
  39. package/dist/cli/chat/StreamingText.js.map +1 -0
  40. package/dist/cli/chat/SubagentPanel.d.ts +1 -2
  41. package/dist/cli/chat/SubagentPanel.js +612 -72
  42. package/dist/cli/chat/SubagentPanel.js.map +1 -0
  43. package/dist/cli/chat/TeamPanel.d.ts +1 -0
  44. package/dist/cli/chat/TeamPanel.js +230 -30
  45. package/dist/cli/chat/TeamPanel.js.map +1 -0
  46. package/dist/cli/chat/ThemeSelector.js +84 -24
  47. package/dist/cli/chat/ThemeSelector.js.map +1 -0
  48. package/dist/cli/chat/ToolIndicator.js +1476 -371
  49. package/dist/cli/chat/ToolIndicator.js.map +1 -0
  50. package/dist/cli/chat/hooks/useAgentLoop.d.ts +1 -0
  51. package/dist/cli/chat/hooks/useAgentLoop.js +481 -367
  52. package/dist/cli/chat/hooks/useAgentLoop.js.map +1 -0
  53. package/dist/cli/chat/hooks/useSlashCommands.d.ts +3 -14
  54. package/dist/cli/chat/hooks/useSlashCommands.js +744 -572
  55. package/dist/cli/chat/hooks/useSlashCommands.js.map +1 -0
  56. package/dist/cli/commands/config-cmd.js +56 -57
  57. package/dist/cli/commands/config-cmd.js.map +1 -0
  58. package/dist/cli/commands/db.js +184 -169
  59. package/dist/cli/commands/db.js.map +1 -0
  60. package/dist/cli/commands/doctor.js +212 -122
  61. package/dist/cli/commands/doctor.js.map +1 -0
  62. package/dist/cli/commands/init.js +211 -244
  63. package/dist/cli/commands/init.js.map +1 -0
  64. package/dist/cli/commands/mcp.js +127 -122
  65. package/dist/cli/commands/mcp.js.map +1 -0
  66. package/dist/cli/login/LoginApp.js +355 -141
  67. package/dist/cli/login/LoginApp.js.map +1 -0
  68. package/dist/cli/print-mode.js +196 -177
  69. package/dist/cli/print-mode.js.map +1 -0
  70. package/dist/cli/serve-mode.js +615 -530
  71. package/dist/cli/serve-mode.js.map +1 -0
  72. package/dist/cli/services/agent-config.d.ts +29 -0
  73. package/dist/cli/services/agent-config.js +91 -0
  74. package/dist/cli/services/agent-config.js.map +1 -0
  75. package/dist/cli/services/agent-definitions.d.ts +4 -1
  76. package/dist/cli/services/agent-definitions.js +97 -56
  77. package/dist/cli/services/agent-definitions.js.map +1 -0
  78. package/dist/cli/services/agent-events.js +225 -162
  79. package/dist/cli/services/agent-events.js.map +1 -0
  80. package/dist/cli/services/agent-loop.js +978 -669
  81. package/dist/cli/services/agent-loop.js.map +1 -0
  82. package/dist/cli/services/agent-worker-base.d.ts +35 -5
  83. package/dist/cli/services/agent-worker-base.js +337 -153
  84. package/dist/cli/services/agent-worker-base.js.map +1 -0
  85. package/dist/cli/services/api-retry.js +69 -64
  86. package/dist/cli/services/api-retry.js.map +1 -0
  87. package/dist/cli/services/auth-service.d.ts +3 -3
  88. package/dist/cli/services/auth-service.js +209 -132
  89. package/dist/cli/services/auth-service.js.map +1 -0
  90. package/dist/cli/services/background-processes.js +343 -267
  91. package/dist/cli/services/background-processes.js.map +1 -0
  92. package/dist/cli/services/browser-auth.d.ts +2 -2
  93. package/dist/cli/services/browser-auth.js +159 -118
  94. package/dist/cli/services/browser-auth.js.map +1 -0
  95. package/dist/cli/services/claude-md-loader.js +40 -36
  96. package/dist/cli/services/claude-md-loader.js.map +1 -0
  97. package/dist/cli/services/config-store.d.ts +9 -4
  98. package/dist/cli/services/config-store.js +164 -117
  99. package/dist/cli/services/config-store.js.map +1 -0
  100. package/dist/cli/services/debug-log.d.ts +1 -1
  101. package/dist/cli/services/debug-log.js +34 -35
  102. package/dist/cli/services/debug-log.js.map +1 -0
  103. package/dist/cli/services/env-detect.d.ts +7 -0
  104. package/dist/cli/services/env-detect.js +9 -0
  105. package/dist/cli/services/env-detect.js.map +1 -0
  106. package/dist/cli/services/error-logger.d.ts +2 -3
  107. package/dist/cli/services/error-logger.js +189 -180
  108. package/dist/cli/services/error-logger.js.map +1 -0
  109. package/dist/cli/services/file-history.d.ts +1 -1
  110. package/dist/cli/services/file-history.js +50 -54
  111. package/dist/cli/services/file-history.js.map +1 -0
  112. package/dist/cli/services/format-server-response.js +332 -372
  113. package/dist/cli/services/format-server-response.js.map +1 -0
  114. package/dist/cli/services/git-context.js +61 -45
  115. package/dist/cli/services/git-context.js.map +1 -0
  116. package/dist/cli/services/hooks.d.ts +2 -2
  117. package/dist/cli/services/hooks.js +195 -180
  118. package/dist/cli/services/hooks.js.map +1 -0
  119. package/dist/cli/services/ink-incremental.d.ts +19 -0
  120. package/dist/cli/services/ink-incremental.js +59 -0
  121. package/dist/cli/services/ink-incremental.js.map +1 -0
  122. package/dist/cli/services/ink-resize-fix.js +54 -44
  123. package/dist/cli/services/ink-resize-fix.js.map +1 -0
  124. package/dist/cli/services/ink-sync-output.d.ts +12 -0
  125. package/dist/cli/services/ink-sync-output.js +16 -0
  126. package/dist/cli/services/ink-sync-output.js.map +1 -0
  127. package/dist/cli/services/interactive-tools.js +268 -212
  128. package/dist/cli/services/interactive-tools.js.map +1 -0
  129. package/dist/cli/services/keybinding-manager.d.ts +11 -1
  130. package/dist/cli/services/keybinding-manager.js +126 -63
  131. package/dist/cli/services/keybinding-manager.js.map +1 -0
  132. package/dist/cli/services/local-tools.d.ts +1 -1
  133. package/dist/cli/services/local-tools.js +939 -656
  134. package/dist/cli/services/local-tools.js.map +1 -0
  135. package/dist/cli/services/lsp-manager.js +757 -594
  136. package/dist/cli/services/lsp-manager.js.map +1 -0
  137. package/dist/cli/services/mcp-client.d.ts +1 -1
  138. package/dist/cli/services/mcp-client.js +173 -134
  139. package/dist/cli/services/mcp-client.js.map +1 -0
  140. package/dist/cli/services/memory-manager.js +53 -40
  141. package/dist/cli/services/memory-manager.js.map +1 -0
  142. package/dist/cli/services/model-manager.js +55 -40
  143. package/dist/cli/services/model-manager.js.map +1 -0
  144. package/dist/cli/services/model-router.js +115 -85
  145. package/dist/cli/services/model-router.js.map +1 -0
  146. package/dist/cli/services/paths.d.ts +30 -0
  147. package/dist/cli/services/paths.js +81 -0
  148. package/dist/cli/services/paths.js.map +1 -0
  149. package/dist/cli/services/permission-modes.js +32 -25
  150. package/dist/cli/services/permission-modes.js.map +1 -0
  151. package/dist/cli/services/rewind.js +182 -168
  152. package/dist/cli/services/rewind.js.map +1 -0
  153. package/dist/cli/services/ripgrep.js +115 -115
  154. package/dist/cli/services/ripgrep.js.map +1 -0
  155. package/dist/cli/services/sandbox.d.ts +1 -1
  156. package/dist/cli/services/sandbox.js +58 -37
  157. package/dist/cli/services/sandbox.js.map +1 -0
  158. package/dist/cli/services/server-tools.js +738 -565
  159. package/dist/cli/services/server-tools.js.map +1 -0
  160. package/dist/cli/services/session-persistence.js +69 -74
  161. package/dist/cli/services/session-persistence.js.map +1 -0
  162. package/dist/cli/services/subagent-worker.js +42 -27
  163. package/dist/cli/services/subagent-worker.js.map +1 -0
  164. package/dist/cli/services/subagent.d.ts +2 -0
  165. package/dist/cli/services/subagent.js +606 -430
  166. package/dist/cli/services/subagent.js.map +1 -0
  167. package/dist/cli/services/system-prompt.js +86 -78
  168. package/dist/cli/services/system-prompt.js.map +1 -0
  169. package/dist/cli/services/task-decomposer.d.ts +1 -1
  170. package/dist/cli/services/task-decomposer.js +172 -139
  171. package/dist/cli/services/task-decomposer.js.map +1 -0
  172. package/dist/cli/services/team-lead.d.ts +2 -2
  173. package/dist/cli/services/team-lead.js +727 -529
  174. package/dist/cli/services/team-lead.js.map +1 -0
  175. package/dist/cli/services/team-state.js +319 -319
  176. package/dist/cli/services/team-state.js.map +1 -0
  177. package/dist/cli/services/teammate.d.ts +8 -2
  178. package/dist/cli/services/teammate.js +862 -560
  179. package/dist/cli/services/teammate.js.map +1 -0
  180. package/dist/cli/services/telemetry.d.ts +6 -1
  181. package/dist/cli/services/telemetry.js +180 -157
  182. package/dist/cli/services/telemetry.js.map +1 -0
  183. package/dist/cli/services/tools/agent-tools.d.ts +3 -3
  184. package/dist/cli/services/tools/agent-tools.js +480 -322
  185. package/dist/cli/services/tools/agent-tools.js.map +1 -0
  186. package/dist/cli/services/tools/file-ops.js +563 -450
  187. package/dist/cli/services/tools/file-ops.js.map +1 -0
  188. package/dist/cli/services/tools/search-tools.js +231 -162
  189. package/dist/cli/services/tools/search-tools.js.map +1 -0
  190. package/dist/cli/services/tools/shell-exec.js +197 -151
  191. package/dist/cli/services/tools/shell-exec.js.map +1 -0
  192. package/dist/cli/services/tools/task-manager.js +206 -173
  193. package/dist/cli/services/tools/task-manager.js.map +1 -0
  194. package/dist/cli/services/tools/web-tools.js +388 -341
  195. package/dist/cli/services/tools/web-tools.js.map +1 -0
  196. package/dist/cli/setup/SetupApp.d.ts +2 -2
  197. package/dist/cli/setup/SetupApp.js +608 -160
  198. package/dist/cli/setup/SetupApp.js.map +1 -0
  199. package/dist/cli/shared/ErrorBoundary.d.ts +22 -0
  200. package/dist/cli/shared/ErrorBoundary.js +73 -0
  201. package/dist/cli/shared/ErrorBoundary.js.map +1 -0
  202. package/dist/cli/shared/MatrixIntro.js +66 -69
  203. package/dist/cli/shared/MatrixIntro.js.map +1 -0
  204. package/dist/cli/shared/SpinnerSlot.d.ts +14 -0
  205. package/dist/cli/shared/SpinnerSlot.js +63 -0
  206. package/dist/cli/shared/SpinnerSlot.js.map +1 -0
  207. package/dist/cli/shared/Theme.d.ts +1 -1
  208. package/dist/cli/shared/Theme.js +136 -92
  209. package/dist/cli/shared/Theme.js.map +1 -0
  210. package/dist/cli/shared/WhaleBanner.js +99 -11
  211. package/dist/cli/shared/WhaleBanner.js.map +1 -0
  212. package/dist/cli/shared/markdown.d.ts +3 -1
  213. package/dist/cli/shared/markdown.js +736 -674
  214. package/dist/cli/shared/markdown.js.map +1 -0
  215. package/dist/cli/shared/marked-terminal.d.js +2 -0
  216. package/dist/cli/shared/marked-terminal.d.js.map +1 -0
  217. package/dist/cli/shared/theme-manager.js +99 -90
  218. package/dist/cli/shared/theme-manager.js.map +1 -0
  219. package/dist/cli/shared/theme-presets.js +256 -254
  220. package/dist/cli/shared/theme-presets.js.map +1 -0
  221. package/dist/cli/status/StatusApp.js +235 -86
  222. package/dist/cli/status/StatusApp.js.map +1 -0
  223. package/dist/cli/stores/StoreApp.js +275 -65
  224. package/dist/cli/stores/StoreApp.js.map +1 -0
  225. package/dist/index.d.ts +2 -2
  226. package/dist/index.js +509 -396
  227. package/dist/index.js.map +1 -0
  228. package/dist/local-agent/connection.d.ts +2 -2
  229. package/dist/local-agent/connection.js +352 -293
  230. package/dist/local-agent/connection.js.map +1 -0
  231. package/dist/local-agent/discovery.js +259 -122
  232. package/dist/local-agent/discovery.js.map +1 -0
  233. package/dist/local-agent/executor.js +216 -193
  234. package/dist/local-agent/executor.js.map +1 -0
  235. package/dist/local-agent/index.d.ts +2 -2
  236. package/dist/local-agent/index.js +156 -156
  237. package/dist/local-agent/index.js.map +1 -0
  238. package/dist/node/adapters/base.js +18 -8
  239. package/dist/node/adapters/base.js.map +1 -0
  240. package/dist/node/adapters/discord.js +286 -275
  241. package/dist/node/adapters/discord.js.map +1 -0
  242. package/dist/node/adapters/email.js +189 -202
  243. package/dist/node/adapters/email.js.map +1 -0
  244. package/dist/node/adapters/imessage.js +145 -142
  245. package/dist/node/adapters/imessage.js.map +1 -0
  246. package/dist/node/adapters/slack.js +237 -236
  247. package/dist/node/adapters/slack.js.map +1 -0
  248. package/dist/node/adapters/sms.js +149 -151
  249. package/dist/node/adapters/sms.js.map +1 -0
  250. package/dist/node/adapters/telegram.js +88 -92
  251. package/dist/node/adapters/telegram.js.map +1 -0
  252. package/dist/node/adapters/webchat.js +160 -136
  253. package/dist/node/adapters/webchat.js.map +1 -0
  254. package/dist/node/adapters/whatsapp.js +212 -215
  255. package/dist/node/adapters/whatsapp.js.map +1 -0
  256. package/dist/node/cli.js +884 -653
  257. package/dist/node/cli.js.map +1 -0
  258. package/dist/node/config.js +20 -18
  259. package/dist/node/config.js.map +1 -0
  260. package/dist/node/gateway-client.js +191 -181
  261. package/dist/node/gateway-client.js.map +1 -0
  262. package/dist/node/portal/clipboard.js +161 -130
  263. package/dist/node/portal/clipboard.js.map +1 -0
  264. package/dist/node/portal/discovery.js +51 -45
  265. package/dist/node/portal/discovery.js.map +1 -0
  266. package/dist/node/portal/forward.js +64 -58
  267. package/dist/node/portal/forward.js.map +1 -0
  268. package/dist/node/portal/index.js +246 -221
  269. package/dist/node/portal/index.js.map +1 -0
  270. package/dist/node/portal/multiplexer.js +192 -182
  271. package/dist/node/portal/multiplexer.js.map +1 -0
  272. package/dist/node/portal/permissions.js +102 -70
  273. package/dist/node/portal/permissions.js.map +1 -0
  274. package/dist/node/portal/protocol.js +153 -116
  275. package/dist/node/portal/protocol.js.map +1 -0
  276. package/dist/node/portal/screen.js +80 -69
  277. package/dist/node/portal/screen.js.map +1 -0
  278. package/dist/node/portal/session.js +124 -117
  279. package/dist/node/portal/session.js.map +1 -0
  280. package/dist/node/portal/shell.js +140 -113
  281. package/dist/node/portal/shell.js.map +1 -0
  282. package/dist/node/portal/stream.js +77 -75
  283. package/dist/node/portal/stream.js.map +1 -0
  284. package/dist/node/portal/transfer.js +190 -167
  285. package/dist/node/portal/transfer.js.map +1 -0
  286. package/dist/node/portal/ui.js +124 -99
  287. package/dist/node/portal/ui.js.map +1 -0
  288. package/dist/node/remote-desktop/compile-helper.js +50 -45
  289. package/dist/node/remote-desktop/compile-helper.js.map +1 -0
  290. package/dist/node/remote-desktop/index.js +215 -187
  291. package/dist/node/remote-desktop/index.js.map +1 -0
  292. package/dist/node/remote-desktop/protocol.js +45 -29
  293. package/dist/node/remote-desktop/protocol.js.map +1 -0
  294. package/dist/node/runtime.js +493 -410
  295. package/dist/node/runtime.js.map +1 -0
  296. package/dist/server/handlers/__test-utils__/test-db.js +39 -89
  297. package/dist/server/handlers/__test-utils__/test-db.js.map +1 -0
  298. package/dist/server/handlers/analytics.js +467 -261
  299. package/dist/server/handlers/analytics.js.map +1 -0
  300. package/dist/server/handlers/api-docs.d.ts +6 -0
  301. package/dist/server/handlers/api-docs.js +1613 -0
  302. package/dist/server/handlers/api-docs.js.map +1 -0
  303. package/dist/server/handlers/api-keys.js +295 -232
  304. package/dist/server/handlers/api-keys.js.map +1 -0
  305. package/dist/server/handlers/billing.js +330 -239
  306. package/dist/server/handlers/billing.js.map +1 -0
  307. package/dist/server/handlers/browser.js +468 -395
  308. package/dist/server/handlers/browser.js.map +1 -0
  309. package/dist/server/handlers/catalog.js +1377 -978
  310. package/dist/server/handlers/catalog.js.map +1 -0
  311. package/dist/server/handlers/clickhouse.js +157 -109
  312. package/dist/server/handlers/clickhouse.js.map +1 -0
  313. package/dist/server/handlers/comms.d.ts +0 -53
  314. package/dist/server/handlers/comms.js +1443 -970
  315. package/dist/server/handlers/comms.js.map +1 -0
  316. package/dist/server/handlers/creations.js +461 -394
  317. package/dist/server/handlers/creations.js.map +1 -0
  318. package/dist/server/handlers/crm.js +1082 -791
  319. package/dist/server/handlers/crm.js.map +1 -0
  320. package/dist/server/handlers/discovery.js +251 -232
  321. package/dist/server/handlers/discovery.js.map +1 -0
  322. package/dist/server/handlers/embeddings.js +241 -164
  323. package/dist/server/handlers/embeddings.js.map +1 -0
  324. package/dist/server/handlers/enrichment.js +887 -718
  325. package/dist/server/handlers/enrichment.js.map +1 -0
  326. package/dist/server/handlers/image-gen.js +467 -376
  327. package/dist/server/handlers/image-gen.js.map +1 -0
  328. package/dist/server/handlers/inventory.js +797 -424
  329. package/dist/server/handlers/inventory.js.map +1 -0
  330. package/dist/server/handlers/kali.js +272 -230
  331. package/dist/server/handlers/kali.js.map +1 -0
  332. package/dist/server/handlers/llm-providers.js +803 -580
  333. package/dist/server/handlers/llm-providers.js.map +1 -0
  334. package/dist/server/handlers/local-agent.js +133 -105
  335. package/dist/server/handlers/local-agent.js.map +1 -0
  336. package/dist/server/handlers/media.js +1179 -857
  337. package/dist/server/handlers/media.js.map +1 -0
  338. package/dist/server/handlers/meta-ads.js +2669 -2093
  339. package/dist/server/handlers/meta-ads.js.map +1 -0
  340. package/dist/server/handlers/nodes.js +1321 -913
  341. package/dist/server/handlers/nodes.js.map +1 -0
  342. package/dist/server/handlers/operations.js +183 -157
  343. package/dist/server/handlers/operations.js.map +1 -0
  344. package/dist/server/handlers/platform.js +346 -210
  345. package/dist/server/handlers/platform.js.map +1 -0
  346. package/dist/server/handlers/remove-bg.js +118 -86
  347. package/dist/server/handlers/remove-bg.js.map +1 -0
  348. package/dist/server/handlers/storefront.js +586 -446
  349. package/dist/server/handlers/storefront.js.map +1 -0
  350. package/dist/server/handlers/supply-chain.js +546 -326
  351. package/dist/server/handlers/supply-chain.js.map +1 -0
  352. package/dist/server/handlers/transcription.js +106 -97
  353. package/dist/server/handlers/transcription.js.map +1 -0
  354. package/dist/server/handlers/video-gen.js +593 -424
  355. package/dist/server/handlers/video-gen.js.map +1 -0
  356. package/dist/server/handlers/voice.js +1458 -1017
  357. package/dist/server/handlers/voice.js.map +1 -0
  358. package/dist/server/handlers/workflow-steps.js +2837 -2116
  359. package/dist/server/handlers/workflow-steps.js.map +1 -0
  360. package/dist/server/handlers/workflows.js +1630 -933
  361. package/dist/server/handlers/workflows.js.map +1 -0
  362. package/dist/server/index.js +3166 -2390
  363. package/dist/server/index.js.map +1 -0
  364. package/dist/server/lib/batch-client.js +471 -409
  365. package/dist/server/lib/batch-client.js.map +1 -0
  366. package/dist/server/lib/clickhouse-buffer.js +118 -104
  367. package/dist/server/lib/clickhouse-buffer.js.map +1 -0
  368. package/dist/server/lib/clickhouse-client.js +107 -107
  369. package/dist/server/lib/clickhouse-client.js.map +1 -0
  370. package/dist/server/lib/coa-renderer.js +1786 -356
  371. package/dist/server/lib/coa-renderer.js.map +1 -0
  372. package/dist/server/lib/code-worker-pool.js +227 -177
  373. package/dist/server/lib/code-worker-pool.js.map +1 -0
  374. package/dist/server/lib/code-worker.js +174 -164
  375. package/dist/server/lib/code-worker.js.map +1 -0
  376. package/dist/server/lib/compaction-service.d.ts +2 -12
  377. package/dist/server/lib/compaction-service.js +74 -184
  378. package/dist/server/lib/compaction-service.js.map +1 -0
  379. package/dist/server/lib/logger.js +36 -24
  380. package/dist/server/lib/logger.js.map +1 -0
  381. package/dist/server/lib/otel.js +101 -80
  382. package/dist/server/lib/otel.js.map +1 -0
  383. package/dist/server/lib/pdf-renderer.d.ts +1 -1
  384. package/dist/server/lib/pdf-renderer.js +954 -776
  385. package/dist/server/lib/pdf-renderer.js.map +1 -0
  386. package/dist/server/lib/prompt-sanitizer.js +188 -108
  387. package/dist/server/lib/prompt-sanitizer.js.map +1 -0
  388. package/dist/server/lib/provider-capabilities.js +136 -138
  389. package/dist/server/lib/provider-capabilities.js.map +1 -0
  390. package/dist/server/lib/provider-failover.js +190 -168
  391. package/dist/server/lib/provider-failover.js.map +1 -0
  392. package/dist/server/lib/rate-limiter.js +186 -117
  393. package/dist/server/lib/rate-limiter.js.map +1 -0
  394. package/dist/server/lib/react-pdf-layout.js +551 -382
  395. package/dist/server/lib/react-pdf-layout.js.map +1 -0
  396. package/dist/server/lib/server-agent-loop.d.ts +9 -0
  397. package/dist/server/lib/server-agent-loop.js +906 -624
  398. package/dist/server/lib/server-agent-loop.js.map +1 -0
  399. package/dist/server/lib/server-subagent.d.ts +2 -0
  400. package/dist/server/lib/server-subagent.js +260 -162
  401. package/dist/server/lib/server-subagent.js.map +1 -0
  402. package/dist/server/lib/session-checkpoint.js +105 -96
  403. package/dist/server/lib/session-checkpoint.js.map +1 -0
  404. package/dist/server/lib/ssrf-guard.js +193 -184
  405. package/dist/server/lib/ssrf-guard.js.map +1 -0
  406. package/dist/server/lib/supabase-client.js +94 -82
  407. package/dist/server/lib/supabase-client.js.map +1 -0
  408. package/dist/server/lib/template-resolver.js +154 -176
  409. package/dist/server/lib/template-resolver.js.map +1 -0
  410. package/dist/server/lib/utils.js +242 -133
  411. package/dist/server/lib/utils.js.map +1 -0
  412. package/dist/server/local-agent-gateway.d.ts +2 -2
  413. package/dist/server/local-agent-gateway.js +785 -627
  414. package/dist/server/local-agent-gateway.js.map +1 -0
  415. package/dist/server/providers/anthropic.js +254 -176
  416. package/dist/server/providers/anthropic.js.map +1 -0
  417. package/dist/server/providers/bedrock.js +221 -162
  418. package/dist/server/providers/bedrock.js.map +1 -0
  419. package/dist/server/providers/gemini.js +548 -418
  420. package/dist/server/providers/gemini.js.map +1 -0
  421. package/dist/server/providers/openai.js +571 -437
  422. package/dist/server/providers/openai.js.map +1 -0
  423. package/dist/server/providers/registry.js +23 -18
  424. package/dist/server/providers/registry.js.map +1 -0
  425. package/dist/server/providers/shared.js +123 -95
  426. package/dist/server/providers/shared.js.map +1 -0
  427. package/dist/server/providers/types.js +1 -11
  428. package/dist/server/providers/types.js.map +1 -0
  429. package/dist/server/proxy-handlers.js +209 -165
  430. package/dist/server/proxy-handlers.js.map +1 -0
  431. package/dist/server/tool-router.d.ts +13 -0
  432. package/dist/server/tool-router.js +960 -598
  433. package/dist/server/tool-router.js.map +1 -0
  434. package/dist/server/validation.js +248 -188
  435. package/dist/server/validation.js.map +1 -0
  436. package/dist/server/worker.js +202 -133
  437. package/dist/server/worker.js.map +1 -0
  438. package/dist/setup.d.ts +2 -2
  439. package/dist/setup.js +151 -147
  440. package/dist/setup.js.map +1 -0
  441. package/dist/shared/agent-core.d.ts +191 -24
  442. package/dist/shared/agent-core.js +971 -462
  443. package/dist/shared/agent-core.js.map +1 -0
  444. package/dist/shared/anthropic-types.js +1 -6
  445. package/dist/shared/anthropic-types.js.map +1 -0
  446. package/dist/shared/api-client.d.ts +17 -9
  447. package/dist/shared/api-client.js +419 -327
  448. package/dist/shared/api-client.js.map +1 -0
  449. package/dist/shared/compaction.d.ts +36 -0
  450. package/dist/shared/compaction.js +138 -0
  451. package/dist/shared/compaction.js.map +1 -0
  452. package/dist/shared/constants.js +67 -64
  453. package/dist/shared/constants.js.map +1 -0
  454. package/dist/shared/sse-parser.js +221 -219
  455. package/dist/shared/sse-parser.js.map +1 -0
  456. package/dist/shared/tool-dispatch.d.ts +4 -2
  457. package/dist/shared/tool-dispatch.js +226 -165
  458. package/dist/shared/tool-dispatch.js.map +1 -0
  459. package/dist/shared/types.js +1 -6
  460. package/dist/shared/types.js.map +1 -0
  461. package/dist/types/cli-highlight.d.js +2 -0
  462. package/dist/types/cli-highlight.d.js.map +1 -0
  463. package/dist/types/diff.d.js +2 -0
  464. package/dist/types/diff.d.js.map +1 -0
  465. package/dist/types/pdf-parse.d.js +2 -0
  466. package/dist/types/pdf-parse.d.js.map +1 -0
  467. package/dist/updater.d.ts +1 -1
  468. package/dist/updater.js +118 -92
  469. package/dist/updater.js.map +1 -0
  470. package/dist/webchat/widget.js +227 -380
  471. package/dist/webchat/widget.js.map +1 -0
  472. package/package.json +22 -10
  473. package/vendor/ink/build/ansi-tokenizer.d.ts +38 -0
  474. package/vendor/ink/build/ansi-tokenizer.js +316 -0
  475. package/vendor/ink/build/ansi-tokenizer.js.map +1 -0
  476. package/vendor/ink/build/apply-styles.js +175 -0
  477. package/vendor/ink/build/build-layout.js +77 -0
  478. package/vendor/ink/build/calculate-wrapped-text.js +53 -0
  479. package/vendor/ink/build/colorize.d.ts +3 -0
  480. package/vendor/ink/build/colorize.js +48 -0
  481. package/vendor/ink/build/colorize.js.map +1 -0
  482. package/vendor/ink/build/components/AccessibilityContext.d.ts +3 -0
  483. package/vendor/ink/build/components/AccessibilityContext.js +5 -0
  484. package/vendor/ink/build/components/AccessibilityContext.js.map +1 -0
  485. package/vendor/ink/build/components/App.d.ts +18 -0
  486. package/vendor/ink/build/components/App.js +351 -0
  487. package/vendor/ink/build/components/App.js.map +1 -0
  488. package/vendor/ink/build/components/AppContext.d.ts +15 -0
  489. package/vendor/ink/build/components/AppContext.js +11 -0
  490. package/vendor/ink/build/components/AppContext.js.map +1 -0
  491. package/vendor/ink/build/components/BackgroundContext.d.ts +4 -0
  492. package/vendor/ink/build/components/BackgroundContext.js +3 -0
  493. package/vendor/ink/build/components/BackgroundContext.js.map +1 -0
  494. package/vendor/ink/build/components/Box.d.ts +117 -0
  495. package/vendor/ink/build/components/Box.js +34 -0
  496. package/vendor/ink/build/components/Box.js.map +1 -0
  497. package/vendor/ink/build/components/Color.js +62 -0
  498. package/vendor/ink/build/components/Cursor.d.ts +83 -0
  499. package/vendor/ink/build/components/Cursor.js +53 -0
  500. package/vendor/ink/build/components/Cursor.js.map +1 -0
  501. package/vendor/ink/build/components/CursorContext.d.ts +11 -0
  502. package/vendor/ink/build/components/CursorContext.js +8 -0
  503. package/vendor/ink/build/components/CursorContext.js.map +1 -0
  504. package/vendor/ink/build/components/ErrorBoundary.d.ts +18 -0
  505. package/vendor/ink/build/components/ErrorBoundary.js +23 -0
  506. package/vendor/ink/build/components/ErrorBoundary.js.map +1 -0
  507. package/vendor/ink/build/components/ErrorOverview.d.ts +6 -0
  508. package/vendor/ink/build/components/ErrorOverview.js +84 -0
  509. package/vendor/ink/build/components/ErrorOverview.js.map +1 -0
  510. package/vendor/ink/build/components/FocusContext.d.ts +16 -0
  511. package/vendor/ink/build/components/FocusContext.js +17 -0
  512. package/vendor/ink/build/components/FocusContext.js.map +1 -0
  513. package/vendor/ink/build/components/Newline.d.ts +13 -0
  514. package/vendor/ink/build/components/Newline.js +8 -0
  515. package/vendor/ink/build/components/Newline.js.map +1 -0
  516. package/vendor/ink/build/components/Spacer.d.ts +7 -0
  517. package/vendor/ink/build/components/Spacer.js +11 -0
  518. package/vendor/ink/build/components/Spacer.js.map +1 -0
  519. package/vendor/ink/build/components/Static.d.ts +24 -0
  520. package/vendor/ink/build/components/Static.js +28 -0
  521. package/vendor/ink/build/components/Static.js.map +1 -0
  522. package/vendor/ink/build/components/StderrContext.d.ts +15 -0
  523. package/vendor/ink/build/components/StderrContext.js +13 -0
  524. package/vendor/ink/build/components/StderrContext.js.map +1 -0
  525. package/vendor/ink/build/components/StdinContext.d.ts +22 -0
  526. package/vendor/ink/build/components/StdinContext.js +19 -0
  527. package/vendor/ink/build/components/StdinContext.js.map +1 -0
  528. package/vendor/ink/build/components/StdoutContext.d.ts +15 -0
  529. package/vendor/ink/build/components/StdoutContext.js +13 -0
  530. package/vendor/ink/build/components/StdoutContext.js.map +1 -0
  531. package/vendor/ink/build/components/Text.d.ts +55 -0
  532. package/vendor/ink/build/components/Text.js +50 -0
  533. package/vendor/ink/build/components/Text.js.map +1 -0
  534. package/vendor/ink/build/components/Transform.d.ts +16 -0
  535. package/vendor/ink/build/components/Transform.js +15 -0
  536. package/vendor/ink/build/components/Transform.js.map +1 -0
  537. package/vendor/ink/build/cursor-helpers.d.ts +38 -0
  538. package/vendor/ink/build/cursor-helpers.js +56 -0
  539. package/vendor/ink/build/cursor-helpers.js.map +1 -0
  540. package/vendor/ink/build/devtools-window-polyfill.d.ts +1 -0
  541. package/vendor/ink/build/devtools-window-polyfill.js +65 -0
  542. package/vendor/ink/build/devtools-window-polyfill.js.map +1 -0
  543. package/vendor/ink/build/devtools.d.ts +1 -0
  544. package/vendor/ink/build/devtools.js +11 -0
  545. package/vendor/ink/build/devtools.js.map +1 -0
  546. package/vendor/ink/build/dom.d.ts +56 -0
  547. package/vendor/ink/build/dom.js +124 -0
  548. package/vendor/ink/build/dom.js.map +1 -0
  549. package/vendor/ink/build/experimental/apply-style.js +140 -0
  550. package/vendor/ink/build/experimental/dom.js +123 -0
  551. package/vendor/ink/build/experimental/output.js +91 -0
  552. package/vendor/ink/build/experimental/reconciler.js +141 -0
  553. package/vendor/ink/build/experimental/renderer.js +81 -0
  554. package/vendor/ink/build/get-max-width.d.ts +3 -0
  555. package/vendor/ink/build/get-max-width.js +10 -0
  556. package/vendor/ink/build/get-max-width.js.map +1 -0
  557. package/vendor/ink/build/hooks/use-app.d.ts +5 -0
  558. package/vendor/ink/build/hooks/use-app.js +8 -0
  559. package/vendor/ink/build/hooks/use-app.js.map +1 -0
  560. package/vendor/ink/build/hooks/use-cursor.d.ts +12 -0
  561. package/vendor/ink/build/hooks/use-cursor.js +29 -0
  562. package/vendor/ink/build/hooks/use-cursor.js.map +1 -0
  563. package/vendor/ink/build/hooks/use-focus-manager.d.ts +28 -0
  564. package/vendor/ink/build/hooks/use-focus-manager.js +17 -0
  565. package/vendor/ink/build/hooks/use-focus-manager.js.map +1 -0
  566. package/vendor/ink/build/hooks/use-focus.d.ts +29 -0
  567. package/vendor/ink/build/hooks/use-focus.js +42 -0
  568. package/vendor/ink/build/hooks/use-focus.js.map +1 -0
  569. package/vendor/ink/build/hooks/use-input.d.ts +131 -0
  570. package/vendor/ink/build/hooks/use-input.js +124 -0
  571. package/vendor/ink/build/hooks/use-input.js.map +1 -0
  572. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.d.ts +5 -0
  573. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js +11 -0
  574. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
  575. package/vendor/ink/build/hooks/use-stderr.d.ts +5 -0
  576. package/vendor/ink/build/hooks/use-stderr.js +8 -0
  577. package/vendor/ink/build/hooks/use-stderr.js.map +1 -0
  578. package/vendor/ink/build/hooks/use-stdin.d.ts +5 -0
  579. package/vendor/ink/build/hooks/use-stdin.js +8 -0
  580. package/vendor/ink/build/hooks/use-stdin.js.map +1 -0
  581. package/vendor/ink/build/hooks/use-stdout.d.ts +5 -0
  582. package/vendor/ink/build/hooks/use-stdout.js +8 -0
  583. package/vendor/ink/build/hooks/use-stdout.js.map +1 -0
  584. package/vendor/ink/build/hooks/useInput.js +38 -0
  585. package/vendor/ink/build/index.d.ts +34 -0
  586. package/vendor/ink/build/index.js +20 -0
  587. package/vendor/ink/build/index.js.map +1 -0
  588. package/vendor/ink/build/ink.d.ts +90 -0
  589. package/vendor/ink/build/ink.js +654 -0
  590. package/vendor/ink/build/ink.js.map +1 -0
  591. package/vendor/ink/build/input-parser.d.ts +7 -0
  592. package/vendor/ink/build/input-parser.js +154 -0
  593. package/vendor/ink/build/input-parser.js.map +1 -0
  594. package/vendor/ink/build/instance.js +205 -0
  595. package/vendor/ink/build/instances.d.ts +3 -0
  596. package/vendor/ink/build/instances.js +8 -0
  597. package/vendor/ink/build/instances.js.map +1 -0
  598. package/vendor/ink/build/kitty-keyboard.d.ts +23 -0
  599. package/vendor/ink/build/kitty-keyboard.js +32 -0
  600. package/vendor/ink/build/kitty-keyboard.js.map +1 -0
  601. package/vendor/ink/build/layout.d.ts +7 -0
  602. package/vendor/ink/build/layout.js +33 -0
  603. package/vendor/ink/build/layout.js.map +1 -0
  604. package/vendor/ink/build/log-update.d.ts +19 -0
  605. package/vendor/ink/build/log-update.js +243 -0
  606. package/vendor/ink/build/log-update.js.map +1 -0
  607. package/vendor/ink/build/measure-element.d.ts +16 -0
  608. package/vendor/ink/build/measure-element.js +9 -0
  609. package/vendor/ink/build/measure-element.js.map +1 -0
  610. package/vendor/ink/build/measure-text.d.ts +6 -0
  611. package/vendor/ink/build/measure-text.js +21 -0
  612. package/vendor/ink/build/measure-text.js.map +1 -0
  613. package/vendor/ink/build/options.d.ts +52 -0
  614. package/vendor/ink/build/options.js +2 -0
  615. package/vendor/ink/build/options.js.map +1 -0
  616. package/vendor/ink/build/output.d.ts +35 -0
  617. package/vendor/ink/build/output.js +183 -0
  618. package/vendor/ink/build/output.js.map +1 -0
  619. package/vendor/ink/build/parse-keypress.d.ts +22 -0
  620. package/vendor/ink/build/parse-keypress.js +493 -0
  621. package/vendor/ink/build/parse-keypress.js.map +1 -0
  622. package/vendor/ink/build/reconciler.d.ts +4 -0
  623. package/vendor/ink/build/reconciler.js +274 -0
  624. package/vendor/ink/build/reconciler.js.map +1 -0
  625. package/vendor/ink/build/render-background.d.ts +4 -0
  626. package/vendor/ink/build/render-background.js +25 -0
  627. package/vendor/ink/build/render-background.js.map +1 -0
  628. package/vendor/ink/build/render-border.d.ts +4 -0
  629. package/vendor/ink/build/render-border.js +73 -0
  630. package/vendor/ink/build/render-border.js.map +1 -0
  631. package/vendor/ink/build/render-node-to-output.d.ts +14 -0
  632. package/vendor/ink/build/render-node-to-output.js +147 -0
  633. package/vendor/ink/build/render-node-to-output.js.map +1 -0
  634. package/vendor/ink/build/render-to-string.d.ts +38 -0
  635. package/vendor/ink/build/render-to-string.js +115 -0
  636. package/vendor/ink/build/render-to-string.js.map +1 -0
  637. package/vendor/ink/build/render.d.ts +121 -0
  638. package/vendor/ink/build/render.js +55 -0
  639. package/vendor/ink/build/render.js.map +1 -0
  640. package/vendor/ink/build/renderer.d.ts +8 -0
  641. package/vendor/ink/build/renderer.js +55 -0
  642. package/vendor/ink/build/renderer.js.map +1 -0
  643. package/vendor/ink/build/sanitize-ansi.d.ts +2 -0
  644. package/vendor/ink/build/sanitize-ansi.js +27 -0
  645. package/vendor/ink/build/sanitize-ansi.js.map +1 -0
  646. package/vendor/ink/build/screen-reader-update.d.ts +13 -0
  647. package/vendor/ink/build/screen-reader-update.js +38 -0
  648. package/vendor/ink/build/screen-reader-update.js.map +1 -0
  649. package/vendor/ink/build/squash-text-nodes.d.ts +3 -0
  650. package/vendor/ink/build/squash-text-nodes.js +36 -0
  651. package/vendor/ink/build/squash-text-nodes.js.map +1 -0
  652. package/vendor/ink/build/styles.d.ts +240 -0
  653. package/vendor/ink/build/styles.js +232 -0
  654. package/vendor/ink/build/styles.js.map +1 -0
  655. package/vendor/ink/build/utils.d.ts +2 -0
  656. package/vendor/ink/build/utils.js +4 -0
  657. package/vendor/ink/build/utils.js.map +1 -0
  658. package/vendor/ink/build/wrap-text.d.ts +3 -0
  659. package/vendor/ink/build/wrap-text.js +31 -0
  660. package/vendor/ink/build/wrap-text.js.map +1 -0
  661. package/vendor/ink/build/write-synchronized.d.ts +4 -0
  662. package/vendor/ink/build/write-synchronized.js +7 -0
  663. package/vendor/ink/build/write-synchronized.js.map +1 -0
  664. package/vendor/ink/license +10 -0
  665. package/vendor/ink/node_modules/@types/node/LICENSE +21 -0
  666. package/vendor/ink/node_modules/@types/node/README.md +15 -0
  667. package/vendor/ink/node_modules/@types/node/assert/strict.d.ts +105 -0
  668. package/vendor/ink/node_modules/@types/node/assert.d.ts +955 -0
  669. package/vendor/ink/node_modules/@types/node/async_hooks.d.ts +623 -0
  670. package/vendor/ink/node_modules/@types/node/buffer.buffer.d.ts +466 -0
  671. package/vendor/ink/node_modules/@types/node/buffer.d.ts +1810 -0
  672. package/vendor/ink/node_modules/@types/node/child_process.d.ts +1428 -0
  673. package/vendor/ink/node_modules/@types/node/cluster.d.ts +486 -0
  674. package/vendor/ink/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
  675. package/vendor/ink/node_modules/@types/node/console.d.ts +151 -0
  676. package/vendor/ink/node_modules/@types/node/constants.d.ts +20 -0
  677. package/vendor/ink/node_modules/@types/node/crypto.d.ts +4065 -0
  678. package/vendor/ink/node_modules/@types/node/dgram.d.ts +564 -0
  679. package/vendor/ink/node_modules/@types/node/diagnostics_channel.d.ts +576 -0
  680. package/vendor/ink/node_modules/@types/node/dns/promises.d.ts +503 -0
  681. package/vendor/ink/node_modules/@types/node/dns.d.ts +922 -0
  682. package/vendor/ink/node_modules/@types/node/domain.d.ts +166 -0
  683. package/vendor/ink/node_modules/@types/node/events.d.ts +1054 -0
  684. package/vendor/ink/node_modules/@types/node/fs/promises.d.ts +1329 -0
  685. package/vendor/ink/node_modules/@types/node/fs.d.ts +4676 -0
  686. package/vendor/ink/node_modules/@types/node/globals.d.ts +150 -0
  687. package/vendor/ink/node_modules/@types/node/globals.typedarray.d.ts +101 -0
  688. package/vendor/ink/node_modules/@types/node/http.d.ts +2167 -0
  689. package/vendor/ink/node_modules/@types/node/http2.d.ts +2480 -0
  690. package/vendor/ink/node_modules/@types/node/https.d.ts +405 -0
  691. package/vendor/ink/node_modules/@types/node/index.d.ts +115 -0
  692. package/vendor/ink/node_modules/@types/node/inspector/promises.d.ts +41 -0
  693. package/vendor/ink/node_modules/@types/node/inspector.d.ts +224 -0
  694. package/vendor/ink/node_modules/@types/node/inspector.generated.d.ts +4226 -0
  695. package/vendor/ink/node_modules/@types/node/module.d.ts +819 -0
  696. package/vendor/ink/node_modules/@types/node/net.d.ts +933 -0
  697. package/vendor/ink/node_modules/@types/node/os.d.ts +507 -0
  698. package/vendor/ink/node_modules/@types/node/package.json +155 -0
  699. package/vendor/ink/node_modules/@types/node/path/posix.d.ts +8 -0
  700. package/vendor/ink/node_modules/@types/node/path/win32.d.ts +8 -0
  701. package/vendor/ink/node_modules/@types/node/path.d.ts +187 -0
  702. package/vendor/ink/node_modules/@types/node/perf_hooks.d.ts +643 -0
  703. package/vendor/ink/node_modules/@types/node/process.d.ts +2156 -0
  704. package/vendor/ink/node_modules/@types/node/punycode.d.ts +117 -0
  705. package/vendor/ink/node_modules/@types/node/querystring.d.ts +152 -0
  706. package/vendor/ink/node_modules/@types/node/quic.d.ts +910 -0
  707. package/vendor/ink/node_modules/@types/node/readline/promises.d.ts +161 -0
  708. package/vendor/ink/node_modules/@types/node/readline.d.ts +541 -0
  709. package/vendor/ink/node_modules/@types/node/repl.d.ts +415 -0
  710. package/vendor/ink/node_modules/@types/node/sea.d.ts +162 -0
  711. package/vendor/ink/node_modules/@types/node/sqlite.d.ts +955 -0
  712. package/vendor/ink/node_modules/@types/node/stream/consumers.d.ts +38 -0
  713. package/vendor/ink/node_modules/@types/node/stream/promises.d.ts +211 -0
  714. package/vendor/ink/node_modules/@types/node/stream/web.d.ts +296 -0
  715. package/vendor/ink/node_modules/@types/node/stream.d.ts +1760 -0
  716. package/vendor/ink/node_modules/@types/node/string_decoder.d.ts +67 -0
  717. package/vendor/ink/node_modules/@types/node/test/reporters.d.ts +96 -0
  718. package/vendor/ink/node_modules/@types/node/test.d.ts +2240 -0
  719. package/vendor/ink/node_modules/@types/node/timers/promises.d.ts +108 -0
  720. package/vendor/ink/node_modules/@types/node/timers.d.ts +159 -0
  721. package/vendor/ink/node_modules/@types/node/tls.d.ts +1198 -0
  722. package/vendor/ink/node_modules/@types/node/trace_events.d.ts +197 -0
  723. package/vendor/ink/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +462 -0
  724. package/vendor/ink/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
  725. package/vendor/ink/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +36 -0
  726. package/vendor/ink/node_modules/@types/node/ts5.6/index.d.ts +117 -0
  727. package/vendor/ink/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
  728. package/vendor/ink/node_modules/@types/node/ts5.7/index.d.ts +117 -0
  729. package/vendor/ink/node_modules/@types/node/tty.d.ts +250 -0
  730. package/vendor/ink/node_modules/@types/node/url.d.ts +519 -0
  731. package/vendor/ink/node_modules/@types/node/util/types.d.ts +558 -0
  732. package/vendor/ink/node_modules/@types/node/util.d.ts +1662 -0
  733. package/vendor/ink/node_modules/@types/node/v8.d.ts +983 -0
  734. package/vendor/ink/node_modules/@types/node/vm.d.ts +1208 -0
  735. package/vendor/ink/node_modules/@types/node/wasi.d.ts +202 -0
  736. package/vendor/ink/node_modules/@types/node/web-globals/abortcontroller.d.ts +59 -0
  737. package/vendor/ink/node_modules/@types/node/web-globals/blob.d.ts +23 -0
  738. package/vendor/ink/node_modules/@types/node/web-globals/console.d.ts +9 -0
  739. package/vendor/ink/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
  740. package/vendor/ink/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  741. package/vendor/ink/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
  742. package/vendor/ink/node_modules/@types/node/web-globals/events.d.ts +106 -0
  743. package/vendor/ink/node_modules/@types/node/web-globals/fetch.d.ts +69 -0
  744. package/vendor/ink/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
  745. package/vendor/ink/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
  746. package/vendor/ink/node_modules/@types/node/web-globals/navigator.d.ts +25 -0
  747. package/vendor/ink/node_modules/@types/node/web-globals/performance.d.ts +45 -0
  748. package/vendor/ink/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  749. package/vendor/ink/node_modules/@types/node/web-globals/streams.d.ts +115 -0
  750. package/vendor/ink/node_modules/@types/node/web-globals/timers.d.ts +44 -0
  751. package/vendor/ink/node_modules/@types/node/web-globals/url.d.ts +24 -0
  752. package/vendor/ink/node_modules/@types/node/worker_threads.d.ts +717 -0
  753. package/vendor/ink/node_modules/@types/node/zlib.d.ts +618 -0
  754. package/vendor/ink/node_modules/node-pty/LICENSE +69 -0
  755. package/vendor/ink/node_modules/node-pty/README.md +164 -0
  756. package/vendor/ink/node_modules/node-pty/binding.gyp +150 -0
  757. package/vendor/ink/node_modules/node-pty/lib/conpty_console_list_agent.js +25 -0
  758. package/vendor/ink/node_modules/node-pty/lib/eventEmitter2.js +47 -0
  759. package/vendor/ink/node_modules/node-pty/lib/index.js +52 -0
  760. package/vendor/ink/node_modules/node-pty/lib/interfaces.js +7 -0
  761. package/vendor/ink/node_modules/node-pty/lib/shared/conout.js +11 -0
  762. package/vendor/ink/node_modules/node-pty/lib/terminal.js +190 -0
  763. package/vendor/ink/node_modules/node-pty/lib/types.js +7 -0
  764. package/vendor/ink/node_modules/node-pty/lib/unixTerminal.js +349 -0
  765. package/vendor/ink/node_modules/node-pty/lib/utils.js +39 -0
  766. package/vendor/ink/node_modules/node-pty/lib/windowsConoutConnection.js +125 -0
  767. package/vendor/ink/node_modules/node-pty/lib/windowsPtyAgent.js +287 -0
  768. package/vendor/ink/node_modules/node-pty/lib/windowsTerminal.js +201 -0
  769. package/vendor/ink/node_modules/node-pty/lib/worker/conoutSocketWorker.js +22 -0
  770. package/vendor/ink/node_modules/node-pty/package.json +65 -0
  771. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/pty.node +0 -0
  772. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/spawn-helper +0 -0
  773. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/pty.node +0 -0
  774. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/spawn-helper +0 -0
  775. package/vendor/ink/node_modules/node-pty/prebuilds/linux-arm64/pty.node +0 -0
  776. package/vendor/ink/node_modules/node-pty/prebuilds/linux-x64/pty.node +0 -0
  777. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
  778. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
  779. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
  780. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.pdb +0 -0
  781. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  782. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.pdb +0 -0
  783. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
  784. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
  785. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.node +0 -0
  786. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.pdb +0 -0
  787. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
  788. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.pdb +0 -0
  789. package/vendor/ink/node_modules/node-pty/scripts/post-install.js +76 -0
  790. package/vendor/ink/node_modules/node-pty/scripts/prebuild.js +34 -0
  791. package/vendor/ink/node_modules/node-pty/src/unix/pty.cc +875 -0
  792. package/vendor/ink/node_modules/node-pty/src/unix/spawn-helper.cc +23 -0
  793. package/vendor/ink/node_modules/node-pty/src/win/conpty.cc +582 -0
  794. package/vendor/ink/node_modules/node-pty/src/win/conpty.h +41 -0
  795. package/vendor/ink/node_modules/node-pty/src/win/conpty_console_list.cc +44 -0
  796. package/vendor/ink/node_modules/node-pty/src/win/path_util.cc +95 -0
  797. package/vendor/ink/node_modules/node-pty/src/win/path_util.h +26 -0
  798. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/OpenConsole.exe +0 -0
  799. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/conpty.dll +0 -0
  800. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/OpenConsole.exe +0 -0
  801. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/conpty.dll +0 -0
  802. package/vendor/ink/node_modules/node-pty/typings/node-pty.d.ts +215 -0
  803. package/vendor/ink/node_modules/undici-types/LICENSE +21 -0
  804. package/vendor/ink/node_modules/undici-types/README.md +6 -0
  805. package/vendor/ink/node_modules/undici-types/agent.d.ts +32 -0
  806. package/vendor/ink/node_modules/undici-types/api.d.ts +43 -0
  807. package/vendor/ink/node_modules/undici-types/balanced-pool.d.ts +30 -0
  808. package/vendor/ink/node_modules/undici-types/cache-interceptor.d.ts +173 -0
  809. package/vendor/ink/node_modules/undici-types/cache.d.ts +36 -0
  810. package/vendor/ink/node_modules/undici-types/client-stats.d.ts +15 -0
  811. package/vendor/ink/node_modules/undici-types/client.d.ts +108 -0
  812. package/vendor/ink/node_modules/undici-types/connector.d.ts +34 -0
  813. package/vendor/ink/node_modules/undici-types/content-type.d.ts +21 -0
  814. package/vendor/ink/node_modules/undici-types/cookies.d.ts +30 -0
  815. package/vendor/ink/node_modules/undici-types/diagnostics-channel.d.ts +74 -0
  816. package/vendor/ink/node_modules/undici-types/dispatcher.d.ts +276 -0
  817. package/vendor/ink/node_modules/undici-types/env-http-proxy-agent.d.ts +22 -0
  818. package/vendor/ink/node_modules/undici-types/errors.d.ts +161 -0
  819. package/vendor/ink/node_modules/undici-types/eventsource.d.ts +66 -0
  820. package/vendor/ink/node_modules/undici-types/fetch.d.ts +211 -0
  821. package/vendor/ink/node_modules/undici-types/formdata.d.ts +108 -0
  822. package/vendor/ink/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  823. package/vendor/ink/node_modules/undici-types/global-origin.d.ts +7 -0
  824. package/vendor/ink/node_modules/undici-types/h2c-client.d.ts +73 -0
  825. package/vendor/ink/node_modules/undici-types/handlers.d.ts +15 -0
  826. package/vendor/ink/node_modules/undici-types/header.d.ts +160 -0
  827. package/vendor/ink/node_modules/undici-types/index.d.ts +88 -0
  828. package/vendor/ink/node_modules/undici-types/interceptors.d.ts +73 -0
  829. package/vendor/ink/node_modules/undici-types/mock-agent.d.ts +68 -0
  830. package/vendor/ink/node_modules/undici-types/mock-call-history.d.ts +111 -0
  831. package/vendor/ink/node_modules/undici-types/mock-client.d.ts +27 -0
  832. package/vendor/ink/node_modules/undici-types/mock-errors.d.ts +12 -0
  833. package/vendor/ink/node_modules/undici-types/mock-interceptor.d.ts +94 -0
  834. package/vendor/ink/node_modules/undici-types/mock-pool.d.ts +27 -0
  835. package/vendor/ink/node_modules/undici-types/package.json +55 -0
  836. package/vendor/ink/node_modules/undici-types/patch.d.ts +29 -0
  837. package/vendor/ink/node_modules/undici-types/pool-stats.d.ts +19 -0
  838. package/vendor/ink/node_modules/undici-types/pool.d.ts +41 -0
  839. package/vendor/ink/node_modules/undici-types/proxy-agent.d.ts +29 -0
  840. package/vendor/ink/node_modules/undici-types/readable.d.ts +68 -0
  841. package/vendor/ink/node_modules/undici-types/retry-agent.d.ts +8 -0
  842. package/vendor/ink/node_modules/undici-types/retry-handler.d.ts +125 -0
  843. package/vendor/ink/node_modules/undici-types/round-robin-pool.d.ts +41 -0
  844. package/vendor/ink/node_modules/undici-types/snapshot-agent.d.ts +109 -0
  845. package/vendor/ink/node_modules/undici-types/util.d.ts +18 -0
  846. package/vendor/ink/node_modules/undici-types/utility.d.ts +7 -0
  847. package/vendor/ink/node_modules/undici-types/webidl.d.ts +341 -0
  848. package/vendor/ink/node_modules/undici-types/websocket.d.ts +186 -0
  849. package/vendor/ink/package.json +201 -0
  850. package/vendor/ink/readme.md +2636 -0
  851. package/bin/swag-agent.js +0 -9
  852. package/dist/server/lib/pg-rate-limiter.d.ts +0 -21
  853. package/dist/server/lib/pg-rate-limiter.js +0 -86
@@ -2,465 +2,634 @@
2
2
  // Providers: Google Veo (3.1, 3.0, 2.0), OpenAI Sora (sora-2, sora-2-pro)
3
3
  // Async polling pattern — video gen takes 1-5 minutes
4
4
  // Auto-uploads to Supabase storage, records in store_media
5
+
5
6
  import { GoogleGenAI } from "@google/genai";
7
+
8
+ // ============================================================================
9
+ // TYPES
10
+ // ============================================================================
11
+
6
12
  // In-memory job tracker (server is single-instance on Fly.io)
7
13
  const activeJobs = new Map();
14
+
15
+ // ============================================================================
16
+ // CREDENTIAL RESOLUTION
17
+ // ============================================================================
18
+
8
19
  async function getVideoCredentials(sb, storeId) {
9
- const creds = {};
10
- const results = await Promise.all([
11
- (async () => { try {
12
- const r = await sb.rpc("decrypt_secret", { p_name: "OPENAI_API_KEY", p_store_id: storeId });
13
- return r.data;
14
- }
15
- catch {
16
- return null;
17
- } })(),
18
- (async () => { try {
19
- const r = await sb.rpc("decrypt_secret", { p_name: "GOOGLE_AI_API_KEY", p_store_id: storeId });
20
- return r.data;
21
- }
22
- catch {
23
- return null;
24
- } })(),
25
- ]);
26
- if (results[0])
27
- creds.openai = results[0];
28
- if (results[1])
29
- creds.google = results[1];
30
- return creds;
20
+ const creds = {};
21
+ const results = await Promise.all([(async () => {
22
+ try {
23
+ const r = await sb.rpc("decrypt_secret", {
24
+ p_name: "OPENAI_API_KEY",
25
+ p_store_id: storeId
26
+ });
27
+ return r.data;
28
+ } catch {
29
+ return null;
30
+ }
31
+ })(), (async () => {
32
+ try {
33
+ const r = await sb.rpc("decrypt_secret", {
34
+ p_name: "GOOGLE_AI_API_KEY",
35
+ p_store_id: storeId
36
+ });
37
+ return r.data;
38
+ } catch {
39
+ return null;
40
+ }
41
+ })()]);
42
+ if (results[0]) creds.openai = results[0];
43
+ if (results[1]) creds.google = results[1];
44
+ return creds;
31
45
  }
46
+
32
47
  // ============================================================================
33
48
  // STORAGE HELPER
34
49
  // ============================================================================
50
+
35
51
  async function uploadVideoAndRecord(sb, storeId, videoData, prompt, provider, model, mimeType = "video/mp4") {
36
- const id = crypto.randomUUID();
37
- const ext = mimeType.includes("webm") ? "webm" : "mp4";
38
- const fileName = `${id}.${ext}`;
39
- const storeIdUpper = storeId.toUpperCase();
40
- const storagePath = `ai-generated/${storeIdUpper}/videos/${fileName}`;
41
- const buffer = Buffer.from(videoData);
42
- const { error: uploadErr } = await sb.storage
43
- .from("store-media")
44
- .upload(storagePath, buffer, { contentType: mimeType, upsert: true });
45
- if (uploadErr)
46
- throw new Error(`Storage upload failed: ${uploadErr.message}`);
47
- const { data: urlData } = sb.storage.from("store-media").getPublicUrl(storagePath);
48
- const fileUrl = urlData.publicUrl;
49
- const aiTags = [
50
- provider === "veo" ? `Veo (${model})` : `Sora (${model})`,
51
- "AI Generated",
52
- "Video",
53
- ];
54
- const { data: mediaRow, error: mediaErr } = await sb
55
- .from("store_media")
56
- .insert({
57
- store_id: storeId,
58
- file_name: fileName,
59
- file_path: storagePath,
60
- file_url: fileUrl,
61
- file_size: buffer.length,
62
- file_type: mimeType,
63
- category: "ai_generated",
64
- ai_tags: aiTags,
65
- ai_description: prompt.substring(0, 500),
66
- source: `mcp-${provider}`,
67
- folder: "ai-generated",
68
- })
69
- .select("id")
70
- .single();
71
- if (mediaErr)
72
- console.error("[video-gen] store_media insert error:", mediaErr.message);
73
- return { file_url: fileUrl, media_id: mediaRow?.id || id };
52
+ const id = crypto.randomUUID();
53
+ const ext = mimeType.includes("webm") ? "webm" : "mp4";
54
+ const fileName = `${id}.${ext}`;
55
+ const storeIdUpper = storeId.toUpperCase();
56
+ const storagePath = `ai-generated/${storeIdUpper}/videos/${fileName}`;
57
+ const buffer = Buffer.from(videoData);
58
+ const {
59
+ error: uploadErr
60
+ } = await sb.storage.from("store-media").upload(storagePath, buffer, {
61
+ contentType: mimeType,
62
+ upsert: true
63
+ });
64
+ if (uploadErr) throw new Error(`Storage upload failed: ${uploadErr.message}`);
65
+ const {
66
+ data: urlData
67
+ } = sb.storage.from("store-media").getPublicUrl(storagePath);
68
+ const fileUrl = urlData.publicUrl;
69
+ const aiTags = [provider === "veo" ? `Veo (${model})` : `Sora (${model})`, "AI Generated", "Video"];
70
+ const {
71
+ data: mediaRow,
72
+ error: mediaErr
73
+ } = await sb.from("store_media").insert({
74
+ store_id: storeId,
75
+ file_name: fileName,
76
+ file_path: storagePath,
77
+ file_url: fileUrl,
78
+ file_size: buffer.length,
79
+ file_type: mimeType,
80
+ category: "ai_generated",
81
+ ai_tags: aiTags,
82
+ ai_description: prompt.substring(0, 500),
83
+ source: `mcp-${provider}`,
84
+ folder: "ai-generated"
85
+ }).select("id").single();
86
+ if (mediaErr) console.error("[video-gen] store_media insert error:", mediaErr.message);
87
+ return {
88
+ file_url: fileUrl,
89
+ media_id: mediaRow?.id || id
90
+ };
74
91
  }
92
+
75
93
  // ============================================================================
76
94
  // VEO GENERATION (async polling)
77
95
  // ============================================================================
96
+
78
97
  async function generateWithVeo(apiKey, prompt, model, config, sb, storeId, jobId) {
79
- const job = activeJobs.get(jobId);
80
- if (!job)
81
- return;
82
- try {
83
- job.status = "generating";
84
- const client = new GoogleGenAI({ apiKey });
85
- let operation = await client.models.generateVideos({
86
- model,
87
- prompt,
88
- config: {
89
- ...(config.aspectRatio ? { aspectRatio: config.aspectRatio } : {}),
90
- ...(config.resolution ? { resolution: config.resolution } : {}),
91
- ...(config.negativePrompt ? { negativePrompt: config.negativePrompt } : {}),
92
- },
93
- });
94
- // Poll until complete (max 10 minutes)
95
- const maxWait = 600_000;
96
- const start = Date.now();
97
- while (!operation.done && Date.now() - start < maxWait) {
98
- await new Promise((r) => setTimeout(r, 10_000));
99
- operation = await client.operations.getVideosOperation({ operation });
100
- }
101
- if (!operation.done) {
102
- job.status = "failed";
103
- job.error = "Video generation timed out after 10 minutes";
104
- return;
105
- }
106
- const video = operation.response?.generatedVideos?.[0]?.video;
107
- if (!video) {
108
- job.status = "failed";
109
- job.error = "Veo returned no video data";
110
- return;
111
- }
112
- // Wait for file processing to complete (Veo files need post-processing)
113
- job.status = "uploading";
114
- const videoUri = video.uri;
115
- if (!videoUri) {
116
- job.status = "failed";
117
- job.error = "Veo returned video object without URI";
118
- return;
119
- }
120
- // Extract file ID from URI — format: .../files/FILEID or .../files/FILEID:download
121
- const fileIdMatch = videoUri.match(/files\/([^/:?]+)/);
122
- if (!fileIdMatch) {
123
- job.status = "failed";
124
- job.error = `Cannot parse file ID from URI: ${videoUri}`;
125
- return;
126
- }
127
- const fileId = fileIdMatch[1];
128
- const fileInfoUrl = `https://generativelanguage.googleapis.com/v1beta/files/${fileId}?key=${apiKey}`;
129
- // Poll until file state is ACTIVE (max 10 minutes — Veo processing can be slow)
130
- const fileStart = Date.now();
131
- let fileState = "PROCESSING";
132
- while (fileState === "PROCESSING" && Date.now() - fileStart < 600_000) {
133
- await new Promise((r) => setTimeout(r, 5_000));
134
- const infoResp = await fetch(fileInfoUrl);
135
- if (infoResp.ok) {
136
- const info = await infoResp.json();
137
- fileState = info.state;
138
- }
139
- }
140
- if (fileState !== "ACTIVE") {
141
- job.status = "failed";
142
- job.error = `File processing did not complete. State: ${fileState}`;
143
- return;
144
- }
145
- // Download via SDK (writes to temp file, then read)
146
- const os = await import("node:os");
147
- const path = await import("node:path");
148
- const fs = await import("node:fs");
149
- const tmpPath = path.join(os.tmpdir(), `veo_${jobId}.mp4`);
150
- await client.files.download({
151
- file: video,
152
- downloadPath: tmpPath,
153
- });
154
- const videoBytes = fs.readFileSync(tmpPath);
155
- fs.unlinkSync(tmpPath);
156
- // Upload to storage
157
- const { file_url, media_id } = await uploadVideoAndRecord(sb, storeId, videoBytes, prompt, "veo", model);
158
- job.status = "completed";
159
- job.file_url = file_url;
160
- job.media_id = media_id;
98
+ const job = activeJobs.get(jobId);
99
+ if (!job) return;
100
+ try {
101
+ job.status = "generating";
102
+ const client = new GoogleGenAI({
103
+ apiKey
104
+ });
105
+ let operation = await client.models.generateVideos({
106
+ model,
107
+ prompt,
108
+ config: {
109
+ ...(config.aspectRatio ? {
110
+ aspectRatio: config.aspectRatio
111
+ } : {}),
112
+ ...(config.resolution ? {
113
+ resolution: config.resolution
114
+ } : {}),
115
+ ...(config.negativePrompt ? {
116
+ negativePrompt: config.negativePrompt
117
+ } : {})
118
+ }
119
+ });
120
+
121
+ // Poll until complete (max 10 minutes)
122
+ const maxWait = 600_000;
123
+ const start = Date.now();
124
+ while (!operation.done && Date.now() - start < maxWait) {
125
+ await new Promise(r => setTimeout(r, 10_000));
126
+ operation = await client.operations.getVideosOperation({
127
+ operation
128
+ });
161
129
  }
162
- catch (err) {
163
- job.status = "failed";
164
- job.error = err instanceof Error ? err.message : String(err);
165
- console.error(`[video-gen] Veo job ${jobId} failed:`, job.error);
130
+ if (!operation.done) {
131
+ job.status = "failed";
132
+ job.error = "Video generation timed out after 10 minutes";
133
+ return;
134
+ }
135
+ const video = operation.response?.generatedVideos?.[0]?.video;
136
+ if (!video) {
137
+ job.status = "failed";
138
+ job.error = "Veo returned no video data";
139
+ return;
140
+ }
141
+
142
+ // Wait for file processing to complete (Veo files need post-processing)
143
+ job.status = "uploading";
144
+ const videoUri = video.uri;
145
+ if (!videoUri) {
146
+ job.status = "failed";
147
+ job.error = "Veo returned video object without URI";
148
+ return;
149
+ }
150
+
151
+ // Extract file ID from URI — format: .../files/FILEID or .../files/FILEID:download
152
+ const fileIdMatch = videoUri.match(/files\/([^/:?]+)/);
153
+ if (!fileIdMatch) {
154
+ job.status = "failed";
155
+ job.error = `Cannot parse file ID from URI: ${videoUri}`;
156
+ return;
157
+ }
158
+ const fileId = fileIdMatch[1];
159
+ const fileInfoUrl = `https://generativelanguage.googleapis.com/v1beta/files/${fileId}?key=${apiKey}`;
160
+
161
+ // Poll until file state is ACTIVE (max 10 minutes — Veo processing can be slow)
162
+ const fileStart = Date.now();
163
+ let fileState = "PROCESSING";
164
+ while (fileState === "PROCESSING" && Date.now() - fileStart < 600_000) {
165
+ await new Promise(r => setTimeout(r, 5_000));
166
+ const infoResp = await fetch(fileInfoUrl);
167
+ if (infoResp.ok) {
168
+ const info = await infoResp.json();
169
+ fileState = info.state;
170
+ }
166
171
  }
172
+ if (fileState !== "ACTIVE") {
173
+ job.status = "failed";
174
+ job.error = `File processing did not complete. State: ${fileState}`;
175
+ return;
176
+ }
177
+
178
+ // Download via SDK (writes to temp file, then read)
179
+ const os = await import("node:os");
180
+ const path = await import("node:path");
181
+ const fs = await import("node:fs");
182
+ const tmpPath = path.join(os.tmpdir(), `veo_${jobId}.mp4`);
183
+ await client.files.download({
184
+ file: video,
185
+ downloadPath: tmpPath
186
+ });
187
+ const videoBytes = fs.readFileSync(tmpPath);
188
+ fs.unlinkSync(tmpPath);
189
+
190
+ // Upload to storage
191
+ const {
192
+ file_url,
193
+ media_id
194
+ } = await uploadVideoAndRecord(sb, storeId, videoBytes, prompt, "veo", model);
195
+ job.status = "completed";
196
+ job.file_url = file_url;
197
+ job.media_id = media_id;
198
+ } catch (err) {
199
+ job.status = "failed";
200
+ job.error = err instanceof Error ? err.message : String(err);
201
+ console.error(`[video-gen] Veo job ${jobId} failed:`, job.error);
202
+ }
167
203
  }
204
+
168
205
  // ============================================================================
169
206
  // SORA GENERATION (async polling)
170
207
  // ============================================================================
208
+
171
209
  async function generateWithSora(apiKey, prompt, model, config, sb, storeId, jobId) {
172
- const job = activeJobs.get(jobId);
173
- if (!job)
174
- return;
175
- try {
176
- job.status = "generating";
177
- const baseUrl = "https://api.openai.com/v1";
178
- const headers = { Authorization: `Bearer ${apiKey}`, "Content-Type": "application/json" };
179
- // Create video job
180
- const createResp = await fetch(`${baseUrl}/videos`, {
181
- method: "POST",
182
- headers,
183
- body: JSON.stringify({
184
- model,
185
- prompt,
186
- ...(config.duration ? { duration: config.duration } : {}),
187
- ...(config.resolution ? { resolution: config.resolution } : {}),
188
- }),
189
- });
190
- if (!createResp.ok) {
191
- const errText = await createResp.text();
192
- throw new Error(`Sora create failed: ${createResp.status} ${errText.substring(0, 300)}`);
193
- }
194
- const createData = await createResp.json();
195
- const videoId = createData.id;
196
- // Poll until complete (max 10 minutes)
197
- const maxWait = 600_000;
198
- const start = Date.now();
199
- let status = createData.status;
200
- while (status !== "completed" && status !== "failed" && Date.now() - start < maxWait) {
201
- await new Promise((r) => setTimeout(r, 10_000));
202
- const pollResp = await fetch(`${baseUrl}/videos/${videoId}`, { headers });
203
- const pollData = await pollResp.json();
204
- status = pollData.status;
205
- if (status === "failed") {
206
- job.status = "failed";
207
- job.error = pollData.error?.message || "Sora generation failed";
208
- return;
209
- }
210
- }
211
- if (status !== "completed") {
212
- job.status = "failed";
213
- job.error = "Video generation timed out after 10 minutes";
214
- return;
215
- }
216
- // Download the video
217
- job.status = "uploading";
218
- const downloadResp = await fetch(`${baseUrl}/videos/${videoId}/content`, {
219
- headers: { Authorization: `Bearer ${apiKey}`, Accept: "video/mp4" },
220
- });
221
- if (!downloadResp.ok)
222
- throw new Error(`Sora download failed: ${downloadResp.status}`);
223
- const videoBuffer = Buffer.from(await downloadResp.arrayBuffer());
224
- const { file_url, media_id } = await uploadVideoAndRecord(sb, storeId, videoBuffer, prompt, "sora", model);
225
- job.status = "completed";
226
- job.file_url = file_url;
227
- job.media_id = media_id;
210
+ const job = activeJobs.get(jobId);
211
+ if (!job) return;
212
+ try {
213
+ job.status = "generating";
214
+ const baseUrl = "https://api.openai.com/v1";
215
+ const headers = {
216
+ Authorization: `Bearer ${apiKey}`,
217
+ "Content-Type": "application/json"
218
+ };
219
+
220
+ // Create video job
221
+ const createResp = await fetch(`${baseUrl}/videos`, {
222
+ method: "POST",
223
+ headers,
224
+ body: JSON.stringify({
225
+ model,
226
+ prompt,
227
+ ...(config.duration ? {
228
+ duration: config.duration
229
+ } : {}),
230
+ ...(config.resolution ? {
231
+ resolution: config.resolution
232
+ } : {})
233
+ })
234
+ });
235
+ if (!createResp.ok) {
236
+ const errText = await createResp.text();
237
+ throw new Error(`Sora create failed: ${createResp.status} ${errText.substring(0, 300)}`);
228
238
  }
229
- catch (err) {
239
+ const createData = await createResp.json();
240
+ const videoId = createData.id;
241
+
242
+ // Poll until complete (max 10 minutes)
243
+ const maxWait = 600_000;
244
+ const start = Date.now();
245
+ let status = createData.status;
246
+ while (status !== "completed" && status !== "failed" && Date.now() - start < maxWait) {
247
+ await new Promise(r => setTimeout(r, 10_000));
248
+ const pollResp = await fetch(`${baseUrl}/videos/${videoId}`, {
249
+ headers
250
+ });
251
+ const pollData = await pollResp.json();
252
+ status = pollData.status;
253
+ if (status === "failed") {
230
254
  job.status = "failed";
231
- job.error = err instanceof Error ? err.message : String(err);
232
- console.error(`[video-gen] Sora job ${jobId} failed:`, job.error);
255
+ job.error = pollData.error?.message || "Sora generation failed";
256
+ return;
257
+ }
233
258
  }
259
+ if (status !== "completed") {
260
+ job.status = "failed";
261
+ job.error = "Video generation timed out after 10 minutes";
262
+ return;
263
+ }
264
+
265
+ // Download the video
266
+ job.status = "uploading";
267
+ const downloadResp = await fetch(`${baseUrl}/videos/${videoId}/content`, {
268
+ headers: {
269
+ Authorization: `Bearer ${apiKey}`,
270
+ Accept: "video/mp4"
271
+ }
272
+ });
273
+ if (!downloadResp.ok) throw new Error(`Sora download failed: ${downloadResp.status}`);
274
+ const videoBuffer = Buffer.from(await downloadResp.arrayBuffer());
275
+ const {
276
+ file_url,
277
+ media_id
278
+ } = await uploadVideoAndRecord(sb, storeId, videoBuffer, prompt, "sora", model);
279
+ job.status = "completed";
280
+ job.file_url = file_url;
281
+ job.media_id = media_id;
282
+ } catch (err) {
283
+ job.status = "failed";
284
+ job.error = err instanceof Error ? err.message : String(err);
285
+ console.error(`[video-gen] Sora job ${jobId} failed:`, job.error);
286
+ }
234
287
  }
288
+
235
289
  // ============================================================================
236
290
  // HANDLER
237
291
  // ============================================================================
292
+
238
293
  export async function handleVideoGen(sb, args, storeId) {
239
- const action = args.action;
240
- if (!storeId)
241
- return { success: false, error: "store_id is required" };
242
- switch (action) {
243
- // ================================================================
244
- // GENERATE — start a video generation job (returns immediately with job_id)
245
- // ================================================================
246
- case "generate": {
247
- const prompt = args.prompt;
248
- if (!prompt)
249
- return { success: false, error: "prompt is required" };
250
- const provider = args.provider || "veo";
251
- const creds = await getVideoCredentials(sb, storeId);
252
- const jobId = crypto.randomUUID();
253
- const job = {
254
- job_id: jobId,
255
- provider,
256
- model: "",
257
- prompt,
258
- status: "queued",
259
- };
260
- switch (provider) {
261
- case "veo": {
262
- if (!creds.google)
263
- return { success: false, error: "Google AI API key not configured" };
264
- const model = args.model || "veo-3.1-generate-preview";
265
- const validModels = [
266
- "veo-3.1-generate-preview", "veo-3.1-fast-generate-preview",
267
- "veo-3.0-generate-001", "veo-3.0-fast-generate-001",
268
- "veo-2.0-generate-001",
269
- ];
270
- if (!validModels.includes(model)) {
271
- return { success: false, error: `Invalid Veo model: ${model}. Valid: ${validModels.join(", ")}` };
272
- }
273
- job.model = model;
274
- activeJobs.set(jobId, job);
275
- // Fire and forget — runs in background
276
- generateWithVeo(creds.google, prompt, model, {
277
- aspectRatio: args.aspect_ratio,
278
- resolution: args.resolution,
279
- negativePrompt: args.negative_prompt,
280
- }, sb, storeId, jobId).catch((err) => console.error("[video-gen] Veo background error:", err));
281
- return {
282
- success: true,
283
- data: {
284
- job_id: jobId,
285
- provider: "veo",
286
- model,
287
- status: "queued",
288
- note: "Video generation started. Use action=status with this job_id to check progress. Typically takes 1-5 minutes.",
289
- },
290
- };
291
- }
292
- case "sora": {
293
- if (!creds.openai)
294
- return { success: false, error: "OpenAI API key not configured" };
295
- const model = args.model || "sora-2";
296
- const validModels = ["sora-2", "sora-2-pro"];
297
- if (!validModels.includes(model)) {
298
- return { success: false, error: `Invalid Sora model: ${model}. Valid: ${validModels.join(", ")}` };
299
- }
300
- job.model = model;
301
- activeJobs.set(jobId, job);
302
- generateWithSora(creds.openai, prompt, model, {
303
- duration: args.duration,
304
- resolution: args.resolution,
305
- }, sb, storeId, jobId).catch((err) => console.error("[video-gen] Sora background error:", err));
306
- return {
307
- success: true,
308
- data: {
309
- job_id: jobId,
310
- provider: "sora",
311
- model,
312
- status: "queued",
313
- note: "Video generation started. Use action=status with this job_id to check progress. Typically takes 1-5 minutes.",
314
- },
315
- };
294
+ const action = args.action;
295
+ if (!storeId) return {
296
+ success: false,
297
+ error: "store_id is required"
298
+ };
299
+ switch (action) {
300
+ // ================================================================
301
+ // GENERATE — start a video generation job (returns immediately with job_id)
302
+ // ================================================================
303
+ case "generate":
304
+ {
305
+ const prompt = args.prompt;
306
+ if (!prompt) return {
307
+ success: false,
308
+ error: "prompt is required"
309
+ };
310
+ const provider = args.provider || "veo";
311
+ const creds = await getVideoCredentials(sb, storeId);
312
+ const jobId = crypto.randomUUID();
313
+ const job = {
314
+ job_id: jobId,
315
+ provider,
316
+ model: "",
317
+ prompt,
318
+ status: "queued"
319
+ };
320
+ switch (provider) {
321
+ case "veo":
322
+ {
323
+ if (!creds.google) return {
324
+ success: false,
325
+ error: "Google AI API key not configured"
326
+ };
327
+ const model = args.model || "veo-3.1-generate-preview";
328
+ const validModels = ["veo-3.1-generate-preview", "veo-3.1-fast-generate-preview", "veo-3.0-generate-001", "veo-3.0-fast-generate-001", "veo-2.0-generate-001"];
329
+ if (!validModels.includes(model)) {
330
+ return {
331
+ success: false,
332
+ error: `Invalid Veo model: ${model}. Valid: ${validModels.join(", ")}`
333
+ };
334
+ }
335
+ job.model = model;
336
+ activeJobs.set(jobId, job);
337
+
338
+ // Fire and forget — runs in background
339
+ generateWithVeo(creds.google, prompt, model, {
340
+ aspectRatio: args.aspect_ratio,
341
+ resolution: args.resolution,
342
+ negativePrompt: args.negative_prompt
343
+ }, sb, storeId, jobId).catch(err => console.error("[video-gen] Veo background error:", err));
344
+ return {
345
+ success: true,
346
+ data: {
347
+ job_id: jobId,
348
+ provider: "veo",
349
+ model,
350
+ status: "queued",
351
+ note: "Video generation started. Use action=status with this job_id to check progress. Typically takes 1-5 minutes."
316
352
  }
317
- default:
318
- return { success: false, error: `Unknown provider: ${provider}. Use veo or sora` };
353
+ };
319
354
  }
320
- }
321
- // ================================================================
322
- // BATCH start multiple video jobs in parallel
323
- // ================================================================
324
- case "batch": {
325
- const items = args.items;
326
- if (!items?.length)
327
- return { success: false, error: "items array is required" };
328
- if (items.length > 5)
329
- return { success: false, error: "Maximum 5 videos per batch" };
330
- const creds = await getVideoCredentials(sb, storeId);
331
- const jobs = [];
332
- for (const item of items) {
333
- const provider = item.provider || "veo";
334
- const jobId = crypto.randomUUID();
335
- if (provider === "veo") {
336
- if (!creds.google) {
337
- jobs.push({ job_id: jobId, provider, model: "", prompt: item.prompt, status: "failed: no Google API key" });
338
- continue;
339
- }
340
- const model = item.model || "veo-3.1-generate-preview";
341
- const job = { job_id: jobId, provider, model, prompt: item.prompt, status: "queued" };
342
- activeJobs.set(jobId, job);
343
- generateWithVeo(creds.google, item.prompt, model, {
344
- aspectRatio: item.aspect_ratio, resolution: item.resolution, negativePrompt: item.negative_prompt,
345
- }, sb, storeId, jobId).catch(e => console.warn('[video-gen] veo batch job failed:', e.message));
346
- jobs.push({ job_id: jobId, provider, model, prompt: item.prompt, status: "queued" });
347
- }
348
- else if (provider === "sora") {
349
- if (!creds.openai) {
350
- jobs.push({ job_id: jobId, provider, model: "", prompt: item.prompt, status: "failed: no OpenAI API key" });
351
- continue;
352
- }
353
- const model = item.model || "sora-2";
354
- const job = { job_id: jobId, provider, model, prompt: item.prompt, status: "queued" };
355
- activeJobs.set(jobId, job);
356
- generateWithSora(creds.openai, item.prompt, model, {
357
- duration: item.duration, resolution: item.resolution,
358
- }, sb, storeId, jobId).catch(e => console.warn('[video-gen] sora batch job failed:', e.message));
359
- jobs.push({ job_id: jobId, provider, model, prompt: item.prompt, status: "queued" });
355
+ case "sora":
356
+ {
357
+ if (!creds.openai) return {
358
+ success: false,
359
+ error: "OpenAI API key not configured"
360
+ };
361
+ const model = args.model || "sora-2";
362
+ const validModels = ["sora-2", "sora-2-pro"];
363
+ if (!validModels.includes(model)) {
364
+ return {
365
+ success: false,
366
+ error: `Invalid Sora model: ${model}. Valid: ${validModels.join(", ")}`
367
+ };
368
+ }
369
+ job.model = model;
370
+ activeJobs.set(jobId, job);
371
+ generateWithSora(creds.openai, prompt, model, {
372
+ duration: args.duration,
373
+ resolution: args.resolution
374
+ }, sb, storeId, jobId).catch(err => console.error("[video-gen] Sora background error:", err));
375
+ return {
376
+ success: true,
377
+ data: {
378
+ job_id: jobId,
379
+ provider: "sora",
380
+ model,
381
+ status: "queued",
382
+ note: "Video generation started. Use action=status with this job_id to check progress. Typically takes 1-5 minutes."
360
383
  }
384
+ };
361
385
  }
362
- return { success: true, data: { total: jobs.length, jobs } };
363
- }
364
- // ================================================================
365
- // STATUS check status of a video generation job
366
- // ================================================================
367
- case "status": {
368
- const jobId = args.job_id;
369
- if (!jobId)
370
- return { success: false, error: "job_id is required" };
371
- const job = activeJobs.get(jobId);
372
- if (!job)
373
- return { success: false, error: `Job ${jobId} not found. Jobs are only tracked in memory on this server instance.` };
374
- const result = {
375
- job_id: job.job_id,
376
- provider: job.provider,
377
- model: job.model,
378
- prompt: job.prompt,
379
- status: job.status,
386
+ default:
387
+ return {
388
+ success: false,
389
+ error: `Unknown provider: ${provider}. Use veo or sora`
380
390
  };
381
- if (job.file_url)
382
- result.file_url = job.file_url;
383
- if (job.media_id)
384
- result.media_id = job.media_id;
385
- if (job.error)
386
- result.error = job.error;
387
- return { success: true, data: result };
388
- }
389
- // ================================================================
390
- // JOBS — list all active/recent jobs
391
- // ================================================================
392
- case "jobs": {
393
- const jobs = Array.from(activeJobs.values()).map((j) => ({
394
- job_id: j.job_id,
395
- provider: j.provider,
396
- model: j.model,
397
- prompt: j.prompt.substring(0, 80),
398
- status: j.status,
399
- ...(j.file_url ? { file_url: j.file_url } : {}),
400
- ...(j.error ? { error: j.error } : {}),
401
- }));
402
- return { success: true, data: { total: jobs.length, jobs } };
403
391
  }
404
- // ================================================================
405
- // LIST — list generated videos from store_media
406
- // ================================================================
407
- case "list": {
408
- const limit = Math.min(args.limit || 25, 100);
409
- const { data, error } = await sb
410
- .from("store_media")
411
- .select("id, file_name, file_url, file_size, file_type, ai_tags, ai_description, source, created_at")
412
- .eq("store_id", storeId)
413
- .eq("status", "active")
414
- .eq("category", "ai_generated")
415
- .or("file_type.eq.video/mp4,file_type.eq.video/webm")
416
- .order("created_at", { ascending: false })
417
- .limit(limit);
418
- if (error)
419
- return { success: false, error: error.message };
420
- return { success: true, data: { videos: data, count: data?.length || 0 } };
421
- }
422
- // ================================================================
423
- // PROVIDERS show available video generation providers
424
- // ================================================================
425
- case "providers": {
426
- const creds = await getVideoCredentials(sb, storeId);
427
- return {
428
- success: true,
429
- data: {
430
- providers: [
431
- {
432
- provider: "veo",
433
- configured: !!creds.google,
434
- models: [
435
- { id: "veo-3.1-generate-preview", name: "Veo 3.1", note: "Latest, highest quality, native audio" },
436
- { id: "veo-3.1-fast-generate-preview", name: "Veo 3.1 Fast", note: "Faster, slightly lower quality" },
437
- { id: "veo-3.0-generate-001", name: "Veo 3.0", note: "Stable release" },
438
- { id: "veo-3.0-fast-generate-001", name: "Veo 3.0 Fast", note: "Fast variant" },
439
- { id: "veo-2.0-generate-001", name: "Veo 2.0", note: "Previous generation" },
440
- ],
441
- config: {
442
- aspect_ratios: ["16:9", "9:16"],
443
- resolutions: ["720p", "1080p", "4k"],
444
- negative_prompt: true,
445
- },
446
- },
447
- {
448
- provider: "sora",
449
- configured: !!creds.openai,
450
- models: [
451
- { id: "sora-2", name: "Sora 2", note: "Fast, good for exploration" },
452
- { id: "sora-2-pro", name: "Sora 2 Pro", note: "Production quality, slower" },
453
- ],
454
- config: {
455
- durations: [4, 8, 12],
456
- resolutions: ["720x1280", "1280x720", "1024x1792", "1792x1024"],
457
- },
458
- },
459
- ],
460
- },
392
+ }
393
+
394
+ // ================================================================
395
+ // BATCH — start multiple video jobs in parallel
396
+ // ================================================================
397
+ case "batch":
398
+ {
399
+ const items = args.items;
400
+ if (!items?.length) return {
401
+ success: false,
402
+ error: "items array is required"
403
+ };
404
+ if (items.length > 5) return {
405
+ success: false,
406
+ error: "Maximum 5 videos per batch"
407
+ };
408
+ const creds = await getVideoCredentials(sb, storeId);
409
+ const jobs = [];
410
+ for (const item of items) {
411
+ const provider = item.provider || "veo";
412
+ const jobId = crypto.randomUUID();
413
+ if (provider === "veo") {
414
+ if (!creds.google) {
415
+ jobs.push({
416
+ job_id: jobId,
417
+ provider,
418
+ model: "",
419
+ prompt: item.prompt,
420
+ status: "failed: no Google API key"
421
+ });
422
+ continue;
423
+ }
424
+ const model = item.model || "veo-3.1-generate-preview";
425
+ const job = {
426
+ job_id: jobId,
427
+ provider,
428
+ model,
429
+ prompt: item.prompt,
430
+ status: "queued"
431
+ };
432
+ activeJobs.set(jobId, job);
433
+ generateWithVeo(creds.google, item.prompt, model, {
434
+ aspectRatio: item.aspect_ratio,
435
+ resolution: item.resolution,
436
+ negativePrompt: item.negative_prompt
437
+ }, sb, storeId, jobId).catch(e => console.warn('[video-gen] veo batch job failed:', e.message));
438
+ jobs.push({
439
+ job_id: jobId,
440
+ provider,
441
+ model,
442
+ prompt: item.prompt,
443
+ status: "queued"
444
+ });
445
+ } else if (provider === "sora") {
446
+ if (!creds.openai) {
447
+ jobs.push({
448
+ job_id: jobId,
449
+ provider,
450
+ model: "",
451
+ prompt: item.prompt,
452
+ status: "failed: no OpenAI API key"
453
+ });
454
+ continue;
455
+ }
456
+ const model = item.model || "sora-2";
457
+ const job = {
458
+ job_id: jobId,
459
+ provider,
460
+ model,
461
+ prompt: item.prompt,
462
+ status: "queued"
461
463
  };
464
+ activeJobs.set(jobId, job);
465
+ generateWithSora(creds.openai, item.prompt, model, {
466
+ duration: item.duration,
467
+ resolution: item.resolution
468
+ }, sb, storeId, jobId).catch(e => console.warn('[video-gen] sora batch job failed:', e.message));
469
+ jobs.push({
470
+ job_id: jobId,
471
+ provider,
472
+ model,
473
+ prompt: item.prompt,
474
+ status: "queued"
475
+ });
476
+ }
462
477
  }
463
- default:
464
- return { success: false, error: `Unknown action: ${action}. Valid: generate, batch, status, jobs, list, providers` };
465
- }
478
+ return {
479
+ success: true,
480
+ data: {
481
+ total: jobs.length,
482
+ jobs
483
+ }
484
+ };
485
+ }
486
+
487
+ // ================================================================
488
+ // STATUS — check status of a video generation job
489
+ // ================================================================
490
+ case "status":
491
+ {
492
+ const jobId = args.job_id;
493
+ if (!jobId) return {
494
+ success: false,
495
+ error: "job_id is required"
496
+ };
497
+ const job = activeJobs.get(jobId);
498
+ if (!job) return {
499
+ success: false,
500
+ error: `Job ${jobId} not found. Jobs are only tracked in memory on this server instance.`
501
+ };
502
+ const result = {
503
+ job_id: job.job_id,
504
+ provider: job.provider,
505
+ model: job.model,
506
+ prompt: job.prompt,
507
+ status: job.status
508
+ };
509
+ if (job.file_url) result.file_url = job.file_url;
510
+ if (job.media_id) result.media_id = job.media_id;
511
+ if (job.error) result.error = job.error;
512
+ return {
513
+ success: true,
514
+ data: result
515
+ };
516
+ }
517
+
518
+ // ================================================================
519
+ // JOBS — list all active/recent jobs
520
+ // ================================================================
521
+ case "jobs":
522
+ {
523
+ const jobs = Array.from(activeJobs.values()).map(j => ({
524
+ job_id: j.job_id,
525
+ provider: j.provider,
526
+ model: j.model,
527
+ prompt: j.prompt.substring(0, 80),
528
+ status: j.status,
529
+ ...(j.file_url ? {
530
+ file_url: j.file_url
531
+ } : {}),
532
+ ...(j.error ? {
533
+ error: j.error
534
+ } : {})
535
+ }));
536
+ return {
537
+ success: true,
538
+ data: {
539
+ total: jobs.length,
540
+ jobs
541
+ }
542
+ };
543
+ }
544
+
545
+ // ================================================================
546
+ // LIST — list generated videos from store_media
547
+ // ================================================================
548
+ case "list":
549
+ {
550
+ const limit = Math.min(args.limit || 25, 100);
551
+ const {
552
+ data,
553
+ error
554
+ } = await sb.from("store_media").select("id, file_name, file_url, file_size, file_type, ai_tags, ai_description, source, created_at").eq("store_id", storeId).eq("status", "active").eq("category", "ai_generated").or("file_type.eq.video/mp4,file_type.eq.video/webm").order("created_at", {
555
+ ascending: false
556
+ }).limit(limit);
557
+ if (error) return {
558
+ success: false,
559
+ error: error.message
560
+ };
561
+ return {
562
+ success: true,
563
+ data: {
564
+ videos: data,
565
+ count: data?.length || 0
566
+ }
567
+ };
568
+ }
569
+
570
+ // ================================================================
571
+ // PROVIDERS — show available video generation providers
572
+ // ================================================================
573
+ case "providers":
574
+ {
575
+ const creds = await getVideoCredentials(sb, storeId);
576
+ return {
577
+ success: true,
578
+ data: {
579
+ providers: [{
580
+ provider: "veo",
581
+ configured: !!creds.google,
582
+ models: [{
583
+ id: "veo-3.1-generate-preview",
584
+ name: "Veo 3.1",
585
+ note: "Latest, highest quality, native audio"
586
+ }, {
587
+ id: "veo-3.1-fast-generate-preview",
588
+ name: "Veo 3.1 Fast",
589
+ note: "Faster, slightly lower quality"
590
+ }, {
591
+ id: "veo-3.0-generate-001",
592
+ name: "Veo 3.0",
593
+ note: "Stable release"
594
+ }, {
595
+ id: "veo-3.0-fast-generate-001",
596
+ name: "Veo 3.0 Fast",
597
+ note: "Fast variant"
598
+ }, {
599
+ id: "veo-2.0-generate-001",
600
+ name: "Veo 2.0",
601
+ note: "Previous generation"
602
+ }],
603
+ config: {
604
+ aspect_ratios: ["16:9", "9:16"],
605
+ resolutions: ["720p", "1080p", "4k"],
606
+ negative_prompt: true
607
+ }
608
+ }, {
609
+ provider: "sora",
610
+ configured: !!creds.openai,
611
+ models: [{
612
+ id: "sora-2",
613
+ name: "Sora 2",
614
+ note: "Fast, good for exploration"
615
+ }, {
616
+ id: "sora-2-pro",
617
+ name: "Sora 2 Pro",
618
+ note: "Production quality, slower"
619
+ }],
620
+ config: {
621
+ durations: [4, 8, 12],
622
+ resolutions: ["720x1280", "1280x720", "1024x1792", "1792x1024"]
623
+ }
624
+ }]
625
+ }
626
+ };
627
+ }
628
+ default:
629
+ return {
630
+ success: false,
631
+ error: `Unknown action: ${action}. Valid: generate, batch, status, jobs, list, providers`
632
+ };
633
+ }
466
634
  }
635
+ //# sourceMappingURL=video-gen.js.map