@vibeframe/cli 0.106.5 → 0.106.7
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.
|
@@ -41,7 +41,7 @@ export interface HostDoctorResult {
|
|
|
41
41
|
}
|
|
42
42
|
export declare function hostDefinitions(_projectDir?: string): HostDefinition[];
|
|
43
43
|
export declare function resolveHostSelection(selection: HostSelection): HostSetupId[];
|
|
44
|
-
export declare function renderHostSnippet(host: HostDefinition,
|
|
44
|
+
export declare function renderHostSnippet(host: HostDefinition, projectDir: string): string;
|
|
45
45
|
export declare function claudeCodeAddCommand(): string;
|
|
46
46
|
export declare function planHostSetup(host: HostDefinition, projectDir: string, opts: {
|
|
47
47
|
write?: boolean;
|
package/dist/index.js
CHANGED
|
@@ -67076,7 +67076,7 @@ function summariseLint(result) {
|
|
|
67076
67076
|
fixed: result.fixed
|
|
67077
67077
|
};
|
|
67078
67078
|
}
|
|
67079
|
-
var SCENE_PRESETS2, sceneStylesSchema, sceneStylesTool, sceneInitSchema, sceneInitTool, sceneAddSchema, sceneAddTool, sceneLintSchema, sceneLintTool, sceneRepairSchema, sceneRepairTool, sceneRenderSchema, sceneRenderTool, sceneBuildSchema, sceneBuildTool, sceneInstallSkillSchema, sceneInstallSkillTool, sceneComposePromptsSchema, sceneComposePromptsTool, sceneTools;
|
|
67079
|
+
var SCENE_PRESETS2, PROJECT_DIR_DESCRIPTION, INIT_DIR_DESCRIPTION, sceneStylesSchema, sceneStylesTool, sceneInitSchema, sceneInitTool, sceneAddSchema, sceneAddTool, sceneLintSchema, sceneLintTool, sceneRepairSchema, sceneRepairTool, sceneRenderSchema, sceneRenderTool, sceneBuildSchema, sceneBuildTool, sceneInstallSkillSchema, sceneInstallSkillTool, sceneComposePromptsSchema, sceneComposePromptsTool, sceneTools;
|
|
67080
67080
|
var init_scene2 = __esm({
|
|
67081
67081
|
"src/tools/manifest/scene.ts"() {
|
|
67082
67082
|
"use strict";
|
|
@@ -67099,6 +67099,8 @@ var init_scene2 = __esm({
|
|
|
67099
67099
|
"kinetic-type",
|
|
67100
67100
|
"product-shot"
|
|
67101
67101
|
];
|
|
67102
|
+
PROJECT_DIR_DESCRIPTION = "Project directory. Defaults to the surface's cwd; in MCP hosts, relative paths resolve under the configured server workspace.";
|
|
67103
|
+
INIT_DIR_DESCRIPTION = "Project directory to create. Prefer a project name or workspace-relative path; in MCP hosts, relative paths resolve under the configured server workspace. Do not use /tmp or /home/claude unless the user explicitly asks.";
|
|
67102
67104
|
sceneStylesSchema = external_exports.object({
|
|
67103
67105
|
name: external_exports.string().optional().describe("Style name or slug (e.g. 'Swiss Pulse', 'swiss-pulse'). Omit to list all 8.")
|
|
67104
67106
|
});
|
|
@@ -67158,7 +67160,7 @@ var init_scene2 = __esm({
|
|
|
67158
67160
|
}
|
|
67159
67161
|
});
|
|
67160
67162
|
sceneInitSchema = external_exports.object({
|
|
67161
|
-
dir: external_exports.string().describe(
|
|
67163
|
+
dir: external_exports.string().describe(INIT_DIR_DESCRIPTION),
|
|
67162
67164
|
name: external_exports.string().optional().describe("Project name. Defaults to the directory basename."),
|
|
67163
67165
|
aspect: external_exports.enum(["16:9", "9:16", "1:1", "4:5"]).optional().describe("Aspect ratio. Default 16:9."),
|
|
67164
67166
|
duration: external_exports.number().optional().describe("Default root composition duration in seconds. Default 10.")
|
|
@@ -67205,7 +67207,7 @@ var init_scene2 = __esm({
|
|
|
67205
67207
|
visuals: external_exports.string().optional().describe("Image prompt \u2014 generates assets/scene-<id>.png via the configured image provider."),
|
|
67206
67208
|
headline: external_exports.string().optional().describe("Visible headline text. Defaults to the humanised scene name."),
|
|
67207
67209
|
kicker: external_exports.string().optional().describe("Small label above the headline (used by 'explainer' and 'product-shot' presets)."),
|
|
67208
|
-
projectDir: external_exports.string().optional().describe(
|
|
67210
|
+
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION),
|
|
67209
67211
|
insertInto: external_exports.string().optional().describe("Root composition file (relative to projectDir). Default 'index.html'."),
|
|
67210
67212
|
imageProvider: external_exports.enum(["gemini", "openai"]).optional().describe("Image provider for visuals. Default 'gemini'."),
|
|
67211
67213
|
voice: external_exports.string().optional().describe("ElevenLabs voice id or name."),
|
|
@@ -67266,7 +67268,7 @@ var init_scene2 = __esm({
|
|
|
67266
67268
|
}
|
|
67267
67269
|
});
|
|
67268
67270
|
sceneLintSchema = external_exports.object({
|
|
67269
|
-
projectDir: external_exports.string().optional().describe(
|
|
67271
|
+
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION),
|
|
67270
67272
|
root: external_exports.string().optional().describe("Root composition file relative to projectDir. Default 'index.html'."),
|
|
67271
67273
|
fix: external_exports.boolean().optional().describe('Apply mechanical auto-fixes (currently: missing class="clip").')
|
|
67272
67274
|
});
|
|
@@ -67303,7 +67305,7 @@ var init_scene2 = __esm({
|
|
|
67303
67305
|
}
|
|
67304
67306
|
});
|
|
67305
67307
|
sceneRepairSchema = external_exports.object({
|
|
67306
|
-
projectDir: external_exports.string().optional().describe(
|
|
67308
|
+
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION),
|
|
67307
67309
|
root: external_exports.string().optional().describe("Root composition file relative to projectDir. Default 'index.html'."),
|
|
67308
67310
|
dryRun: external_exports.boolean().optional().describe("Preview deterministic repairs without writing files.")
|
|
67309
67311
|
});
|
|
@@ -67332,7 +67334,7 @@ var init_scene2 = __esm({
|
|
|
67332
67334
|
}
|
|
67333
67335
|
});
|
|
67334
67336
|
sceneRenderSchema = external_exports.object({
|
|
67335
|
-
projectDir: external_exports.string().optional().describe(
|
|
67337
|
+
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION),
|
|
67336
67338
|
root: external_exports.string().optional().describe("Root composition file relative to projectDir. Default 'index.html'."),
|
|
67337
67339
|
beat: external_exports.string().optional().describe("Render only one storyboard beat using a temporary root."),
|
|
67338
67340
|
output: external_exports.string().optional().describe("Output file path (relative paths resolve against projectDir)."),
|
|
@@ -67387,7 +67389,7 @@ var init_scene2 = __esm({
|
|
|
67387
67389
|
});
|
|
67388
67390
|
sceneBuildSchema = external_exports.object({
|
|
67389
67391
|
projectDir: external_exports.string().optional().describe(
|
|
67390
|
-
"Project directory containing STORYBOARD.md, DESIGN.md, index.html. Defaults to the surface's cwd."
|
|
67392
|
+
"Project directory containing STORYBOARD.md, DESIGN.md, index.html. Defaults to the surface's cwd; in MCP hosts, relative paths resolve under the configured server workspace."
|
|
67391
67393
|
),
|
|
67392
67394
|
stage: external_exports.enum(["assets", "compose", "sync", "render", "all"]).optional().describe("Build stage to run. Default all."),
|
|
67393
67395
|
beat: external_exports.string().optional().describe("Restrict asset/compose work to one beat id."),
|
|
@@ -67502,7 +67504,7 @@ var init_scene2 = __esm({
|
|
|
67502
67504
|
});
|
|
67503
67505
|
sceneInstallSkillSchema = external_exports.object({
|
|
67504
67506
|
projectDir: external_exports.string().describe(
|
|
67505
|
-
"Project directory containing STORYBOARD.md / DESIGN.md. Required to keep cross-host calls explicit
|
|
67507
|
+
"Project directory containing STORYBOARD.md / DESIGN.md. Required to keep cross-host calls explicit; in MCP hosts, relative paths resolve under the configured server workspace."
|
|
67506
67508
|
),
|
|
67507
67509
|
host: external_exports.enum(["claude-code", "cursor", "auto", "all"]).optional().describe(
|
|
67508
67510
|
"Host layout target. 'auto' (default) detects installed agent hosts; 'all' writes every layout; 'claude-code' / 'cursor' force a single host. Codex / Aider read the universal SKILL.md via AGENTS.md so don't need a host-specific layout."
|
|
@@ -67552,7 +67554,7 @@ var init_scene2 = __esm({
|
|
|
67552
67554
|
});
|
|
67553
67555
|
sceneComposePromptsSchema = external_exports.object({
|
|
67554
67556
|
projectDir: external_exports.string().describe(
|
|
67555
|
-
"Project directory containing STORYBOARD.md / DESIGN.md. Required to keep cross-host calls explicit."
|
|
67557
|
+
"Project directory containing STORYBOARD.md / DESIGN.md. Required to keep cross-host calls explicit; in MCP hosts, relative paths resolve under the configured server workspace."
|
|
67556
67558
|
),
|
|
67557
67559
|
beat: external_exports.string().optional().describe(
|
|
67558
67560
|
"Restrict the plan to a single beat by id (e.g. 'hook', '1'). Omit to emit every beat in the storyboard."
|
|
@@ -68241,7 +68243,7 @@ var init_ai_suggest_edit = __esm({
|
|
|
68241
68243
|
|
|
68242
68244
|
// src/tools/manifest/inspect.ts
|
|
68243
68245
|
import { resolve as resolve75 } from "node:path";
|
|
68244
|
-
var inspectProjectTool, inspectRenderTool, analyzeMediaTool, analyzeVideoTool, analyzeReviewTool, analyzeSuggestTool, inspectTools;
|
|
68246
|
+
var PROJECT_DIR_DESCRIPTION2, inspectProjectTool, inspectRenderTool, analyzeMediaTool, analyzeVideoTool, analyzeReviewTool, analyzeSuggestTool, inspectTools;
|
|
68245
68247
|
var init_inspect = __esm({
|
|
68246
68248
|
"src/tools/manifest/inspect.ts"() {
|
|
68247
68249
|
"use strict";
|
|
@@ -68252,13 +68254,14 @@ var init_inspect = __esm({
|
|
|
68252
68254
|
init_ai_suggest_edit();
|
|
68253
68255
|
init_scene_inspect();
|
|
68254
68256
|
init_render_inspect();
|
|
68257
|
+
PROJECT_DIR_DESCRIPTION2 = "Project directory. Defaults to the surface's cwd; in MCP hosts, relative paths resolve under the configured server workspace.";
|
|
68255
68258
|
inspectProjectTool = defineTool({
|
|
68256
68259
|
name: "inspect_project",
|
|
68257
68260
|
category: "analyze",
|
|
68258
68261
|
cost: "free",
|
|
68259
68262
|
description: "Local project inspection: checks STORYBOARD.md, DESIGN.md, config, build-report, scene lint, composition files, and referenced assets. Writes review-report.json by default.",
|
|
68260
68263
|
schema: external_exports.object({
|
|
68261
|
-
projectDir: external_exports.string().optional().describe(
|
|
68264
|
+
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION2),
|
|
68262
68265
|
beat: external_exports.string().optional().describe("Inspect only one storyboard beat where beat-scoped checks apply."),
|
|
68263
68266
|
outputPath: external_exports.string().optional().describe("Optional review report path. Defaults to <project>/review-report.json."),
|
|
68264
68267
|
report: external_exports.boolean().optional().describe("Write review-report.json. Default true.")
|
|
@@ -68273,7 +68276,11 @@ var init_inspect = __esm({
|
|
|
68273
68276
|
});
|
|
68274
68277
|
return {
|
|
68275
68278
|
success: result.status !== "fail",
|
|
68276
|
-
data:
|
|
68279
|
+
data: {
|
|
68280
|
+
...result,
|
|
68281
|
+
workingDirectory: ctx.workingDirectory,
|
|
68282
|
+
projectDir
|
|
68283
|
+
},
|
|
68277
68284
|
error: result.status === "fail" ? `${result.issues.filter((issue) => issue.severity === "error").length} project inspection error(s)` : void 0,
|
|
68278
68285
|
humanLines: [
|
|
68279
68286
|
`${result.status === "pass" ? "\u2705" : result.status === "warn" ? "\u26A0\uFE0F" : "\u274C"} Project inspection ${result.status} \u2014 score ${result.score}/100`,
|
|
@@ -68288,7 +68295,7 @@ var init_inspect = __esm({
|
|
|
68288
68295
|
cost: "low",
|
|
68289
68296
|
description: "Render inspection: runs cheap local video checks by default, optionally adds Gemini AI review with ai: true, and writes review-report.json by default.",
|
|
68290
68297
|
schema: external_exports.object({
|
|
68291
|
-
projectDir: external_exports.string().optional().describe(
|
|
68298
|
+
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION2),
|
|
68292
68299
|
beat: external_exports.string().optional().describe("Inspect a render for one storyboard beat."),
|
|
68293
68300
|
videoPath: external_exports.string().optional().describe("Rendered video path. Defaults to build-report outputPath or latest renders/* video."),
|
|
68294
68301
|
outputPath: external_exports.string().optional().describe("Optional review report path. Defaults to <project>/review-report.json."),
|
|
@@ -68311,7 +68318,11 @@ var init_inspect = __esm({
|
|
|
68311
68318
|
});
|
|
68312
68319
|
return {
|
|
68313
68320
|
success: true,
|
|
68314
|
-
data:
|
|
68321
|
+
data: {
|
|
68322
|
+
...result2,
|
|
68323
|
+
workingDirectory: ctx.workingDirectory,
|
|
68324
|
+
projectDir
|
|
68325
|
+
},
|
|
68315
68326
|
humanLines: [
|
|
68316
68327
|
`Render inspection dry-run \u2014 ${result2.videoPath ? "render found" : "render missing"}`,
|
|
68317
68328
|
...result2.reportPath ? [`report: ${result2.reportPath}`] : []
|
|
@@ -68329,7 +68340,11 @@ var init_inspect = __esm({
|
|
|
68329
68340
|
});
|
|
68330
68341
|
return {
|
|
68331
68342
|
success: result.status !== "fail",
|
|
68332
|
-
data:
|
|
68343
|
+
data: {
|
|
68344
|
+
...result,
|
|
68345
|
+
workingDirectory: ctx.workingDirectory,
|
|
68346
|
+
projectDir
|
|
68347
|
+
},
|
|
68333
68348
|
error: result.status === "fail" ? `${result.issues.filter((issue) => issue.severity === "error").length} render inspection error(s)` : void 0,
|
|
68334
68349
|
humanLines: [
|
|
68335
68350
|
`${result.status === "pass" ? "\u2705" : result.status === "warn" ? "\u26A0\uFE0F" : "\u274C"} Render inspection ${result.status} \u2014 score ${result.score}/100`,
|
|
@@ -68713,7 +68728,7 @@ var init_generate2 = __esm({
|
|
|
68713
68728
|
schema: external_exports.object({
|
|
68714
68729
|
description: external_exports.string().describe("Background description / image prompt."),
|
|
68715
68730
|
aspect: external_exports.enum(["16:9", "9:16", "1:1"]).optional().describe("Aspect ratio. Default '16:9'."),
|
|
68716
|
-
output: external_exports.string().optional().describe("Output PNG path. Relative paths resolve against the surface's cwd.")
|
|
68731
|
+
output: external_exports.string().optional().describe("Output PNG path. Relative paths resolve against the surface's cwd; in MCP hosts, that is the configured server workspace.")
|
|
68717
68732
|
}),
|
|
68718
68733
|
async execute(args) {
|
|
68719
68734
|
const result = await executeBackground(args);
|
|
@@ -68920,7 +68935,7 @@ async function readStoryboard2(projectDir) {
|
|
|
68920
68935
|
if (!existsSync54(path2)) return null;
|
|
68921
68936
|
return { path: path2, markdown: await readFile49(path2, "utf-8") };
|
|
68922
68937
|
}
|
|
68923
|
-
var projectDirSchema, storyboardListTool, storyboardValidateTool, storyboardGetTool, storyboardSetTool, storyboardMoveTool, storyboardReviseTool, planTool, storyboardTools;
|
|
68938
|
+
var PROJECT_DIR_DESCRIPTION3, projectDirSchema, storyboardListTool, storyboardValidateTool, storyboardGetTool, storyboardSetTool, storyboardMoveTool, storyboardReviseTool, planTool, storyboardTools;
|
|
68924
68939
|
var init_storyboard2 = __esm({
|
|
68925
68940
|
"src/tools/manifest/storyboard.ts"() {
|
|
68926
68941
|
"use strict";
|
|
@@ -68930,8 +68945,9 @@ var init_storyboard2 = __esm({
|
|
|
68930
68945
|
init_storyboard_edit();
|
|
68931
68946
|
init_storyboard_revise();
|
|
68932
68947
|
init_build_plan();
|
|
68948
|
+
PROJECT_DIR_DESCRIPTION3 = "Project directory. Defaults to the surface's cwd; in MCP hosts, relative paths resolve under the configured server workspace.";
|
|
68933
68949
|
projectDirSchema = external_exports.object({
|
|
68934
|
-
projectDir: external_exports.string().optional().describe(
|
|
68950
|
+
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION3)
|
|
68935
68951
|
});
|
|
68936
68952
|
storyboardListTool = defineTool({
|
|
68937
68953
|
name: "storyboard_list",
|
|
@@ -68995,7 +69011,7 @@ var init_storyboard2 = __esm({
|
|
|
68995
69011
|
cost: "free",
|
|
68996
69012
|
description: "Return one STORYBOARD.md beat as structured data.",
|
|
68997
69013
|
schema: external_exports.object({
|
|
68998
|
-
projectDir: external_exports.string().optional().describe(
|
|
69014
|
+
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
|
|
68999
69015
|
beat: external_exports.string().describe("Beat id to return.")
|
|
69000
69016
|
}),
|
|
69001
69017
|
async execute(args, ctx) {
|
|
@@ -69017,7 +69033,7 @@ var init_storyboard2 = __esm({
|
|
|
69017
69033
|
cost: "free",
|
|
69018
69034
|
description: "Set or unset one cue on one beat in STORYBOARD.md.",
|
|
69019
69035
|
schema: external_exports.object({
|
|
69020
|
-
projectDir: external_exports.string().optional().describe(
|
|
69036
|
+
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
|
|
69021
69037
|
beat: external_exports.string().describe("Beat id to mutate."),
|
|
69022
69038
|
key: external_exports.string().describe("Cue key to set."),
|
|
69023
69039
|
value: external_exports.string().optional().describe("Cue value. Required unless unset is true."),
|
|
@@ -69053,7 +69069,7 @@ var init_storyboard2 = __esm({
|
|
|
69053
69069
|
cost: "free",
|
|
69054
69070
|
description: "Move one beat after another beat in STORYBOARD.md.",
|
|
69055
69071
|
schema: external_exports.object({
|
|
69056
|
-
projectDir: external_exports.string().optional().describe(
|
|
69072
|
+
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
|
|
69057
69073
|
beat: external_exports.string().describe("Beat id to move."),
|
|
69058
69074
|
after: external_exports.string().describe("Beat id that should precede the moved beat.")
|
|
69059
69075
|
}),
|
|
@@ -69083,7 +69099,7 @@ var init_storyboard2 = __esm({
|
|
|
69083
69099
|
cost: "low",
|
|
69084
69100
|
description: "Revise an existing STORYBOARD.md from a natural-language request. Reads project context, validates the revised storyboard, and writes unless dryRun is true.",
|
|
69085
69101
|
schema: external_exports.object({
|
|
69086
|
-
projectDir: external_exports.string().optional().describe(
|
|
69102
|
+
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
|
|
69087
69103
|
request: external_exports.string().describe("Revision request, e.g. 'make the hook punchier and shorten to 30 seconds'."),
|
|
69088
69104
|
durationSec: external_exports.number().optional().describe("Target total duration in seconds."),
|
|
69089
69105
|
composer: external_exports.enum(["claude", "openai", "gemini"]).optional().describe("Revision LLM provider. Defaults to project config or available API keys."),
|
|
@@ -69114,7 +69130,7 @@ var init_storyboard2 = __esm({
|
|
|
69114
69130
|
cost: "free",
|
|
69115
69131
|
description: "Read STORYBOARD.md and return the build plan, missing artifacts, provider needs, and estimated cost.",
|
|
69116
69132
|
schema: external_exports.object({
|
|
69117
|
-
projectDir: external_exports.string().optional().describe(
|
|
69133
|
+
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
|
|
69118
69134
|
stage: external_exports.enum(["assets", "compose", "sync", "render", "all"]).optional().describe("Stage to plan. Default all."),
|
|
69119
69135
|
beat: external_exports.string().optional().describe("Restrict the plan to one beat id."),
|
|
69120
69136
|
mode: external_exports.enum(["agent", "batch", "auto"]).optional().describe("Build mode. Default auto."),
|
|
@@ -71673,13 +71689,14 @@ var init_walkthrough = __esm({
|
|
|
71673
71689
|
|
|
71674
71690
|
// src/tools/manifest/status.ts
|
|
71675
71691
|
import { resolve as resolve82 } from "node:path";
|
|
71676
|
-
var statusJobTool, statusProjectTool, statusTools;
|
|
71692
|
+
var PROJECT_DIR_DESCRIPTION4, statusJobTool, statusProjectTool, statusTools;
|
|
71677
71693
|
var init_status = __esm({
|
|
71678
71694
|
"src/tools/manifest/status.ts"() {
|
|
71679
71695
|
"use strict";
|
|
71680
71696
|
init_zod();
|
|
71681
71697
|
init_define_tool();
|
|
71682
71698
|
init_status_jobs();
|
|
71699
|
+
PROJECT_DIR_DESCRIPTION4 = "Project directory. Defaults to the surface's cwd; in MCP hosts, relative paths resolve under the configured server workspace.";
|
|
71683
71700
|
statusJobTool = defineTool({
|
|
71684
71701
|
name: "status_job",
|
|
71685
71702
|
category: "status",
|
|
@@ -71687,7 +71704,7 @@ var init_status = __esm({
|
|
|
71687
71704
|
description: "Read one local async job record and optionally refresh supported provider status. Supports Runway/Kling video and Replicate music live checks.",
|
|
71688
71705
|
schema: external_exports.object({
|
|
71689
71706
|
jobId: external_exports.string().describe("Local job id returned by a no-wait command."),
|
|
71690
|
-
projectDir: external_exports.string().optional().describe("Project directory containing .vibeframe/jobs. Defaults to nearest project root."),
|
|
71707
|
+
projectDir: external_exports.string().optional().describe("Project directory containing .vibeframe/jobs. Defaults to nearest project root; in MCP hosts, relative paths resolve under the configured server workspace."),
|
|
71691
71708
|
refresh: external_exports.boolean().optional().describe("Call provider status APIs when supported. Default true."),
|
|
71692
71709
|
wait: external_exports.boolean().optional().describe("Wait for completion when supported."),
|
|
71693
71710
|
output: external_exports.string().optional().describe("Download result media to this path when complete.")
|
|
@@ -71721,7 +71738,7 @@ var init_status = __esm({
|
|
|
71721
71738
|
cost: "free",
|
|
71722
71739
|
description: "Summarize build-report.json, review-report.json, and local async job records for a VibeFrame project.",
|
|
71723
71740
|
schema: external_exports.object({
|
|
71724
|
-
projectDir: external_exports.string().optional().describe(
|
|
71741
|
+
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION4),
|
|
71725
71742
|
refresh: external_exports.boolean().optional().describe("Refresh active supported jobs before summarizing. Default false.")
|
|
71726
71743
|
}),
|
|
71727
71744
|
async execute(args, ctx) {
|
|
@@ -71729,7 +71746,11 @@ var init_status = __esm({
|
|
|
71729
71746
|
const result = await inspectProjectStatus(projectDir, { refresh: args.refresh === true });
|
|
71730
71747
|
return {
|
|
71731
71748
|
success: true,
|
|
71732
|
-
data:
|
|
71749
|
+
data: {
|
|
71750
|
+
...result,
|
|
71751
|
+
workingDirectory: ctx.workingDirectory,
|
|
71752
|
+
projectDir
|
|
71753
|
+
},
|
|
71733
71754
|
humanLines: [
|
|
71734
71755
|
`Project status: ${result.status} (${result.currentStage}), ${result.jobs.active} active job(s), ${result.jobs.failed} failed job(s)`,
|
|
71735
71756
|
...result.build ? [`build: ${result.build.phase ?? "unknown"}`] : [],
|
|
@@ -72007,7 +72028,7 @@ init_source();
|
|
|
72007
72028
|
// package.json
|
|
72008
72029
|
var package_default = {
|
|
72009
72030
|
name: "@vibeframe/cli",
|
|
72010
|
-
version: "0.106.
|
|
72031
|
+
version: "0.106.7",
|
|
72011
72032
|
description: "VibeFrame CLI - agentic video workflow runtime",
|
|
72012
72033
|
private: false,
|
|
72013
72034
|
license: "MIT",
|
|
@@ -80681,9 +80702,23 @@ function resolveHostSelection(selection) {
|
|
|
80681
80702
|
if (selection === "claude") return ["claude-code", "claude-desktop"];
|
|
80682
80703
|
return [selection];
|
|
80683
80704
|
}
|
|
80684
|
-
function
|
|
80705
|
+
function vibeframeMcpJson(host, projectDir) {
|
|
80706
|
+
if (host.id !== "claude-desktop") return { ...VIBEFRAME_MCP_JSON };
|
|
80707
|
+
const workspace = resolve53(projectDir);
|
|
80708
|
+
if (process.platform === "win32") {
|
|
80709
|
+
return {
|
|
80710
|
+
command: "cmd.exe",
|
|
80711
|
+
args: ["/d", "/s", "/c", `cd /d ${cmdQuote(workspace)} && npx -y @vibeframe/mcp-server`]
|
|
80712
|
+
};
|
|
80713
|
+
}
|
|
80714
|
+
return {
|
|
80715
|
+
command: "bash",
|
|
80716
|
+
args: ["-lc", `cd ${shellQuote(workspace)} && exec npx -y @vibeframe/mcp-server`]
|
|
80717
|
+
};
|
|
80718
|
+
}
|
|
80719
|
+
function renderHostSnippet(host, projectDir) {
|
|
80685
80720
|
if (host.configKind === "codex-toml") return CODEX_MCP_BLOCK.trimEnd();
|
|
80686
|
-
return JSON.stringify({ mcpServers: { vibeframe:
|
|
80721
|
+
return JSON.stringify({ mcpServers: { vibeframe: vibeframeMcpJson(host, projectDir) } }, null, 2);
|
|
80687
80722
|
}
|
|
80688
80723
|
function claudeCodeAddCommand() {
|
|
80689
80724
|
return "claude mcp add vibeframe --scope project -- npx -y @vibeframe/mcp-server";
|
|
@@ -80712,6 +80747,7 @@ async function planHostSetup(host, projectDir, opts) {
|
|
|
80712
80747
|
}
|
|
80713
80748
|
try {
|
|
80714
80749
|
const action = host.configKind === "codex-toml" ? await mergeCodexToml(configPath, { force: opts.force === true }) : await mergeMcpJson(configPath, {
|
|
80750
|
+
server: vibeframeMcpJson(host, projectDir),
|
|
80715
80751
|
force: opts.force === true,
|
|
80716
80752
|
backup: host.id === "claude-desktop"
|
|
80717
80753
|
});
|
|
@@ -80737,7 +80773,18 @@ async function inspectHost(host, projectDir) {
|
|
|
80737
80773
|
if (existsSync40(configPath)) {
|
|
80738
80774
|
try {
|
|
80739
80775
|
const content = await readFile37(configPath, "utf-8");
|
|
80740
|
-
|
|
80776
|
+
if (host.configKind === "codex-toml") {
|
|
80777
|
+
configured = /\[mcp_servers\.vibeframe\]/.test(content);
|
|
80778
|
+
} else {
|
|
80779
|
+
const json = JSON.parse(content);
|
|
80780
|
+
configured = hasVibeframeMcpServer(json);
|
|
80781
|
+
const server = readVibeframeMcpServer(json);
|
|
80782
|
+
if (host.id === "claude-desktop" && configured && !isAnchoredClaudeDesktopServer(server)) {
|
|
80783
|
+
warnings.push(
|
|
80784
|
+
"Claude Desktop vibeframe MCP config is not workspace-anchored; run `vibe host setup claude-desktop <workspace> --write` to anchor relative paths."
|
|
80785
|
+
);
|
|
80786
|
+
}
|
|
80787
|
+
}
|
|
80741
80788
|
} catch (error) {
|
|
80742
80789
|
warnings.push(error instanceof Error ? error.message : String(error));
|
|
80743
80790
|
}
|
|
@@ -80757,13 +80804,26 @@ async function mergeMcpJson(configPath, opts) {
|
|
|
80757
80804
|
}
|
|
80758
80805
|
const mcpServers = typeof root.mcpServers === "object" && root.mcpServers !== null && !Array.isArray(root.mcpServers) ? root.mcpServers : {};
|
|
80759
80806
|
if (mcpServers.vibeframe && !opts.force) {
|
|
80807
|
+
const existing = mcpServers.vibeframe;
|
|
80808
|
+
if (canUpgradeDefaultServer(existing, opts.server)) {
|
|
80809
|
+
root.mcpServers = {
|
|
80810
|
+
...mcpServers,
|
|
80811
|
+
vibeframe: opts.server
|
|
80812
|
+
};
|
|
80813
|
+
await mkdir22(dirname18(configPath), { recursive: true });
|
|
80814
|
+
if (exists && opts.backup) {
|
|
80815
|
+
await writeFile44(`${configPath}.bak-${timestamp()}`, await readFile37(configPath, "utf-8"), "utf-8");
|
|
80816
|
+
}
|
|
80817
|
+
await writeFile44(configPath, JSON.stringify(root, null, 2) + "\n", "utf-8");
|
|
80818
|
+
return { path: configPath, status: "merged", reason: "anchored existing default vibeframe MCP server" };
|
|
80819
|
+
}
|
|
80760
80820
|
return {
|
|
80761
80821
|
path: configPath,
|
|
80762
80822
|
status: "skipped-exists",
|
|
80763
80823
|
reason: "vibeframe MCP server already exists; pass --force to replace"
|
|
80764
80824
|
};
|
|
80765
80825
|
}
|
|
80766
|
-
root.mcpServers = { ...mcpServers, vibeframe:
|
|
80826
|
+
root.mcpServers = { ...mcpServers, vibeframe: opts.server };
|
|
80767
80827
|
await mkdir22(dirname18(configPath), { recursive: true });
|
|
80768
80828
|
if (exists && opts.backup) {
|
|
80769
80829
|
await writeFile44(`${configPath}.bak-${timestamp()}`, await readFile37(configPath, "utf-8"), "utf-8");
|
|
@@ -80817,6 +80877,33 @@ function hasVibeframeMcpServer(value) {
|
|
|
80817
80877
|
if (!root.mcpServers || typeof root.mcpServers !== "object") return false;
|
|
80818
80878
|
return Object.prototype.hasOwnProperty.call(root.mcpServers, "vibeframe");
|
|
80819
80879
|
}
|
|
80880
|
+
function readVibeframeMcpServer(value) {
|
|
80881
|
+
if (!value || typeof value !== "object") return null;
|
|
80882
|
+
const root = value;
|
|
80883
|
+
if (!root.mcpServers || typeof root.mcpServers !== "object" || Array.isArray(root.mcpServers)) return null;
|
|
80884
|
+
const server = root.mcpServers.vibeframe;
|
|
80885
|
+
if (!server || typeof server !== "object" || Array.isArray(server)) return null;
|
|
80886
|
+
return server;
|
|
80887
|
+
}
|
|
80888
|
+
function isAnchoredClaudeDesktopServer(server) {
|
|
80889
|
+
if (!server) return false;
|
|
80890
|
+
if (server.command === "bash" && Array.isArray(server.args)) {
|
|
80891
|
+
return server.args[0] === "-lc" && typeof server.args[1] === "string" && server.args[1].includes("exec npx -y @vibeframe/mcp-server");
|
|
80892
|
+
}
|
|
80893
|
+
if (server.command === "cmd.exe" && Array.isArray(server.args)) {
|
|
80894
|
+
return server.args.some((arg) => typeof arg === "string" && arg.includes("npx -y @vibeframe/mcp-server"));
|
|
80895
|
+
}
|
|
80896
|
+
return false;
|
|
80897
|
+
}
|
|
80898
|
+
function canUpgradeDefaultServer(existing, target) {
|
|
80899
|
+
if (!existing || typeof existing !== "object" || Array.isArray(existing)) return false;
|
|
80900
|
+
const current = existing;
|
|
80901
|
+
if (!Array.isArray(current.args)) return false;
|
|
80902
|
+
if (current.command === target.command && JSON.stringify(current.args) === JSON.stringify(target.args)) {
|
|
80903
|
+
return false;
|
|
80904
|
+
}
|
|
80905
|
+
return current.command === VIBEFRAME_MCP_JSON.command && JSON.stringify(current.args) === JSON.stringify(VIBEFRAME_MCP_JSON.args);
|
|
80906
|
+
}
|
|
80820
80907
|
function hostNextSteps(host) {
|
|
80821
80908
|
if (host.id === "codex") {
|
|
80822
80909
|
return [
|
|
@@ -80855,6 +80942,12 @@ function ensureTrailingNewline(value) {
|
|
|
80855
80942
|
function escapeRegExp3(value) {
|
|
80856
80943
|
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
80857
80944
|
}
|
|
80945
|
+
function shellQuote(value) {
|
|
80946
|
+
return `'${value.replace(/'/g, `'\\''`)}'`;
|
|
80947
|
+
}
|
|
80948
|
+
function cmdQuote(value) {
|
|
80949
|
+
return `"${value.replace(/"/g, '""')}"`;
|
|
80950
|
+
}
|
|
80858
80951
|
|
|
80859
80952
|
// src/commands/_shared/init-templates.ts
|
|
80860
80953
|
var AGENTS_MD = `# AGENTS.md
|
|
@@ -159,7 +159,11 @@ function buildMcpDispatcher(manifest) {
|
|
|
159
159
|
workingDirectory: process.cwd(),
|
|
160
160
|
surface: "mcp"
|
|
161
161
|
});
|
|
162
|
-
const text = result.success ? JSON.stringify({ success: true, ...result.data }) :
|
|
162
|
+
const text = result.success ? JSON.stringify({ success: true, ...result.data }) : result.data ? JSON.stringify({
|
|
163
|
+
success: false,
|
|
164
|
+
error: result.error ?? "unknown error",
|
|
165
|
+
...result.data
|
|
166
|
+
}) : `${name} failed: ${result.error ?? "unknown error"}`;
|
|
163
167
|
return { content: [{ type: "text", text }] };
|
|
164
168
|
} catch (error) {
|
|
165
169
|
const msg = error instanceof Error ? error.message : String(error);
|
|
@@ -52320,6 +52320,8 @@ var SCENE_PRESETS2 = [
|
|
|
52320
52320
|
"kinetic-type",
|
|
52321
52321
|
"product-shot"
|
|
52322
52322
|
];
|
|
52323
|
+
var PROJECT_DIR_DESCRIPTION = "Project directory. Defaults to the surface's cwd; in MCP hosts, relative paths resolve under the configured server workspace.";
|
|
52324
|
+
var INIT_DIR_DESCRIPTION = "Project directory to create. Prefer a project name or workspace-relative path; in MCP hosts, relative paths resolve under the configured server workspace. Do not use /tmp or /home/claude unless the user explicitly asks.";
|
|
52323
52325
|
var sceneStylesSchema = external_exports.object({
|
|
52324
52326
|
name: external_exports.string().optional().describe("Style name or slug (e.g. 'Swiss Pulse', 'swiss-pulse'). Omit to list all 8.")
|
|
52325
52327
|
});
|
|
@@ -52379,7 +52381,7 @@ var sceneStylesTool = defineTool({
|
|
|
52379
52381
|
}
|
|
52380
52382
|
});
|
|
52381
52383
|
var sceneInitSchema = external_exports.object({
|
|
52382
|
-
dir: external_exports.string().describe(
|
|
52384
|
+
dir: external_exports.string().describe(INIT_DIR_DESCRIPTION),
|
|
52383
52385
|
name: external_exports.string().optional().describe("Project name. Defaults to the directory basename."),
|
|
52384
52386
|
aspect: external_exports.enum(["16:9", "9:16", "1:1", "4:5"]).optional().describe("Aspect ratio. Default 16:9."),
|
|
52385
52387
|
duration: external_exports.number().optional().describe("Default root composition duration in seconds. Default 10.")
|
|
@@ -52426,7 +52428,7 @@ var sceneAddSchema = external_exports.object({
|
|
|
52426
52428
|
visuals: external_exports.string().optional().describe("Image prompt \u2014 generates assets/scene-<id>.png via the configured image provider."),
|
|
52427
52429
|
headline: external_exports.string().optional().describe("Visible headline text. Defaults to the humanised scene name."),
|
|
52428
52430
|
kicker: external_exports.string().optional().describe("Small label above the headline (used by 'explainer' and 'product-shot' presets)."),
|
|
52429
|
-
projectDir: external_exports.string().optional().describe(
|
|
52431
|
+
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION),
|
|
52430
52432
|
insertInto: external_exports.string().optional().describe("Root composition file (relative to projectDir). Default 'index.html'."),
|
|
52431
52433
|
imageProvider: external_exports.enum(["gemini", "openai"]).optional().describe("Image provider for visuals. Default 'gemini'."),
|
|
52432
52434
|
voice: external_exports.string().optional().describe("ElevenLabs voice id or name."),
|
|
@@ -52487,7 +52489,7 @@ var sceneAddTool = defineTool({
|
|
|
52487
52489
|
}
|
|
52488
52490
|
});
|
|
52489
52491
|
var sceneLintSchema = external_exports.object({
|
|
52490
|
-
projectDir: external_exports.string().optional().describe(
|
|
52492
|
+
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION),
|
|
52491
52493
|
root: external_exports.string().optional().describe("Root composition file relative to projectDir. Default 'index.html'."),
|
|
52492
52494
|
fix: external_exports.boolean().optional().describe('Apply mechanical auto-fixes (currently: missing class="clip").')
|
|
52493
52495
|
});
|
|
@@ -52545,7 +52547,7 @@ var sceneLintTool = defineTool({
|
|
|
52545
52547
|
}
|
|
52546
52548
|
});
|
|
52547
52549
|
var sceneRepairSchema = external_exports.object({
|
|
52548
|
-
projectDir: external_exports.string().optional().describe(
|
|
52550
|
+
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION),
|
|
52549
52551
|
root: external_exports.string().optional().describe("Root composition file relative to projectDir. Default 'index.html'."),
|
|
52550
52552
|
dryRun: external_exports.boolean().optional().describe("Preview deterministic repairs without writing files.")
|
|
52551
52553
|
});
|
|
@@ -52574,7 +52576,7 @@ var sceneRepairTool = defineTool({
|
|
|
52574
52576
|
}
|
|
52575
52577
|
});
|
|
52576
52578
|
var sceneRenderSchema = external_exports.object({
|
|
52577
|
-
projectDir: external_exports.string().optional().describe(
|
|
52579
|
+
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION),
|
|
52578
52580
|
root: external_exports.string().optional().describe("Root composition file relative to projectDir. Default 'index.html'."),
|
|
52579
52581
|
beat: external_exports.string().optional().describe("Render only one storyboard beat using a temporary root."),
|
|
52580
52582
|
output: external_exports.string().optional().describe("Output file path (relative paths resolve against projectDir)."),
|
|
@@ -52629,7 +52631,7 @@ var sceneRenderTool = defineTool({
|
|
|
52629
52631
|
});
|
|
52630
52632
|
var sceneBuildSchema = external_exports.object({
|
|
52631
52633
|
projectDir: external_exports.string().optional().describe(
|
|
52632
|
-
"Project directory containing STORYBOARD.md, DESIGN.md, index.html. Defaults to the surface's cwd."
|
|
52634
|
+
"Project directory containing STORYBOARD.md, DESIGN.md, index.html. Defaults to the surface's cwd; in MCP hosts, relative paths resolve under the configured server workspace."
|
|
52633
52635
|
),
|
|
52634
52636
|
stage: external_exports.enum(["assets", "compose", "sync", "render", "all"]).optional().describe("Build stage to run. Default all."),
|
|
52635
52637
|
beat: external_exports.string().optional().describe("Restrict asset/compose work to one beat id."),
|
|
@@ -52744,7 +52746,7 @@ var sceneBuildTool = defineTool({
|
|
|
52744
52746
|
});
|
|
52745
52747
|
var sceneInstallSkillSchema = external_exports.object({
|
|
52746
52748
|
projectDir: external_exports.string().describe(
|
|
52747
|
-
"Project directory containing STORYBOARD.md / DESIGN.md. Required to keep cross-host calls explicit
|
|
52749
|
+
"Project directory containing STORYBOARD.md / DESIGN.md. Required to keep cross-host calls explicit; in MCP hosts, relative paths resolve under the configured server workspace."
|
|
52748
52750
|
),
|
|
52749
52751
|
host: external_exports.enum(["claude-code", "cursor", "auto", "all"]).optional().describe(
|
|
52750
52752
|
"Host layout target. 'auto' (default) detects installed agent hosts; 'all' writes every layout; 'claude-code' / 'cursor' force a single host. Codex / Aider read the universal SKILL.md via AGENTS.md so don't need a host-specific layout."
|
|
@@ -52794,7 +52796,7 @@ var sceneInstallSkillTool = defineTool({
|
|
|
52794
52796
|
});
|
|
52795
52797
|
var sceneComposePromptsSchema = external_exports.object({
|
|
52796
52798
|
projectDir: external_exports.string().describe(
|
|
52797
|
-
"Project directory containing STORYBOARD.md / DESIGN.md. Required to keep cross-host calls explicit."
|
|
52799
|
+
"Project directory containing STORYBOARD.md / DESIGN.md. Required to keep cross-host calls explicit; in MCP hosts, relative paths resolve under the configured server workspace."
|
|
52798
52800
|
),
|
|
52799
52801
|
beat: external_exports.string().optional().describe(
|
|
52800
52802
|
"Restrict the plan to a single beat by id (e.g. 'hook', '1'). Omit to emit every beat in the storyboard."
|
|
@@ -55095,13 +55097,14 @@ function sanitizeFileSegment2(value) {
|
|
|
55095
55097
|
}
|
|
55096
55098
|
|
|
55097
55099
|
// src/tools/manifest/inspect.ts
|
|
55100
|
+
var PROJECT_DIR_DESCRIPTION2 = "Project directory. Defaults to the surface's cwd; in MCP hosts, relative paths resolve under the configured server workspace.";
|
|
55098
55101
|
var inspectProjectTool = defineTool({
|
|
55099
55102
|
name: "inspect_project",
|
|
55100
55103
|
category: "analyze",
|
|
55101
55104
|
cost: "free",
|
|
55102
55105
|
description: "Local project inspection: checks STORYBOARD.md, DESIGN.md, config, build-report, scene lint, composition files, and referenced assets. Writes review-report.json by default.",
|
|
55103
55106
|
schema: external_exports.object({
|
|
55104
|
-
projectDir: external_exports.string().optional().describe(
|
|
55107
|
+
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION2),
|
|
55105
55108
|
beat: external_exports.string().optional().describe("Inspect only one storyboard beat where beat-scoped checks apply."),
|
|
55106
55109
|
outputPath: external_exports.string().optional().describe("Optional review report path. Defaults to <project>/review-report.json."),
|
|
55107
55110
|
report: external_exports.boolean().optional().describe("Write review-report.json. Default true.")
|
|
@@ -55116,7 +55119,11 @@ var inspectProjectTool = defineTool({
|
|
|
55116
55119
|
});
|
|
55117
55120
|
return {
|
|
55118
55121
|
success: result.status !== "fail",
|
|
55119
|
-
data:
|
|
55122
|
+
data: {
|
|
55123
|
+
...result,
|
|
55124
|
+
workingDirectory: ctx.workingDirectory,
|
|
55125
|
+
projectDir
|
|
55126
|
+
},
|
|
55120
55127
|
error: result.status === "fail" ? `${result.issues.filter((issue) => issue.severity === "error").length} project inspection error(s)` : void 0,
|
|
55121
55128
|
humanLines: [
|
|
55122
55129
|
`${result.status === "pass" ? "\u2705" : result.status === "warn" ? "\u26A0\uFE0F" : "\u274C"} Project inspection ${result.status} \u2014 score ${result.score}/100`,
|
|
@@ -55131,7 +55138,7 @@ var inspectRenderTool = defineTool({
|
|
|
55131
55138
|
cost: "low",
|
|
55132
55139
|
description: "Render inspection: runs cheap local video checks by default, optionally adds Gemini AI review with ai: true, and writes review-report.json by default.",
|
|
55133
55140
|
schema: external_exports.object({
|
|
55134
|
-
projectDir: external_exports.string().optional().describe(
|
|
55141
|
+
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION2),
|
|
55135
55142
|
beat: external_exports.string().optional().describe("Inspect a render for one storyboard beat."),
|
|
55136
55143
|
videoPath: external_exports.string().optional().describe("Rendered video path. Defaults to build-report outputPath or latest renders/* video."),
|
|
55137
55144
|
outputPath: external_exports.string().optional().describe("Optional review report path. Defaults to <project>/review-report.json."),
|
|
@@ -55154,7 +55161,11 @@ var inspectRenderTool = defineTool({
|
|
|
55154
55161
|
});
|
|
55155
55162
|
return {
|
|
55156
55163
|
success: true,
|
|
55157
|
-
data:
|
|
55164
|
+
data: {
|
|
55165
|
+
...result2,
|
|
55166
|
+
workingDirectory: ctx.workingDirectory,
|
|
55167
|
+
projectDir
|
|
55168
|
+
},
|
|
55158
55169
|
humanLines: [
|
|
55159
55170
|
`Render inspection dry-run \u2014 ${result2.videoPath ? "render found" : "render missing"}`,
|
|
55160
55171
|
...result2.reportPath ? [`report: ${result2.reportPath}`] : []
|
|
@@ -55172,7 +55183,11 @@ var inspectRenderTool = defineTool({
|
|
|
55172
55183
|
});
|
|
55173
55184
|
return {
|
|
55174
55185
|
success: result.status !== "fail",
|
|
55175
|
-
data:
|
|
55186
|
+
data: {
|
|
55187
|
+
...result,
|
|
55188
|
+
workingDirectory: ctx.workingDirectory,
|
|
55189
|
+
projectDir
|
|
55190
|
+
},
|
|
55176
55191
|
error: result.status === "fail" ? `${result.issues.filter((issue) => issue.severity === "error").length} render inspection error(s)` : void 0,
|
|
55177
55192
|
humanLines: [
|
|
55178
55193
|
`${result.status === "pass" ? "\u2705" : result.status === "warn" ? "\u26A0\uFE0F" : "\u274C"} Render inspection ${result.status} \u2014 score ${result.score}/100`,
|
|
@@ -55548,7 +55563,7 @@ var generateBackgroundTool = defineTool({
|
|
|
55548
55563
|
schema: external_exports.object({
|
|
55549
55564
|
description: external_exports.string().describe("Background description / image prompt."),
|
|
55550
55565
|
aspect: external_exports.enum(["16:9", "9:16", "1:1"]).optional().describe("Aspect ratio. Default '16:9'."),
|
|
55551
|
-
output: external_exports.string().optional().describe("Output PNG path. Relative paths resolve against the surface's cwd.")
|
|
55566
|
+
output: external_exports.string().optional().describe("Output PNG path. Relative paths resolve against the surface's cwd; in MCP hosts, that is the configured server workspace.")
|
|
55552
55567
|
}),
|
|
55553
55568
|
async execute(args) {
|
|
55554
55569
|
const result = await executeBackground(args);
|
|
@@ -56085,8 +56100,9 @@ function stripUndefined3(value) {
|
|
|
56085
56100
|
|
|
56086
56101
|
// src/tools/manifest/storyboard.ts
|
|
56087
56102
|
init_build_plan();
|
|
56103
|
+
var PROJECT_DIR_DESCRIPTION3 = "Project directory. Defaults to the surface's cwd; in MCP hosts, relative paths resolve under the configured server workspace.";
|
|
56088
56104
|
var projectDirSchema = external_exports.object({
|
|
56089
|
-
projectDir: external_exports.string().optional().describe(
|
|
56105
|
+
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION3)
|
|
56090
56106
|
});
|
|
56091
56107
|
async function readStoryboard(projectDir) {
|
|
56092
56108
|
const path2 = resolve52(projectDir, "STORYBOARD.md");
|
|
@@ -56155,7 +56171,7 @@ var storyboardGetTool = defineTool({
|
|
|
56155
56171
|
cost: "free",
|
|
56156
56172
|
description: "Return one STORYBOARD.md beat as structured data.",
|
|
56157
56173
|
schema: external_exports.object({
|
|
56158
|
-
projectDir: external_exports.string().optional().describe(
|
|
56174
|
+
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
|
|
56159
56175
|
beat: external_exports.string().describe("Beat id to return.")
|
|
56160
56176
|
}),
|
|
56161
56177
|
async execute(args, ctx) {
|
|
@@ -56177,7 +56193,7 @@ var storyboardSetTool = defineTool({
|
|
|
56177
56193
|
cost: "free",
|
|
56178
56194
|
description: "Set or unset one cue on one beat in STORYBOARD.md.",
|
|
56179
56195
|
schema: external_exports.object({
|
|
56180
|
-
projectDir: external_exports.string().optional().describe(
|
|
56196
|
+
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
|
|
56181
56197
|
beat: external_exports.string().describe("Beat id to mutate."),
|
|
56182
56198
|
key: external_exports.string().describe("Cue key to set."),
|
|
56183
56199
|
value: external_exports.string().optional().describe("Cue value. Required unless unset is true."),
|
|
@@ -56213,7 +56229,7 @@ var storyboardMoveTool = defineTool({
|
|
|
56213
56229
|
cost: "free",
|
|
56214
56230
|
description: "Move one beat after another beat in STORYBOARD.md.",
|
|
56215
56231
|
schema: external_exports.object({
|
|
56216
|
-
projectDir: external_exports.string().optional().describe(
|
|
56232
|
+
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
|
|
56217
56233
|
beat: external_exports.string().describe("Beat id to move."),
|
|
56218
56234
|
after: external_exports.string().describe("Beat id that should precede the moved beat.")
|
|
56219
56235
|
}),
|
|
@@ -56243,7 +56259,7 @@ var storyboardReviseTool = defineTool({
|
|
|
56243
56259
|
cost: "low",
|
|
56244
56260
|
description: "Revise an existing STORYBOARD.md from a natural-language request. Reads project context, validates the revised storyboard, and writes unless dryRun is true.",
|
|
56245
56261
|
schema: external_exports.object({
|
|
56246
|
-
projectDir: external_exports.string().optional().describe(
|
|
56262
|
+
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
|
|
56247
56263
|
request: external_exports.string().describe("Revision request, e.g. 'make the hook punchier and shorten to 30 seconds'."),
|
|
56248
56264
|
durationSec: external_exports.number().optional().describe("Target total duration in seconds."),
|
|
56249
56265
|
composer: external_exports.enum(["claude", "openai", "gemini"]).optional().describe("Revision LLM provider. Defaults to project config or available API keys."),
|
|
@@ -56274,7 +56290,7 @@ var planTool = defineTool({
|
|
|
56274
56290
|
cost: "free",
|
|
56275
56291
|
description: "Read STORYBOARD.md and return the build plan, missing artifacts, provider needs, and estimated cost.",
|
|
56276
56292
|
schema: external_exports.object({
|
|
56277
|
-
projectDir: external_exports.string().optional().describe(
|
|
56293
|
+
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
|
|
56278
56294
|
stage: external_exports.enum(["assets", "compose", "sync", "render", "all"]).optional().describe("Stage to plan. Default all."),
|
|
56279
56295
|
beat: external_exports.string().optional().describe("Restrict the plan to one beat id."),
|
|
56280
56296
|
mode: external_exports.enum(["agent", "batch", "auto"]).optional().describe("Build mode. Default auto."),
|
|
@@ -60834,6 +60850,7 @@ var guideTools = [guideTool];
|
|
|
60834
60850
|
// src/tools/manifest/status.ts
|
|
60835
60851
|
import { resolve as resolve62 } from "node:path";
|
|
60836
60852
|
init_status_jobs();
|
|
60853
|
+
var PROJECT_DIR_DESCRIPTION4 = "Project directory. Defaults to the surface's cwd; in MCP hosts, relative paths resolve under the configured server workspace.";
|
|
60837
60854
|
var statusJobTool = defineTool({
|
|
60838
60855
|
name: "status_job",
|
|
60839
60856
|
category: "status",
|
|
@@ -60841,7 +60858,7 @@ var statusJobTool = defineTool({
|
|
|
60841
60858
|
description: "Read one local async job record and optionally refresh supported provider status. Supports Runway/Kling video and Replicate music live checks.",
|
|
60842
60859
|
schema: external_exports.object({
|
|
60843
60860
|
jobId: external_exports.string().describe("Local job id returned by a no-wait command."),
|
|
60844
|
-
projectDir: external_exports.string().optional().describe("Project directory containing .vibeframe/jobs. Defaults to nearest project root."),
|
|
60861
|
+
projectDir: external_exports.string().optional().describe("Project directory containing .vibeframe/jobs. Defaults to nearest project root; in MCP hosts, relative paths resolve under the configured server workspace."),
|
|
60845
60862
|
refresh: external_exports.boolean().optional().describe("Call provider status APIs when supported. Default true."),
|
|
60846
60863
|
wait: external_exports.boolean().optional().describe("Wait for completion when supported."),
|
|
60847
60864
|
output: external_exports.string().optional().describe("Download result media to this path when complete.")
|
|
@@ -60875,7 +60892,7 @@ var statusProjectTool = defineTool({
|
|
|
60875
60892
|
cost: "free",
|
|
60876
60893
|
description: "Summarize build-report.json, review-report.json, and local async job records for a VibeFrame project.",
|
|
60877
60894
|
schema: external_exports.object({
|
|
60878
|
-
projectDir: external_exports.string().optional().describe(
|
|
60895
|
+
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION4),
|
|
60879
60896
|
refresh: external_exports.boolean().optional().describe("Refresh active supported jobs before summarizing. Default false.")
|
|
60880
60897
|
}),
|
|
60881
60898
|
async execute(args, ctx) {
|
|
@@ -60883,7 +60900,11 @@ var statusProjectTool = defineTool({
|
|
|
60883
60900
|
const result = await inspectProjectStatus(projectDir, { refresh: args.refresh === true });
|
|
60884
60901
|
return {
|
|
60885
60902
|
success: true,
|
|
60886
|
-
data:
|
|
60903
|
+
data: {
|
|
60904
|
+
...result,
|
|
60905
|
+
workingDirectory: ctx.workingDirectory,
|
|
60906
|
+
projectDir
|
|
60907
|
+
},
|
|
60887
60908
|
humanLines: [
|
|
60888
60909
|
`Project status: ${result.status} (${result.currentStage}), ${result.jobs.active} active job(s), ${result.jobs.failed} failed job(s)`,
|
|
60889
60910
|
...result.build ? [`build: ${result.build.phase ?? "unknown"}`] : [],
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibeframe/cli",
|
|
3
|
-
"version": "0.106.
|
|
3
|
+
"version": "0.106.7",
|
|
4
4
|
"description": "VibeFrame CLI - agentic video workflow runtime",
|
|
5
5
|
"private": false,
|
|
6
6
|
"license": "MIT",
|
|
@@ -83,8 +83,8 @@
|
|
|
83
83
|
"tsx": "^4.21.0",
|
|
84
84
|
"typescript": "^5.3.3",
|
|
85
85
|
"vitest": "^1.2.2",
|
|
86
|
-
"@vibeframe/ai-providers": "0.106.
|
|
87
|
-
"@vibeframe/core": "0.106.
|
|
86
|
+
"@vibeframe/ai-providers": "0.106.7",
|
|
87
|
+
"@vibeframe/core": "0.106.7"
|
|
88
88
|
},
|
|
89
89
|
"engines": {
|
|
90
90
|
"node": ">=20"
|