egaki 0.5.0 → 0.7.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 (280) hide show
  1. package/CHANGELOG.md +188 -0
  2. package/dist/cli/cache-utils.d.ts +33 -0
  3. package/dist/cli/cache-utils.d.ts.map +1 -0
  4. package/dist/cli/cache-utils.js +157 -0
  5. package/dist/cli/cached-generate.d.ts +105 -0
  6. package/dist/cli/cached-generate.d.ts.map +1 -0
  7. package/dist/cli/cached-generate.js +208 -0
  8. package/dist/cli/cached-generate.test.d.ts +11 -0
  9. package/dist/cli/cached-generate.test.d.ts.map +1 -0
  10. package/dist/cli/cached-generate.test.js +431 -0
  11. package/dist/cli/cartesia-provider.d.ts +16 -0
  12. package/dist/cli/cartesia-provider.d.ts.map +1 -0
  13. package/dist/cli/cartesia-provider.js +184 -0
  14. package/dist/cli/chatgpt-auth.d.ts.map +1 -0
  15. package/dist/cli/cli.d.ts +4 -0
  16. package/dist/cli/cli.d.ts.map +1 -0
  17. package/dist/cli/cli.js +1329 -0
  18. package/dist/cli/clone-generate.d.ts +26 -0
  19. package/dist/cli/clone-generate.d.ts.map +1 -0
  20. package/dist/cli/clone-generate.js +148 -0
  21. package/dist/{credentials.d.ts → cli/credentials.d.ts} +11 -2
  22. package/dist/cli/credentials.d.ts.map +1 -0
  23. package/dist/{credentials.js → cli/credentials.js} +88 -5
  24. package/dist/cli/elevenlabs-speech-provider.d.ts +26 -0
  25. package/dist/cli/elevenlabs-speech-provider.d.ts.map +1 -0
  26. package/dist/cli/elevenlabs-speech-provider.js +199 -0
  27. package/dist/cli/generate.d.ts +140 -0
  28. package/dist/cli/generate.d.ts.map +1 -0
  29. package/dist/cli/generate.js +604 -0
  30. package/dist/cli/generate.test.d.ts +2 -0
  31. package/dist/cli/generate.test.d.ts.map +1 -0
  32. package/dist/cli/generate.test.js +131 -0
  33. package/dist/cli/login.d.ts.map +1 -0
  34. package/dist/{login.js → cli/login.js} +45 -4
  35. package/dist/cli/main.d.ts +3 -0
  36. package/dist/cli/main.d.ts.map +1 -0
  37. package/dist/cli/main.js +7 -0
  38. package/dist/cli/model-catalog.d.ts +141 -0
  39. package/dist/cli/model-catalog.d.ts.map +1 -0
  40. package/dist/cli/model-catalog.js +2135 -0
  41. package/dist/{models.d.ts → cli/models.d.ts} +16 -9
  42. package/dist/cli/models.d.ts.map +1 -0
  43. package/dist/cli/models.js +313 -0
  44. package/dist/cli/open-browser.d.ts.map +1 -0
  45. package/dist/cli/openai-speech-provider.d.ts +3 -0
  46. package/dist/cli/openai-speech-provider.d.ts.map +1 -0
  47. package/dist/cli/openai-speech-provider.js +28 -0
  48. package/dist/cli/separation-generate.d.ts +34 -0
  49. package/dist/cli/separation-generate.d.ts.map +1 -0
  50. package/dist/cli/separation-generate.js +117 -0
  51. package/dist/cli/speech-catalog.d.ts +35 -0
  52. package/dist/cli/speech-catalog.d.ts.map +1 -0
  53. package/dist/cli/speech-catalog.js +195 -0
  54. package/dist/cli/speech-generate.d.ts +86 -0
  55. package/dist/cli/speech-generate.d.ts.map +1 -0
  56. package/dist/cli/speech-generate.js +156 -0
  57. package/dist/cli/speech-models.d.ts +8 -0
  58. package/dist/cli/speech-models.d.ts.map +1 -0
  59. package/dist/cli/speech-models.js +109 -0
  60. package/dist/cli/speech-provider.test.d.ts +2 -0
  61. package/dist/cli/speech-provider.test.d.ts.map +1 -0
  62. package/dist/cli/speech-provider.test.js +197 -0
  63. package/dist/cli/subscription.d.ts.map +1 -0
  64. package/dist/cli/transcription-catalog.d.ts +35 -0
  65. package/dist/cli/transcription-catalog.d.ts.map +1 -0
  66. package/dist/cli/transcription-catalog.js +192 -0
  67. package/dist/cli/transcription-generate.d.ts +62 -0
  68. package/dist/cli/transcription-generate.d.ts.map +1 -0
  69. package/dist/cli/transcription-generate.js +144 -0
  70. package/dist/cli/transcription-models.d.ts +9 -0
  71. package/dist/cli/transcription-models.d.ts.map +1 -0
  72. package/dist/cli/transcription-models.js +100 -0
  73. package/dist/cli/transcription-providers.d.ts +22 -0
  74. package/dist/cli/transcription-providers.d.ts.map +1 -0
  75. package/dist/cli/transcription-providers.js +290 -0
  76. package/dist/cli/video-model-catalog.d.ts +2 -0
  77. package/dist/cli/video-model-catalog.d.ts.map +1 -0
  78. package/dist/cli/video-model-catalog.js +5 -0
  79. package/dist/cli/xai-auth.d.ts +29 -0
  80. package/dist/cli/xai-auth.d.ts.map +1 -0
  81. package/dist/cli/xai-auth.js +325 -0
  82. package/dist/vite/angled-screen.d.ts +57 -0
  83. package/dist/vite/angled-screen.d.ts.map +1 -0
  84. package/dist/vite/angled-screen.js +115 -0
  85. package/dist/vite/app.d.ts +51 -0
  86. package/dist/vite/app.d.ts.map +1 -0
  87. package/dist/vite/app.js +150 -0
  88. package/dist/vite/bands-shader.d.ts +47 -0
  89. package/dist/vite/bands-shader.d.ts.map +1 -0
  90. package/dist/vite/bands-shader.js +267 -0
  91. package/dist/vite/code-block.d.ts +107 -0
  92. package/dist/vite/code-block.d.ts.map +1 -0
  93. package/dist/vite/code-block.js +641 -0
  94. package/dist/vite/components.d.ts +36 -0
  95. package/dist/vite/components.d.ts.map +1 -0
  96. package/dist/vite/components.js +113 -0
  97. package/dist/vite/dispersion-rings-shader.d.ts +44 -0
  98. package/dist/vite/dispersion-rings-shader.d.ts.map +1 -0
  99. package/dist/vite/dispersion-rings-shader.js +282 -0
  100. package/dist/vite/easing-curves.d.ts +129 -0
  101. package/dist/vite/easing-curves.d.ts.map +1 -0
  102. package/dist/vite/easing-curves.js +584 -0
  103. package/dist/vite/easing-curves.test.d.ts +2 -0
  104. package/dist/vite/easing-curves.test.d.ts.map +1 -0
  105. package/dist/vite/easing-curves.test.js +200 -0
  106. package/dist/vite/generated-media-client.d.ts +35 -0
  107. package/dist/vite/generated-media-client.d.ts.map +1 -0
  108. package/dist/vite/generated-media-client.js +76 -0
  109. package/dist/vite/keyframes.d.ts +129 -0
  110. package/dist/vite/keyframes.d.ts.map +1 -0
  111. package/dist/vite/keyframes.js +194 -0
  112. package/dist/vite/layout-editor.d.ts +45 -0
  113. package/dist/vite/layout-editor.d.ts.map +1 -0
  114. package/dist/vite/layout-editor.js +587 -0
  115. package/dist/vite/layout-transition.d.ts +136 -0
  116. package/dist/vite/layout-transition.d.ts.map +1 -0
  117. package/dist/vite/layout-transition.js +581 -0
  118. package/dist/vite/liquid-gradient-shader.d.ts +62 -0
  119. package/dist/vite/liquid-gradient-shader.d.ts.map +1 -0
  120. package/dist/vite/liquid-gradient-shader.js +413 -0
  121. package/dist/vite/mdx-client.d.ts +15 -0
  122. package/dist/vite/mdx-client.d.ts.map +1 -0
  123. package/dist/vite/mdx-client.js +265 -0
  124. package/dist/vite/mdx-parse.d.ts +102 -0
  125. package/dist/vite/mdx-parse.d.ts.map +1 -0
  126. package/dist/vite/mdx-parse.js +251 -0
  127. package/dist/vite/mdx-provided-components.d.ts +18 -0
  128. package/dist/vite/mdx-provided-components.d.ts.map +1 -0
  129. package/dist/vite/mdx-provided-components.js +14 -0
  130. package/dist/vite/mdx-video.d.ts +327 -0
  131. package/dist/vite/mdx-video.d.ts.map +1 -0
  132. package/dist/vite/mdx-video.js +596 -0
  133. package/dist/vite/mdx-video.test.d.ts +9 -0
  134. package/dist/vite/mdx-video.test.d.ts.map +1 -0
  135. package/dist/vite/mdx-video.test.js +1945 -0
  136. package/dist/vite/media-components.d.ts +45 -0
  137. package/dist/vite/media-components.d.ts.map +1 -0
  138. package/dist/vite/media-components.js +355 -0
  139. package/dist/vite/media-duration-store.d.ts +66 -0
  140. package/dist/vite/media-duration-store.d.ts.map +1 -0
  141. package/dist/vite/media-duration-store.js +204 -0
  142. package/dist/vite/player-page.d.ts +35 -0
  143. package/dist/vite/player-page.d.ts.map +1 -0
  144. package/dist/vite/player-page.js +720 -0
  145. package/dist/vite/render-client.d.ts +18 -0
  146. package/dist/vite/render-client.d.ts.map +1 -0
  147. package/dist/vite/render-client.js +67 -0
  148. package/dist/vite/sdk.d.ts +221 -0
  149. package/dist/vite/sdk.d.ts.map +1 -0
  150. package/dist/vite/sdk.js +355 -0
  151. package/dist/vite/server-components.d.ts +55 -0
  152. package/dist/vite/server-components.d.ts.map +1 -0
  153. package/dist/vite/server-components.js +156 -0
  154. package/dist/vite/server-mdx.d.ts +74 -0
  155. package/dist/vite/server-mdx.d.ts.map +1 -0
  156. package/dist/vite/server-mdx.js +259 -0
  157. package/dist/vite/shader-renderer.d.ts +48 -0
  158. package/dist/vite/shader-renderer.d.ts.map +1 -0
  159. package/dist/vite/shader-renderer.js +411 -0
  160. package/dist/vite/store-hooks.d.ts +12 -0
  161. package/dist/vite/store-hooks.d.ts.map +1 -0
  162. package/dist/vite/store-hooks.js +93 -0
  163. package/dist/vite/store.d.ts +75 -0
  164. package/dist/vite/store.d.ts.map +1 -0
  165. package/dist/vite/store.js +52 -0
  166. package/dist/vite/store.test.d.ts +6 -0
  167. package/dist/vite/store.test.d.ts.map +1 -0
  168. package/dist/vite/store.test.js +172 -0
  169. package/dist/vite/tweakpane-hook.d.ts +94 -0
  170. package/dist/vite/tweakpane-hook.d.ts.map +1 -0
  171. package/dist/vite/tweakpane-hook.js +450 -0
  172. package/dist/vite/vite-plugin.d.ts +28 -0
  173. package/dist/vite/vite-plugin.d.ts.map +1 -0
  174. package/dist/vite/vite-plugin.js +538 -0
  175. package/dist/vite/wave-gradient-shader.d.ts +41 -0
  176. package/dist/vite/wave-gradient-shader.d.ts.map +1 -0
  177. package/dist/vite/wave-gradient-shader.js +207 -0
  178. package/package.json +103 -25
  179. package/skills/egaki/SKILL.md +162 -1
  180. package/src/cli/cache-utils.ts +169 -0
  181. package/src/cli/cached-generate.test.ts +531 -0
  182. package/src/cli/cached-generate.ts +348 -0
  183. package/src/cli/cartesia-provider.ts +249 -0
  184. package/src/cli/cli.ts +1818 -0
  185. package/src/cli/clone-generate.ts +202 -0
  186. package/src/{credentials.ts → cli/credentials.ts} +90 -7
  187. package/src/cli/elevenlabs-speech-provider.ts +243 -0
  188. package/src/cli/generate.test.ts +166 -0
  189. package/src/cli/generate.ts +912 -0
  190. package/src/{login.ts → cli/login.ts} +48 -3
  191. package/src/cli/main.ts +8 -0
  192. package/src/cli/model-catalog.ts +2336 -0
  193. package/src/cli/models.ts +408 -0
  194. package/src/cli/openai-speech-provider.ts +34 -0
  195. package/src/cli/separation-generate.ts +187 -0
  196. package/src/cli/speech-catalog.ts +253 -0
  197. package/src/cli/speech-generate.ts +275 -0
  198. package/src/cli/speech-models.ts +146 -0
  199. package/src/cli/speech-provider.test.ts +226 -0
  200. package/src/cli/transcription-catalog.ts +250 -0
  201. package/src/cli/transcription-generate.ts +214 -0
  202. package/src/cli/transcription-models.ts +136 -0
  203. package/src/cli/transcription-providers.ts +427 -0
  204. package/src/cli/video-model-catalog.ts +14 -0
  205. package/src/cli/xai-auth.ts +396 -0
  206. package/src/vite/angled-screen.tsx +214 -0
  207. package/src/vite/app.tsx +197 -0
  208. package/src/vite/bands-shader.tsx +319 -0
  209. package/src/vite/code-block.tsx +939 -0
  210. package/src/vite/components.tsx +278 -0
  211. package/src/vite/dispersion-rings-shader.tsx +331 -0
  212. package/src/vite/easing-curves.test.ts +232 -0
  213. package/src/vite/easing-curves.ts +743 -0
  214. package/src/vite/generated-media-client.tsx +121 -0
  215. package/src/vite/keyframes.tsx +347 -0
  216. package/src/vite/layout-editor.tsx +709 -0
  217. package/src/vite/layout-transition.tsx +706 -0
  218. package/src/vite/liquid-gradient-shader.tsx +474 -0
  219. package/src/vite/mdx-client.tsx +420 -0
  220. package/src/vite/mdx-parse.ts +343 -0
  221. package/src/vite/mdx-provided-components.ts +19 -0
  222. package/src/vite/mdx-video.test.tsx +2219 -0
  223. package/src/vite/mdx-video.tsx +976 -0
  224. package/src/vite/media-components.tsx +473 -0
  225. package/src/vite/media-duration-store.ts +225 -0
  226. package/src/vite/motion-timing.ts +194 -0
  227. package/src/vite/player-page.tsx +1107 -0
  228. package/src/vite/render-client.ts +84 -0
  229. package/src/vite/sdk.ts +598 -0
  230. package/src/vite/server-components.tsx +241 -0
  231. package/src/vite/server-mdx.ts +285 -0
  232. package/src/vite/shader-renderer.tsx +535 -0
  233. package/src/vite/store-hooks.ts +117 -0
  234. package/src/vite/store.test.ts +202 -0
  235. package/src/vite/store.ts +115 -0
  236. package/src/vite/styles.css +21 -0
  237. package/src/vite/tweakpane-hook.tsx +593 -0
  238. package/src/vite/virtual-modules.d.ts +30 -0
  239. package/src/vite/vite-plugin.ts +584 -0
  240. package/src/vite/wave-gradient-shader.tsx +253 -0
  241. package/README.md +0 -266
  242. package/dist/antigravity-auth.d.ts +0 -15
  243. package/dist/antigravity-auth.d.ts.map +0 -1
  244. package/dist/antigravity-auth.js +0 -544
  245. package/dist/antigravity-image.d.ts +0 -11
  246. package/dist/antigravity-image.d.ts.map +0 -1
  247. package/dist/antigravity-image.js +0 -285
  248. package/dist/chatgpt-auth.d.ts.map +0 -1
  249. package/dist/cli.d.ts +0 -3
  250. package/dist/cli.d.ts.map +0 -1
  251. package/dist/cli.js +0 -968
  252. package/dist/credentials.d.ts.map +0 -1
  253. package/dist/gateway-model-candidates.generated.d.ts +0 -11
  254. package/dist/gateway-model-candidates.generated.d.ts.map +0 -1
  255. package/dist/gateway-model-candidates.generated.js +0 -64
  256. package/dist/login.d.ts.map +0 -1
  257. package/dist/model-catalog.d.ts +0 -42
  258. package/dist/model-catalog.d.ts.map +0 -1
  259. package/dist/model-catalog.js +0 -1001
  260. package/dist/models.d.ts.map +0 -1
  261. package/dist/models.js +0 -246
  262. package/dist/open-browser.d.ts.map +0 -1
  263. package/dist/subscription.d.ts.map +0 -1
  264. package/dist/video-model-catalog.d.ts +0 -52
  265. package/dist/video-model-catalog.d.ts.map +0 -1
  266. package/dist/video-model-catalog.js +0 -306
  267. package/src/cli.ts +0 -1378
  268. package/src/model-catalog.ts +0 -1077
  269. package/src/models.ts +0 -309
  270. package/src/video-model-catalog.ts +0 -363
  271. /package/dist/{chatgpt-auth.d.ts → cli/chatgpt-auth.d.ts} +0 -0
  272. /package/dist/{chatgpt-auth.js → cli/chatgpt-auth.js} +0 -0
  273. /package/dist/{login.d.ts → cli/login.d.ts} +0 -0
  274. /package/dist/{open-browser.d.ts → cli/open-browser.d.ts} +0 -0
  275. /package/dist/{open-browser.js → cli/open-browser.js} +0 -0
  276. /package/dist/{subscription.d.ts → cli/subscription.d.ts} +0 -0
  277. /package/dist/{subscription.js → cli/subscription.js} +0 -0
  278. /package/src/{chatgpt-auth.ts → cli/chatgpt-auth.ts} +0 -0
  279. /package/src/{open-browser.ts → cli/open-browser.ts} +0 -0
  280. /package/src/{subscription.ts → cli/subscription.ts} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,IAAI,CAAA;AAInD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAEpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE/D,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,eAAe,CAAA;AACxD,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,CAAA;AAE3C,eAAO,MAAM,YAAY,EAA+B,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAA;AAC7E,eAAO,MAAM,YAAY,EAAqC,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAA;AAYnF,eAAO,MAAM,aAAa,4BAA4B,CAAA;AACtD,eAAO,MAAM,mBAAmB,8BAA8B,CAAA;AAE9D,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAO7D;AAuBD,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAiD5D;AAgDD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAI9D;AAOD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAsC3E;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,CAAC,CAqCxB;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAyCpE"}
