@vibeframe/cli 0.67.0 → 0.68.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.
- package/dist/index.js +371 -120
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -14135,6 +14135,197 @@ var init_interface = __esm({
|
|
|
14135
14135
|
}
|
|
14136
14136
|
});
|
|
14137
14137
|
|
|
14138
|
+
// ../ai-providers/dist/define-provider.js
|
|
14139
|
+
function defineApiKey(meta) {
|
|
14140
|
+
if (apiKeyRegistry.has(meta.configKey)) {
|
|
14141
|
+
throw new Error(`defineApiKey: duplicate configKey "${meta.configKey}". Each API key must be declared once.`);
|
|
14142
|
+
}
|
|
14143
|
+
apiKeyRegistry.set(meta.configKey, meta);
|
|
14144
|
+
}
|
|
14145
|
+
function defineProvider(meta) {
|
|
14146
|
+
if (providerRegistry2.has(meta.id)) {
|
|
14147
|
+
throw new Error(`defineProvider: duplicate id "${meta.id}". Each provider must be declared once.`);
|
|
14148
|
+
}
|
|
14149
|
+
if (meta.apiKey !== null && !apiKeyRegistry.has(meta.apiKey)) {
|
|
14150
|
+
throw new Error(`defineProvider: provider "${meta.id}" references apiKey "${meta.apiKey}" but no defineApiKey call has registered it. Order issue? api-keys.ts must be imported before provider modules.`);
|
|
14151
|
+
}
|
|
14152
|
+
providerRegistry2.set(meta.id, meta);
|
|
14153
|
+
}
|
|
14154
|
+
function getProvidersFor(kind) {
|
|
14155
|
+
return [...providerRegistry2.values()].filter((p) => p.kinds.includes(kind)).sort((a, b) => (a.resolverPriority?.[kind] ?? 999) - (b.resolverPriority?.[kind] ?? 999)).map((p) => ({
|
|
14156
|
+
name: p.id,
|
|
14157
|
+
envVar: p.apiKey ? apiKeyRegistry.get(p.apiKey)?.envVar ?? null : null,
|
|
14158
|
+
label: p.label
|
|
14159
|
+
}));
|
|
14160
|
+
}
|
|
14161
|
+
function getProviderEnvVars() {
|
|
14162
|
+
return Object.fromEntries([...apiKeyRegistry.values()].map((k) => [k.configKey, k.envVar]));
|
|
14163
|
+
}
|
|
14164
|
+
function getCommandKeyMap() {
|
|
14165
|
+
const map = {};
|
|
14166
|
+
for (const p of providerRegistry2.values()) {
|
|
14167
|
+
if (!p.apiKey)
|
|
14168
|
+
continue;
|
|
14169
|
+
if (!p.commandsUnlocked || p.commandsUnlocked.length === 0)
|
|
14170
|
+
continue;
|
|
14171
|
+
const envVar = apiKeyRegistry.get(p.apiKey)?.envVar;
|
|
14172
|
+
if (!envVar)
|
|
14173
|
+
continue;
|
|
14174
|
+
if (!map[envVar])
|
|
14175
|
+
map[envVar] = [];
|
|
14176
|
+
map[envVar].push(...p.commandsUnlocked);
|
|
14177
|
+
}
|
|
14178
|
+
for (const k of apiKeyRegistry.values()) {
|
|
14179
|
+
if (!k.commandsUnlocked || k.commandsUnlocked.length === 0)
|
|
14180
|
+
continue;
|
|
14181
|
+
if (!map[k.envVar])
|
|
14182
|
+
map[k.envVar] = [];
|
|
14183
|
+
map[k.envVar].push(...k.commandsUnlocked);
|
|
14184
|
+
}
|
|
14185
|
+
return map;
|
|
14186
|
+
}
|
|
14187
|
+
function getSetupProviders() {
|
|
14188
|
+
return [...apiKeyRegistry.values()].filter((k) => k.showInSetup).map((k) => ({
|
|
14189
|
+
key: k.configKey,
|
|
14190
|
+
name: k.label,
|
|
14191
|
+
env: k.envVar,
|
|
14192
|
+
desc: k.setupDescription ?? ""
|
|
14193
|
+
}));
|
|
14194
|
+
}
|
|
14195
|
+
function getAllApiKeys() {
|
|
14196
|
+
return [...apiKeyRegistry.values()];
|
|
14197
|
+
}
|
|
14198
|
+
function getAllProviders() {
|
|
14199
|
+
return [...providerRegistry2.values()];
|
|
14200
|
+
}
|
|
14201
|
+
var apiKeyRegistry, providerRegistry2;
|
|
14202
|
+
var init_define_provider = __esm({
|
|
14203
|
+
"../ai-providers/dist/define-provider.js"() {
|
|
14204
|
+
"use strict";
|
|
14205
|
+
apiKeyRegistry = /* @__PURE__ */ new Map();
|
|
14206
|
+
providerRegistry2 = /* @__PURE__ */ new Map();
|
|
14207
|
+
}
|
|
14208
|
+
});
|
|
14209
|
+
|
|
14210
|
+
// ../ai-providers/dist/api-keys.js
|
|
14211
|
+
var init_api_keys = __esm({
|
|
14212
|
+
"../ai-providers/dist/api-keys.js"() {
|
|
14213
|
+
"use strict";
|
|
14214
|
+
init_define_provider();
|
|
14215
|
+
defineApiKey({
|
|
14216
|
+
configKey: "openai",
|
|
14217
|
+
envVar: "OPENAI_API_KEY",
|
|
14218
|
+
label: "OpenAI",
|
|
14219
|
+
showInSetup: true,
|
|
14220
|
+
setupDescription: "gpt-image-2 image gen ($, default since v0.56), Whisper transcribe, Agent",
|
|
14221
|
+
envExampleComment: "OpenAI API Key (Whisper transcription, gpt-image-2 \u2014 default text-to-image since v0.56)",
|
|
14222
|
+
envExampleUrl: "https://platform.openai.com/api-keys"
|
|
14223
|
+
});
|
|
14224
|
+
defineApiKey({
|
|
14225
|
+
configKey: "google",
|
|
14226
|
+
envVar: "GOOGLE_API_KEY",
|
|
14227
|
+
label: "Google",
|
|
14228
|
+
showInSetup: true,
|
|
14229
|
+
setupDescription: "Gemini \u2014 image gen (free tier), video analysis ($), Veo ($$)",
|
|
14230
|
+
envExampleComment: "Google API Key (Gemini auto-edit suggestions, image gen, Veo video)",
|
|
14231
|
+
envExampleUrl: "https://aistudio.google.com/apikey"
|
|
14232
|
+
});
|
|
14233
|
+
defineApiKey({
|
|
14234
|
+
configKey: "anthropic",
|
|
14235
|
+
envVar: "ANTHROPIC_API_KEY",
|
|
14236
|
+
label: "Anthropic",
|
|
14237
|
+
showInSetup: true,
|
|
14238
|
+
setupDescription: "Claude \u2014 storyboard, color grade, reframe, Agent ($)",
|
|
14239
|
+
envExampleComment: "Anthropic API Key (Claude motion graphics & storyboarding)",
|
|
14240
|
+
envExampleUrl: "https://console.anthropic.com/"
|
|
14241
|
+
});
|
|
14242
|
+
defineApiKey({
|
|
14243
|
+
configKey: "elevenlabs",
|
|
14244
|
+
envVar: "ELEVENLABS_API_KEY",
|
|
14245
|
+
label: "ElevenLabs",
|
|
14246
|
+
showInSetup: true,
|
|
14247
|
+
setupDescription: "TTS ($), SFX, music, voice clone, dubbing \u2014 skip to use local Kokoro",
|
|
14248
|
+
envExampleComment: "ElevenLabs API Key (text-to-speech \u2014 Kokoro local fallback runs when this is unset, since v0.54)",
|
|
14249
|
+
envExampleUrl: "https://elevenlabs.io/api"
|
|
14250
|
+
});
|
|
14251
|
+
defineApiKey({
|
|
14252
|
+
configKey: "fal",
|
|
14253
|
+
envVar: "FAL_KEY",
|
|
14254
|
+
label: "fal.ai",
|
|
14255
|
+
showInSetup: true,
|
|
14256
|
+
setupDescription: "Seedance 2.0 video gen ($$, default since v0.57)",
|
|
14257
|
+
envExampleComment: "fal.ai API Key (Seedance 2.0 video \u2014 default text/image-to-video since v0.57, Artificial Analysis ELO #2)",
|
|
14258
|
+
envExampleUrl: "https://fal.ai/dashboard/keys"
|
|
14259
|
+
});
|
|
14260
|
+
defineApiKey({
|
|
14261
|
+
configKey: "xai",
|
|
14262
|
+
envVar: "XAI_API_KEY",
|
|
14263
|
+
label: "xAI",
|
|
14264
|
+
showInSetup: true,
|
|
14265
|
+
setupDescription: "Grok \u2014 video gen with audio ($$), image ($), Agent",
|
|
14266
|
+
envExampleComment: "xAI API Key (Grok video generation \u2014 fallback when no FAL_KEY)",
|
|
14267
|
+
envExampleUrl: "https://console.x.ai/"
|
|
14268
|
+
});
|
|
14269
|
+
defineApiKey({
|
|
14270
|
+
configKey: "runway",
|
|
14271
|
+
envVar: "RUNWAY_API_SECRET",
|
|
14272
|
+
label: "Runway",
|
|
14273
|
+
showInSetup: true,
|
|
14274
|
+
setupDescription: "Gen-4.5 video generation ($$)",
|
|
14275
|
+
envExampleComment: "Runway API Secret (Runway Gen-4.5 video generation)",
|
|
14276
|
+
envExampleUrl: "https://app.runwayml.com/settings/api-keys"
|
|
14277
|
+
});
|
|
14278
|
+
defineApiKey({
|
|
14279
|
+
configKey: "kling",
|
|
14280
|
+
envVar: "KLING_API_KEY",
|
|
14281
|
+
label: "Kling",
|
|
14282
|
+
showInSetup: true,
|
|
14283
|
+
setupDescription: "v2.5/v3 video \u2014 std ($$) and pro ($$$) modes",
|
|
14284
|
+
envExampleComment: "Kling API Key (Kling video generation)",
|
|
14285
|
+
envExampleUrl: "https://platform.klingai.com/",
|
|
14286
|
+
envExampleExtraLines: ["Format: ACCESS_KEY:SECRET_KEY"]
|
|
14287
|
+
});
|
|
14288
|
+
defineApiKey({
|
|
14289
|
+
configKey: "replicate",
|
|
14290
|
+
envVar: "REPLICATE_API_TOKEN",
|
|
14291
|
+
label: "Replicate",
|
|
14292
|
+
showInSetup: true,
|
|
14293
|
+
setupDescription: "MusicGen background music ($, max 30s)",
|
|
14294
|
+
envExampleComment: "Replicate API Token (music generation, video upscale, audio restoration)",
|
|
14295
|
+
envExampleUrl: "https://replicate.com/account/api-tokens"
|
|
14296
|
+
});
|
|
14297
|
+
defineApiKey({
|
|
14298
|
+
configKey: "openrouter",
|
|
14299
|
+
envVar: "OPENROUTER_API_KEY",
|
|
14300
|
+
label: "OpenRouter",
|
|
14301
|
+
showInSetup: true,
|
|
14302
|
+
setupDescription: "300+ models via one key \u2014 Agent only (pay per model)",
|
|
14303
|
+
envExampleComment: "OpenRouter API Key (300+ AI models via unified API, used by `vibe agent`)",
|
|
14304
|
+
envExampleUrl: "https://openrouter.ai/keys"
|
|
14305
|
+
});
|
|
14306
|
+
defineApiKey({
|
|
14307
|
+
configKey: "imgbb",
|
|
14308
|
+
envVar: "IMGBB_API_KEY",
|
|
14309
|
+
label: "ImgBB",
|
|
14310
|
+
showInSetup: false,
|
|
14311
|
+
// not prompted in setup wizard — internal upload host
|
|
14312
|
+
envExampleComment: "ImgBB API Key (image hosting \u2014 used by Kling and fal.ai for image-to-video uploads)",
|
|
14313
|
+
envExampleUrl: "https://api.imgbb.com/",
|
|
14314
|
+
// ImgBB has no provider class (envvar-only); doctor still shows what it
|
|
14315
|
+
// unlocks at the apiKey level.
|
|
14316
|
+
commandsUnlocked: [
|
|
14317
|
+
"generate video -p kling/fal (image-to-video upload host)"
|
|
14318
|
+
]
|
|
14319
|
+
});
|
|
14320
|
+
defineProvider({
|
|
14321
|
+
id: "openrouter",
|
|
14322
|
+
label: "OpenRouter",
|
|
14323
|
+
apiKey: "openrouter",
|
|
14324
|
+
kinds: ["llm"]
|
|
14325
|
+
});
|
|
14326
|
+
}
|
|
14327
|
+
});
|
|
14328
|
+
|
|
14138
14329
|
// ../ai-providers/dist/whisper/WhisperProvider.js
|
|
14139
14330
|
var WhisperProvider, whisperProvider;
|
|
14140
14331
|
var init_WhisperProvider = __esm({
|
|
@@ -15611,6 +15802,29 @@ var init_gemini = __esm({
|
|
|
15611
15802
|
"use strict";
|
|
15612
15803
|
init_GeminiProvider();
|
|
15613
15804
|
init_gemini_motion();
|
|
15805
|
+
init_define_provider();
|
|
15806
|
+
defineProvider({
|
|
15807
|
+
id: "gemini",
|
|
15808
|
+
label: "Gemini",
|
|
15809
|
+
apiKey: "google",
|
|
15810
|
+
kinds: ["image", "llm"],
|
|
15811
|
+
resolverPriority: { image: 2 },
|
|
15812
|
+
commandsUnlocked: [
|
|
15813
|
+
"generate image",
|
|
15814
|
+
"edit image",
|
|
15815
|
+
"analyze media",
|
|
15816
|
+
"analyze video",
|
|
15817
|
+
"analyze review"
|
|
15818
|
+
]
|
|
15819
|
+
});
|
|
15820
|
+
defineProvider({
|
|
15821
|
+
id: "veo",
|
|
15822
|
+
label: "Veo",
|
|
15823
|
+
apiKey: "google",
|
|
15824
|
+
kinds: ["video"],
|
|
15825
|
+
resolverPriority: { video: 3 },
|
|
15826
|
+
commandsUnlocked: ["generate video -p veo"]
|
|
15827
|
+
});
|
|
15614
15828
|
}
|
|
15615
15829
|
});
|
|
15616
15830
|
|
|
@@ -16049,6 +16263,22 @@ var init_openai = __esm({
|
|
|
16049
16263
|
"../ai-providers/dist/openai/index.js"() {
|
|
16050
16264
|
"use strict";
|
|
16051
16265
|
init_OpenAIProvider();
|
|
16266
|
+
init_define_provider();
|
|
16267
|
+
defineProvider({
|
|
16268
|
+
id: "openai",
|
|
16269
|
+
label: "OpenAI",
|
|
16270
|
+
apiKey: "openai",
|
|
16271
|
+
kinds: ["llm", "image", "transcription"],
|
|
16272
|
+
resolverPriority: { image: 1 },
|
|
16273
|
+
commandsUnlocked: [
|
|
16274
|
+
"agent -p openai",
|
|
16275
|
+
"generate image -p openai",
|
|
16276
|
+
"edit image -p openai",
|
|
16277
|
+
"audio transcribe",
|
|
16278
|
+
"edit caption",
|
|
16279
|
+
"edit jump-cut"
|
|
16280
|
+
]
|
|
16281
|
+
});
|
|
16052
16282
|
}
|
|
16053
16283
|
});
|
|
16054
16284
|
|
|
@@ -17690,6 +17920,22 @@ var init_claude = __esm({
|
|
|
17690
17920
|
"../ai-providers/dist/claude/index.js"() {
|
|
17691
17921
|
"use strict";
|
|
17692
17922
|
init_ClaudeProvider();
|
|
17923
|
+
init_define_provider();
|
|
17924
|
+
defineProvider({
|
|
17925
|
+
id: "claude",
|
|
17926
|
+
label: "Claude (Anthropic)",
|
|
17927
|
+
apiKey: "anthropic",
|
|
17928
|
+
kinds: ["llm"],
|
|
17929
|
+
commandsUnlocked: [
|
|
17930
|
+
"agent -p claude",
|
|
17931
|
+
"generate storyboard",
|
|
17932
|
+
"generate motion",
|
|
17933
|
+
"edit grade",
|
|
17934
|
+
"edit reframe",
|
|
17935
|
+
"edit speed-ramp",
|
|
17936
|
+
"pipeline script-to-video"
|
|
17937
|
+
]
|
|
17938
|
+
});
|
|
17693
17939
|
}
|
|
17694
17940
|
});
|
|
17695
17941
|
|
|
@@ -17976,6 +18222,13 @@ var init_ollama = __esm({
|
|
|
17976
18222
|
"../ai-providers/dist/ollama/index.js"() {
|
|
17977
18223
|
"use strict";
|
|
17978
18224
|
init_OllamaProvider();
|
|
18225
|
+
init_define_provider();
|
|
18226
|
+
defineProvider({
|
|
18227
|
+
id: "ollama",
|
|
18228
|
+
label: "Ollama (Local)",
|
|
18229
|
+
apiKey: null,
|
|
18230
|
+
kinds: ["llm"]
|
|
18231
|
+
});
|
|
17979
18232
|
}
|
|
17980
18233
|
});
|
|
17981
18234
|
|
|
@@ -18409,6 +18662,22 @@ var init_elevenlabs = __esm({
|
|
|
18409
18662
|
"../ai-providers/dist/elevenlabs/index.js"() {
|
|
18410
18663
|
"use strict";
|
|
18411
18664
|
init_ElevenLabsProvider();
|
|
18665
|
+
init_define_provider();
|
|
18666
|
+
defineProvider({
|
|
18667
|
+
id: "elevenlabs",
|
|
18668
|
+
label: "ElevenLabs",
|
|
18669
|
+
apiKey: "elevenlabs",
|
|
18670
|
+
kinds: ["speech", "music"],
|
|
18671
|
+
resolverPriority: { speech: 1 },
|
|
18672
|
+
commandsUnlocked: [
|
|
18673
|
+
"generate speech",
|
|
18674
|
+
"generate sound-effect",
|
|
18675
|
+
"generate music",
|
|
18676
|
+
"audio voices",
|
|
18677
|
+
"audio voice-clone",
|
|
18678
|
+
"audio dub"
|
|
18679
|
+
]
|
|
18680
|
+
});
|
|
18412
18681
|
}
|
|
18413
18682
|
});
|
|
18414
18683
|
|
|
@@ -18504,6 +18773,14 @@ var init_kokoro = __esm({
|
|
|
18504
18773
|
"../ai-providers/dist/kokoro/index.js"() {
|
|
18505
18774
|
"use strict";
|
|
18506
18775
|
init_KokoroProvider();
|
|
18776
|
+
init_define_provider();
|
|
18777
|
+
defineProvider({
|
|
18778
|
+
id: "kokoro",
|
|
18779
|
+
label: "Kokoro (local)",
|
|
18780
|
+
apiKey: null,
|
|
18781
|
+
kinds: ["speech"],
|
|
18782
|
+
resolverPriority: { speech: 2 }
|
|
18783
|
+
});
|
|
18507
18784
|
}
|
|
18508
18785
|
});
|
|
18509
18786
|
|
|
@@ -19070,6 +19347,15 @@ var init_runway = __esm({
|
|
|
19070
19347
|
"../ai-providers/dist/runway/index.js"() {
|
|
19071
19348
|
"use strict";
|
|
19072
19349
|
init_RunwayProvider();
|
|
19350
|
+
init_define_provider();
|
|
19351
|
+
defineProvider({
|
|
19352
|
+
id: "runway",
|
|
19353
|
+
label: "Runway",
|
|
19354
|
+
apiKey: "runway",
|
|
19355
|
+
kinds: ["video"],
|
|
19356
|
+
resolverPriority: { video: 5 },
|
|
19357
|
+
commandsUnlocked: ["generate video -p runway"]
|
|
19358
|
+
});
|
|
19073
19359
|
}
|
|
19074
19360
|
});
|
|
19075
19361
|
|
|
@@ -19500,6 +19786,15 @@ var init_kling = __esm({
|
|
|
19500
19786
|
"../ai-providers/dist/kling/index.js"() {
|
|
19501
19787
|
"use strict";
|
|
19502
19788
|
init_KlingProvider();
|
|
19789
|
+
init_define_provider();
|
|
19790
|
+
defineProvider({
|
|
19791
|
+
id: "kling",
|
|
19792
|
+
label: "Kling",
|
|
19793
|
+
apiKey: "kling",
|
|
19794
|
+
kinds: ["video"],
|
|
19795
|
+
resolverPriority: { video: 4 },
|
|
19796
|
+
commandsUnlocked: ["generate video -p kling"]
|
|
19797
|
+
});
|
|
19503
19798
|
}
|
|
19504
19799
|
});
|
|
19505
19800
|
|
|
@@ -19809,6 +20104,20 @@ var init_grok = __esm({
|
|
|
19809
20104
|
"../ai-providers/dist/grok/index.js"() {
|
|
19810
20105
|
"use strict";
|
|
19811
20106
|
init_GrokProvider();
|
|
20107
|
+
init_define_provider();
|
|
20108
|
+
defineProvider({
|
|
20109
|
+
id: "grok",
|
|
20110
|
+
label: "Grok",
|
|
20111
|
+
apiKey: "xai",
|
|
20112
|
+
kinds: ["image", "video", "llm"],
|
|
20113
|
+
resolverPriority: { image: 3, video: 2 },
|
|
20114
|
+
commandsUnlocked: [
|
|
20115
|
+
"agent -p xai",
|
|
20116
|
+
"generate image -p grok",
|
|
20117
|
+
"generate video -p grok",
|
|
20118
|
+
"edit image -p grok"
|
|
20119
|
+
]
|
|
20120
|
+
});
|
|
19812
20121
|
}
|
|
19813
20122
|
});
|
|
19814
20123
|
|
|
@@ -24071,6 +24380,19 @@ var init_fal = __esm({
|
|
|
24071
24380
|
"../ai-providers/dist/fal/index.js"() {
|
|
24072
24381
|
"use strict";
|
|
24073
24382
|
init_FalProvider();
|
|
24383
|
+
init_define_provider();
|
|
24384
|
+
defineProvider({
|
|
24385
|
+
id: "fal",
|
|
24386
|
+
label: "fal.ai (Seedance 2.0)",
|
|
24387
|
+
apiKey: "fal",
|
|
24388
|
+
kinds: ["video"],
|
|
24389
|
+
resolverPriority: { video: 1 },
|
|
24390
|
+
commandsUnlocked: [
|
|
24391
|
+
"generate video -p fal (Seedance 2.0 \u2014 default since v0.57)",
|
|
24392
|
+
"generate video -p fal -m fast (lower-latency variant)",
|
|
24393
|
+
"generate video -p fal -i <image> (image-to-video)"
|
|
24394
|
+
]
|
|
24395
|
+
});
|
|
24074
24396
|
}
|
|
24075
24397
|
});
|
|
24076
24398
|
|
|
@@ -24720,6 +25042,14 @@ var init_replicate = __esm({
|
|
|
24720
25042
|
"../ai-providers/dist/replicate/index.js"() {
|
|
24721
25043
|
"use strict";
|
|
24722
25044
|
init_ReplicateProvider();
|
|
25045
|
+
init_define_provider();
|
|
25046
|
+
defineProvider({
|
|
25047
|
+
id: "replicate",
|
|
25048
|
+
label: "Replicate",
|
|
25049
|
+
apiKey: "replicate",
|
|
25050
|
+
kinds: ["music"],
|
|
25051
|
+
commandsUnlocked: ["generate music -p replicate"]
|
|
25052
|
+
});
|
|
24723
25053
|
}
|
|
24724
25054
|
});
|
|
24725
25055
|
|
|
@@ -24743,10 +25073,18 @@ __export(dist_exports2, {
|
|
|
24743
25073
|
RunwayProvider: () => RunwayProvider,
|
|
24744
25074
|
WhisperProvider: () => WhisperProvider,
|
|
24745
25075
|
claudeProvider: () => claudeProvider,
|
|
25076
|
+
defineApiKey: () => defineApiKey,
|
|
25077
|
+
defineProvider: () => defineProvider,
|
|
24746
25078
|
elevenLabsProvider: () => elevenLabsProvider,
|
|
24747
25079
|
falProvider: () => falProvider,
|
|
24748
25080
|
geminiProvider: () => geminiProvider,
|
|
25081
|
+
getAllApiKeys: () => getAllApiKeys,
|
|
25082
|
+
getAllProviders: () => getAllProviders,
|
|
24749
25083
|
getBestProviderForCapability: () => getBestProviderForCapability,
|
|
25084
|
+
getCommandKeyMap: () => getCommandKeyMap,
|
|
25085
|
+
getProviderEnvVars: () => getProviderEnvVars,
|
|
25086
|
+
getProvidersFor: () => getProvidersFor,
|
|
25087
|
+
getSetupProviders: () => getSetupProviders,
|
|
24750
25088
|
grokProvider: () => grokProvider,
|
|
24751
25089
|
klingProvider: () => klingProvider,
|
|
24752
25090
|
kokoroProvider: () => kokoroProvider,
|
|
@@ -24764,6 +25102,8 @@ var init_dist2 = __esm({
|
|
|
24764
25102
|
"use strict";
|
|
24765
25103
|
init_interface();
|
|
24766
25104
|
init_registry();
|
|
25105
|
+
init_api_keys();
|
|
25106
|
+
init_define_provider();
|
|
24767
25107
|
init_whisper();
|
|
24768
25108
|
init_gemini();
|
|
24769
25109
|
init_openai();
|
|
@@ -25198,6 +25538,7 @@ var PROVIDER_NAMES, PROVIDER_ENV_VARS;
|
|
|
25198
25538
|
var init_schema = __esm({
|
|
25199
25539
|
"src/config/schema.ts"() {
|
|
25200
25540
|
"use strict";
|
|
25541
|
+
init_dist2();
|
|
25201
25542
|
PROVIDER_NAMES = {
|
|
25202
25543
|
claude: "Claude (Anthropic)",
|
|
25203
25544
|
openai: "GPT-4 (OpenAI)",
|
|
@@ -25206,19 +25547,7 @@ var init_schema = __esm({
|
|
|
25206
25547
|
xai: "Grok (xAI)",
|
|
25207
25548
|
openrouter: "OpenRouter"
|
|
25208
25549
|
};
|
|
25209
|
-
PROVIDER_ENV_VARS =
|
|
25210
|
-
anthropic: "ANTHROPIC_API_KEY",
|
|
25211
|
-
openai: "OPENAI_API_KEY",
|
|
25212
|
-
google: "GOOGLE_API_KEY",
|
|
25213
|
-
elevenlabs: "ELEVENLABS_API_KEY",
|
|
25214
|
-
runway: "RUNWAY_API_SECRET",
|
|
25215
|
-
kling: "KLING_API_KEY",
|
|
25216
|
-
fal: "FAL_KEY",
|
|
25217
|
-
imgbb: "IMGBB_API_KEY",
|
|
25218
|
-
replicate: "REPLICATE_API_TOKEN",
|
|
25219
|
-
xai: "XAI_API_KEY",
|
|
25220
|
-
openrouter: "OPENROUTER_API_KEY"
|
|
25221
|
-
};
|
|
25550
|
+
PROVIDER_ENV_VARS = getProviderEnvVars();
|
|
25222
25551
|
}
|
|
25223
25552
|
});
|
|
25224
25553
|
|
|
@@ -34411,8 +34740,8 @@ var init_ai_script_pipeline = __esm({
|
|
|
34411
34740
|
|
|
34412
34741
|
// src/utils/provider-resolver.ts
|
|
34413
34742
|
function resolveProvider(category) {
|
|
34414
|
-
const candidates =
|
|
34415
|
-
if (
|
|
34743
|
+
const candidates = getProvidersFor(category);
|
|
34744
|
+
if (candidates.length === 0) return null;
|
|
34416
34745
|
if (configDefaults?.[category]) {
|
|
34417
34746
|
const preferred = candidates.find((c) => c.name === configDefaults[category]);
|
|
34418
34747
|
if (preferred && (preferred.envVar === null || hasApiKey(preferred.envVar))) {
|
|
@@ -34426,32 +34755,12 @@ function resolveProvider(category) {
|
|
|
34426
34755
|
}
|
|
34427
34756
|
return null;
|
|
34428
34757
|
}
|
|
34429
|
-
var
|
|
34758
|
+
var configDefaults;
|
|
34430
34759
|
var init_provider_resolver = __esm({
|
|
34431
34760
|
"src/utils/provider-resolver.ts"() {
|
|
34432
34761
|
"use strict";
|
|
34762
|
+
init_dist2();
|
|
34433
34763
|
init_api_key();
|
|
34434
|
-
IMAGE_PROVIDERS = [
|
|
34435
|
-
{ name: "openai", envVar: "OPENAI_API_KEY", label: "OpenAI" },
|
|
34436
|
-
{ name: "gemini", envVar: "GOOGLE_API_KEY", label: "Gemini" },
|
|
34437
|
-
{ name: "grok", envVar: "XAI_API_KEY", label: "Grok" }
|
|
34438
|
-
];
|
|
34439
|
-
VIDEO_PROVIDERS = [
|
|
34440
|
-
{ name: "fal", envVar: "FAL_KEY", label: "fal.ai (Seedance 2.0)" },
|
|
34441
|
-
{ name: "grok", envVar: "XAI_API_KEY", label: "Grok" },
|
|
34442
|
-
{ name: "veo", envVar: "GOOGLE_API_KEY", label: "Veo" },
|
|
34443
|
-
{ name: "kling", envVar: "KLING_API_KEY", label: "Kling" },
|
|
34444
|
-
{ name: "runway", envVar: "RUNWAY_API_SECRET", label: "Runway" }
|
|
34445
|
-
];
|
|
34446
|
-
SPEECH_PROVIDERS = [
|
|
34447
|
-
{ name: "elevenlabs", envVar: "ELEVENLABS_API_KEY", label: "ElevenLabs" },
|
|
34448
|
-
{ name: "kokoro", envVar: null, label: "Kokoro (local)" }
|
|
34449
|
-
];
|
|
34450
|
-
PROVIDER_MAP = {
|
|
34451
|
-
image: IMAGE_PROVIDERS,
|
|
34452
|
-
video: VIDEO_PROVIDERS,
|
|
34453
|
-
speech: SPEECH_PROVIDERS
|
|
34454
|
-
};
|
|
34455
34764
|
configDefaults = null;
|
|
34456
34765
|
}
|
|
34457
34766
|
});
|
|
@@ -35724,6 +36033,7 @@ var init_generate = __esm({
|
|
|
35724
36033
|
init_ai_helpers();
|
|
35725
36034
|
init_validate();
|
|
35726
36035
|
init_provider_resolver();
|
|
36036
|
+
init_dist2();
|
|
35727
36037
|
init_ai_image();
|
|
35728
36038
|
init_ai_motion();
|
|
35729
36039
|
init_openai_image2();
|
|
@@ -35777,17 +36087,30 @@ Examples:
|
|
|
35777
36087
|
if (options.output) {
|
|
35778
36088
|
validateOutputPath(options.output);
|
|
35779
36089
|
}
|
|
35780
|
-
const
|
|
35781
|
-
const
|
|
35782
|
-
|
|
35783
|
-
|
|
35784
|
-
|
|
36090
|
+
const imageRegistry = getProvidersFor("image");
|
|
36091
|
+
const validProviders = [...imageRegistry.map((p) => p.name), "dalle", "runway"];
|
|
36092
|
+
const providerEnvMap = Object.fromEntries(
|
|
36093
|
+
imageRegistry.filter((p) => p.envVar !== null).map((p) => [p.name, p.envVar])
|
|
36094
|
+
);
|
|
36095
|
+
const envKeyMap = {
|
|
36096
|
+
...providerEnvMap,
|
|
36097
|
+
dalle: "OPENAI_API_KEY",
|
|
36098
|
+
runway: "RUNWAY_API_SECRET"
|
|
36099
|
+
};
|
|
36100
|
+
const providerNameMap = {
|
|
36101
|
+
...Object.fromEntries(imageRegistry.map((p) => [p.name, p.label])),
|
|
36102
|
+
// Override Gemini's resolver label "Gemini" with the more specific
|
|
36103
|
+
// "Google" used in error messages, and add aliases.
|
|
36104
|
+
gemini: "Google",
|
|
36105
|
+
grok: "xAI Grok",
|
|
36106
|
+
dalle: "OpenAI",
|
|
36107
|
+
runway: "Runway"
|
|
35785
36108
|
};
|
|
35786
36109
|
let provider;
|
|
35787
36110
|
if (options.provider) {
|
|
35788
36111
|
provider = options.provider.toLowerCase();
|
|
35789
36112
|
if (!validProviders.includes(provider)) {
|
|
35790
|
-
exitWithError(usageError(`Invalid provider: ${provider}`, `Available providers:
|
|
36113
|
+
exitWithError(usageError(`Invalid provider: ${provider}`, `Available providers: ${imageRegistry.map((p) => p.name).join(", ")}, runway`));
|
|
35791
36114
|
}
|
|
35792
36115
|
if (providerEnvMap[provider] && !hasApiKey(providerEnvMap[provider]) && !options.apiKey) {
|
|
35793
36116
|
const resolved = resolveProvider("image");
|
|
@@ -35807,20 +36130,6 @@ Examples:
|
|
|
35807
36130
|
outputResult({ dryRun: true, command: "generate image", params: { prompt: prompt3, provider, model: options.model, ratio: options.ratio, size: options.size, quality: options.quality, count: options.count, output: options.output } });
|
|
35808
36131
|
return;
|
|
35809
36132
|
}
|
|
35810
|
-
const envKeyMap = {
|
|
35811
|
-
openai: "OPENAI_API_KEY",
|
|
35812
|
-
dalle: "OPENAI_API_KEY",
|
|
35813
|
-
gemini: "GOOGLE_API_KEY",
|
|
35814
|
-
grok: "XAI_API_KEY",
|
|
35815
|
-
runway: "RUNWAY_API_SECRET"
|
|
35816
|
-
};
|
|
35817
|
-
const providerNameMap = {
|
|
35818
|
-
openai: "OpenAI",
|
|
35819
|
-
dalle: "OpenAI",
|
|
35820
|
-
gemini: "Google",
|
|
35821
|
-
grok: "xAI Grok",
|
|
35822
|
-
runway: "Runway"
|
|
35823
|
-
};
|
|
35824
36133
|
const envKey = envKeyMap[provider];
|
|
35825
36134
|
const providerName = providerNameMap[provider];
|
|
35826
36135
|
const apiKey = await requireApiKey(envKey, providerName, options.apiKey);
|
|
@@ -62611,7 +62920,7 @@ init_source();
|
|
|
62611
62920
|
// package.json
|
|
62612
62921
|
var package_default = {
|
|
62613
62922
|
name: "@vibeframe/cli",
|
|
62614
|
-
version: "0.
|
|
62923
|
+
version: "0.68.0",
|
|
62615
62924
|
description: "VibeFrame CLI - natural language video editing from the terminal",
|
|
62616
62925
|
private: false,
|
|
62617
62926
|
license: "MIT",
|
|
@@ -68936,6 +69245,7 @@ function isOnPath(binary, env2) {
|
|
|
68936
69245
|
}
|
|
68937
69246
|
|
|
68938
69247
|
// src/commands/setup.ts
|
|
69248
|
+
init_dist2();
|
|
68939
69249
|
var setupCommand = new Command("setup").description("Configure VibeFrame (LLM provider, API keys)").option("--reset", "Reset configuration to defaults").option("--full", "Run full setup with all optional providers").option("--show", "Show current configuration (for debugging)").option("--claude-code", "Show Claude Code integration guide").action(async (options) => {
|
|
68940
69250
|
if (options.claudeCode) {
|
|
68941
69251
|
await setupClaudeCode();
|
|
@@ -69173,18 +69483,7 @@ async function runCustomSetup(config2) {
|
|
|
69173
69483
|
console.log(source_default.bold("2. API Keys"));
|
|
69174
69484
|
console.log(source_default.dim(" Press Enter to skip any provider you don't need."));
|
|
69175
69485
|
console.log();
|
|
69176
|
-
const allProviders =
|
|
69177
|
-
{ key: "openai", name: "OpenAI", env: "OPENAI_API_KEY", desc: "gpt-image-2 image gen ($, default since v0.56), Whisper transcribe, Agent" },
|
|
69178
|
-
{ key: "anthropic", name: "Anthropic", env: "ANTHROPIC_API_KEY", desc: "Claude \u2014 storyboard, color grade, reframe, Agent ($)" },
|
|
69179
|
-
{ key: "fal", name: "fal.ai", env: "FAL_KEY", desc: "Seedance 2.0 video gen ($$, default since v0.57)" },
|
|
69180
|
-
{ key: "google", name: "Google", env: "GOOGLE_API_KEY", desc: "Gemini \u2014 image gen (free tier), video analysis ($), Veo ($$)" },
|
|
69181
|
-
{ key: "xai", name: "xAI", env: "XAI_API_KEY", desc: "Grok \u2014 video gen with audio ($$), image ($), Agent" },
|
|
69182
|
-
{ key: "elevenlabs", name: "ElevenLabs", env: "ELEVENLABS_API_KEY", desc: "TTS ($), SFX, music, voice clone, dubbing \u2014 skip to use local Kokoro" },
|
|
69183
|
-
{ key: "runway", name: "Runway", env: "RUNWAY_API_SECRET", desc: "Gen-4.5 video generation ($$)" },
|
|
69184
|
-
{ key: "kling", name: "Kling", env: "KLING_API_KEY", desc: "v2.5/v3 video \u2014 std ($$) and pro ($$$) modes" },
|
|
69185
|
-
{ key: "openrouter", name: "OpenRouter", env: "OPENROUTER_API_KEY", desc: "300+ models via one key \u2014 Agent only (pay per model)" },
|
|
69186
|
-
{ key: "replicate", name: "Replicate", env: "REPLICATE_API_TOKEN", desc: "MusicGen background music ($, max 30s)" }
|
|
69187
|
-
];
|
|
69486
|
+
const allProviders = getSetupProviders();
|
|
69188
69487
|
for (const p of allProviders) {
|
|
69189
69488
|
const existing = config2.providers[p.key];
|
|
69190
69489
|
if (existing) {
|
|
@@ -69695,6 +69994,7 @@ init_esm();
|
|
|
69695
69994
|
init_source();
|
|
69696
69995
|
init_config();
|
|
69697
69996
|
init_schema();
|
|
69997
|
+
init_dist2();
|
|
69698
69998
|
init_exec_safe();
|
|
69699
69999
|
init_exec_safe();
|
|
69700
70000
|
init_api_key();
|
|
@@ -69702,56 +70002,7 @@ import { access as access7 } from "node:fs/promises";
|
|
|
69702
70002
|
import { existsSync as existsSync27 } from "node:fs";
|
|
69703
70003
|
import { resolve as resolve38 } from "node:path";
|
|
69704
70004
|
init_output();
|
|
69705
|
-
var COMMAND_KEY_MAP =
|
|
69706
|
-
GOOGLE_API_KEY: [
|
|
69707
|
-
"generate image",
|
|
69708
|
-
"generate video -p veo",
|
|
69709
|
-
"edit image",
|
|
69710
|
-
"analyze media",
|
|
69711
|
-
"analyze video",
|
|
69712
|
-
"analyze review"
|
|
69713
|
-
],
|
|
69714
|
-
OPENAI_API_KEY: [
|
|
69715
|
-
"agent -p openai",
|
|
69716
|
-
"generate image -p openai",
|
|
69717
|
-
"edit image -p openai",
|
|
69718
|
-
"audio transcribe",
|
|
69719
|
-
"edit caption",
|
|
69720
|
-
"edit jump-cut"
|
|
69721
|
-
],
|
|
69722
|
-
ANTHROPIC_API_KEY: [
|
|
69723
|
-
"agent -p claude",
|
|
69724
|
-
"generate storyboard",
|
|
69725
|
-
"generate motion",
|
|
69726
|
-
"edit grade",
|
|
69727
|
-
"edit reframe",
|
|
69728
|
-
"edit speed-ramp",
|
|
69729
|
-
"pipeline script-to-video"
|
|
69730
|
-
],
|
|
69731
|
-
XAI_API_KEY: [
|
|
69732
|
-
"agent -p xai",
|
|
69733
|
-
"generate image -p grok",
|
|
69734
|
-
"generate video -p grok",
|
|
69735
|
-
"edit image -p grok"
|
|
69736
|
-
],
|
|
69737
|
-
FAL_KEY: [
|
|
69738
|
-
"generate video -p fal (Seedance 2.0 \u2014 default since v0.57)",
|
|
69739
|
-
"generate video -p fal -m fast (lower-latency variant)",
|
|
69740
|
-
"generate video -p fal -i <image> (image-to-video)"
|
|
69741
|
-
],
|
|
69742
|
-
ELEVENLABS_API_KEY: [
|
|
69743
|
-
"generate speech",
|
|
69744
|
-
"generate sound-effect",
|
|
69745
|
-
"generate music",
|
|
69746
|
-
"audio voices",
|
|
69747
|
-
"audio voice-clone",
|
|
69748
|
-
"audio dub"
|
|
69749
|
-
],
|
|
69750
|
-
KLING_API_KEY: ["generate video -p kling"],
|
|
69751
|
-
RUNWAY_API_SECRET: ["generate video -p runway"],
|
|
69752
|
-
REPLICATE_API_TOKEN: ["generate music -p replicate"],
|
|
69753
|
-
IMGBB_API_KEY: ["generate video -p kling/fal (image-to-video upload host)"]
|
|
69754
|
-
};
|
|
70005
|
+
var COMMAND_KEY_MAP = getCommandKeyMap();
|
|
69755
70006
|
var FREE_COMMANDS = [
|
|
69756
70007
|
"edit silence-cut",
|
|
69757
70008
|
"edit noise-reduce",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibeframe/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.68.0",
|
|
4
4
|
"description": "VibeFrame CLI - natural language video editing from the terminal",
|
|
5
5
|
"private": false,
|
|
6
6
|
"license": "MIT",
|
|
@@ -182,8 +182,8 @@
|
|
|
182
182
|
"tsx": "^4.21.0",
|
|
183
183
|
"typescript": "^5.3.3",
|
|
184
184
|
"vitest": "^1.2.2",
|
|
185
|
-
"@vibeframe/ai-providers": "0.
|
|
186
|
-
"@vibeframe/core": "0.
|
|
185
|
+
"@vibeframe/ai-providers": "0.68.0",
|
|
186
|
+
"@vibeframe/core": "0.68.0"
|
|
187
187
|
},
|
|
188
188
|
"engines": {
|
|
189
189
|
"node": ">=20"
|