@vibeframe/mcp-server 0.89.0 → 0.91.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 (2) hide show
  1. package/dist/index.js +140 -81
  2. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -7607,9 +7607,8 @@ vibe scene lint --json # structured output for agent loops
7607
7607
  `;
7608
7608
  }
7609
7609
  function buildSceneGitignore() {
7610
- return `# VibeFrame caches
7611
- .vibeframe/cache/
7612
- .vibeframe/checkpoints/
7610
+ return `# VibeFrame \u2014 caches, checkpoints, and project-scope config.yaml (may contain API keys)
7611
+ .vibeframe/
7613
7612
 
7614
7613
  # Render outputs
7615
7614
  renders/*.mp4
@@ -14023,7 +14022,7 @@ function getCommandKeyMap() {
14023
14022
  function getSetupProviders() {
14024
14023
  return [...apiKeyRegistry.values()].filter((k) => k.showInSetup).map((k) => ({
14025
14024
  key: k.configKey,
14026
- name: k.label,
14025
+ name: getDisplayLabelForApiKey(k.configKey),
14027
14026
  env: k.envVar,
14028
14027
  desc: k.setupDescription ?? "",
14029
14028
  url: k.envExampleUrl
@@ -14035,6 +14034,16 @@ function getAllApiKeys() {
14035
14034
  function getKeyFormat(configKey) {
14036
14035
  return apiKeyRegistry.get(configKey)?.keyFormat;
14037
14036
  }
14037
+ function getDisplayLabelForApiKey(configKey) {
14038
+ const apiKey = apiKeyRegistry.get(configKey);
14039
+ if (!apiKey)
14040
+ return configKey;
14041
+ const provider = [...providerRegistry2.values()].find((p) => p.apiKey === configKey && p.displayName && p.gateway);
14042
+ if (provider?.displayName && provider.gateway) {
14043
+ return `${provider.displayName} (via ${provider.gateway})`;
14044
+ }
14045
+ return apiKey.label;
14046
+ }
14038
14047
  function getAllProviders() {
14039
14048
  return [...providerRegistry2.values()];
14040
14049
  }
@@ -24139,7 +24148,7 @@ var init_FalProvider = __esm({
24139
24148
  VALID_ASPECTS = ["21:9", "16:9", "4:3", "1:1", "3:4", "9:16", "auto"];
24140
24149
  FalProvider = class {
24141
24150
  constructor() {
24142
- this.id = "fal";
24151
+ this.id = "seedance";
24143
24152
  this.name = "fal.ai (Seedance 2.0)";
24144
24153
  this.description = "fal.ai hosting ByteDance Seedance 2.0 \u2014 Artificial Analysis #2 on both text-to-video and image-to-video leaderboards";
24145
24154
  this.capabilities = ["text-to-video", "image-to-video"];
@@ -24238,11 +24247,13 @@ var init_fal = __esm({
24238
24247
  init_FalProvider();
24239
24248
  init_define_provider();
24240
24249
  defineProvider({
24241
- id: "fal",
24242
- label: "fal.ai (Seedance 2.0)",
24250
+ id: "seedance",
24251
+ label: "Seedance 2.0",
24243
24252
  displayName: "Seedance 2.0",
24244
24253
  gateway: "fal.ai",
24245
- aliases: ["seedance"],
24254
+ // `fal` is a deprecated v0.x alias kept so existing scripts keep working.
24255
+ // Will be removed at the 1.0 cut (see docs/1.0-readiness.md).
24256
+ aliases: ["fal"],
24246
24257
  models: ["seedance-2.0", "seedance-2.0-fast"],
24247
24258
  capabilities: ["text-to-video", "image-to-video", "native-audio"],
24248
24259
  apiKey: "fal",
@@ -24943,6 +24954,7 @@ __export(dist_exports, {
24943
24954
  getAllProviders: () => getAllProviders,
24944
24955
  getBestProviderForCapability: () => getBestProviderForCapability,
24945
24956
  getCommandKeyMap: () => getCommandKeyMap,
24957
+ getDisplayLabelForApiKey: () => getDisplayLabelForApiKey,
24946
24958
  getKeyFormat: () => getKeyFormat,
24947
24959
  getProviderEnvVars: () => getProviderEnvVars,
24948
24960
  getProvidersFor: () => getProvidersFor,
@@ -25409,44 +25421,86 @@ var init_schema = __esm({
25409
25421
  import { resolve as resolve2 } from "node:path";
25410
25422
  import { homedir } from "node:os";
25411
25423
  import { readFile as readFile2, writeFile as writeFile2, mkdir as mkdir2, access as access2 } from "node:fs/promises";
25412
- async function loadConfig() {
25424
+ function getProjectConfigDir(cwd = process.cwd()) {
25425
+ return resolve2(cwd, ".vibeframe");
25426
+ }
25427
+ function getProjectConfigPath(cwd = process.cwd()) {
25428
+ return resolve2(getProjectConfigDir(cwd), "config.yaml");
25429
+ }
25430
+ function getConfigPath(scope, cwd) {
25431
+ return scope === "project" ? getProjectConfigPath(cwd) : USER_CONFIG_PATH;
25432
+ }
25433
+ async function fileExists(path14) {
25413
25434
  try {
25414
- await access2(CONFIG_PATH);
25415
- const content = await readFile2(CONFIG_PATH, "utf-8");
25416
- const config4 = (0, import_yaml2.parse)(content);
25417
- const defaults = createDefaultConfig();
25418
- return {
25419
- ...defaults,
25420
- ...config4,
25421
- llm: { ...defaults.llm, ...config4.llm },
25422
- providers: { ...defaults.providers, ...config4.providers },
25423
- defaults: { ...defaults.defaults, ...config4.defaults },
25424
- repl: { ...defaults.repl, ...config4.repl }
25425
- };
25435
+ await access2(path14);
25436
+ return true;
25437
+ } catch {
25438
+ return false;
25439
+ }
25440
+ }
25441
+ function applyDefaults(parsed) {
25442
+ const defaults = createDefaultConfig();
25443
+ return {
25444
+ ...defaults,
25445
+ ...parsed,
25446
+ llm: { ...defaults.llm, ...parsed.llm },
25447
+ providers: { ...defaults.providers, ...parsed.providers },
25448
+ defaults: { ...defaults.defaults, ...parsed.defaults },
25449
+ repl: { ...defaults.repl, ...parsed.repl }
25450
+ };
25451
+ }
25452
+ async function readConfigFile(path14) {
25453
+ if (!await fileExists(path14)) return null;
25454
+ try {
25455
+ const content = await readFile2(path14, "utf-8");
25456
+ const parsed = (0, import_yaml2.parse)(content);
25457
+ return applyDefaults(parsed);
25426
25458
  } catch {
25427
25459
  return null;
25428
25460
  }
25429
25461
  }
25462
+ async function loadConfig(options = {}) {
25463
+ const { scope, cwd, merge: merge3 } = options;
25464
+ if (merge3) {
25465
+ const user = await readConfigFile(USER_CONFIG_PATH);
25466
+ const project2 = await readConfigFile(getProjectConfigPath(cwd));
25467
+ if (!user && !project2) return null;
25468
+ if (!user) return project2;
25469
+ if (!project2) return user;
25470
+ return {
25471
+ ...user,
25472
+ ...project2,
25473
+ llm: { ...user.llm, ...project2.llm },
25474
+ providers: { ...user.providers, ...project2.providers },
25475
+ defaults: { ...user.defaults, ...project2.defaults },
25476
+ repl: { ...user.repl, ...project2.repl }
25477
+ };
25478
+ }
25479
+ if (scope) {
25480
+ return readConfigFile(getConfigPath(scope, cwd));
25481
+ }
25482
+ const project = await readConfigFile(getProjectConfigPath(cwd));
25483
+ if (project) return project;
25484
+ return readConfigFile(USER_CONFIG_PATH);
25485
+ }
25430
25486
  async function getApiKeyFromConfig(providerKey) {
25431
25487
  const config4 = await loadConfig();
25432
25488
  if (config4?.providers[providerKey]) {
25433
25489
  return config4.providers[providerKey];
25434
25490
  }
25435
25491
  const envVar = PROVIDER_ENV_VARS[providerKey];
25436
- if (envVar) {
25437
- return process.env[envVar];
25438
- }
25492
+ if (envVar) return process.env[envVar];
25439
25493
  return void 0;
25440
25494
  }
25441
- var import_yaml2, CONFIG_DIR, CONFIG_PATH;
25495
+ var import_yaml2, USER_CONFIG_DIR, USER_CONFIG_PATH;
25442
25496
  var init_config = __esm({
25443
25497
  "../cli/src/config/index.ts"() {
25444
25498
  "use strict";
25445
25499
  import_yaml2 = __toESM(require_dist(), 1);
25446
25500
  init_schema();
25447
25501
  init_schema();
25448
- CONFIG_DIR = resolve2(homedir(), ".vibeframe");
25449
- CONFIG_PATH = resolve2(CONFIG_DIR, "config.yaml");
25502
+ USER_CONFIG_DIR = resolve2(homedir(), ".vibeframe");
25503
+ USER_CONFIG_PATH = resolve2(USER_CONFIG_DIR, "config.yaml");
25450
25504
  }
25451
25505
  });
25452
25506
 
@@ -127444,7 +127498,7 @@ var require_typescript2 = __commonJS({
127444
127498
  rangeStartIsOnSameLineAsRangeEnd: () => rangeStartIsOnSameLineAsRangeEnd,
127445
127499
  rangeStartPositionsAreOnSameLine: () => rangeStartPositionsAreOnSameLine,
127446
127500
  readBuilderProgram: () => readBuilderProgram,
127447
- readConfigFile: () => readConfigFile,
127501
+ readConfigFile: () => readConfigFile2,
127448
127502
  readJson: () => readJson,
127449
127503
  readJsonConfigFile: () => readJsonConfigFile,
127450
127504
  readJsonOrUndefined: () => readJsonOrUndefined,
@@ -134068,7 +134122,7 @@ ${lanes.join("\n")}
134068
134122
  watchDirectory,
134069
134123
  preferNonRecursiveWatch: !fsSupportsRecursiveFsWatch,
134070
134124
  resolvePath: (path14) => _path.resolve(path14),
134071
- fileExists,
134125
+ fileExists: fileExists2,
134072
134126
  directoryExists,
134073
134127
  getAccessibleFileSystemEntries,
134074
134128
  createDirectory(directoryName) {
@@ -134230,7 +134284,7 @@ ${lanes.join("\n")}
134230
134284
  if (platform === "win32" || platform === "win64") {
134231
134285
  return false;
134232
134286
  }
134233
- return !fileExists(swapCase(__filename));
134287
+ return !fileExists2(swapCase(__filename));
134234
134288
  }
134235
134289
  function swapCase(s) {
134236
134290
  return s.replace(/\w/g, (ch) => {
@@ -134363,7 +134417,7 @@ ${lanes.join("\n")}
134363
134417
  return false;
134364
134418
  }
134365
134419
  }
134366
- function fileExists(path14) {
134420
+ function fileExists2(path14) {
134367
134421
  return fileSystemEntryExists(
134368
134422
  path14,
134369
134423
  0
@@ -171058,7 +171112,7 @@ ${lanes.join("\n")}
171058
171112
  watchOptionsToExtend
171059
171113
  );
171060
171114
  }
171061
- function readConfigFile(fileName, readFile34) {
171115
+ function readConfigFile2(fileName, readFile34) {
171062
171116
  const textOrDiagnostic = tryReadFile(fileName, readFile34);
171063
171117
  return isString3(textOrDiagnostic) ? parseConfigFileTextToJson(fileName, textOrDiagnostic) : { config: {}, error: textOrDiagnostic };
171064
171118
  }
@@ -260189,7 +260243,7 @@ ${lanes.join("\n")}
260189
260243
  const getCanonicalFileName = createGetCanonicalFileName(useCaseSensitiveFileNames2);
260190
260244
  return {
260191
260245
  useCaseSensitiveFileNames: useCaseSensitiveFileNames2,
260192
- fileExists,
260246
+ fileExists: fileExists2,
260193
260247
  readFile: (path14, encoding) => host.readFile(path14, encoding),
260194
260248
  directoryExists: host.directoryExists && directoryExists,
260195
260249
  getDirectories,
@@ -260275,7 +260329,7 @@ ${lanes.join("\n")}
260275
260329
  }
260276
260330
  return host.writeFile(fileName, data, writeByteOrderMark);
260277
260331
  }
260278
- function fileExists(fileName) {
260332
+ function fileExists2(fileName) {
260279
260333
  const path14 = toPath3(fileName);
260280
260334
  const result = getCachedFileSystemEntriesForBaseDir(path14);
260281
260335
  return result && hasEntry(result.sortedAndCanonicalizedFiles, getCanonicalFileName(getBaseNameOfFileName(fileName))) || host.fileExists(fileName);
@@ -260391,10 +260445,10 @@ ${lanes.join("\n")}
260391
260445
  clearFirstAncestorEntry(filePath);
260392
260446
  }
260393
260447
  }
260394
- function updateFilesOfFileSystemEntry(parentResult, baseName, fileExists2) {
260448
+ function updateFilesOfFileSystemEntry(parentResult, baseName, fileExists22) {
260395
260449
  const canonicalizedFiles = parentResult.sortedAndCanonicalizedFiles;
260396
260450
  const canonicalizedBaseName = getCanonicalFileName(baseName);
260397
- if (fileExists2) {
260451
+ if (fileExists22) {
260398
260452
  if (insertSorted(canonicalizedFiles, canonicalizedBaseName, compareStringsCaseSensitive)) {
260399
260453
  parentResult.files.push(baseName);
260400
260454
  }
@@ -260694,10 +260748,10 @@ ${lanes.join("\n")}
260694
260748
  function closeFileWatcherOf(objWithWatcher) {
260695
260749
  objWithWatcher.watcher.close();
260696
260750
  }
260697
- function findConfigFile(searchPath, fileExists, configName = "tsconfig.json") {
260751
+ function findConfigFile(searchPath, fileExists2, configName = "tsconfig.json") {
260698
260752
  return forEachAncestorDirectory(searchPath, (ancestor) => {
260699
260753
  const fileName = combinePaths(ancestor, configName);
260700
- return fileExists(fileName) ? fileName : void 0;
260754
+ return fileExists2(fileName) ? fileName : void 0;
260701
260755
  });
260702
260756
  }
260703
260757
  function resolveTripleslashReference(moduleName, containingFile) {
@@ -261304,14 +261358,14 @@ ${lanes.join("\n")}
261304
261358
  }
261305
261359
  return { file, pos, end, packageId };
261306
261360
  }
261307
- function isProgramUptoDate(program2, rootFileNames, newOptions, getSourceVersion, fileExists, hasInvalidatedResolutions, hasInvalidatedLibResolutions, hasChangedAutomaticTypeDirectiveNames, getParsedCommandLine, projectReferences) {
261361
+ function isProgramUptoDate(program2, rootFileNames, newOptions, getSourceVersion, fileExists2, hasInvalidatedResolutions, hasInvalidatedLibResolutions, hasChangedAutomaticTypeDirectiveNames, getParsedCommandLine, projectReferences) {
261308
261362
  if (!program2 || (hasChangedAutomaticTypeDirectiveNames == null ? void 0 : hasChangedAutomaticTypeDirectiveNames())) return false;
261309
261363
  if (!arrayIsEqualTo(program2.getRootFileNames(), rootFileNames)) return false;
261310
261364
  let seenResolvedRefs;
261311
261365
  if (!arrayIsEqualTo(program2.getProjectReferences(), projectReferences, projectReferenceUptoDate)) return false;
261312
261366
  if (program2.getSourceFiles().some(sourceFileNotUptoDate)) return false;
261313
261367
  const missingPaths = program2.getMissingFilePaths();
261314
- if (missingPaths && forEachEntry(missingPaths, fileExists)) return false;
261368
+ if (missingPaths && forEachEntry(missingPaths, fileExists2)) return false;
261315
261369
  const currentOptions = program2.getCompilerOptions();
261316
261370
  if (!compareDataObjects(currentOptions, newOptions)) return false;
261317
261371
  if (program2.resolvedLibReferences && forEachEntry(program2.resolvedLibReferences, (_value, libFileName) => hasInvalidatedLibResolutions(libFileName))) return false;
@@ -261639,7 +261693,7 @@ ${lanes.join("\n")}
261639
261693
  let mapSourceFileToResolvedRef;
261640
261694
  let mapOutputFileToResolvedRef;
261641
261695
  const useSourceOfProjectReferenceRedirect = !!((_d = host.useSourceOfProjectReferenceRedirect) == null ? void 0 : _d.call(host)) && !options.disableSourceOfProjectReferenceRedirect;
261642
- const { onProgramCreateComplete, fileExists, directoryExists } = updateHostForUseSourceOfProjectReferenceRedirect({
261696
+ const { onProgramCreateComplete, fileExists: fileExists2, directoryExists } = updateHostForUseSourceOfProjectReferenceRedirect({
261643
261697
  compilerHost: host,
261644
261698
  getSymlinkCache,
261645
261699
  useSourceOfProjectReferenceRedirect,
@@ -261873,7 +261927,7 @@ ${lanes.join("\n")}
261873
261927
  getImpliedNodeFormatForEmit: getImpliedNodeFormatForEmit2,
261874
261928
  shouldTransformImportCall,
261875
261929
  emitBuildInfo,
261876
- fileExists,
261930
+ fileExists: fileExists2,
261877
261931
  readFile: readFile34,
261878
261932
  directoryExists,
261879
261933
  getSymlinkCache,
@@ -264372,8 +264426,8 @@ ${lanes.join("\n")}
264372
264426
  const originalDirectoryExists = host.compilerHost.directoryExists;
264373
264427
  const originalGetDirectories = host.compilerHost.getDirectories;
264374
264428
  const originalRealpath = host.compilerHost.realpath;
264375
- if (!host.useSourceOfProjectReferenceRedirect) return { onProgramCreateComplete: noop3, fileExists };
264376
- host.compilerHost.fileExists = fileExists;
264429
+ if (!host.useSourceOfProjectReferenceRedirect) return { onProgramCreateComplete: noop3, fileExists: fileExists2 };
264430
+ host.compilerHost.fileExists = fileExists2;
264377
264431
  let directoryExists;
264378
264432
  if (originalDirectoryExists) {
264379
264433
  directoryExists = host.compilerHost.directoryExists = (path14) => {
@@ -264412,13 +264466,13 @@ ${lanes.join("\n")}
264412
264466
  return ((_a7 = host.getSymlinkCache().getSymlinkedFiles()) == null ? void 0 : _a7.get(host.toPath(s))) || originalRealpath.call(host.compilerHost, s);
264413
264467
  };
264414
264468
  }
264415
- return { onProgramCreateComplete, fileExists, directoryExists };
264469
+ return { onProgramCreateComplete, fileExists: fileExists2, directoryExists };
264416
264470
  function onProgramCreateComplete() {
264417
264471
  host.compilerHost.fileExists = originalFileExists;
264418
264472
  host.compilerHost.directoryExists = originalDirectoryExists;
264419
264473
  host.compilerHost.getDirectories = originalGetDirectories;
264420
264474
  }
264421
- function fileExists(file) {
264475
+ function fileExists2(file) {
264422
264476
  if (originalFileExists.call(host.compilerHost, file)) return true;
264423
264477
  if (!host.getResolvedProjectReferences()) return false;
264424
264478
  if (!isDeclarationFileName(file)) return false;
@@ -268770,7 +268824,7 @@ ${lanes.join("\n")}
268770
268824
  compilerHost.getSourceFile = (fileName, ...args) => getVersionedSourceFileByPath(fileName, toPath3(fileName), ...args);
268771
268825
  compilerHost.getSourceFileByPath = getVersionedSourceFileByPath;
268772
268826
  compilerHost.getNewLine = () => newLine;
268773
- compilerHost.fileExists = fileExists;
268827
+ compilerHost.fileExists = fileExists2;
268774
268828
  compilerHost.onReleaseOldSourceFile = onReleaseOldSourceFile;
268775
268829
  compilerHost.onReleaseParsedCommandLine = onReleaseParsedCommandLine;
268776
268830
  compilerHost.toPath = toPath3;
@@ -268974,7 +269028,7 @@ ${lanes.join("\n")}
268974
269028
  function isFilePresenceUnknownOnHost(hostSourceFile) {
268975
269029
  return typeof hostSourceFile.version === "boolean";
268976
269030
  }
268977
- function fileExists(fileName) {
269031
+ function fileExists2(fileName) {
268978
269032
  const path14 = toPath3(fileName);
268979
269033
  if (isFileMissingOnHost(sourceFilesCache.get(path14))) {
268980
269034
  return false;
@@ -273732,12 +273786,12 @@ ${lanes.join("\n")}
273732
273786
  return nodeCoreModules.has(moduleName) ? "node" : moduleName;
273733
273787
  }
273734
273788
  function loadSafeList(host, safeListPath) {
273735
- const result = readConfigFile(safeListPath, (path14) => host.readFile(path14));
273789
+ const result = readConfigFile2(safeListPath, (path14) => host.readFile(path14));
273736
273790
  return new Map(Object.entries(result.config));
273737
273791
  }
273738
273792
  function loadTypesMap(host, typesMapPath) {
273739
273793
  var _a7;
273740
- const result = readConfigFile(typesMapPath, (path14) => host.readFile(path14));
273794
+ const result = readConfigFile2(typesMapPath, (path14) => host.readFile(path14));
273741
273795
  if ((_a7 = result.config) == null ? void 0 : _a7.simpleMap) {
273742
273796
  return new Map(Object.entries(result.config.simpleMap));
273743
273797
  }
@@ -273813,7 +273867,7 @@ ${lanes.join("\n")}
273813
273867
  let manifestTypingNames;
273814
273868
  if (host.fileExists(manifestPath)) {
273815
273869
  filesToWatch2.push(manifestPath);
273816
- manifest2 = readConfigFile(manifestPath, (path14) => host.readFile(path14)).config;
273870
+ manifest2 = readConfigFile2(manifestPath, (path14) => host.readFile(path14)).config;
273817
273871
  manifestTypingNames = flatMap([manifest2.dependencies, manifest2.devDependencies, manifest2.optionalDependencies, manifest2.peerDependencies], getOwnKeys);
273818
273872
  addInferredTypings(manifestTypingNames, `Typing names in '${manifestPath}' dependencies`);
273819
273873
  }
@@ -273847,7 +273901,7 @@ ${lanes.join("\n")}
273847
273901
  if (log2) log2(`Searching for typing names in ${packagesFolderPath}; all files: ${JSON.stringify(dependencyManifestNames)}`);
273848
273902
  for (const manifestPath2 of dependencyManifestNames) {
273849
273903
  const normalizedFileName = normalizePath(manifestPath2);
273850
- const result2 = readConfigFile(normalizedFileName, (path14) => host.readFile(path14));
273904
+ const result2 = readConfigFile2(normalizedFileName, (path14) => host.readFile(path14));
273851
273905
  const manifest22 = result2.config;
273852
273906
  if (!manifest22.name) {
273853
273907
  continue;
@@ -275943,15 +275997,15 @@ ${lanes.join("\n")}
275943
275997
  }
275944
275998
  return true;
275945
275999
  }
275946
- function getMappedLocation(location, sourceMapper, fileExists) {
276000
+ function getMappedLocation(location, sourceMapper, fileExists2) {
275947
276001
  const mapsTo = sourceMapper.tryGetSourcePosition(location);
275948
- return mapsTo && (!fileExists || fileExists(normalizePath(mapsTo.fileName)) ? mapsTo : void 0);
276002
+ return mapsTo && (!fileExists2 || fileExists2(normalizePath(mapsTo.fileName)) ? mapsTo : void 0);
275949
276003
  }
275950
- function getMappedDocumentSpan(documentSpan, sourceMapper, fileExists) {
276004
+ function getMappedDocumentSpan(documentSpan, sourceMapper, fileExists2) {
275951
276005
  const { fileName, textSpan } = documentSpan;
275952
- const newPosition = getMappedLocation({ fileName, pos: textSpan.start }, sourceMapper, fileExists);
276006
+ const newPosition = getMappedLocation({ fileName, pos: textSpan.start }, sourceMapper, fileExists2);
275953
276007
  if (!newPosition) return void 0;
275954
- const newEndPosition = getMappedLocation({ fileName, pos: textSpan.start + textSpan.length }, sourceMapper, fileExists);
276008
+ const newEndPosition = getMappedLocation({ fileName, pos: textSpan.start + textSpan.length }, sourceMapper, fileExists2);
275955
276009
  const newLength = newEndPosition ? newEndPosition.pos - newPosition.pos : textSpan.length;
275956
276010
  return {
275957
276011
  fileName: newPosition.fileName,
@@ -275961,20 +276015,20 @@ ${lanes.join("\n")}
275961
276015
  },
275962
276016
  originalFileName: documentSpan.fileName,
275963
276017
  originalTextSpan: documentSpan.textSpan,
275964
- contextSpan: getMappedContextSpan(documentSpan, sourceMapper, fileExists),
276018
+ contextSpan: getMappedContextSpan(documentSpan, sourceMapper, fileExists2),
275965
276019
  originalContextSpan: documentSpan.contextSpan
275966
276020
  };
275967
276021
  }
275968
- function getMappedContextSpan(documentSpan, sourceMapper, fileExists) {
276022
+ function getMappedContextSpan(documentSpan, sourceMapper, fileExists2) {
275969
276023
  const contextSpanStart = documentSpan.contextSpan && getMappedLocation(
275970
276024
  { fileName: documentSpan.fileName, pos: documentSpan.contextSpan.start },
275971
276025
  sourceMapper,
275972
- fileExists
276026
+ fileExists2
275973
276027
  );
275974
276028
  const contextSpanEnd = documentSpan.contextSpan && getMappedLocation(
275975
276029
  { fileName: documentSpan.fileName, pos: documentSpan.contextSpan.start + documentSpan.contextSpan.length },
275976
276030
  sourceMapper,
275977
- fileExists
276031
+ fileExists2
275978
276032
  );
275979
276033
  return contextSpanStart && contextSpanEnd ? { start: contextSpanStart.pos, length: contextSpanEnd.pos - contextSpanStart.pos } : void 0;
275980
276034
  }
@@ -322947,7 +323001,7 @@ ${options.prefix}` : "\n" : options.prefix
322947
323001
  rangeStartIsOnSameLineAsRangeEnd: () => rangeStartIsOnSameLineAsRangeEnd,