package/dist/models.js DELETED
@@ -1,246 +0,0 @@
1
- import pc from 'picocolors';
2
- import { PROVIDERS, EGAKI_GATEWAY_URL, shouldUseChatGptBackend } from './credentials.js';
3
- import { CATALOG, findModel } from './model-catalog.js';
4
- import { VIDEO_CATALOG, findVideoModel } from './video-model-catalog.js';
5
- export const IMAGE_MODELS = CATALOG.map((m) => m.id);
6
- export const VIDEO_MODELS = VIDEO_CATALOG.map((m) => m.id);
7
- /**
8
- * Strip provider prefix from a model ID (e.g. "vertex/imagen-4.0-generate-001" → "imagen-4.0-generate-001").
9
- * Provider SDKs expect bare model IDs, but the catalog uses prefixed IDs for routing.
10
- */
11
- function stripProviderPrefix(modelId) {
12
- const slash = modelId.indexOf('/');
13
- if (slash === -1)
14
- return modelId;
15
- return modelId.slice(slash + 1);
16
- }
17
- export const DEFAULT_MODEL = 'nano-banana-pro-preview';
18
- export const DEFAULT_VIDEO_MODEL = 'veo-3.1-fast-generate-001';
19
- export function getModelConfig(modelId) {
20
- const entry = findModel(modelId) ?? findVideoModel(modelId);
21
- if (!entry) {
22
- console.error(pc.red(`Unknown model: ${modelId}`));
23
- process.exit(1);
24
- }
25
- return entry;
26
- }
27
- /**
28
- * Check if the egaki gateway API key is available (from env or stored credentials).
29
- */
30
- function hasEgakiKey() {
31
- const info = PROVIDERS['egaki'];
32
- if (!info)
33
- return false;
34
- return Boolean(process.env[info.envVar]);
35
- }
36
- /**
37
- * Check if a direct provider key is available for the given provider.
38
- */
39
- function hasDirectProviderKey(providerName) {
40
- const info = PROVIDERS[providerName];
41
- if (!info)
42
- return false;
43
- return Boolean(process.env[info.envVar]);
44
- }
45
- // Check that the provider's API key is available before making API calls.
46
- // Prints a user-friendly error with instructions on how to configure it.
47
- // Prioritizes egaki subscription over individual provider keys.
48
- export function ensureProviderKey(providerName) {
49
- // If direct provider key exists, we're good
50
- if (hasDirectProviderKey(providerName))
51
- return;
52
- // Vertex models require a direct key — the upstream Vercel AI Gateway
53
- // does not support vertex/ routing, so egaki gateway can't proxy them.
54
- if (providerName === 'vertex') {
55
- console.error('');
56
- console.error(pc.red(pc.bold('Vertex models require a direct Google Cloud API key')));
57
- console.error('');
58
- console.error(` ${pc.cyan('egaki login --provider vertex --key <key>')}`);
59
- console.error('');
60
- console.error(pc.dim('Get a key at https://console.cloud.google.com/apis/credentials'));
61
- console.error(pc.dim('Egaki subscription does not cover Vertex routing yet.'));
62
- console.error('');
63
- process.exit(1);
64
- }
65
- // If egaki key exists, we'll route through the gateway
66
- if (hasEgakiKey())
67
- return;
68
- const info = PROVIDERS[providerName];
69
- console.error('');
70
- console.error(pc.red(pc.bold(`Missing API key for ${info?.label || providerName}`)));
71
- console.error('');
72
- console.error(` ${pc.bold('Recommended:')} Use Egaki subscription (all models, one key)`);
73
- console.error('');
74
- console.error(` ${pc.cyan('egaki subscribe')} get started in 30 seconds`);
75
- console.error('');
76
- console.error(` ${pc.dim('Or configure a provider key directly:')}`);
77
- console.error('');
78
- console.error(` ${pc.cyan('egaki login')} interactive setup`);
79
- if (info) {
80
- console.error(` ${pc.cyan(`${info.envVar}=...`)} egaki image ... inline env var`);
81
- console.error(` ${pc.cyan(`egaki login --provider ${providerName} --key <key>`)}`);
82
- console.error('');
83
- console.error(` ${pc.dim(info.hint)}`);
84
- }
85
- console.error('');
86
- process.exit(1);
87
- }
88
- /**
89
- * Create a gateway-backed image model using createGateway from the AI SDK.
90
- * The model ID is sent as provider/model format to the gateway.
91
- */
92
- async function createGatewayImageModel(modelId, provider) {
93
- const { createGateway } = await import('ai');
94
- const gateway = createGateway({
95
- apiKey: process.env['EGAKI_API_KEY'],
96
- baseURL: EGAKI_GATEWAY_URL,
97
- });
98
- // Gateway expects provider/model format for routing.
99
- // For models that already have a prefix (e.g. vertex/imagen-4.0), strip it
100
- // and use the catalog provider. For bare IDs, prepend the provider.
101
- const bareId = stripProviderPrefix(modelId);
102
- const gatewayModelId = `${provider}/${bareId}`;
103
- return gateway.image(gatewayModelId);
104
- }
105
- /**
106
- * Create a gateway-backed text model using createGateway from the AI SDK.
107
- */
108
- async function createGatewayTextModel(modelId, provider) {
109
- const { createGateway } = await import('ai');
110
- const gateway = createGateway({
111
- apiKey: process.env['EGAKI_API_KEY'],
112
- baseURL: EGAKI_GATEWAY_URL,
113
- });
114
- const bareId = stripProviderPrefix(modelId);
115
- const gatewayModelId = `${provider}/${bareId}`;
116
- return gateway(gatewayModelId);
117
- }
118
- /**
119
- * Create a gateway-backed video model using createGateway from the AI SDK.
120
- */
121
- async function createGatewayVideoModel(modelId, provider) {
122
- const { createGateway } = await import('ai');
123
- const gateway = createGateway({
124
- apiKey: process.env['EGAKI_API_KEY'],
125
- baseURL: EGAKI_GATEWAY_URL,
126
- });
127
- const bareId = stripProviderPrefix(modelId);
128
- const gatewayModelId = `${provider}/${bareId}`;
129
- return gateway.video(gatewayModelId);
130
- }
131
- /**
132
- * ChatGPT OAuth image generation goes through the Codex backend instead of the
133
- * OpenAI Image API, so OpenAI image models need the custom responses path.
134
- */
135
- export function shouldUseResponsesApi(modelId) {
136
- const config = findModel(modelId);
137
- if (!config)
138
- return false;
139
- return config.provider === 'openai' && config.strategy === 'image' && shouldUseChatGptBackend();
140
- }
141
- // Lazily import the provider and create the right model instance.
142
- // This avoids loading all provider SDKs upfront — only the one needed
143
- // for the selected model gets imported.
144
- //
145
- // Priority: direct provider key > egaki gateway > error
146
- export async function createImageModel(modelId) {
147
- const config = getModelConfig(modelId);
148
- ensureProviderKey(config.provider);
149
- // If the user has a direct provider key, use the provider SDK directly
150
- if (hasDirectProviderKey(config.provider)) {
151
- switch (config.provider) {
152
- case 'google': {
153
- const { google } = await import('@ai-sdk/google');
154
- return google.image(modelId);
155
- }
156
- case 'vertex': {
157
- const { vertex } = await import('@ai-sdk/google-vertex');
158
- return vertex.image(stripProviderPrefix(modelId));
159
- }
160
- case 'openai': {
161
- const { openai } = await import('@ai-sdk/openai');
162
- return openai.image(modelId);
163
- }
164
- case 'replicate': {
165
- const { replicate } = await import('@ai-sdk/replicate');
166
- return replicate.image(modelId);
167
- }
168
- case 'fal': {
169
- const { fal } = await import('@ai-sdk/fal');
170
- return fal.image(modelId);
171
- }
172
- }
173
- }
174
- // Fall back to egaki gateway
175
- if (hasEgakiKey()) {
176
- return createGatewayImageModel(modelId, config.provider);
177
- }
178
- // Should not reach here — ensureProviderKey would have exited
179
- console.error(pc.red(`No API key available for provider: ${config.provider}`));
180
- process.exit(1);
181
- }
182
- export async function createTextModel(modelId) {
183
- const config = getModelConfig(modelId);
184
- if (config.strategy !== 'text') {
185
- console.error(pc.red(`Model ${modelId} is not a text model`));
186
- process.exit(1);
187
- }
188
- ensureProviderKey(config.provider);
189
- // Direct provider key takes priority
190
- if (hasDirectProviderKey(config.provider)) {
191
- switch (config.provider) {
192
- case 'google': {
193
- const { google } = await import('@ai-sdk/google');
194
- return google(modelId);
195
- }
196
- case 'vertex': {
197
- const { vertex } = await import('@ai-sdk/google-vertex');
198
- return vertex(stripProviderPrefix(modelId));
199
- }
200
- default:
201
- // Only Google/Vertex support generateText with responseModalities for images
202
- console.error(pc.red(`Text+image generation is only supported for Google/Vertex models, got provider: ${config.provider}`));
203
- process.exit(1);
204
- }
205
- }
206
- // Fall back to egaki gateway
207
- if (hasEgakiKey()) {
208
- return createGatewayTextModel(modelId, config.provider);
209
- }
210
- console.error(pc.red(`No API key available for provider: ${config.provider}`));
211
- process.exit(1);
212
- }
213
- export async function createVideoModel(modelId) {
214
- const config = getModelConfig(modelId);
215
- if (config.strategy !== 'video') {
216
- console.error(pc.red(`Model ${modelId} is not a video model`));
217
- process.exit(1);
218
- }
219
- ensureProviderKey(config.provider);
220
- // Direct provider key takes priority
221
- if (hasDirectProviderKey(config.provider)) {
222
- switch (config.provider) {
223
- case 'google': {
224
- const { google } = await import('@ai-sdk/google');
225
- return google.video(modelId);
226
- }
227
- case 'vertex': {
228
- const { vertex } = await import('@ai-sdk/google-vertex');
229
- return vertex.video(stripProviderPrefix(modelId));
230
- }
231
- case 'fal': {
232
- const { fal } = await import('@ai-sdk/fal');
233
- return fal.video(modelId);
234
- }
235
- default:
236
- console.error(pc.red(`Direct video generation is only supported for Google, Vertex, and Fal keys, got provider: ${config.provider}`));
237
- process.exit(1);
238
- }
239
- }
240
- // Fall back to egaki gateway
241
- if (hasEgakiKey()) {
242
- return createGatewayVideoModel(modelId, config.provider);
243
- }
244
- console.error(pc.red(`No API key available for provider: ${config.provider}`));
245
- process.exit(1);
246
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"open-browser.d.ts","sourceRoot":"","sources":["../src/open-browser.ts"],"names":[],"mappings":"AAyBA,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAsBrD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"subscription.d.ts","sourceRoot":"","sources":["../src/subscription.ts"],"names":[],"mappings":"AAsDA,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CA8H1D;AAED,wBAAgB,uBAAuB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CA6B3E;AAID,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAgCjD;AAID,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CA8C/C"}
@@ -1,52 +0,0 @@
1
- export type VideoDurationPricingTier = {
2
- /** USD per second for this variant */
3
- costPerSecond: number;
4
- /** Optional resolution discriminator (e.g. 720p, 1080p, 4k) */
5
- resolution?: string;
6
- /** Optional mode discriminator (e.g. std, pro) */
7
- mode?: string;
8
- /** Optional audio discriminator */
9
- audio?: boolean;
10
- };
11
- export type PerVideoSecondCost = {
12
- type: 'per-video-second';
13
- /** Fallback duration when request does not specify one (seconds) */
14
- defaultDurationSec: number;
15
- tiers: VideoDurationPricingTier[];
16
- };
17
- export type UnknownVideoCost = {
18
- type: 'unknown';
19
- };
20
- export type VideoModelCost = PerVideoSecondCost | UnknownVideoCost;
21
- export type VideoModelFeatures = {
22
- /** Supports text prompt to video generation */
23
- textToVideo: boolean;
24
- /** Supports image-to-video prompt object ({ image, text }) */
25
- imageToVideo: boolean;
26
- /** Optional capabilities exposed by provider */
27
- capabilities: Array<'t2v' | 'i2v' | 'r2v' | 'motion-control' | 'editing'>;
28
- /** Optional supported aspect ratios */
29
- aspectRatios?: string[];
30
- /** Optional supported resolutions */
31
- resolutions?: string[];
32
- /** Optional duration range in seconds */
33
- durationRangeSec?: {
34
- min: number;
35
- max: number;
36
- };
37
- seed: boolean;
38
- multipleVideos: boolean;
39
- };
40
- export type VideoModelEntry = {
41
- id: string;
42
- name: string;
43
- description?: string;
44
- provider: string;
45
- strategy: 'video';
46
- released: string;
47
- cost: VideoModelCost;
48
- features: VideoModelFeatures;
49
- };
50
- export declare const VIDEO_CATALOG: VideoModelEntry[];
51
- export declare function findVideoModel(id: string): VideoModelEntry | undefined;
52
- //# sourceMappingURL=video-model-catalog.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"video-model-catalog.d.ts","sourceRoot":"","sources":["../src/video-model-catalog.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,wBAAwB,GAAG;IACrC,sCAAsC;IACtC,aAAa,EAAE,MAAM,CAAA;IACrB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,mCAAmC;IACnC,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,kBAAkB,CAAA;IACxB,oEAAoE;IACpE,kBAAkB,EAAE,MAAM,CAAA;IAC1B,KAAK,EAAE,wBAAwB,EAAE,CAAA;CAClC,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,SAAS,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;AAElE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,+CAA+C;IAC/C,WAAW,EAAE,OAAO,CAAA;IACpB,8DAA8D;IAC9D,YAAY,EAAE,OAAO,CAAA;IACrB,gDAAgD;IAChD,YAAY,EAAE,KAAK,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,gBAAgB,GAAG,SAAS,CAAC,CAAA;IACzE,uCAAuC;IACvC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,yCAAyC;IACzC,gBAAgB,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/C,IAAI,EAAE,OAAO,CAAA;IACb,cAAc,EAAE,OAAO,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,cAAc,CAAA;IACpB,QAAQ,EAAE,kBAAkB,CAAA;CAC7B,CAAA;AAID,eAAO,MAAM,aAAa,EAAE,eAAe,EA0S1C,CAAA;AAID,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAEtE"}
@@ -1,306 +0,0 @@
1
- // Single source of truth for video generation models.
2
- // Stores provider, strategy, capabilities, and duration-based pricing metadata.
3
- // Gateway billing uses this catalog to estimate per-request video cost.
4
- const commonRatios = ['16:9', '9:16', '1:1', '4:3', '3:4'];
5
- export const VIDEO_CATALOG = [
6
- {
7
- id: 'veo-3.1-generate-001',
8
- name: 'Veo 3.1',
9
- provider: 'google',
10
- strategy: 'video',
11
- released: '2026-01',
12
- cost: {
13
- type: 'per-video-second',
14
- defaultDurationSec: 8,
15
- tiers: [
16
- { resolution: '720p', audio: false, costPerSecond: 0.2 },
17
- { resolution: '720p', audio: true, costPerSecond: 0.4 },
18
- { resolution: '1080p', audio: false, costPerSecond: 0.2 },
19
- { resolution: '1080p', audio: true, costPerSecond: 0.4 },
20
- { resolution: '4k', audio: false, costPerSecond: 0.4 },
21
- { resolution: '4k', audio: true, costPerSecond: 0.6 },
22
- ],
23
- },
24
- features: {
25
- textToVideo: true,
26
- imageToVideo: false,
27
- capabilities: ['t2v'],
28
- aspectRatios: ['16:9', '9:16'],
29
- resolutions: ['720p', '1080p', '4k'],
30
- durationRangeSec: { min: 4, max: 8 },
31
- seed: true,
32
- multipleVideos: true,
33
- },
34
- },
35
- {
36
- id: 'veo-3.1-fast-generate-001',
37
- name: 'Veo 3.1 Fast',
38
- provider: 'google',
39
- strategy: 'video',
40
- released: '2026-01',
41
- cost: {
42
- type: 'per-video-second',
43
- defaultDurationSec: 8,
44
- tiers: [
45
- { resolution: '720p', audio: false, costPerSecond: 0.1 },
46
- { resolution: '720p', audio: true, costPerSecond: 0.15 },
47
- { resolution: '1080p', audio: false, costPerSecond: 0.1 },
48
- { resolution: '1080p', audio: true, costPerSecond: 0.15 },
49
- { resolution: '4k', audio: false, costPerSecond: 0.3 },
50
- { resolution: '4k', audio: true, costPerSecond: 0.35 },
51
- ],
52
- },
53
- features: {
54
- textToVideo: true,
55
- imageToVideo: false,
56
- capabilities: ['t2v'],
57
- aspectRatios: ['16:9', '9:16'],
58
- resolutions: ['720p', '1080p', '4k'],
59
- durationRangeSec: { min: 4, max: 8 },
60
- seed: true,
61
- multipleVideos: true,
62
- },
63
- },
64
- {
65
- id: 'veo-3.0-generate-001',
66
- name: 'Veo 3.0',
67
- provider: 'google',
68
- strategy: 'video',
69
- released: '2025-12',
70
- cost: {
71
- type: 'per-video-second',
72
- defaultDurationSec: 8,
73
- tiers: [
74
- { resolution: '720p', audio: false, costPerSecond: 0.2 },
75
- { resolution: '720p', audio: true, costPerSecond: 0.4 },
76
- { resolution: '1080p', audio: false, costPerSecond: 0.2 },
77
- { resolution: '1080p', audio: true, costPerSecond: 0.4 },
78
- ],
79
- },
80
- features: {
81
- textToVideo: true,
82
- imageToVideo: false,
83
- capabilities: ['t2v'],
84
- aspectRatios: ['16:9', '9:16'],
85
- resolutions: ['720p', '1080p'],
86
- durationRangeSec: { min: 4, max: 8 },
87
- seed: true,
88
- multipleVideos: true,
89
- },
90
- },
91
- {
92
- id: 'veo-3.0-fast-generate-001',
93
- name: 'Veo 3.0 Fast',
94
- provider: 'google',
95
- strategy: 'video',
96
- released: '2025-12',
97
- cost: {
98
- type: 'per-video-second',
99
- defaultDurationSec: 8,
100
- tiers: [
101
- { resolution: '720p', audio: false, costPerSecond: 0.1 },
102
- { resolution: '720p', audio: true, costPerSecond: 0.15 },
103
- { resolution: '1080p', audio: false, costPerSecond: 0.1 },
104
- { resolution: '1080p', audio: true, costPerSecond: 0.15 },
105
- ],
106
- },
107
- features: {
108
- textToVideo: true,
109
- imageToVideo: false,
110
- capabilities: ['t2v'],
111
- aspectRatios: ['16:9', '9:16'],
112
- resolutions: ['720p', '1080p'],
113
- durationRangeSec: { min: 4, max: 8 },
114
- seed: true,
115
- multipleVideos: true,
116
- },
117
- },
118
- // ── Vertex: Veo ──────────────────────────────────────────────────────
119
- // Same Veo models routed through Vertex AI / Google Cloud billing.
120
- // Use `egaki login --provider vertex --key <key>` to configure.
121
- {
122
- id: 'vertex/veo-3.1-generate-001',
123
- name: 'Veo 3.1 (Vertex)',
124
- provider: 'vertex',
125
- strategy: 'video',
126
- released: '2026-01',
127
- cost: {
128
- type: 'per-video-second',
129
- defaultDurationSec: 8,
130
- tiers: [
131
- { resolution: '720p', audio: false, costPerSecond: 0.2 },
132
- { resolution: '720p', audio: true, costPerSecond: 0.4 },
133
- { resolution: '1080p', audio: false, costPerSecond: 0.2 },
134
- { resolution: '1080p', audio: true, costPerSecond: 0.4 },
135
- { resolution: '4k', audio: false, costPerSecond: 0.4 },
136
- { resolution: '4k', audio: true, costPerSecond: 0.6 },
137
- ],
138
- },
139
- features: {
140
- textToVideo: true,
141
- imageToVideo: false,
142
- capabilities: ['t2v'],
143
- aspectRatios: ['16:9', '9:16'],
144
- resolutions: ['720p', '1080p', '4k'],
145
- durationRangeSec: { min: 4, max: 8 },
146
- seed: true,
147
- multipleVideos: true,
148
- },
149
- },
150
- {
151
- id: 'vertex/veo-3.1-fast-generate-001',
152
- name: 'Veo 3.1 Fast (Vertex)',
153
- provider: 'vertex',
154
- strategy: 'video',
155
- released: '2026-01',
156
- cost: {
157
- type: 'per-video-second',
158
- defaultDurationSec: 8,
159
- tiers: [
160
- { resolution: '720p', audio: false, costPerSecond: 0.1 },
161
- { resolution: '720p', audio: true, costPerSecond: 0.15 },
162
- { resolution: '1080p', audio: false, costPerSecond: 0.1 },
163
- { resolution: '1080p', audio: true, costPerSecond: 0.15 },
164
- { resolution: '4k', audio: false, costPerSecond: 0.3 },
165
- { resolution: '4k', audio: true, costPerSecond: 0.35 },
166
- ],
167
- },
168
- features: {
169
- textToVideo: true,
170
- imageToVideo: false,
171
- capabilities: ['t2v'],
172
- aspectRatios: ['16:9', '9:16'],
173
- resolutions: ['720p', '1080p', '4k'],
174
- durationRangeSec: { min: 4, max: 8 },
175
- seed: true,
176
- multipleVideos: true,
177
- },
178
- },
179
- {
180
- id: 'grok-imagine-video',
181
- name: 'Grok Imagine Video',
182
- provider: 'xai',
183
- strategy: 'video',
184
- released: '2026-03',
185
- cost: {
186
- type: 'per-video-second',
187
- defaultDurationSec: 5,
188
- tiers: [
189
- { resolution: '480p', costPerSecond: 0.05 },
190
- { resolution: '720p', costPerSecond: 0.07 },
191
- ],
192
- },
193
- features: {
194
- textToVideo: true,
195
- imageToVideo: true,
196
- capabilities: ['t2v', 'i2v', 'editing'],
197
- aspectRatios: ['1:1', '16:9', '9:16', '4:3', '3:4', '3:2', '2:3'],
198
- resolutions: ['480p', '720p'],
199
- durationRangeSec: { min: 1, max: 15 },
200
- seed: false,
201
- multipleVideos: false,
202
- },
203
- },
204
- {
205
- id: 'kling-v2.6-t2v',
206
- name: 'Kling v2.6 T2V',
207
- provider: 'klingai',
208
- strategy: 'video',
209
- released: '2025-12',
210
- cost: {
211
- type: 'per-video-second',
212
- defaultDurationSec: 5,
213
- tiers: [
214
- { mode: 'std', costPerSecond: 0.042 },
215
- { mode: 'pro', audio: false, costPerSecond: 0.07 },
216
- { mode: 'pro', audio: true, costPerSecond: 0.14 },
217
- ],
218
- },
219
- features: {
220
- textToVideo: true,
221
- imageToVideo: false,
222
- capabilities: ['t2v'],
223
- aspectRatios: commonRatios,
224
- durationRangeSec: { min: 5, max: 10 },
225
- seed: false,
226
- multipleVideos: false,
227
- },
228
- },
229
- {
230
- id: 'wan-v2.6-t2v',
231
- name: 'Wan v2.6 T2V',
232
- provider: 'alibaba',
233
- strategy: 'video',
234
- released: '2026-01',
235
- cost: {
236
- type: 'per-video-second',
237
- defaultDurationSec: 5,
238
- tiers: [
239
- { resolution: '720p', costPerSecond: 0.1 },
240
- { resolution: '1080p', costPerSecond: 0.15 },
241
- ],
242
- },
243
- features: {
244
- textToVideo: true,
245
- imageToVideo: false,
246
- capabilities: ['t2v'],
247
- resolutions: ['720p', '1080p'],
248
- durationRangeSec: { min: 2, max: 15 },
249
- seed: false,
250
- multipleVideos: false,
251
- },
252
- },
253
- // Fal direct BYOK models — duration pricing depends on Fal endpoint/config.
254
- {
255
- id: 'luma-ray-2',
256
- name: 'Luma Ray 2 (Fal)',
257
- provider: 'fal',
258
- strategy: 'video',
259
- released: '2025-11',
260
- cost: { type: 'unknown' },
261
- features: {
262
- textToVideo: true,
263
- imageToVideo: true,
264
- capabilities: ['t2v', 'i2v'],
265
- aspectRatios: commonRatios,
266
- seed: true,
267
- multipleVideos: false,
268
- },
269
- },
270
- {
271
- id: 'minimax-video',
272
- name: 'MiniMax Video (Fal)',
273
- provider: 'fal',
274
- strategy: 'video',
275
- released: '2025-10',
276
- cost: { type: 'unknown' },
277
- features: {
278
- textToVideo: true,
279
- imageToVideo: false,
280
- capabilities: ['t2v'],
281
- aspectRatios: commonRatios,
282
- seed: false,
283
- multipleVideos: false,
284
- },
285
- },
286
- {
287
- id: 'hunyuan-video',
288
- name: 'Hunyuan Video (Fal)',
289
- provider: 'fal',
290
- strategy: 'video',
291
- released: '2025-09',
292
- cost: { type: 'unknown' },
293
- features: {
294
- textToVideo: true,
295
- imageToVideo: true,
296
- capabilities: ['t2v', 'i2v'],
297
- aspectRatios: commonRatios,
298
- seed: true,
299
- multipleVideos: false,
300
- },
301
- },
302
- ];
303
- const videoCatalogIndex = new Map(VIDEO_CATALOG.map((m) => [m.id, m]));
304
- export function findVideoModel(id) {
305
- return videoCatalogIndex.get(id);
306
- }