@vibeframe/mcp-server 0.104.1 → 0.104.2

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 (2) hide show
  1. package/dist/index.js +44 -31
  2. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -7688,6 +7688,25 @@ consult this file \u2014 run the generate command directly.
7688
7688
  Browse named styles: \`vibe scene list-styles\`. Re-seed from one with
7689
7689
  \`vibe scene init . --visual-style "Swiss Pulse"\` (idempotent).
7690
7690
 
7691
+ ## Provider keys and project scope
7692
+
7693
+ Use VibeFrame CLI generation for project assets:
7694
+ \`vibe generate image|video|speech ...\`. This lets VibeFrame use keys
7695
+ from \`vibe setup --scope project\`.
7696
+
7697
+ Project-scope keys may live in a parent directory, for example
7698
+ \`../.vibeframe/config.yaml\` when this scene was created by
7699
+ \`vibe init launch\`. The \`vibe\` CLI searches upward automatically, so do
7700
+ not decide keys are missing just because \`.vibeframe/config.yaml\` is not
7701
+ inside this scene folder.
7702
+
7703
+ To verify scope without exposing secrets, run \`vibe doctor --json\` from
7704
+ this directory and inspect \`data.scope.activeScope\` plus
7705
+ \`data.scope.project.configPath\`. Never print config contents. Do not use
7706
+ a host agent's built-in image/audio generation tool for VibeFrame project
7707
+ assets unless the user explicitly requests an external, non-VibeFrame
7708
+ asset.
7709
+
7691
7710
  ## Skills \u2014 USE THESE FIRST
7692
7711
 
7693
7712
  @SKILL.md
@@ -25916,21 +25935,8 @@ async function prompt(question, hidden = false) {
25916
25935
  });
25917
25936
  }
25918
25937
  async function getApiKey(envVar, providerName, optionValue) {
25919
- if (optionValue) {
25920
- return optionValue;
25921
- }
25922
- const providerKey = providerKeyForEnvVar(envVar);
25923
- if (providerKey) {
25924
- const configKey = await getApiKeyFromConfig(providerKey);
25925
- if (configKey) {
25926
- return configKey;
25927
- }
25928
- }
25929
- loadEnv();
25930
- const envValue = getEnvValue2(envVar);
25931
- if (envValue) {
25932
- return envValue;
25933
- }
25938
+ const configuredKey = await getConfiguredApiKey(envVar, optionValue);
25939
+ if (configuredKey) return configuredKey;
25934
25940
  if (!process.stdin.isTTY) {
25935
25941
  return null;
25936
25942
  }
@@ -25951,6 +25957,19 @@ async function getApiKey(envVar, providerName, optionValue) {
25951
25957
  }
25952
25958
  return apiKey.trim();
25953
25959
  }
25960
+ async function getConfiguredApiKey(envVar, optionValue, options = {}) {
25961
+ if (optionValue) return optionValue;
25962
+ const providerKey = providerKeyForEnvVar(envVar);
25963
+ if (providerKey) {
25964
+ const configKey = await getApiKeyFromConfig(providerKey, { cwd: options.cwd });
25965
+ if (configKey) return configKey;
25966
+ }
25967
+ loadEnv();
25968
+ return getEnvValue2(envVar);
25969
+ }
25970
+ async function hasConfiguredApiKey(envVar, optionValue, options = {}) {
25971
+ return Boolean(await getConfiguredApiKey(envVar, optionValue, options));
25972
+ }
25954
25973
  function hasApiKey(envVar) {
25955
25974
  loadEnv();
25956
25975
  return !!getEnvValue2(envVar);
@@ -26047,7 +26066,7 @@ var init_api_key = __esm({
26047
26066
 
26048
26067
  // ../cli/src/commands/_shared/tts-resolve.ts
26049
26068
  async function resolveTtsProvider(preferred = "auto") {
26050
- const choice = preferred === "auto" ? hasApiKey("ELEVENLABS_API_KEY") ? "elevenlabs" : "kokoro" : preferred;
26069
+ const choice = preferred === "auto" ? await getConfiguredApiKey("ELEVENLABS_API_KEY") ? "elevenlabs" : "kokoro" : preferred;
26051
26070
  if (choice === "elevenlabs") {
26052
26071
  return buildElevenLabs();
26053
26072
  }
@@ -26091,7 +26110,6 @@ var init_tts_resolve = __esm({
26091
26110
  "use strict";
26092
26111
  init_dist();
26093
26112
  init_api_key();
26094
- init_api_key();
26095
26113
  TtsKeyMissingError = class extends Error {
26096
26114
  constructor(provider) {
26097
26115
  super(
@@ -452436,7 +452454,7 @@ async function executeVideoGenerate(options) {
452436
452454
  fal: "FAL_API_KEY"
452437
452455
  };
452438
452456
  const envKey = envKeyMap[provider] || "";
452439
- const key2 = apiKey || (hasApiKey(envKey) ? process.env[envKey] : void 0);
452457
+ const key2 = await getConfiguredApiKey(envKey, apiKey);
452440
452458
  if (!key2) return { success: false, error: `${envKeyMap[provider]} required for ${provider}` };
452441
452459
  let referenceImage;
452442
452460
  let referenceImageBuffer;
@@ -452868,7 +452886,7 @@ var init_validate = __esm({
452868
452886
  // ../cli/src/commands/generate/music-status.ts
452869
452887
  async function executeMusicStatus(options) {
452870
452888
  try {
452871
- const apiKey = options.apiKey ?? (hasApiKey("REPLICATE_API_TOKEN") ? await getApiKeyFromConfig("replicate") || process.env.REPLICATE_API_TOKEN : null);
452889
+ const apiKey = await getConfiguredApiKey("REPLICATE_API_TOKEN", options.apiKey);
452872
452890
  if (!apiKey)
452873
452891
  return { success: false, error: "REPLICATE_API_TOKEN required for music status" };
452874
452892
  const replicate = new ReplicateProvider();
@@ -452941,7 +452959,6 @@ var init_music_status = __esm({
452941
452959
  init_source();
452942
452960
  init_dist();
452943
452961
  init_api_key();
452944
- init_config();
452945
452962
  init_output();
452946
452963
  }
452947
452964
  });
@@ -453741,7 +453758,7 @@ async function executeMusic(options) {
453741
453758
  try {
453742
453759
  const provider = options.provider || "elevenlabs";
453743
453760
  if (provider === "elevenlabs") {
453744
- const apiKey2 = hasApiKey("ELEVENLABS_API_KEY") ? await getApiKeyFromConfig("elevenlabs") || process.env.ELEVENLABS_API_KEY : null;
453761
+ const apiKey2 = await getConfiguredApiKey("ELEVENLABS_API_KEY");
453745
453762
  if (!apiKey2)
453746
453763
  return {
453747
453764
  success: false,
@@ -453761,7 +453778,7 @@ async function executeMusic(options) {
453761
453778
  await writeFile18(outputPath2, result2.audioBuffer);
453762
453779
  return { success: true, outputPath: outputPath2, provider: "elevenlabs", duration: duration2 };
453763
453780
  }
453764
- const apiKey = hasApiKey("REPLICATE_API_TOKEN") ? await getApiKeyFromConfig("replicate") || process.env.REPLICATE_API_TOKEN : null;
453781
+ const apiKey = await getConfiguredApiKey("REPLICATE_API_TOKEN");
453765
453782
  if (!apiKey)
453766
453783
  return {
453767
453784
  success: false,
@@ -453996,7 +454013,6 @@ var init_music = __esm({
453996
454013
  init_ora();
453997
454014
  init_dist();
453998
454015
  init_api_key();
453999
- init_config();
454000
454016
  init_output();
454001
454017
  init_validate();
454002
454018
  init_status_jobs();
@@ -462409,7 +462425,7 @@ import { resolve as resolve54 } from "node:path";
462409
462425
  import { writeFile as writeFile32 } from "node:fs/promises";
462410
462426
  async function executeSoundEffect(options) {
462411
462427
  try {
462412
- const apiKey = hasApiKey("ELEVENLABS_API_KEY") ? await getApiKeyFromConfig("elevenlabs") || process.env.ELEVENLABS_API_KEY : null;
462428
+ const apiKey = await getConfiguredApiKey("ELEVENLABS_API_KEY");
462413
462429
  if (!apiKey)
462414
462430
  return {
462415
462431
  success: false,
@@ -462508,7 +462524,6 @@ var init_sound_effect = __esm({
462508
462524
  init_ora();
462509
462525
  init_dist();
462510
462526
  init_api_key();
462511
- init_config();
462512
462527
  init_output();
462513
462528
  init_validate();
462514
462529
  }
@@ -462590,7 +462605,7 @@ import { resolve as resolve55, dirname as dirname30 } from "node:path";
462590
462605
  import { writeFile as writeFile33, mkdir as mkdir23 } from "node:fs/promises";
462591
462606
  async function executeBackground(options) {
462592
462607
  try {
462593
- const apiKey = options.apiKey ?? (hasApiKey("OPENAI_API_KEY") ? await getApiKeyFromConfig("openai") || process.env.OPENAI_API_KEY : null);
462608
+ const apiKey = await getConfiguredApiKey("OPENAI_API_KEY", options.apiKey);
462594
462609
  if (!apiKey)
462595
462610
  return { success: false, error: "OPENAI_API_KEY required for background generation" };
462596
462611
  const openaiImage = new OpenAIImageProvider();
@@ -462721,7 +462736,6 @@ var init_background = __esm({
462721
462736
  init_ora();
462722
462737
  init_dist();
462723
462738
  init_api_key();
462724
- init_config();
462725
462739
  init_output();
462726
462740
  init_validate();
462727
462741
  }
@@ -462962,7 +462976,7 @@ import { resolve as resolve57 } from "node:path";
462962
462976
  import { writeFile as writeFile35 } from "node:fs/promises";
462963
462977
  async function executeSpeech(options) {
462964
462978
  try {
462965
- const apiKey = hasApiKey("ELEVENLABS_API_KEY") ? await getApiKeyFromConfig("elevenlabs") || process.env.ELEVENLABS_API_KEY : null;
462979
+ const apiKey = await getConfiguredApiKey("ELEVENLABS_API_KEY");
462966
462980
  if (!apiKey)
462967
462981
  return {
462968
462982
  success: false,
@@ -463177,7 +463191,6 @@ var init_speech = __esm({
463177
463191
  init_dist();
463178
463192
  init_api_key();
463179
463193
  init_tty();
463180
- init_config();
463181
463194
  init_output();
463182
463195
  init_validate();
463183
463196
  }
@@ -463978,7 +463991,7 @@ Examples:
463978
463991
  )
463979
463992
  );
463980
463993
  }
463981
- if (providerEnvMap[provider] && !hasApiKey(providerEnvMap[provider]) && !options.apiKey) {
463994
+ if (providerEnvMap[provider] && !await hasConfiguredApiKey(providerEnvMap[provider], options.apiKey)) {
463982
463995
  const resolved = resolveProvider("image");
463983
463996
  if (resolved) {
463984
463997
  log(source_default.dim(` ${provider} key not found. Using ${resolved.label} instead.`));
@@ -465418,7 +465431,7 @@ Examples:
465418
465431
  );
465419
465432
  provider = "seedance";
465420
465433
  }
465421
- if (videoEnvMap[provider] && !hasApiKey(videoEnvMap[provider]) && !options.apiKey) {
465434
+ if (videoEnvMap[provider] && !await hasConfiguredApiKey(videoEnvMap[provider], options.apiKey)) {
465422
465435
  const resolved = resolveProvider("video");
465423
465436
  if (resolved) {
465424
465437
  log(source_default.dim(` ${provider} key not found. Using ${resolved.label} instead.`));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibeframe/mcp-server",
3
- "version": "0.104.1",
3
+ "version": "0.104.2",
4
4
  "description": "VibeFrame MCP Server - AI-native video editing via Model Context Protocol",
5
5
  "type": "module",
6
6
  "bin": {
@@ -57,8 +57,8 @@
57
57
  "tsx": "^4.21.0",
58
58
  "typescript": "^5.3.3",
59
59
  "vitest": "^1.2.2",
60
- "@vibeframe/cli": "0.104.1",
61
- "@vibeframe/core": "0.104.1"
60
+ "@vibeframe/core": "0.104.2",
61
+ "@vibeframe/cli": "0.104.2"
62
62
  },
63
63
  "engines": {
64
64
  "node": ">=20"