322948
323002
  rangeStartPositionsAreOnSameLine: () => rangeStartPositionsAreOnSameLine,
322949
323003
  readBuilderProgram: () => readBuilderProgram,
322950
- readConfigFile: () => readConfigFile,
323004
+ readConfigFile: () => readConfigFile2,
322951
323005
  readJson: () => readJson,
322952
323006
  readJsonConfigFile: () => readJsonConfigFile,
322953
323007
  readJsonOrUndefined: () => readJsonOrUndefined,
@@ -324458,9 +324512,9 @@ ${options.prefix}` : "\n" : options.prefix
324458
324512
  this.markContainingProjectsAsDirty();
324459
324513
  }
324460
324514
  }
324461
- close(fileExists = true) {
324515
+ close(fileExists2 = true) {
324462
324516
  this.textStorage.isOpen = false;
324463
- if (fileExists && this.textStorage.scheduleReloadIfNeeded()) {
324517
+ if (fileExists2 && this.textStorage.scheduleReloadIfNeeded()) {
324464
324518
  this.markContainingProjectsAsDirty();
324465
324519
  }
324466
324520
  }
@@ -325564,11 +325618,11 @@ ${options.prefix}` : "\n" : options.prefix
325564
325618
  this.rootFilesMap.set(path14, { fileName });
