@vibeframe/mcp-server 0.111.0 → 0.111.3
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 +190 -99
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -34586,7 +34586,7 @@ var require_source_map = __commonJS({
|
|
|
34586
34586
|
var require_previous_map = __commonJS({
|
|
34587
34587
|
"../../node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/previous-map.js"(exports, module) {
|
|
34588
34588
|
"use strict";
|
|
34589
|
-
var { existsSync:
|
|
34589
|
+
var { existsSync: existsSync66, readFileSync: readFileSync12 } = __require("fs");
|
|
34590
34590
|
var { dirname: dirname33, join: join44 } = __require("path");
|
|
34591
34591
|
var { SourceMapConsumer, SourceMapGenerator } = require_source_map();
|
|
34592
34592
|
function fromBase64(str2) {
|
|
@@ -34649,7 +34649,7 @@ var require_previous_map = __commonJS({
|
|
|
34649
34649
|
}
|
|
34650
34650
|
loadFile(path14) {
|
|
34651
34651
|
this.root = dirname33(path14);
|
|
34652
|
-
if (
|
|
34652
|
+
if (existsSync66(path14)) {
|
|
34653
34653
|
this.mapFile = path14;
|
|
34654
34654
|
return readFileSync12(path14, "utf-8").toString().trim();
|
|
34655
34655
|
}
|
|
@@ -35343,8 +35343,8 @@ var require_map_generator = __commonJS({
|
|
|
35343
35343
|
if (this.mapOpts.absolute) return file;
|
|
35344
35344
|
if (file.charCodeAt(0) === 60) return file;
|
|
35345
35345
|
if (/^\w+:\/\//.test(file)) return file;
|
|
35346
|
-
let
|
|
35347
|
-
if (
|
|
35346
|
+
let cached2 = this.memoizedPaths.get(file);
|
|
35347
|
+
if (cached2) return cached2;
|
|
35348
35348
|
let from3 = this.opts.to ? dirname33(this.opts.to) : ".";
|
|
35349
35349
|
if (typeof this.mapOpts.annotation === "string") {
|
|
35350
35350
|
from3 = dirname33(resolve79(from3, this.mapOpts.annotation));
|
|
@@ -35407,8 +35407,8 @@ var require_map_generator = __commonJS({
|
|
|
35407
35407
|
}
|
|
35408
35408
|
}
|
|
35409
35409
|
toFileUrl(path14) {
|
|
35410
|
-
let
|
|
35411
|
-
if (
|
|
35410
|
+
let cached2 = this.memoizedFileURLs.get(path14);
|
|
35411
|
+
if (cached2) return cached2;
|
|
35412
35412
|
if (pathToFileURL) {
|
|
35413
35413
|
let fileURL = pathToFileURL(path14).toString();
|
|
35414
35414
|
this.memoizedFileURLs.set(path14, fileURL);
|
|
@@ -35420,8 +35420,8 @@ var require_map_generator = __commonJS({
|
|
|
35420
35420
|
}
|
|
35421
35421
|
}
|
|
35422
35422
|
toUrl(path14) {
|
|
35423
|
-
let
|
|
35424
|
-
if (
|
|
35423
|
+
let cached2 = this.memoizedURLs.get(path14);
|
|
35424
|
+
if (cached2) return cached2;
|
|
35425
35425
|
if (sep2 === "\\") {
|
|
35426
35426
|
path14 = path14.replace(/\\/g, "/");
|
|
35427
35427
|
}
|
|
@@ -39915,8 +39915,8 @@ var require_common2 = __commonJS({
|
|
|
39915
39915
|
}
|
|
39916
39916
|
return debug9;
|
|
39917
39917
|
}
|
|
39918
|
-
function extend(namespace,
|
|
39919
|
-
const newDebug = createDebug(this.namespace + (typeof
|
|
39918
|
+
function extend(namespace, delimiter2) {
|
|
39919
|
+
const newDebug = createDebug(this.namespace + (typeof delimiter2 === "undefined" ? ":" : delimiter2) + namespace);
|
|
39920
39920
|
newDebug.log = this.log;
|
|
39921
39921
|
return newDebug;
|
|
39922
39922
|
}
|
|
@@ -83010,9 +83010,9 @@ var require_range = __commonJS({
|
|
|
83010
83010
|
parseRange(range) {
|
|
83011
83011
|
const memoOpts = (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) | (this.options.loose && FLAG_LOOSE);
|
|
83012
83012
|
const memoKey = memoOpts + ":" + range;
|
|
83013
|
-
const
|
|
83014
|
-
if (
|
|
83015
|
-
return
|
|
83013
|
+
const cached2 = cache.get(memoKey);
|
|
83014
|
+
if (cached2) {
|
|
83015
|
+
return cached2;
|
|
83016
83016
|
}
|
|
83017
83017
|
const loose = this.options.loose;
|
|
83018
83018
|
const hr2 = loose ? re2[t2.HYPHENRANGELOOSE] : re2[t2.HYPHENRANGE];
|
|
@@ -90548,10 +90548,10 @@ var require_parseListMLSD = __commonJS({
|
|
|
90548
90548
|
// available on the server's operating system." The parser by Apache Commons tries to translate these
|
|
90549
90549
|
// to Unix permissions – this is misleading users and might not even be correct.
|
|
90550
90550
|
};
|
|
90551
|
-
function splitStringOnce(str2,
|
|
90552
|
-
const pos = str2.indexOf(
|
|
90551
|
+
function splitStringOnce(str2, delimiter2) {
|
|
90552
|
+
const pos = str2.indexOf(delimiter2);
|
|
90553
90553
|
const a2 = str2.substr(0, pos);
|
|
90554
|
-
const b2 = str2.substr(pos +
|
|
90554
|
+
const b2 = str2.substr(pos + delimiter2.length);
|
|
90555
90555
|
return [a2, b2];
|
|
90556
90556
|
}
|
|
90557
90557
|
function testLine(line) {
|
|
@@ -182151,8 +182151,8 @@ ${lanes.join("\n")}
|
|
|
182151
182151
|
return emptyArray;
|
|
182152
182152
|
}
|
|
182153
182153
|
const cache = (_a9 = host.getModuleSpecifierCache) == null ? void 0 : _a9.call(host);
|
|
182154
|
-
const
|
|
182155
|
-
return [
|
|
182154
|
+
const cached2 = cache == null ? void 0 : cache.get(importingSourceFile.path, moduleSourceFile.path, userPreferences, options);
|
|
182155
|
+
return [cached2 == null ? void 0 : cached2.kind, cached2 == null ? void 0 : cached2.moduleSpecifiers, moduleSourceFile, cached2 == null ? void 0 : cached2.modulePaths, cache];
|
|
182156
182156
|
}
|
|
182157
182157
|
function getModuleSpecifiers(moduleSymbol, checker, compilerOptions, importingSourceFile, host, userPreferences, options = {}) {
|
|
182158
182158
|
return getModuleSpecifiersWithCacheInfo(
|
|
@@ -182431,8 +182431,8 @@ ${lanes.join("\n")}
|
|
|
182431
182431
|
const importedFilePath = toPath(importedFileName, host.getCurrentDirectory(), hostGetCanonicalFileName(host));
|
|
182432
182432
|
const cache = (_a9 = host.getModuleSpecifierCache) == null ? void 0 : _a9.call(host);
|
|
182433
182433
|
if (cache) {
|
|
182434
|
-
const
|
|
182435
|
-
if (
|
|
182434
|
+
const cached2 = cache.get(importingFilePath, importedFilePath, preferences, options);
|
|
182435
|
+
if (cached2 == null ? void 0 : cached2.modulePaths) return cached2.modulePaths;
|
|
182436
182436
|
}
|
|
182437
182437
|
const modulePaths = getAllModulePathsWorker(info, importedFileName, host, compilerOptions, options);
|
|
182438
182438
|
if (cache) {
|
|
@@ -190476,9 +190476,9 @@ ${lanes.join("\n")}
|
|
|
190476
190476
|
function typeParameterToName(type, context3) {
|
|
190477
190477
|
var _a9, _b3, _c3, _d;
|
|
190478
190478
|
if (context3.flags & 4 && context3.typeParameterNames) {
|
|
190479
|
-
const
|
|
190480
|
-
if (
|
|
190481
|
-
return
|
|
190479
|
+
const cached2 = context3.typeParameterNames.get(getTypeId(type));
|
|
190480
|
+
if (cached2) {
|
|
190481
|
+
return cached2;
|
|
190482
190482
|
}
|
|
190483
190483
|
}
|
|
190484
190484
|
let result = symbolToName(
|
|
@@ -198192,9 +198192,9 @@ ${lanes.join("\n")}
|
|
|
198192
198192
|
}
|
|
198193
198193
|
function getOrCreateSubstitutionType(baseType, constraint) {
|
|
198194
198194
|
const id = `${getTypeId(baseType)}>${getTypeId(constraint)}`;
|
|
198195
|
-
const
|
|
198196
|
-
if (
|
|
198197
|
-
return
|
|
198195
|
+
const cached2 = substitutionTypes.get(id);
|
|
198196
|
+
if (cached2) {
|
|
198197
|
+
return cached2;
|
|
198198
198198
|
}
|
|
198199
198199
|
const result = createType(
|
|
198200
198200
|
33554432
|
|
@@ -201593,9 +201593,9 @@ ${lanes.join("\n")}
|
|
|
201593
201593
|
}
|
|
201594
201594
|
const key2 = type.id + getAliasId(aliasSymbol, aliasTypeArguments);
|
|
201595
201595
|
const mapperCache = activeTypeMappersCaches[index !== -1 ? index : activeTypeMappersCount - 1];
|
|
201596
|
-
const
|
|
201597
|
-
if (
|
|
201598
|
-
return
|
|
201596
|
+
const cached2 = mapperCache.get(key2);
|
|
201597
|
+
if (cached2) {
|
|
201598
|
+
return cached2;
|
|
201599
201599
|
}
|
|
201600
201600
|
totalInstantiationCount++;
|
|
201601
201601
|
instantiationCount++;
|
|
@@ -206101,9 +206101,9 @@ ${lanes.join("\n")}
|
|
|
206101
206101
|
return widened === original ? prop2 : createSymbolWithType(prop2, widened);
|
|
206102
206102
|
}
|
|
206103
206103
|
function getUndefinedProperty(prop2) {
|
|
206104
|
-
const
|
|
206105
|
-
if (
|
|
206106
|
-
return
|
|
206104
|
+
const cached2 = undefinedProperties.get(prop2.escapedName);
|
|
206105
|
+
if (cached2) {
|
|
206106
|
+
return cached2;
|
|
206107
206107
|
}
|
|
206108
206108
|
const result = createSymbolWithType(prop2, undefinedOrMissingType);
|
|
206109
206109
|
result.flags |= 16777216;
|
|
@@ -208964,9 +208964,9 @@ ${lanes.join("\n")}
|
|
|
208964
208964
|
if (!key22) {
|
|
208965
208965
|
return declaredType;
|
|
208966
208966
|
}
|
|
208967
|
-
const
|
|
208968
|
-
if (
|
|
208969
|
-
return
|
|
208967
|
+
const cached2 = cache.get(key22);
|
|
208968
|
+
if (cached2) {
|
|
208969
|
+
return cached2;
|
|
208970
208970
|
}
|
|
208971
208971
|
for (let i2 = flowLoopStart; i2 < flowLoopCount; i2++) {
|
|
208972
208972
|
if (flowLoopNodes[i2] === flow && flowLoopKeys[i2] === key22 && flowLoopTypes[i2].length) {
|
|
@@ -208998,9 +208998,9 @@ ${lanes.join("\n")}
|
|
|
208998
208998
|
flowType = getTypeAtFlowNode(antecedent);
|
|
208999
208999
|
flowTypeCache = saveFlowTypeCache;
|
|
209000
209000
|
flowLoopCount--;
|
|
209001
|
-
const
|
|
209002
|
-
if (
|
|
209003
|
-
return
|
|
209001
|
+
const cached22 = cache.get(key22);
|
|
209002
|
+
if (cached22) {
|
|
209003
|
+
return cached22;
|
|
209004
209004
|
}
|
|
209005
209005
|
}
|
|
209006
209006
|
const type = getTypeFromFlowType(flowType);
|
|
@@ -211175,10 +211175,10 @@ ${lanes.join("\n")}
|
|
|
211175
211175
|
);
|
|
211176
211176
|
}
|
|
211177
211177
|
const links = getNodeLinks(iife);
|
|
211178
|
-
const
|
|
211178
|
+
const cached2 = links.resolvedSignature;
|
|
211179
211179
|
links.resolvedSignature = anySignature;
|
|
211180
211180
|
const type = indexOfParameter < args.length ? getWidenedLiteralType(checkExpression(args[indexOfParameter])) : parameter.initializer ? void 0 : undefinedWideningType;
|
|
211181
|
-
links.resolvedSignature =
|
|
211181
|
+
links.resolvedSignature = cached2;
|
|
211182
211182
|
return type;
|
|
211183
211183
|
}
|
|
211184
211184
|
const contextualSignature = getContextualSignature(func);
|
|
@@ -211877,8 +211877,8 @@ ${lanes.join("\n")}
|
|
|
211877
211877
|
}
|
|
211878
211878
|
function discriminateContextualTypeByJSXAttributes(node, contextualType) {
|
|
211879
211879
|
const key2 = `D${getNodeId(node)},${getTypeId(contextualType)}`;
|
|
211880
|
-
const
|
|
211881
|
-
if (
|
|
211880
|
+
const cached2 = getCachedType(key2);
|
|
211881
|
+
if (cached2) return cached2;
|
|
211882
211882
|
const jsxChildrenPropertyName = getJsxElementChildrenPropertyName(getJsxNamespaceAt(node));
|
|
211883
211883
|
return setCachedType(
|
|
211884
211884
|
key2,
|
|
@@ -216355,12 +216355,12 @@ ${lanes.join("\n")}
|
|
|
216355
216355
|
}
|
|
216356
216356
|
function getResolvedSignature(node, candidatesOutArray, checkMode) {
|
|
216357
216357
|
const links = getNodeLinks(node);
|
|
216358
|
-
const
|
|
216359
|
-
if (
|
|
216360
|
-
return
|
|
216358
|
+
const cached2 = links.resolvedSignature;
|
|
216359
|
+
if (cached2 && cached2 !== resolvingSignature && !candidatesOutArray) {
|
|
216360
|
+
return cached2;
|
|
216361
216361
|
}
|
|
216362
216362
|
const saveResolutionStart = resolutionStart;
|
|
216363
|
-
if (!
|
|
216363
|
+
if (!cached2) {
|
|
216364
216364
|
resolutionStart = resolutionTargets.length;
|
|
216365
216365
|
}
|
|
216366
216366
|
links.resolvedSignature = resolvingSignature;
|
|
@@ -216372,7 +216372,7 @@ ${lanes.join("\n")}
|
|
|
216372
216372
|
);
|
|
216373
216373
|
resolutionStart = saveResolutionStart;
|
|
216374
216374
|
if (result !== resolvingSignature) {
|
|
216375
|
-
links.resolvedSignature = flowLoopStart === flowLoopCount ? result :
|
|
216375
|
+
links.resolvedSignature = flowLoopStart === flowLoopCount ? result : cached2;
|
|
216376
216376
|
}
|
|
216377
216377
|
return result;
|
|
216378
216378
|
}
|
|
@@ -279842,9 +279842,9 @@ ${lanes.join("\n")}
|
|
|
279842
279842
|
if (!ambientModuleCache) {
|
|
279843
279843
|
ambientModuleCache = /* @__PURE__ */ new Map();
|
|
279844
279844
|
} else {
|
|
279845
|
-
const
|
|
279846
|
-
if (
|
|
279847
|
-
return
|
|
279845
|
+
const cached2 = ambientModuleCache.get(moduleSymbol);
|
|
279846
|
+
if (cached2 !== void 0) {
|
|
279847
|
+
return cached2;
|
|
279848
279848
|
}
|
|
279849
279849
|
}
|
|
279850
279850
|
const declaredModuleSpecifier = stripQuotes3(moduleSymbol.getName());
|
|
@@ -279869,9 +279869,9 @@ ${lanes.join("\n")}
|
|
|
279869
279869
|
if (!sourceFileCache) {
|
|
279870
279870
|
sourceFileCache = /* @__PURE__ */ new Map();
|
|
279871
279871
|
} else {
|
|
279872
|
-
const
|
|
279873
|
-
if (
|
|
279874
|
-
return
|
|
279872
|
+
const cached2 = sourceFileCache.get(sourceFile);
|
|
279873
|
+
if (cached2 !== void 0) {
|
|
279874
|
+
return cached2;
|
|
279875
279875
|
}
|
|
279876
279876
|
}
|
|
279877
279877
|
const packageName = getNodeModulesPackageNameFromFileName(sourceFile.fileName, moduleSpecifierResolutionHost);
|
|
@@ -313192,9 +313192,9 @@ ${newComment.split("\n").map((c2) => ` * ${c2}`).join("\n")}
|
|
|
313192
313192
|
return true;
|
|
313193
313193
|
}
|
|
313194
313194
|
const key2 = getSymbolId(symbol) + "," + getSymbolId(parent2);
|
|
313195
|
-
const
|
|
313196
|
-
if (
|
|
313197
|
-
return
|
|
313195
|
+
const cached2 = cachedResults.get(key2);
|
|
313196
|
+
if (cached2 !== void 0) {
|
|
313197
|
+
return cached2;
|
|
313198
313198
|
}
|
|
313199
313199
|
cachedResults.set(key2, false);
|
|
313200
313200
|
const inherits = !!symbol.declarations && symbol.declarations.some(
|
|
@@ -339627,9 +339627,9 @@ var require_util5 = __commonJS({
|
|
|
339627
339627
|
exports.isDirectorySync = exports.isDirectory = exports.removeUndefinedValuesFromObject = exports.getPropertyByPath = exports.emplace = void 0;
|
|
339628
339628
|
var fs_1 = __importStar3(__require("fs"));
|
|
339629
339629
|
function emplace(map3, key2, fn) {
|
|
339630
|
-
const
|
|
339631
|
-
if (
|
|
339632
|
-
return
|
|
339630
|
+
const cached2 = map3.get(key2);
|
|
339631
|
+
if (cached2 !== void 0) {
|
|
339632
|
+
return cached2;
|
|
339633
339633
|
}
|
|
339634
339634
|
const result = fn();
|
|
339635
339635
|
map3.set(key2, result);
|
|
@@ -349374,9 +349374,9 @@ async function beginFrameCapture(page, options, frameTimeTicks, interval) {
|
|
|
349374
349374
|
buffer = Buffer.from(result.screenshotData, "base64");
|
|
349375
349375
|
lastFrameCache.set(page, buffer);
|
|
349376
349376
|
} else {
|
|
349377
|
-
const
|
|
349378
|
-
if (
|
|
349379
|
-
buffer =
|
|
349377
|
+
const cached2 = lastFrameCache.get(page);
|
|
349378
|
+
if (cached2) {
|
|
349379
|
+
buffer = cached2;
|
|
349380
349380
|
} else {
|
|
349381
349381
|
const fallback2 = await sendBeginFrame(client, {
|
|
349382
349382
|
frameTimeTicks: frameTimeTicks + 1e-3,
|
|
@@ -350739,8 +350739,8 @@ function parseFrameRate(frameRateStr) {
|
|
|
350739
350739
|
return parseFloat(frameRateStr) || 0;
|
|
350740
350740
|
}
|
|
350741
350741
|
async function extractVideoMetadata(filePath) {
|
|
350742
|
-
const
|
|
350743
|
-
if (
|
|
350742
|
+
const cached2 = videoMetadataCache.get(filePath);
|
|
350743
|
+
if (cached2) return cached2;
|
|
350744
350744
|
const probePromise = (async () => {
|
|
350745
350745
|
const stdout = await runFfprobe([
|
|
350746
350746
|
"-v",
|
|
@@ -350782,8 +350782,8 @@ async function extractVideoMetadata(filePath) {
|
|
|
350782
350782
|
return probePromise;
|
|
350783
350783
|
}
|
|
350784
350784
|
async function extractAudioMetadata(filePath) {
|
|
350785
|
-
const
|
|
350786
|
-
if (
|
|
350785
|
+
const cached2 = audioMetadataCache.get(filePath);
|
|
350786
|
+
if (cached2) return cached2;
|
|
350787
350787
|
const probePromise = (async () => {
|
|
350788
350788
|
const stdout = await runFfprobe([
|
|
350789
350789
|
"-v",
|
|
@@ -350815,8 +350815,8 @@ async function extractAudioMetadata(filePath) {
|
|
|
350815
350815
|
return probePromise;
|
|
350816
350816
|
}
|
|
350817
350817
|
async function analyzeKeyframeIntervals(filePath) {
|
|
350818
|
-
const
|
|
350819
|
-
if (
|
|
350818
|
+
const cached2 = keyframeCache.get(filePath);
|
|
350819
|
+
if (cached2) return cached2;
|
|
350820
350820
|
const promise = analyzeKeyframeIntervalsUncached(filePath);
|
|
350821
350821
|
keyframeCache.set(filePath, promise);
|
|
350822
350822
|
promise.catch(() => {
|
|
@@ -351210,10 +351210,10 @@ function createFrameDataUriCache(cacheLimit) {
|
|
|
351210
351210
|
return dataUri;
|
|
351211
351211
|
}
|
|
351212
351212
|
async function get(framePath) {
|
|
351213
|
-
const
|
|
351214
|
-
if (
|
|
351215
|
-
remember(framePath,
|
|
351216
|
-
return
|
|
351213
|
+
const cached2 = cache.get(framePath);
|
|
351214
|
+
if (cached2) {
|
|
351215
|
+
remember(framePath, cached2);
|
|
351216
|
+
return cached2;
|
|
351217
351217
|
}
|
|
351218
351218
|
const existing = inFlight.get(framePath);
|
|
351219
351219
|
if (existing) {
|
|
@@ -353778,8 +353778,8 @@ async function safeCleanup(label, fn, log2 = defaultLogger) {
|
|
|
353778
353778
|
}
|
|
353779
353779
|
}
|
|
353780
353780
|
function getMaxFrameIndex(frameDir) {
|
|
353781
|
-
const
|
|
353782
|
-
if (
|
|
353781
|
+
const cached2 = frameDirMaxIndexCache.get(frameDir);
|
|
353782
|
+
if (cached2 !== void 0) return cached2;
|
|
353783
353783
|
let max = 0;
|
|
353784
353784
|
try {
|
|
353785
353785
|
for (const name of readdirSync6(frameDir)) {
|
|
@@ -359330,8 +359330,8 @@ var init_dist2 = __esm({
|
|
|
359330
359330
|
}
|
|
359331
359331
|
return debug62;
|
|
359332
359332
|
}
|
|
359333
|
-
function extend(namespace,
|
|
359334
|
-
const newDebug = createDebug(this.namespace + (typeof
|
|
359333
|
+
function extend(namespace, delimiter2) {
|
|
359334
|
+
const newDebug = createDebug(this.namespace + (typeof delimiter2 === "undefined" ? ":" : delimiter2) + namespace);
|
|
359335
359335
|
newDebug.log = this.log;
|
|
359336
359336
|
return newDebug;
|
|
359337
359337
|
}
|
|
@@ -399712,9 +399712,9 @@ ${sourceUrlComment}
|
|
|
399712
399712
|
parseRange(range) {
|
|
399713
399713
|
const memoOpts = (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) | (this.options.loose && FLAG_LOOSE);
|
|
399714
399714
|
const memoKey = memoOpts + ":" + range;
|
|
399715
|
-
const
|
|
399716
|
-
if (
|
|
399717
|
-
return
|
|
399715
|
+
const cached2 = cache.get(memoKey);
|
|
399716
|
+
if (cached2) {
|
|
399717
|
+
return cached2;
|
|
399718
399718
|
}
|
|
399719
399719
|
const loose = this.options.loose;
|
|
399720
399720
|
const hr2 = loose ? re2[t2.HYPHENRANGELOOSE] : re2[t2.HYPHENRANGE];
|
|
@@ -407094,10 +407094,10 @@ Closing reason: ${this._closingError.stack}`;
|
|
|
407094
407094
|
// available on the server's operating system." The parser by Apache Commons tries to translate these
|
|
407095
407095
|
// to Unix permissions – this is misleading users and might not even be correct.
|
|
407096
407096
|
};
|
|
407097
|
-
function splitStringOnce(str2,
|
|
407098
|
-
const pos = str2.indexOf(
|
|
407097
|
+
function splitStringOnce(str2, delimiter2) {
|
|
407098
|
+
const pos = str2.indexOf(delimiter2);
|
|
407099
407099
|
const a2 = str2.substr(0, pos);
|
|
407100
|
-
const b2 = str2.substr(pos +
|
|
407100
|
+
const b2 = str2.substr(pos + delimiter2.length);
|
|
407101
407101
|
return [a2, b2];
|
|
407102
407102
|
}
|
|
407103
407103
|
function testLine(line) {
|
|
@@ -458340,10 +458340,10 @@ async function* iterSSEChunks(iterator3) {
|
|
|
458340
458340
|
yield data;
|
|
458341
458341
|
}
|
|
458342
458342
|
}
|
|
458343
|
-
function partition(str2,
|
|
458344
|
-
const index = str2.indexOf(
|
|
458343
|
+
function partition(str2, delimiter2) {
|
|
458344
|
+
const index = str2.indexOf(delimiter2);
|
|
458345
458345
|
if (index !== -1) {
|
|
458346
|
-
return [str2.substring(0, index),
|
|
458346
|
+
return [str2.substring(0, index), delimiter2, str2.substring(index + delimiter2.length)];
|
|
458347
458347
|
}
|
|
458348
458348
|
return [str2, "", ""];
|
|
458349
458349
|
}
|
|
@@ -462204,10 +462204,10 @@ async function* iterSSEChunks2(iterator3) {
|
|
|
462204
462204
|
yield data;
|
|
462205
462205
|
}
|
|
462206
462206
|
}
|
|
462207
|
-
function partition2(str2,
|
|
462208
|
-
const index = str2.indexOf(
|
|
462207
|
+
function partition2(str2, delimiter2) {
|
|
462208
|
+
const index = str2.indexOf(delimiter2);
|
|
462209
462209
|
if (index !== -1) {
|
|
462210
|
-
return [str2.substring(0, index),
|
|
462210
|
+
return [str2.substring(0, index), delimiter2, str2.substring(index + delimiter2.length)];
|
|
462211
462211
|
}
|
|
462212
462212
|
return [str2, "", ""];
|
|
462213
462213
|
}
|
|
@@ -469341,14 +469341,15 @@ async function expectedRootSync(opts) {
|
|
|
469341
469341
|
return { block, totalDurationSec: Number(cursor.toFixed(2)), audioRefs };
|
|
469342
469342
|
}
|
|
469343
469343
|
async function resolveSyncedBeatDuration(opts) {
|
|
469344
|
-
if (opts.sceneDurationSec !== void 0) return Number(opts.sceneDurationSec.toFixed(2));
|
|
469345
469344
|
const storyboardMin = opts.beatDuration ?? 3;
|
|
469346
|
-
|
|
469345
|
+
const reported = opts.sceneDurationSec;
|
|
469346
|
+
if (!opts.narrationPath) return Number((reported ?? storyboardMin).toFixed(2));
|
|
469347
|
+
const probe = opts.probeAudioDuration ?? getAudioDuration;
|
|
469347
469348
|
try {
|
|
469348
|
-
const audioDuration = await
|
|
469349
|
-
return Number(Math.max(storyboardMin, audioDuration + 0.5).toFixed(2));
|
|
469349
|
+
const audioDuration = await probe(join23(opts.projectDir, opts.narrationPath));
|
|
469350
|
+
return Number(Math.max(storyboardMin, reported ?? 0, audioDuration + 0.5).toFixed(2));
|
|
469350
469351
|
} catch {
|
|
469351
|
-
return Number(storyboardMin.toFixed(2));
|
|
469352
|
+
return Number(Math.max(storyboardMin, reported ?? 0).toFixed(2));
|
|
469352
469353
|
}
|
|
469353
469354
|
}
|
|
469354
469355
|
async function resolveProjectBeatDurations(projectDir) {
|
|
@@ -470726,6 +470727,22 @@ var init_chrome3 = __esm({
|
|
|
470726
470727
|
}
|
|
470727
470728
|
});
|
|
470728
470729
|
|
|
470730
|
+
// ../cli/src/commands/_shared/ffmpeg-gate.ts
|
|
470731
|
+
function ffmpegToolsAvailable() {
|
|
470732
|
+
if (testOverride !== null) return testOverride;
|
|
470733
|
+
if (cached === null) cached = commandExists("ffmpeg") && commandExists("ffprobe");
|
|
470734
|
+
return cached;
|
|
470735
|
+
}
|
|
470736
|
+
var testOverride, cached;
|
|
470737
|
+
var init_ffmpeg_gate = __esm({
|
|
470738
|
+
"../cli/src/commands/_shared/ffmpeg-gate.ts"() {
|
|
470739
|
+
"use strict";
|
|
470740
|
+
init_exec_safe();
|
|
470741
|
+
testOverride = null;
|
|
470742
|
+
cached = null;
|
|
470743
|
+
}
|
|
470744
|
+
});
|
|
470745
|
+
|
|
470729
470746
|
// ../cli/src/commands/_shared/scene-audio-scan.ts
|
|
470730
470747
|
import { readFile as readFile15 } from "node:fs/promises";
|
|
470731
470748
|
import { resolve as resolve25 } from "node:path";
|
|
@@ -471047,6 +471064,33 @@ async function executeSceneRender(opts = {}) {
|
|
|
471047
471064
|
error: `Project directory not found: ${projectDir}`
|
|
471048
471065
|
};
|
|
471049
471066
|
}
|
|
471067
|
+
if (!ffmpegToolsAvailable()) {
|
|
471068
|
+
return {
|
|
471069
|
+
success: false,
|
|
471070
|
+
kind: "render",
|
|
471071
|
+
beat: opts.beatId ?? null,
|
|
471072
|
+
code: "FFMPEG_MISSING",
|
|
471073
|
+
error: "FFmpeg (ffmpeg/ffprobe) was not found on PATH; rendering needs it for audio mux and duration checks. Install it (macOS: `brew install ffmpeg`) and retry."
|
|
471074
|
+
};
|
|
471075
|
+
}
|
|
471076
|
+
let autoSyncApplied = false;
|
|
471077
|
+
let autoSyncWarning;
|
|
471078
|
+
if (!opts.beatId && existsSync30(join30(projectDir, "STORYBOARD.md"))) {
|
|
471079
|
+
try {
|
|
471080
|
+
const rootPlan = await createProjectRootSyncPlan({ projectDir });
|
|
471081
|
+
const subPlans = await createSubCompDurationSyncPlans({
|
|
471082
|
+
projectDir,
|
|
471083
|
+
beats: await loadProjectRootSyncBeats(projectDir)
|
|
471084
|
+
});
|
|
471085
|
+
if (rootPlan.changed || subPlans.some((plan) => plan.changed)) {
|
|
471086
|
+
await executeSceneRepair({ projectDir });
|
|
471087
|
+
autoSyncApplied = true;
|
|
471088
|
+
autoSyncWarning = "Narration-synced durations drifted from the composed timeline; root and scene durations were re-synced before rendering (same pass as `vibe build --stage sync`).";
|
|
471089
|
+
}
|
|
471090
|
+
} catch (error) {
|
|
471091
|
+
autoSyncWarning = `Narration drift check skipped: ${error instanceof Error ? error.message : String(error)}`;
|
|
471092
|
+
}
|
|
471093
|
+
}
|
|
471050
471094
|
let root2 = opts.root ?? projectConfig.config.composition.entry;
|
|
471051
471095
|
if (opts.beatId) {
|
|
471052
471096
|
const prepared = await prepareBeatRenderRoot({
|
|
@@ -471163,7 +471207,9 @@ async function executeSceneRender(opts = {}) {
|
|
|
471163
471207
|
format: config4.format,
|
|
471164
471208
|
audioCount,
|
|
471165
471209
|
audioMuxApplied,
|
|
471166
|
-
audioMuxWarning
|
|
471210
|
+
audioMuxWarning,
|
|
471211
|
+
...autoSyncApplied ? { autoSyncApplied } : {},
|
|
471212
|
+
...autoSyncWarning ? { autoSyncWarning } : {}
|
|
471167
471213
|
};
|
|
471168
471214
|
if (opts.revealInFinder) {
|
|
471169
471215
|
try {
|
|
@@ -471424,6 +471470,10 @@ var init_scene_render = __esm({
|
|
|
471424
471470
|
"use strict";
|
|
471425
471471
|
init_dist2();
|
|
471426
471472
|
init_chrome3();
|
|
471473
|
+
init_ffmpeg_gate();
|
|
471474
|
+
init_root_sync();
|
|
471475
|
+
init_sub_comp_duration_sync();
|
|
471476
|
+
init_scene_repair();
|
|
471427
471477
|
init_scene_lint();
|
|
471428
471478
|
init_scene_audio_scan();
|
|
471429
471479
|
init_scene_audio_mux();
|
|
@@ -472874,6 +472924,28 @@ async function executeSceneBuild(opts) {
|
|
|
472874
472924
|
providerResolution: buildPlan.providerResolution,
|
|
472875
472925
|
...result
|
|
472876
472926
|
});
|
|
472927
|
+
if (shouldRunStage(selectedStage, "assets") || shouldRunStage(selectedStage, "sync")) {
|
|
472928
|
+
if (!ffmpegToolsAvailable()) {
|
|
472929
|
+
return finishBuildResult({
|
|
472930
|
+
success: false,
|
|
472931
|
+
phase: "failed",
|
|
472932
|
+
mode,
|
|
472933
|
+
selectedStage,
|
|
472934
|
+
code: "FFMPEG_MISSING",
|
|
472935
|
+
error: "ffprobe (part of FFmpeg) was not found on PATH. Narration-synced durations cannot be computed without it.",
|
|
472936
|
+
message: "ffprobe not found on PATH.",
|
|
472937
|
+
suggestion: "Install FFmpeg (macOS: `brew install ffmpeg`), then re-run the build.",
|
|
472938
|
+
recoverable: true,
|
|
472939
|
+
beats: [],
|
|
472940
|
+
stageReports,
|
|
472941
|
+
warnings,
|
|
472942
|
+
retryWith,
|
|
472943
|
+
status: "failed",
|
|
472944
|
+
currentStage: "assets",
|
|
472945
|
+
totalLatencyMs: Date.now() - startedAt
|
|
472946
|
+
});
|
|
472947
|
+
}
|
|
472948
|
+
}
|
|
472877
472949
|
if (!buildPlan.validation.ok) {
|
|
472878
472950
|
let invalidBeats = [];
|
|
472879
472951
|
if (existsSync35(storyboardPath)) {
|
|
@@ -474545,6 +474617,7 @@ var init_scene_build = __esm({
|
|
|
474545
474617
|
import_dotenv3 = __toESM(require_main(), 1);
|
|
474546
474618
|
init_dist();
|
|
474547
474619
|
init_audio();
|
|
474620
|
+
init_ffmpeg_gate();
|
|
474548
474621
|
init_concurrency();
|
|
474549
474622
|
init_compose_scenes_skills();
|
|
474550
474623
|
init_compose_prompts();
|
|
@@ -488653,10 +488726,13 @@ function mapRenderResultToToolResult(result, projectDir) {
|
|
|
488653
488726
|
format: result.format,
|
|
488654
488727
|
audioCount: result.audioCount,
|
|
488655
488728
|
audioMuxApplied: result.audioMuxApplied,
|
|
488656
|
-
audioMuxWarning: result.audioMuxWarning
|
|
488729
|
+
audioMuxWarning: result.audioMuxWarning,
|
|
488730
|
+
...result.autoSyncApplied ? { autoSyncApplied: true } : {},
|
|
488731
|
+
...result.autoSyncWarning ? { autoSyncWarning: result.autoSyncWarning } : {}
|
|
488657
488732
|
},
|
|
488658
488733
|
humanLines: [
|
|
488659
488734
|
`\u2705 Render complete: ${result.absoluteOutputPath ?? result.outputPath}`,
|
|
488735
|
+
...result.autoSyncApplied ? [` auto-sync: narration-synced durations were re-applied before render`] : [],
|
|
488660
488736
|
` duration: ${((result.durationMs ?? 0) / 1e3).toFixed(1)}s`,
|
|
488661
488737
|
` frames: ${result.framesRendered ?? "?"}${result.totalFrames ? ` / ${result.totalFrames}` : ""}`,
|
|
488662
488738
|
` config: ${result.fps}fps \xB7 ${result.quality} \xB7 ${result.format}`,
|
|
@@ -498017,8 +498093,21 @@ This creates a music video-style edit where cuts happen in rhythm with the music
|
|
|
498017
498093
|
}
|
|
498018
498094
|
|
|
498019
498095
|
// src/instructions.ts
|
|
498020
|
-
import { mkdirSync as mkdirSync13 } from "node:fs";
|
|
498021
|
-
import { isAbsolute as isAbsolute9, resolve as resolve78 } from "node:path";
|
|
498096
|
+
import { existsSync as existsSync65, mkdirSync as mkdirSync13 } from "node:fs";
|
|
498097
|
+
import { delimiter, isAbsolute as isAbsolute9, resolve as resolve78 } from "node:path";
|
|
498098
|
+
var DEFAULT_EXTRA_PATH_DIRS = process.platform === "darwin" ? ["/opt/homebrew/bin", "/usr/local/bin", "/opt/local/bin"] : ["/usr/local/bin"];
|
|
498099
|
+
function ensureSystemPath(env4 = process.env, extraDirs = DEFAULT_EXTRA_PATH_DIRS) {
|
|
498100
|
+
const current = (env4.PATH ?? "").split(delimiter).filter(Boolean);
|
|
498101
|
+
const added = [];
|
|
498102
|
+
for (const dir of extraDirs) {
|
|
498103
|
+
if (!current.includes(dir) && existsSync65(dir)) {
|
|
498104
|
+
current.push(dir);
|
|
498105
|
+
added.push(dir);
|
|
498106
|
+
}
|
|
498107
|
+
}
|
|
498108
|
+
if (added.length > 0) env4.PATH = current.join(delimiter);
|
|
498109
|
+
return added;
|
|
498110
|
+
}
|
|
498022
498111
|
function scrubUnresolvedUserConfigEnv(env4 = process.env) {
|
|
498023
498112
|
const removed = [];
|
|
498024
498113
|
for (const [key2, value] of Object.entries(env4)) {
|
|
@@ -498057,7 +498146,8 @@ function buildServerInstructions(cwd = resolveServerWorkspaceRoot()) {
|
|
|
498057
498146
|
"When creating projects with init, use a project name or workspace-relative path under the workspace root.",
|
|
498058
498147
|
"Do not create projects in /tmp, /home/claude, /workspace, or other synthetic roots unless the user explicitly asks.",
|
|
498059
498148
|
"Before high or very-high cost provider work, run a dry-run or plan when available and ask the user to confirm provider spend.",
|
|
498060
|
-
"When the user's request leaves them unspecified, ask the user before building instead of silently picking defaults: narration provider (kokoro = free local, elevenlabs = cloud credits), backdrop image generation (paid; skipping is free), and visual style (list options via scene_list_styles). Present the choices and wait for the answer."
|
|
498149
|
+
"When the user's request leaves them unspecified, ask the user before building instead of silently picking defaults: narration provider (kokoro = free local, elevenlabs = cloud credits), backdrop image generation (paid; skipping is free), and visual style (list options via scene_list_styles). Present the choices and wait for the answer.",
|
|
498150
|
+
"Narration and backdrop choices are independent \u2014 kokoro narration with OpenAI backdrops is a common combination. Pass each answer explicitly to build (ttsProvider plus skipBackdrop/imageProvider); never let one choice imply the other."
|
|
498061
498151
|
].join("\n");
|
|
498062
498152
|
}
|
|
498063
498153
|
|
|
@@ -498078,11 +498168,12 @@ console.info = (...args) => console.error(...args);
|
|
|
498078
498168
|
console.debug = (...args) => console.error(...args);
|
|
498079
498169
|
scrubUnresolvedUserConfigEnv();
|
|
498080
498170
|
applyWorkspaceEnv();
|
|
498171
|
+
ensureSystemPath();
|
|
498081
498172
|
var server2 = new Server(
|
|
498082
498173
|
{
|
|
498083
498174
|
name: "vibeframe",
|
|
498084
498175
|
// Stamped with the package version by build.js at bundle time.
|
|
498085
|
-
version: "0.111.
|
|
498176
|
+
version: "0.111.3"
|
|
498086
498177
|
},
|
|
498087
498178
|
{
|
|
498088
498179
|
capabilities: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibeframe/mcp-server",
|
|
3
|
-
"version": "0.111.
|
|
3
|
+
"version": "0.111.3",
|
|
4
4
|
"description": "VibeFrame MCP Server - AI-native video editing via Model Context Protocol",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -60,8 +60,8 @@
|
|
|
60
60
|
"tsx": "^4.21.0",
|
|
61
61
|
"typescript": "^5.3.3",
|
|
62
62
|
"vitest": "^1.2.2",
|
|
63
|
-
"@vibeframe/cli": "0.111.
|
|
64
|
-
"@vibeframe/core": "0.111.
|
|
63
|
+
"@vibeframe/cli": "0.111.3",
|
|
64
|
+
"@vibeframe/core": "0.111.3"
|
|
65
65
|
},
|
|
66
66
|
"engines": {
|
|
67
67
|
"node": ">=20"
|