325565
325619
  this.markAsDirty();
325566
325620
  }
325567
- removeFile(info, fileExists, detachFromProject) {
325621
+ removeFile(info, fileExists2, detachFromProject) {
325568
325622
  if (this.isRoot(info)) {
325569
325623
  this.removeRoot(info);
325570
325624
  }
325571
- if (fileExists) {
325625
+ if (fileExists2) {
325572
325626
  this.resolutionCache.removeResolutionsOfFile(info.path);
325573
325627
  } else {
325574
325628
  this.resolutionCache.invalidateResolutionOfFile(info.path);
@@ -328438,8 +328492,8 @@ ${options.prefix}` : "\n" : options.prefix
328438
328492
  */
328439
328493
  closeOpenFile(info, skipAssignOrphanScriptInfosToInferredProject) {
328440
328494
  var _a7;
328441
- const fileExists = info.isDynamic ? false : this.host.fileExists(info.fileName);
328442
- info.close(fileExists);
328495
+ const fileExists2 = info.isDynamic ? false : this.host.fileExists(info.fileName);
328496
+ info.close(fileExists2);
328443
328497
  this.stopWatchingConfigFilesForScriptInfo(info);
328444
328498
  const canonicalFileName = this.toCanonicalFileName(info.fileName);
328445
328499
  if (this.openFilesWithNonRootedDiskPath.get(canonicalFileName) === info) {
@@ -328465,7 +328519,7 @@ ${options.prefix}` : "\n" : options.prefix
328465
328519
  }
328466
328520
  p.removeFile(
328467
328521
  info,
328468
- fileExists,
328522
+ fileExists2,
328469
328523
  /*detachFromProject*/
328470
328524
  true
328471
328525
  );
@@ -328481,7 +328535,7 @@ ${options.prefix}` : "\n" : options.prefix
328481
328535
  if (!skipAssignOrphanScriptInfosToInferredProject && ensureProjectsForOpenFiles) {
328482
328536
  this.assignOrphanScriptInfosToInferredProject();
328483
328537
  }
328484
- if (fileExists) {
328538
+ if (fileExists2) {
328485
328539
  this.watchClosedScriptInfo(info);
328486
328540
  } else {
328487
328541
  this.handleDeletedFile(
@@ -459850,9 +459904,9 @@ var init_ai_script_pipeline = __esm({
459850
459904
  import { resolve as resolve50 } from "node:path";
459851
459905
  import { readFile as readFile25, writeFile as writeFile33 } from "node:fs/promises";
459852
459906
  function registerVideoCommand(parent) {
459853
- parent.command("video").alias("vid").description("Generate video using AI (Seedance, Grok, Kling, Runway, or Veo)").argument("[prompt]", "Text prompt describing the video (interactive if omitted)").option("-p, --provider <provider>", "Provider: seedance (ByteDance Seedance 2.0 via fal.ai), grok, kling, runway, veo. `fal` is a backwards-compatible alias for seedance.").option("-k, --api-key <key>", "API key (or set FAL_KEY / XAI_API_KEY / RUNWAY_API_SECRET / KLING_API_KEY / GOOGLE_API_KEY env)").option("-o, --output <path>", "Output file path (downloads video)").option("-i, --image <path>", "Reference image for image-to-video").option(
459907
+ parent.command("video").alias("vid").description("Generate video using AI (Seedance, Grok, Kling, Runway, or Veo)").argument("[prompt]", "Text prompt describing the video (interactive if omitted)").option("-p, --provider <provider>", "Provider: seedance (ByteDance Seedance 2.0 via fal.ai), grok, kling, runway, veo. `fal` is a deprecated v0.x alias for seedance and will be removed in 1.0.").option("-k, --api-key <key>", "API key (or set FAL_KEY / XAI_API_KEY / RUNWAY_API_SECRET / KLING_API_KEY / GOOGLE_API_KEY env)").option("-o, --output <path>", "Output file path (downloads video)").option("-i, --image <path>", "Reference image for image-to-video").option(
459854
459908
  "-d, --duration <sec>",
459855
- "Duration in seconds. Seedance accepts 4-15 (`fal` alias supported); Kling accepts 5 or 10; Veo maps to 6 or 8.",
459909
+ "Duration in seconds. Seedance accepts 4-15; Kling accepts 5 or 10; Veo maps to 6 or 8.",
459856
459910
  "5"
459857
459911
  ).option("-r, --ratio <ratio>", "Aspect ratio: 16:9, 9:16, or 1:1 (auto-detected from image if omitted)").option("--seed <number>", "Random seed for reproducibility (Runway only)").option("--mode <mode>", "Generation mode: std or pro (Kling only)", "std").option("--seedance-model <model>", "Seedance variant: quality or fast (fal.ai only)", "quality").option("--negative <prompt>", "Negative prompt - what to avoid (Kling/Veo)").option("--resolution <res>", "Video resolution: 720p, 1080p, 4k (Veo only)").option("--last-frame <path>", "Last frame image for frame interpolation (Veo only)").option("--ref-images <paths...>", "Reference images for character consistency (Veo 3.1 only, max 3)").option("--person <mode>", "Person generation: allow_all, allow_adult (Veo only)").option("--veo-model <model>", "Veo model: 3.0, 3.1, 3.1-fast (default: 3.1-fast)", "3.1-fast").option("--runway-model <model>", "Runway model: gen4.5 (default, text+image-to-video), gen4_turbo (image-to-video only)", "gen4.5").option("--no-wait", "Start generation and return task ID without waiting").option("--dry-run", "Preview parameters without executing").addHelpText("after", `
459858
459912
  Examples:
@@ -459898,8 +459952,7 @@ Examples:
459898
459952
  veo: "GOOGLE_API_KEY",
459899
459953
  kling: "KLING_API_KEY",
459900
459954
  runway: "RUNWAY_API_SECRET",
459901
- seedance: "FAL_KEY",
459902
- fal: "FAL_KEY"
459955
+ seedance: "FAL_KEY"
459903
459956
  };
459904
459957
  let provider;
459905
459958
  if (options.provider) {
@@ -459908,10 +459961,18 @@ Examples:
459908
459961
  exitWithError(
459909
459962
  usageError(
459910
459963
  `Invalid provider: ${provider}`,
459911
- "Available providers: seedance, grok, kling, runway, veo. `fal` is a backwards-compatible alias for seedance."
459964
+ "Available providers: seedance, grok, kling, runway, veo. `fal` is a deprecated alias for seedance."
459912
459965
  )
459913
459966
  );
459914
459967
  }
459968
+ if (provider === "fal") {
459969
+ process.stderr.write(
459970
+ source_default.yellow(
459971
+ "Note: `-p fal` is a deprecated alias for `-p seedance` and will be removed in 1.0.\n"
459972
+ )
459973
+ );
459974
+ provider = "seedance";
459975
+ }
459915
459976
  if (videoEnvMap[provider] && !hasApiKey(videoEnvMap[provider]) && !options.apiKey) {
459916
459977
  const resolved = resolveProvider("video");
459917
459978
  if (resolved) {
@@ -459971,7 +460032,7 @@ Examples:
459971
460032
  data: {
459972
460033
  params: {
459973
460034
  prompt: prompt3,
459974
- provider: provider === "fal" ? "seedance" : provider,
460035
+ provider,
459975
460036
  duration: options.duration,
459976
460037
  ratio: options.ratio,
459977
460038
  image: options.image,
@@ -459990,16 +460051,14 @@ Examples:
459990
460051
  kling: "KLING_API_KEY",
459991
460052
  veo: "GOOGLE_API_KEY",
459992
460053
  grok: "XAI_API_KEY",
459993
- seedance: "FAL_KEY",
459994
- fal: "FAL_KEY"
460054
+ seedance: "FAL_KEY"
459995
460055
  };
459996
460056
  const providerNameMap = {
459997
460057
  runway: "Runway",
459998
460058
  kling: "Kling",
459999
460059
  veo: "Veo",
460000
460060
  grok: "Grok",
460001
- seedance: "Seedance 2.0 via fal.ai",
460002
- fal: "Seedance 2.0 via fal.ai"
460061
+ seedance: "Seedance 2.0 via fal.ai"
460003
460062
  };
460004
460063
  const envKey = envKeyMap[provider];
460005
460064
  const providerName = providerNameMap[provider];
@@ -460218,7 +460277,7 @@ Examples:
460218
460277
  },
460219
460278
  3e5
460220
460279
  );
460221
- } else if (provider === "fal" || provider === "seedance") {
460280
+ } else if (provider === "seedance") {
460222
460281
  const fal = new FalProvider();
460223
460282
  await fal.initialize({ apiKey });
460224
460283
  let falImage = referenceImage;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibeframe/mcp-server",
3
- "version": "0.89.0",
3
+ "version": "0.91.0",
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/core": "0.89.0",
61
- "@vibeframe/cli": "0.89.0"
60
+ "@vibeframe/core": "0.91.0",
61
+ "@vibeframe/cli": "0.91.0"
62
62
  },
63
63
  "engines": {
64
64
  "node": ">=20"