@vibeframe/cli 0.110.0 → 0.111.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +201 -1
- package/dist/tools/adapters/mcp.d.ts +10 -0
- package/dist/tools/adapters/mcp.js +14 -1
- package/dist/tools/define-tool.d.ts +26 -0
- package/dist/tools/manifest/index.js +200 -0
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -68080,6 +68080,8 @@ var init_scene2 = __esm({
|
|
|
68080
68080
|
name: "scene_list_styles",
|
|
68081
68081
|
category: "scene",
|
|
68082
68082
|
cost: "free",
|
|
68083
|
+
title: "List Visual Styles",
|
|
68084
|
+
annotations: { readOnly: true, openWorld: false },
|
|
68083
68085
|
description: "List the 8 vendored visual identities available for `init --visual-style` (Swiss Pulse, Data Drift, \u2026) or, when `name` is provided, return the full DESIGN.md hard-gate body for one style. The DESIGN.md content is what the LLM uses as a non-negotiable visual rulebook during compose-scenes-with-skills.",
|
|
68084
68086
|
schema: sceneStylesSchema,
|
|
68085
68087
|
async execute(args) {
|
|
@@ -68141,6 +68143,8 @@ var init_scene2 = __esm({
|
|
|
68141
68143
|
name: "init",
|
|
68142
68144
|
category: "scene",
|
|
68143
68145
|
cost: "free",
|
|
68146
|
+
title: "Initialize Video Project",
|
|
68147
|
+
annotations: { readOnly: false, destructive: false, idempotent: true, openWorld: false },
|
|
68144
68148
|
description: "Scaffold a new VibeFrame video scene project. Supports minimal, agent, and full profiles; full includes the current HTML render backend metadata. Idempotent: re-running keeps user-authored files and merges backend config instead of overwriting. No API keys required.",
|
|
68145
68149
|
schema: sceneInitSchema,
|
|
68146
68150
|
async execute(args, ctx) {
|
|
@@ -68191,6 +68195,8 @@ var init_scene2 = __esm({
|
|
|
68191
68195
|
name: "scene_add",
|
|
68192
68196
|
category: "scene",
|
|
68193
68197
|
cost: "low",
|
|
68198
|
+
title: "Add Scene from Preset",
|
|
68199
|
+
annotations: { readOnly: false, openWorld: true },
|
|
68194
68200
|
description: "Add a single scene to an existing scene project. Optionally generates narration audio (ElevenLabs) and/or a backdrop image (Gemini/OpenAI), then emits compositions/scene-<id>.html with a paused GSAP timeline and splices a clip reference into the root index.html. Use skipAudio:true and skipImage:true for text-only scenes that need no API calls.",
|
|
68195
68201
|
schema: sceneAddSchema,
|
|
68196
68202
|
async execute(args, ctx) {
|
|
@@ -68248,6 +68254,8 @@ var init_scene2 = __esm({
|
|
|
68248
68254
|
name: "scene_lint",
|
|
68249
68255
|
category: "scene",
|
|
68250
68256
|
cost: "free",
|
|
68257
|
+
title: "Lint Scene Compositions",
|
|
68258
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
68251
68259
|
description: "Validate every scene file in a project against the public Hyperframes lint rules (in-process, no Chrome required). Returns errors, warnings, and info findings per file. Optional fix:true mechanically repairs `timed_element_missing_clip_class` only \u2014 other issues surface with fixHints.",
|
|
68252
68260
|
schema: sceneLintSchema,
|
|
68253
68261
|
async execute(args, ctx) {
|
|
@@ -68285,6 +68293,8 @@ var init_scene2 = __esm({
|
|
|
68285
68293
|
name: "scene_repair",
|
|
68286
68294
|
category: "scene",
|
|
68287
68295
|
cost: "free",
|
|
68296
|
+
title: "Repair Scene Compositions",
|
|
68297
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
68288
68298
|
description: "Apply deterministic mechanical scene repairs. Currently uses the safe lint auto-fix allow-list and never performs semantic creative rewrites.",
|
|
68289
68299
|
schema: sceneRepairSchema,
|
|
68290
68300
|
async execute(args, ctx) {
|
|
@@ -68321,6 +68331,8 @@ var init_scene2 = __esm({
|
|
|
68321
68331
|
name: "render",
|
|
68322
68332
|
category: "scene",
|
|
68323
68333
|
cost: "free",
|
|
68334
|
+
title: "Render Video to MP4",
|
|
68335
|
+
annotations: { readOnly: false, openWorld: false },
|
|
68324
68336
|
description: "Render a scene project to MP4/WebM/MOV via the Hyperframes producer. Requires Chrome installed locally. Output defaults to renders/<projectName>-<isoStamp>.<format>. Long runs: over MCP, calls exceeding ~45s return immediately with { promoted: true, jobId, status: 'running' } \u2014 poll status_job every 15-30s until completed/failed instead of re-invoking render. Emits MCP progress notifications when the client supplies a progressToken.",
|
|
68325
68337
|
schema: sceneRenderSchema,
|
|
68326
68338
|
async execute(args, ctx) {
|
|
@@ -68386,6 +68398,8 @@ var init_scene2 = __esm({
|
|
|
68386
68398
|
name: "build",
|
|
68387
68399
|
category: "scene",
|
|
68388
68400
|
cost: "high",
|
|
68401
|
+
title: "Build Video from Storyboard",
|
|
68402
|
+
annotations: { readOnly: false, openWorld: true },
|
|
68389
68403
|
description: "v0.60 one-shot orchestrator: read STORYBOARD.md per-beat YAML cues (narration / backdrop / duration), dispatch TTS + image generation per beat, compose scene HTML via the compose-scenes-with-skills pipeline, then render to MP4. Use this instead of chaining init + scene_add + render manually. Caches by SHA256 of (DESIGN.md + cue body) so re-runs are idempotent and cheap. Long runs: over MCP, calls exceeding ~45s return immediately with { promoted: true, jobId, status: 'running' } \u2014 poll status_job every 15-30s until completed/failed instead of re-invoking build. Emits MCP progress notifications when the client supplies a progressToken. When the MCP host supports elicitation, unspecified asset choices (narration provider, backdrop images, cost cap) are confirmed with the user via a form before the build starts.",
|
|
68390
68404
|
schema: sceneBuildSchema,
|
|
68391
68405
|
async execute(args, ctx) {
|
|
@@ -68468,6 +68482,8 @@ var init_scene2 = __esm({
|
|
|
68468
68482
|
name: "scene_install_skill",
|
|
68469
68483
|
category: "scene",
|
|
68470
68484
|
cost: "free",
|
|
68485
|
+
title: "Install Hyperframes Skill",
|
|
68486
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
68471
68487
|
description: "Install the vendored Hyperframes skill bundle into a scene project so the host agent (Claude Code, Cursor, Codex, Aider) can read framework rules + house style directly. Writes a universal SKILL.md + references/ at the project root, plus per-host layouts (.claude/skills/hyperframes/ for Claude Code, .cursor/rules/hyperframes.mdc for Cursor) when those hosts are detected. Phase H1 of the agentic-native composer plan \u2014 once installed, the host agent itself can author scene HTML using the rules instead of relying on vibe's internal LLM call.",
|
|
68472
68488
|
schema: sceneInstallSkillSchema,
|
|
68473
68489
|
async execute(args, ctx) {
|
|
@@ -68514,6 +68530,8 @@ var init_scene2 = __esm({
|
|
|
68514
68530
|
name: "scene_compose_prompts",
|
|
68515
68531
|
category: "scene",
|
|
68516
68532
|
cost: "free",
|
|
68533
|
+
title: "Get Scene Authoring Prompts",
|
|
68534
|
+
annotations: { readOnly: true, openWorld: false },
|
|
68517
68535
|
description: "Emit the per-beat compose plan for the host agent to author scene HTML itself. Reads STORYBOARD.md + DESIGN.md and returns each beat's outputPath + userPrompt + cues + body, plus references to the project's SKILL.md (Hyperframes rules) and DESIGN.md (visual identity). The host agent writes each compositions/scene-<id>.html file directly \u2014 VibeFrame makes NO LLM call here. Hosts that cannot write files (e.g. Claude Desktop) submit each authored beat with scene_submit instead. Pairs with scene_install_skill (Phase H1). Phase H2 of the agentic-native composer plan; the internal-LLM batch path (build) remains as a fallback for non-agent contexts.",
|
|
68518
68536
|
schema: sceneComposePromptsSchema,
|
|
68519
68537
|
async execute(args, ctx) {
|
|
@@ -68556,6 +68574,8 @@ var init_scene2 = __esm({
|
|
|
68556
68574
|
name: "scene_submit",
|
|
68557
68575
|
category: "scene",
|
|
68558
68576
|
cost: "free",
|
|
68577
|
+
title: "Submit Scene HTML",
|
|
68578
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
68559
68579
|
description: "Submit host-authored Hyperframes scene HTML for one beat. Validates with the same lint as the batch composer and writes compositions/scene-<id>.html on pass; on lint errors it returns the findings WITHOUT writing so you can fix and resubmit. This completes agent-mode compose for hosts that cannot write files (e.g. Claude Desktop): build (mode agent) \u2192 needs-author plan \u2192 author each beat from its composePrompts userPrompt \u2192 scene_submit per beat \u2192 build (stage sync) \u2192 render. No internal LLM call \u2014 the submitting agent is the composer.",
|
|
68560
68580
|
schema: sceneSubmitSchema,
|
|
68561
68581
|
async execute(args, ctx) {
|
|
@@ -68605,6 +68625,8 @@ var init_audio2 = __esm({
|
|
|
68605
68625
|
name: "audio_transcribe",
|
|
68606
68626
|
category: "audio",
|
|
68607
68627
|
cost: "low",
|
|
68628
|
+
title: "Transcribe Audio",
|
|
68629
|
+
annotations: { readOnly: false, openWorld: true },
|
|
68608
68630
|
description: "Transcribe audio using OpenAI Whisper. Outputs text, SRT, or VTT. Requires OPENAI_API_KEY.",
|
|
68609
68631
|
schema: external_exports.object({
|
|
68610
68632
|
audioPath: external_exports.string().describe("Input audio file path"),
|
|
@@ -68634,6 +68656,8 @@ var init_audio2 = __esm({
|
|
|
68634
68656
|
name: "audio_isolate",
|
|
68635
68657
|
category: "audio",
|
|
68636
68658
|
cost: "low",
|
|
68659
|
+
title: "Isolate Vocals from Audio",
|
|
68660
|
+
annotations: { readOnly: false, openWorld: true },
|
|
68637
68661
|
description: "Isolate vocals from audio using ElevenLabs. Requires ELEVENLABS_API_KEY.",
|
|
68638
68662
|
schema: external_exports.object({
|
|
68639
68663
|
audioPath: external_exports.string().describe("Input audio file path"),
|
|
@@ -68653,6 +68677,8 @@ var init_audio2 = __esm({
|
|
|
68653
68677
|
name: "audio_clone_voice",
|
|
68654
68678
|
category: "audio",
|
|
68655
68679
|
cost: "low",
|
|
68680
|
+
title: "Clone Voice from Samples",
|
|
68681
|
+
annotations: { readOnly: false, destructive: false, openWorld: true },
|
|
68656
68682
|
description: "Clone a voice from audio samples using ElevenLabs. Requires ELEVENLABS_API_KEY.",
|
|
68657
68683
|
schema: external_exports.object({
|
|
68658
68684
|
samplePaths: external_exports.array(external_exports.string()).describe("Audio sample file paths (1-25 files)"),
|
|
@@ -68674,6 +68700,8 @@ var init_audio2 = __esm({
|
|
|
68674
68700
|
name: "audio_dub",
|
|
68675
68701
|
category: "audio",
|
|
68676
68702
|
cost: "high",
|
|
68703
|
+
title: "Dub Audio to Another Language",
|
|
68704
|
+
annotations: { readOnly: false, openWorld: true },
|
|
68677
68705
|
description: "Dub audio/video to another language (transcribe + translate + TTS). Requires OPENAI_API_KEY, ANTHROPIC_API_KEY, ELEVENLABS_API_KEY.",
|
|
68678
68706
|
schema: external_exports.object({
|
|
68679
68707
|
mediaPath: external_exports.string().describe("Input media file (video or audio)"),
|
|
@@ -68704,6 +68732,8 @@ var init_audio2 = __esm({
|
|
|
68704
68732
|
name: "audio_duck",
|
|
68705
68733
|
category: "audio",
|
|
68706
68734
|
cost: "free",
|
|
68735
|
+
title: "Duck Background Music",
|
|
68736
|
+
annotations: { readOnly: false, openWorld: false },
|
|
68707
68737
|
description: "Auto-duck background music when voice is present using FFmpeg sidechain compression. Free, no API key needed.",
|
|
68708
68738
|
schema: external_exports.object({
|
|
68709
68739
|
musicPath: external_exports.string().describe("Background music file path"),
|
|
@@ -68749,6 +68779,8 @@ var init_edit = __esm({
|
|
|
68749
68779
|
name: "edit_silence_cut",
|
|
68750
68780
|
category: "edit",
|
|
68751
68781
|
cost: "free",
|
|
68782
|
+
title: "Cut Silence from Video",
|
|
68783
|
+
annotations: { readOnly: false, openWorld: true },
|
|
68752
68784
|
description: "Remove silent segments from a video using FFmpeg or Gemini AI detection. No API key needed for FFmpeg mode.",
|
|
68753
68785
|
schema: external_exports.object({
|
|
68754
68786
|
videoPath: external_exports.string().describe("Path to the input video file"),
|
|
@@ -68779,6 +68811,8 @@ var init_edit = __esm({
|
|
|
68779
68811
|
name: "edit_caption",
|
|
68780
68812
|
category: "edit",
|
|
68781
68813
|
cost: "low",
|
|
68814
|
+
title: "Burn Captions into Video",
|
|
68815
|
+
annotations: { readOnly: false, openWorld: true },
|
|
68782
68816
|
description: "Transcribe audio and burn styled captions into video. Requires OPENAI_API_KEY for Whisper transcription.",
|
|
68783
68817
|
schema: external_exports.object({
|
|
68784
68818
|
videoPath: external_exports.string().describe("Path to the input video file"),
|
|
@@ -68803,6 +68837,8 @@ var init_edit = __esm({
|
|
|
68803
68837
|
name: "edit_fade",
|
|
68804
68838
|
category: "edit",
|
|
68805
68839
|
cost: "free",
|
|
68840
|
+
title: "Apply Fade Effects",
|
|
68841
|
+
annotations: { readOnly: false, openWorld: false },
|
|
68806
68842
|
description: "Apply fade in/out effects to video and/or audio. No API key needed.",
|
|
68807
68843
|
schema: external_exports.object({
|
|
68808
68844
|
videoPath: external_exports.string().describe("Path to the input video file"),
|
|
@@ -68826,6 +68862,8 @@ var init_edit = __esm({
|
|
|
68826
68862
|
name: "edit_noise_reduce",
|
|
68827
68863
|
category: "edit",
|
|
68828
68864
|
cost: "free",
|
|
68865
|
+
title: "Reduce Audio Noise",
|
|
68866
|
+
annotations: { readOnly: false, openWorld: false },
|
|
68829
68867
|
description: "Reduce audio/video noise using FFmpeg filters. No API key needed.",
|
|
68830
68868
|
schema: external_exports.object({
|
|
68831
68869
|
inputPath: external_exports.string().describe("Path to the input media file"),
|
|
@@ -68847,6 +68885,8 @@ var init_edit = __esm({
|
|
|
68847
68885
|
name: "edit_jump_cut",
|
|
68848
68886
|
category: "edit",
|
|
68849
68887
|
cost: "low",
|
|
68888
|
+
title: "Remove Filler Words",
|
|
68889
|
+
annotations: { readOnly: false, openWorld: true },
|
|
68850
68890
|
description: "Remove filler words (um, uh, like, etc.) from video using Whisper transcription. Requires OPENAI_API_KEY.",
|
|
68851
68891
|
schema: external_exports.object({
|
|
68852
68892
|
videoPath: external_exports.string().describe("Path to the input video file"),
|
|
@@ -68870,6 +68910,8 @@ var init_edit = __esm({
|
|
|
68870
68910
|
name: "edit_text_overlay",
|
|
68871
68911
|
category: "edit",
|
|
68872
68912
|
cost: "free",
|
|
68913
|
+
title: "Overlay Static Text",
|
|
68914
|
+
annotations: { readOnly: false, openWorld: false },
|
|
68873
68915
|
description: "Apply simple static text burn-in on video using FFmpeg drawtext. No API key needed. For designed or animated overlays, use edit_motion_overlay.",
|
|
68874
68916
|
schema: external_exports.object({
|
|
68875
68917
|
videoPath: external_exports.string().describe("Path to the input video file"),
|
|
@@ -68896,6 +68938,8 @@ var init_edit = __esm({
|
|
|
68896
68938
|
name: "edit_motion_overlay",
|
|
68897
68939
|
category: "edit",
|
|
68898
68940
|
cost: "low",
|
|
68941
|
+
title: "Apply Motion Graphics Overlay",
|
|
68942
|
+
annotations: { readOnly: false, openWorld: true },
|
|
68899
68943
|
description: "Apply designed motion graphics overlays to an existing video. Generates Remotion overlays from a prompt, or overlays a user-provided .json/.lottie animation via the Hyperframes renderer.",
|
|
68900
68944
|
schema: external_exports.object({
|
|
68901
68945
|
videoPath: external_exports.string().describe("Path to the input video file"),
|
|
@@ -68932,6 +68976,8 @@ var init_edit = __esm({
|
|
|
68932
68976
|
name: "edit_translate_srt",
|
|
68933
68977
|
category: "edit",
|
|
68934
68978
|
cost: "low",
|
|
68979
|
+
title: "Translate SRT Subtitles",
|
|
68980
|
+
annotations: { readOnly: false, openWorld: true },
|
|
68935
68981
|
description: "Translate SRT subtitle files using Claude or OpenAI. Requires ANTHROPIC_API_KEY or OPENAI_API_KEY.",
|
|
68936
68982
|
schema: external_exports.object({
|
|
68937
68983
|
srtPath: external_exports.string().describe("Path to the input SRT file"),
|
|
@@ -68954,6 +69000,8 @@ var init_edit = __esm({
|
|
|
68954
69000
|
name: "edit_grade",
|
|
68955
69001
|
category: "edit",
|
|
68956
69002
|
cost: "low",
|
|
69003
|
+
title: "Apply Color Grading",
|
|
69004
|
+
annotations: { readOnly: false, openWorld: true },
|
|
68957
69005
|
description: "Apply AI-generated color grading using Claude + FFmpeg. Use preset for free built-in grades, or style for custom AI-generated grades (needs ANTHROPIC_API_KEY).",
|
|
68958
69006
|
schema: external_exports.object({
|
|
68959
69007
|
videoPath: external_exports.string().describe("Input video file path"),
|
|
@@ -68976,6 +69024,8 @@ var init_edit = __esm({
|
|
|
68976
69024
|
name: "edit_speed_ramp",
|
|
68977
69025
|
category: "edit",
|
|
68978
69026
|
cost: "low",
|
|
69027
|
+
title: "Apply Content-Aware Speed Ramping",
|
|
69028
|
+
annotations: { readOnly: false, openWorld: true },
|
|
68979
69029
|
description: "Apply content-aware speed ramping. Analyzes speech with Whisper, plans speed changes with Claude, applies with FFmpeg. Requires OPENAI_API_KEY + ANTHROPIC_API_KEY.",
|
|
68980
69030
|
schema: external_exports.object({
|
|
68981
69031
|
videoPath: external_exports.string().describe("Input video file path (must have audio)"),
|
|
@@ -69000,6 +69050,8 @@ var init_edit = __esm({
|
|
|
69000
69050
|
name: "edit_reframe",
|
|
69001
69051
|
category: "edit",
|
|
69002
69052
|
cost: "free",
|
|
69053
|
+
title: "Reframe Video Aspect Ratio",
|
|
69054
|
+
annotations: { readOnly: false, openWorld: false },
|
|
69003
69055
|
description: "Auto-reframe video to a different aspect ratio using smart cropping. Free (FFmpeg only).",
|
|
69004
69056
|
schema: external_exports.object({
|
|
69005
69057
|
videoPath: external_exports.string().describe("Input video file path"),
|
|
@@ -69022,6 +69074,8 @@ var init_edit = __esm({
|
|
|
69022
69074
|
name: "edit_interpolate",
|
|
69023
69075
|
category: "edit",
|
|
69024
69076
|
cost: "free",
|
|
69077
|
+
title: "Create Slow Motion with Frame Interpolation",
|
|
69078
|
+
annotations: { readOnly: false, openWorld: false },
|
|
69025
69079
|
description: "Create slow motion with AI frame interpolation using FFmpeg minterpolate. Free, no API key needed.",
|
|
69026
69080
|
schema: external_exports.object({
|
|
69027
69081
|
videoPath: external_exports.string().describe("Input video file path"),
|
|
@@ -69044,6 +69098,8 @@ var init_edit = __esm({
|
|
|
69044
69098
|
name: "edit_upscale",
|
|
69045
69099
|
category: "edit",
|
|
69046
69100
|
cost: "free",
|
|
69101
|
+
title: "Upscale Video Resolution",
|
|
69102
|
+
annotations: { readOnly: false, openWorld: false },
|
|
69047
69103
|
description: "Upscale video resolution using FFmpeg (Lanczos scaling). Free, no API key needed.",
|
|
69048
69104
|
schema: external_exports.object({
|
|
69049
69105
|
videoPath: external_exports.string().describe("Input video file path"),
|
|
@@ -69065,6 +69121,8 @@ var init_edit = __esm({
|
|
|
69065
69121
|
name: "edit_animated_caption",
|
|
69066
69122
|
category: "edit",
|
|
69067
69123
|
cost: "low",
|
|
69124
|
+
title: "Add Animated Captions",
|
|
69125
|
+
annotations: { readOnly: false, openWorld: true },
|
|
69068
69126
|
description: "Add animated word-by-word captions (TikTok/Reels style). Supports highlight, bounce, pop-in, neon, karaoke-sweep, typewriter styles. Requires OPENAI_API_KEY for Whisper.",
|
|
69069
69127
|
schema: external_exports.object({
|
|
69070
69128
|
videoPath: external_exports.string().describe("Path to the input video file"),
|
|
@@ -69097,6 +69155,8 @@ var init_edit = __esm({
|
|
|
69097
69155
|
name: "edit_image",
|
|
69098
69156
|
category: "edit",
|
|
69099
69157
|
cost: "low",
|
|
69158
|
+
title: "Edit Image with AI",
|
|
69159
|
+
annotations: { readOnly: false, openWorld: true },
|
|
69100
69160
|
description: "Edit image(s) using Gemini (Nano Banana). Provide image paths and an edit prompt. Requires GOOGLE_API_KEY.",
|
|
69101
69161
|
schema: external_exports.object({
|
|
69102
69162
|
imagePaths: external_exports.array(external_exports.string()).describe("Input image file path(s)"),
|
|
@@ -69120,6 +69180,8 @@ var init_edit = __esm({
|
|
|
69120
69180
|
name: "edit_fill_gaps",
|
|
69121
69181
|
category: "edit",
|
|
69122
69182
|
cost: "high",
|
|
69183
|
+
title: "Fill Timeline Gaps with AI Video",
|
|
69184
|
+
annotations: { readOnly: false, openWorld: true },
|
|
69123
69185
|
description: "Fill timeline gaps with AI-generated video using Kling image-to-video. Detects empty regions in a project's timeline, extracts the last frame of the preceding clip, and generates a continuation video. Requires KLING_API_KEY and IMGBB_API_KEY (image hosting for Kling).",
|
|
69124
69186
|
schema: external_exports.object({
|
|
69125
69187
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -69244,6 +69306,8 @@ var init_inspect = __esm({
|
|
|
69244
69306
|
name: "inspect_project",
|
|
69245
69307
|
category: "analyze",
|
|
69246
69308
|
cost: "free",
|
|
69309
|
+
title: "Inspect Project",
|
|
69310
|
+
annotations: { readOnly: false, openWorld: false },
|
|
69247
69311
|
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.",
|
|
69248
69312
|
schema: external_exports.object({
|
|
69249
69313
|
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION2),
|
|
@@ -69278,6 +69342,8 @@ var init_inspect = __esm({
|
|
|
69278
69342
|
name: "inspect_render",
|
|
69279
69343
|
category: "analyze",
|
|
69280
69344
|
cost: "low",
|
|
69345
|
+
title: "Inspect Render",
|
|
69346
|
+
annotations: { readOnly: false, openWorld: false },
|
|
69281
69347
|
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.",
|
|
69282
69348
|
schema: external_exports.object({
|
|
69283
69349
|
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION2),
|
|
@@ -69342,6 +69408,8 @@ var init_inspect = __esm({
|
|
|
69342
69408
|
name: "inspect_media",
|
|
69343
69409
|
category: "analyze",
|
|
69344
69410
|
cost: "low",
|
|
69411
|
+
title: "Inspect Media with AI",
|
|
69412
|
+
annotations: { readOnly: true, openWorld: true },
|
|
69345
69413
|
description: "Analyze media (image, video, or YouTube URL) using Gemini AI. Requires GOOGLE_API_KEY.",
|
|
69346
69414
|
schema: external_exports.object({
|
|
69347
69415
|
source: external_exports.string().describe("Path to image/video or YouTube URL"),
|
|
@@ -69370,6 +69438,8 @@ var init_inspect = __esm({
|
|
|
69370
69438
|
name: "inspect_video",
|
|
69371
69439
|
category: "analyze",
|
|
69372
69440
|
cost: "low",
|
|
69441
|
+
title: "Inspect Video with AI",
|
|
69442
|
+
annotations: { readOnly: true, openWorld: true },
|
|
69373
69443
|
description: "Analyze video content using Gemini AI with temporal understanding. Requires GOOGLE_API_KEY.",
|
|
69374
69444
|
schema: external_exports.object({
|
|
69375
69445
|
source: external_exports.string().describe("Path to video file"),
|
|
@@ -69398,6 +69468,8 @@ var init_inspect = __esm({
|
|
|
69398
69468
|
name: "inspect_review",
|
|
69399
69469
|
category: "analyze",
|
|
69400
69470
|
cost: "low",
|
|
69471
|
+
title: "Review Video with AI",
|
|
69472
|
+
annotations: { readOnly: false, openWorld: true },
|
|
69401
69473
|
description: "AI video review: analyzes quality, suggests fixes, and optionally auto-applies them. Requires GOOGLE_API_KEY.",
|
|
69402
69474
|
schema: external_exports.object({
|
|
69403
69475
|
videoPath: external_exports.string().describe("Path to the video file to review"),
|
|
@@ -69426,6 +69498,8 @@ var init_inspect = __esm({
|
|
|
69426
69498
|
name: "inspect_suggest",
|
|
69427
69499
|
category: "analyze",
|
|
69428
69500
|
cost: "low",
|
|
69501
|
+
title: "Suggest Edits with AI",
|
|
69502
|
+
annotations: { readOnly: false, openWorld: true },
|
|
69429
69503
|
description: "Get natural-language edit suggestions for a project from Gemini. Returns suggestions array with type/confidence/clipIds. With `apply: true`, applies the first suggestion in place. Requires GOOGLE_API_KEY.",
|
|
69430
69504
|
schema: external_exports.object({
|
|
69431
69505
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -69481,6 +69555,8 @@ var init_generate2 = __esm({
|
|
|
69481
69555
|
name: "generate_motion",
|
|
69482
69556
|
category: "generate",
|
|
69483
69557
|
cost: "low",
|
|
69558
|
+
title: "Generate Motion Graphics",
|
|
69559
|
+
annotations: { readOnly: false, openWorld: true },
|
|
69484
69560
|
description: "Generate standalone motion graphics using Claude or Gemini + Remotion. For overlays on an existing video, prefer edit_motion_overlay. Requires ANTHROPIC_API_KEY (Claude) or GOOGLE_API_KEY (Gemini).",
|
|
69485
69561
|
schema: external_exports.object({
|
|
69486
69562
|
description: external_exports.string().describe("Description of the motion graphic to generate"),
|
|
@@ -69520,6 +69596,8 @@ var init_generate2 = __esm({
|
|
|
69520
69596
|
name: "generate_speech",
|
|
69521
69597
|
category: "generate",
|
|
69522
69598
|
cost: "low",
|
|
69599
|
+
title: "Generate Speech Audio",
|
|
69600
|
+
annotations: { readOnly: false, openWorld: true },
|
|
69523
69601
|
description: "Generate speech from text using ElevenLabs TTS. Requires ELEVENLABS_API_KEY.",
|
|
69524
69602
|
schema: external_exports.object({
|
|
69525
69603
|
text: external_exports.string().describe("Text to convert to speech"),
|
|
@@ -69540,6 +69618,8 @@ var init_generate2 = __esm({
|
|
|
69540
69618
|
name: "generate_narration",
|
|
69541
69619
|
category: "generate",
|
|
69542
69620
|
cost: "low",
|
|
69621
|
+
title: "Generate Narration Audio",
|
|
69622
|
+
annotations: { readOnly: false, openWorld: true },
|
|
69543
69623
|
description: "Generate narration from text using ElevenLabs TTS. Product-facing alias for generate_speech. Requires ELEVENLABS_API_KEY.",
|
|
69544
69624
|
schema: external_exports.object({
|
|
69545
69625
|
text: external_exports.string().describe("Narration text to convert to speech"),
|
|
@@ -69564,6 +69644,8 @@ var init_generate2 = __esm({
|
|
|
69564
69644
|
name: "generate_sound_effect",
|
|
69565
69645
|
category: "generate",
|
|
69566
69646
|
cost: "low",
|
|
69647
|
+
title: "Generate Sound Effect",
|
|
69648
|
+
annotations: { readOnly: false, openWorld: true },
|
|
69567
69649
|
description: "Generate sound effects using ElevenLabs. Requires ELEVENLABS_API_KEY.",
|
|
69568
69650
|
schema: external_exports.object({
|
|
69569
69651
|
prompt: external_exports.string().describe("Description of the sound effect"),
|
|
@@ -69585,6 +69667,8 @@ var init_generate2 = __esm({
|
|
|
69585
69667
|
name: "generate_music",
|
|
69586
69668
|
category: "generate",
|
|
69587
69669
|
cost: "low",
|
|
69670
|
+
title: "Generate Music",
|
|
69671
|
+
annotations: { readOnly: false, openWorld: true },
|
|
69588
69672
|
description: "Generate background music from text prompt. ElevenLabs (default, up to 10min) or Replicate MusicGen (max 30s). Requires ELEVENLABS_API_KEY or REPLICATE_API_TOKEN.",
|
|
69589
69673
|
schema: external_exports.object({
|
|
69590
69674
|
prompt: external_exports.string().describe("Description of the music to generate"),
|
|
@@ -69630,6 +69714,8 @@ var init_generate2 = __esm({
|
|
|
69630
69714
|
name: "generate_music_status",
|
|
69631
69715
|
category: "generate",
|
|
69632
69716
|
cost: "free",
|
|
69717
|
+
title: "Check Music Generation Status",
|
|
69718
|
+
annotations: { readOnly: true, openWorld: true },
|
|
69633
69719
|
description: "Check Replicate music generation task status. `generate_music` returns a task id; this tool polls it until the audio URL is ready. Requires REPLICATE_API_TOKEN.",
|
|
69634
69720
|
schema: external_exports.object({
|
|
69635
69721
|
taskId: external_exports.string().describe("Task ID returned from generate_music")
|
|
@@ -69653,6 +69739,8 @@ var init_generate2 = __esm({
|
|
|
69653
69739
|
name: "generate_image",
|
|
69654
69740
|
category: "generate",
|
|
69655
69741
|
cost: "low",
|
|
69742
|
+
title: "Generate Image",
|
|
69743
|
+
annotations: { readOnly: false, openWorld: true },
|
|
69656
69744
|
description: "Generate an image using AI. Supports Gemini (free), OpenAI GPT Image, or Grok Imagine. Requires GOOGLE_API_KEY (Gemini), OPENAI_API_KEY (OpenAI), or XAI_API_KEY (Grok).",
|
|
69657
69745
|
schema: external_exports.object({
|
|
69658
69746
|
prompt: external_exports.string().describe("Image description prompt"),
|
|
@@ -69686,6 +69774,8 @@ var init_generate2 = __esm({
|
|
|
69686
69774
|
name: "generate_storyboard",
|
|
69687
69775
|
category: "generate",
|
|
69688
69776
|
cost: "low",
|
|
69777
|
+
title: "Generate Storyboard",
|
|
69778
|
+
annotations: { readOnly: false, openWorld: true },
|
|
69689
69779
|
description: "Generate a video storyboard from text content using Claude. Returns scene segments with descriptions, visuals, and narration. Requires ANTHROPIC_API_KEY.",
|
|
69690
69780
|
schema: external_exports.object({
|
|
69691
69781
|
content: external_exports.string().describe("Text content to analyze (script, article, etc.)"),
|
|
@@ -69709,6 +69799,8 @@ var init_generate2 = __esm({
|
|
|
69709
69799
|
name: "generate_background",
|
|
69710
69800
|
category: "generate",
|
|
69711
69801
|
cost: "low",
|
|
69802
|
+
title: "Generate Background Image",
|
|
69803
|
+
annotations: { readOnly: false, openWorld: true },
|
|
69712
69804
|
description: "Generate a cinematic backdrop image (OpenAI gpt-image-2 / DALL\xB7E variant tuned for video backgrounds). Returns the image URL and, when `output` is provided, downloads the PNG to disk. Requires OPENAI_API_KEY.",
|
|
69713
69805
|
schema: external_exports.object({
|
|
69714
69806
|
description: external_exports.string().describe("Background description / image prompt."),
|
|
@@ -69733,6 +69825,8 @@ var init_generate2 = __esm({
|
|
|
69733
69825
|
name: "generate_thumbnail",
|
|
69734
69826
|
category: "generate",
|
|
69735
69827
|
cost: "low",
|
|
69828
|
+
title: "Generate Thumbnail",
|
|
69829
|
+
annotations: { readOnly: false, openWorld: true },
|
|
69736
69830
|
description: "Extract the best thumbnail frame from a video using Gemini AI analysis. Requires GOOGLE_API_KEY.",
|
|
69737
69831
|
schema: external_exports.object({
|
|
69738
69832
|
videoPath: external_exports.string().describe("Path to the video file"),
|
|
@@ -69754,6 +69848,8 @@ var init_generate2 = __esm({
|
|
|
69754
69848
|
name: "generate_video",
|
|
69755
69849
|
category: "generate",
|
|
69756
69850
|
cost: "high",
|
|
69851
|
+
title: "Generate Video",
|
|
69852
|
+
annotations: { readOnly: false, openWorld: true },
|
|
69757
69853
|
description: "Generate video using AI. Supports Seedance 2.0 via fal.ai, Grok, Kling, Runway, and Veo. Requires FAL_API_KEY, XAI_API_KEY, KLING_API_KEY, RUNWAY_API_SECRET, or GOOGLE_API_KEY.",
|
|
69758
69854
|
schema: external_exports.object({
|
|
69759
69855
|
prompt: external_exports.string().describe("Text prompt describing the video"),
|
|
@@ -69815,6 +69911,8 @@ var init_generate2 = __esm({
|
|
|
69815
69911
|
name: "generate_video_status",
|
|
69816
69912
|
category: "generate",
|
|
69817
69913
|
cost: "free",
|
|
69914
|
+
title: "Check Video Generation Status",
|
|
69915
|
+
annotations: { readOnly: false, openWorld: true },
|
|
69818
69916
|
description: "Check video generation status for Grok, Runway, Kling, or Veo tasks.",
|
|
69819
69917
|
schema: external_exports.object({
|
|
69820
69918
|
taskId: external_exports.string().describe("Task ID from video generation"),
|
|
@@ -69845,6 +69943,8 @@ var init_generate2 = __esm({
|
|
|
69845
69943
|
name: "generate_video_cancel",
|
|
69846
69944
|
category: "generate",
|
|
69847
69945
|
cost: "free",
|
|
69946
|
+
title: "Cancel Video Generation",
|
|
69947
|
+
annotations: { readOnly: false, openWorld: true },
|
|
69848
69948
|
description: "Cancel a Runway video generation task.",
|
|
69849
69949
|
schema: external_exports.object({
|
|
69850
69950
|
taskId: external_exports.string().describe("Task ID to cancel")
|
|
@@ -69863,6 +69963,8 @@ var init_generate2 = __esm({
|
|
|
69863
69963
|
name: "generate_video_extend",
|
|
69864
69964
|
category: "generate",
|
|
69865
69965
|
cost: "high",
|
|
69966
|
+
title: "Extend Generated Video",
|
|
69967
|
+
annotations: { readOnly: false, openWorld: true },
|
|
69866
69968
|
description: "Extend video duration using Kling or Veo. Requires the video/operation ID from a previous generation.",
|
|
69867
69969
|
schema: external_exports.object({
|
|
69868
69970
|
videoId: external_exports.string().describe("Video ID (Kling) or operation name (Veo)"),
|
|
@@ -69938,6 +70040,8 @@ var init_storyboard2 = __esm({
|
|
|
69938
70040
|
name: "storyboard_list",
|
|
69939
70041
|
category: "storyboard",
|
|
69940
70042
|
cost: "free",
|
|
70043
|
+
title: "List Storyboard Beats",
|
|
70044
|
+
annotations: { readOnly: true, openWorld: false },
|
|
69941
70045
|
description: "List beats, ids, durations, and cue blocks from a project's STORYBOARD.md.",
|
|
69942
70046
|
schema: projectDirSchema,
|
|
69943
70047
|
async execute(args, ctx) {
|
|
@@ -69964,6 +70068,8 @@ var init_storyboard2 = __esm({
|
|
|
69964
70068
|
name: "storyboard_validate",
|
|
69965
70069
|
category: "storyboard",
|
|
69966
70070
|
cost: "free",
|
|
70071
|
+
title: "Validate Storyboard",
|
|
70072
|
+
annotations: { readOnly: true, openWorld: false },
|
|
69967
70073
|
description: "Validate STORYBOARD.md beat ids and cue blocks.",
|
|
69968
70074
|
schema: projectDirSchema,
|
|
69969
70075
|
async execute(args, ctx) {
|
|
@@ -69994,6 +70100,8 @@ var init_storyboard2 = __esm({
|
|
|
69994
70100
|
name: "storyboard_get",
|
|
69995
70101
|
category: "storyboard",
|
|
69996
70102
|
cost: "free",
|
|
70103
|
+
title: "Get Storyboard Beat",
|
|
70104
|
+
annotations: { readOnly: true, openWorld: false },
|
|
69997
70105
|
description: "Return one STORYBOARD.md beat as structured data.",
|
|
69998
70106
|
schema: external_exports.object({
|
|
69999
70107
|
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
|
|
@@ -70016,6 +70124,8 @@ var init_storyboard2 = __esm({
|
|
|
70016
70124
|
name: "storyboard_set",
|
|
70017
70125
|
category: "storyboard",
|
|
70018
70126
|
cost: "free",
|
|
70127
|
+
title: "Set Storyboard Cue",
|
|
70128
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
70019
70129
|
description: "Set or unset one cue on one beat in STORYBOARD.md.",
|
|
70020
70130
|
schema: external_exports.object({
|
|
70021
70131
|
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
|
|
@@ -70052,6 +70162,8 @@ var init_storyboard2 = __esm({
|
|
|
70052
70162
|
name: "storyboard_move",
|
|
70053
70163
|
category: "storyboard",
|
|
70054
70164
|
cost: "free",
|
|
70165
|
+
title: "Reorder Storyboard Beat",
|
|
70166
|
+
annotations: { readOnly: false, openWorld: false },
|
|
70055
70167
|
description: "Move one beat after another beat in STORYBOARD.md.",
|
|
70056
70168
|
schema: external_exports.object({
|
|
70057
70169
|
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
|
|
@@ -70082,6 +70194,8 @@ var init_storyboard2 = __esm({
|
|
|
70082
70194
|
name: "storyboard_revise",
|
|
70083
70195
|
category: "storyboard",
|
|
70084
70196
|
cost: "low",
|
|
70197
|
+
title: "Revise Storyboard with AI",
|
|
70198
|
+
annotations: { readOnly: false, openWorld: true },
|
|
70085
70199
|
description: "Revise an existing STORYBOARD.md from a natural-language request. Reads project context, validates the revised storyboard, and writes unless dryRun is true.",
|
|
70086
70200
|
schema: external_exports.object({
|
|
70087
70201
|
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
|
|
@@ -70113,6 +70227,8 @@ var init_storyboard2 = __esm({
|
|
|
70113
70227
|
name: "plan",
|
|
70114
70228
|
category: "storyboard",
|
|
70115
70229
|
cost: "free",
|
|
70230
|
+
title: "Plan Build Cost and Stages",
|
|
70231
|
+
annotations: { readOnly: true, openWorld: false },
|
|
70116
70232
|
description: "Read STORYBOARD.md and return the build plan, missing artifacts, provider needs, and estimated cost.",
|
|
70117
70233
|
schema: external_exports.object({
|
|
70118
70234
|
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION3),
|
|
@@ -70193,6 +70309,8 @@ var init_remix = __esm({
|
|
|
70193
70309
|
name: "remix_highlights",
|
|
70194
70310
|
category: "pipeline",
|
|
70195
70311
|
cost: "low",
|
|
70312
|
+
title: "Extract Video Highlights",
|
|
70313
|
+
annotations: { readOnly: false, openWorld: true },
|
|
70196
70314
|
description: "Extract highlight clips from a longer video using AI analysis. Requires OPENAI_API_KEY+ANTHROPIC_API_KEY or GOOGLE_API_KEY (with --use-gemini).",
|
|
70197
70315
|
schema: external_exports.object({
|
|
70198
70316
|
media: external_exports.string().describe("Path to the input video file"),
|
|
@@ -70226,6 +70344,8 @@ var init_remix = __esm({
|
|
|
70226
70344
|
name: "remix_auto_shorts",
|
|
70227
70345
|
category: "pipeline",
|
|
70228
70346
|
cost: "medium",
|
|
70347
|
+
title: "Generate Auto Shorts",
|
|
70348
|
+
annotations: { readOnly: false, openWorld: true },
|
|
70229
70349
|
description: "Automatically generate short-form content (Reels/TikTok/Shorts) from a longer video. Same API key requirements as remix_highlights.",
|
|
70230
70350
|
schema: external_exports.object({
|
|
70231
70351
|
video: external_exports.string().describe("Path to the input video file"),
|
|
@@ -70263,6 +70383,8 @@ var init_remix = __esm({
|
|
|
70263
70383
|
name: "run",
|
|
70264
70384
|
category: "pipeline",
|
|
70265
70385
|
cost: "very-high",
|
|
70386
|
+
title: "Run YAML Pipeline",
|
|
70387
|
+
annotations: { readOnly: false, openWorld: true },
|
|
70266
70388
|
surfaces: ["mcp"],
|
|
70267
70389
|
description: "Execute a declarative YAML pipeline (Video as Code). Accepts either a file path or inline YAML. Supports dry-run, resume-from-checkpoint, and budget limits. Cost depends on the steps \u2014 use dryRun: true first to preview.",
|
|
70268
70390
|
schema: external_exports.object({
|
|
@@ -70342,6 +70464,8 @@ var init_remix = __esm({
|
|
|
70342
70464
|
name: "remix_regenerate_scene",
|
|
70343
70465
|
category: "pipeline",
|
|
70344
70466
|
cost: "high",
|
|
70467
|
+
title: "Regenerate Storyboard Scenes",
|
|
70468
|
+
annotations: { readOnly: false, openWorld: true },
|
|
70345
70469
|
description: "Regenerate specific scenes against an existing storyboard.{yaml,json} on disk. Can regenerate video, image, or narration independently.",
|
|
70346
70470
|
schema: external_exports.object({
|
|
70347
70471
|
projectDir: external_exports.string().describe("Path to the project output directory containing storyboard.json"),
|
|
@@ -70386,6 +70510,8 @@ var init_detect2 = __esm({
|
|
|
70386
70510
|
name: "detect_scenes",
|
|
70387
70511
|
category: "detect",
|
|
70388
70512
|
cost: "free",
|
|
70513
|
+
title: "Detect Scene Cuts",
|
|
70514
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
70389
70515
|
description: "Detect scene changes in video using FFmpeg. No API key needed.",
|
|
70390
70516
|
schema: external_exports.object({
|
|
70391
70517
|
videoPath: external_exports.string().describe("Path to the input video file"),
|
|
@@ -70410,6 +70536,8 @@ var init_detect2 = __esm({
|
|
|
70410
70536
|
name: "detect_silence",
|
|
70411
70537
|
category: "detect",
|
|
70412
70538
|
cost: "free",
|
|
70539
|
+
title: "Detect Silence Periods",
|
|
70540
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
70413
70541
|
description: "Detect silence periods in audio/video using FFmpeg. No API key needed.",
|
|
70414
70542
|
schema: external_exports.object({
|
|
70415
70543
|
mediaPath: external_exports.string().describe("Path to the audio/video file"),
|
|
@@ -70431,6 +70559,8 @@ var init_detect2 = __esm({
|
|
|
70431
70559
|
name: "detect_beats",
|
|
70432
70560
|
category: "detect",
|
|
70433
70561
|
cost: "free",
|
|
70562
|
+
title: "Detect Audio Beats",
|
|
70563
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
70434
70564
|
description: "Detect beats in audio for music sync using FFmpeg loudness analysis. No API key needed.",
|
|
70435
70565
|
schema: external_exports.object({
|
|
70436
70566
|
audioPath: external_exports.string().describe("Path to the audio file"),
|
|
@@ -70504,6 +70634,8 @@ var init_timeline = __esm({
|
|
|
70504
70634
|
name: "timeline_create",
|
|
70505
70635
|
category: "timeline",
|
|
70506
70636
|
cost: "free",
|
|
70637
|
+
title: "Create Timeline",
|
|
70638
|
+
annotations: { readOnly: false, openWorld: false },
|
|
70507
70639
|
description: "Create a low-level timeline JSON file for FFmpeg-style editing",
|
|
70508
70640
|
schema: external_exports.object({
|
|
70509
70641
|
name: external_exports.string().describe("Timeline name or directory path"),
|
|
@@ -70534,6 +70666,8 @@ var init_timeline = __esm({
|
|
|
70534
70666
|
name: "timeline_info",
|
|
70535
70667
|
category: "timeline",
|
|
70536
70668
|
cost: "free",
|
|
70669
|
+
title: "Get Timeline Info",
|
|
70670
|
+
annotations: { readOnly: true, openWorld: false },
|
|
70537
70671
|
description: "Get information about a timeline JSON file. Legacy *.vibe.json files are supported.",
|
|
70538
70672
|
schema: external_exports.object({
|
|
70539
70673
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file")
|
|
@@ -70561,6 +70695,8 @@ var init_timeline = __esm({
|
|
|
70561
70695
|
name: "timeline_add_source",
|
|
70562
70696
|
category: "timeline",
|
|
70563
70697
|
cost: "free",
|
|
70698
|
+
title: "Add Source to Timeline",
|
|
70699
|
+
annotations: { readOnly: false, openWorld: false },
|
|
70564
70700
|
description: "Add a media source (video, audio, image) to the timeline",
|
|
70565
70701
|
schema: external_exports.object({
|
|
70566
70702
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -70586,6 +70722,8 @@ var init_timeline = __esm({
|
|
|
70586
70722
|
name: "timeline_add_clip",
|
|
70587
70723
|
category: "timeline",
|
|
70588
70724
|
cost: "free",
|
|
70725
|
+
title: "Add Clip to Timeline",
|
|
70726
|
+
annotations: { readOnly: false, openWorld: false },
|
|
70589
70727
|
description: "Add a clip to the timeline from an existing source",
|
|
70590
70728
|
schema: external_exports.object({
|
|
70591
70729
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -70617,6 +70755,8 @@ var init_timeline = __esm({
|
|
|
70617
70755
|
name: "timeline_split_clip",
|
|
70618
70756
|
category: "timeline",
|
|
70619
70757
|
cost: "free",
|
|
70758
|
+
title: "Split Clip",
|
|
70759
|
+
annotations: { readOnly: false, openWorld: false },
|
|
70620
70760
|
description: "Split a clip at a specific time",
|
|
70621
70761
|
schema: external_exports.object({
|
|
70622
70762
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -70635,6 +70775,8 @@ var init_timeline = __esm({
|
|
|
70635
70775
|
name: "timeline_trim_clip",
|
|
70636
70776
|
category: "timeline",
|
|
70637
70777
|
cost: "free",
|
|
70778
|
+
title: "Trim Clip",
|
|
70779
|
+
annotations: { readOnly: false, openWorld: false },
|
|
70638
70780
|
description: "Trim a clip by adjusting its start or end",
|
|
70639
70781
|
schema: external_exports.object({
|
|
70640
70782
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -70654,6 +70796,8 @@ var init_timeline = __esm({
|
|
|
70654
70796
|
name: "timeline_move_clip",
|
|
70655
70797
|
category: "timeline",
|
|
70656
70798
|
cost: "free",
|
|
70799
|
+
title: "Move Clip",
|
|
70800
|
+
annotations: { readOnly: false, openWorld: false },
|
|
70657
70801
|
description: "Move a clip to a new position or track",
|
|
70658
70802
|
schema: external_exports.object({
|
|
70659
70803
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -70676,6 +70820,8 @@ var init_timeline = __esm({
|
|
|
70676
70820
|
name: "timeline_delete_clip",
|
|
70677
70821
|
category: "timeline",
|
|
70678
70822
|
cost: "free",
|
|
70823
|
+
title: "Delete Clip",
|
|
70824
|
+
annotations: { readOnly: false, openWorld: false },
|
|
70679
70825
|
description: "Delete a clip from the timeline",
|
|
70680
70826
|
schema: external_exports.object({
|
|
70681
70827
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -70692,6 +70838,8 @@ var init_timeline = __esm({
|
|
|
70692
70838
|
name: "timeline_duplicate_clip",
|
|
70693
70839
|
category: "timeline",
|
|
70694
70840
|
cost: "free",
|
|
70841
|
+
title: "Duplicate Clip",
|
|
70842
|
+
annotations: { readOnly: false, openWorld: false },
|
|
70695
70843
|
description: "Duplicate a clip on the timeline (optionally at a new start time)",
|
|
70696
70844
|
schema: external_exports.object({
|
|
70697
70845
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -70710,6 +70858,8 @@ var init_timeline = __esm({
|
|
|
70710
70858
|
name: "timeline_add_effect",
|
|
70711
70859
|
category: "timeline",
|
|
70712
70860
|
cost: "free",
|
|
70861
|
+
title: "Add Effect to Clip",
|
|
70862
|
+
annotations: { readOnly: false, openWorld: false },
|
|
70713
70863
|
description: "Add an effect to a clip",
|
|
70714
70864
|
schema: external_exports.object({
|
|
70715
70865
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -70736,6 +70886,8 @@ var init_timeline = __esm({
|
|
|
70736
70886
|
name: "timeline_add_track",
|
|
70737
70887
|
category: "timeline",
|
|
70738
70888
|
cost: "free",
|
|
70889
|
+
title: "Add Track to Timeline",
|
|
70890
|
+
annotations: { readOnly: false, openWorld: false },
|
|
70739
70891
|
description: "Add a new track to the timeline",
|
|
70740
70892
|
schema: external_exports.object({
|
|
70741
70893
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -70762,6 +70914,8 @@ var init_timeline = __esm({
|
|
|
70762
70914
|
name: "timeline_list",
|
|
70763
70915
|
category: "timeline",
|
|
70764
70916
|
cost: "free",
|
|
70917
|
+
title: "List Timeline Contents",
|
|
70918
|
+
annotations: { readOnly: true, openWorld: false },
|
|
70765
70919
|
description: "List all sources, tracks, and clips in a project",
|
|
70766
70920
|
schema: external_exports.object({
|
|
70767
70921
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file")
|
|
@@ -70812,6 +70966,8 @@ var init_project2 = __esm({
|
|
|
70812
70966
|
name: "project_create",
|
|
70813
70967
|
category: "project",
|
|
70814
70968
|
cost: "free",
|
|
70969
|
+
title: "Create Project",
|
|
70970
|
+
annotations: { readOnly: false, openWorld: false },
|
|
70815
70971
|
description: "Deprecated alias for creating low-level timeline state. Prefer timeline_create.",
|
|
70816
70972
|
schema: external_exports.object({
|
|
70817
70973
|
name: external_exports.string().describe("Project name"),
|
|
@@ -70836,6 +70992,8 @@ var init_project2 = __esm({
|
|
|
70836
70992
|
name: "project_info",
|
|
70837
70993
|
category: "project",
|
|
70838
70994
|
cost: "free",
|
|
70995
|
+
title: "Get Project Info",
|
|
70996
|
+
annotations: { readOnly: true, openWorld: false },
|
|
70839
70997
|
description: "Deprecated alias for timeline_info. Legacy *.vibe.json files remain supported.",
|
|
70840
70998
|
schema: external_exports.object({
|
|
70841
70999
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file")
|
|
@@ -71735,6 +71893,8 @@ var init_export2 = __esm({
|
|
|
71735
71893
|
name: "export_video",
|
|
71736
71894
|
category: "export",
|
|
71737
71895
|
cost: "free",
|
|
71896
|
+
title: "Export Timeline to Video",
|
|
71897
|
+
annotations: { readOnly: false, openWorld: false },
|
|
71738
71898
|
description: "Export a VibeFrame timeline to a video file (MP4, WebM, or MOV). Requires FFmpeg.",
|
|
71739
71899
|
schema: external_exports.object({
|
|
71740
71900
|
projectPath: external_exports.string().describe("Path to timeline.json, a timeline directory, or a legacy *.vibe.json file"),
|
|
@@ -71834,6 +71994,8 @@ var init_agent_only = __esm({
|
|
|
71834
71994
|
name: "fs_list",
|
|
71835
71995
|
category: "agent-only",
|
|
71836
71996
|
cost: "free",
|
|
71997
|
+
title: "List Files",
|
|
71998
|
+
annotations: { readOnly: true, openWorld: false },
|
|
71837
71999
|
surfaces: ["agent"],
|
|
71838
72000
|
description: "List files and directories in a path",
|
|
71839
72001
|
schema: external_exports.object({
|
|
@@ -71867,6 +72029,8 @@ var init_agent_only = __esm({
|
|
|
71867
72029
|
name: "fs_read",
|
|
71868
72030
|
category: "agent-only",
|
|
71869
72031
|
cost: "free",
|
|
72032
|
+
title: "Read File",
|
|
72033
|
+
annotations: { readOnly: true, openWorld: false },
|
|
71870
72034
|
surfaces: ["agent"],
|
|
71871
72035
|
description: "Read contents of a text file",
|
|
71872
72036
|
schema: external_exports.object({
|
|
@@ -71889,6 +72053,8 @@ var init_agent_only = __esm({
|
|
|
71889
72053
|
name: "fs_write",
|
|
71890
72054
|
category: "agent-only",
|
|
71891
72055
|
cost: "free",
|
|
72056
|
+
title: "Write File",
|
|
72057
|
+
annotations: { readOnly: false, openWorld: false },
|
|
71892
72058
|
surfaces: ["agent"],
|
|
71893
72059
|
description: "Write content to a file",
|
|
71894
72060
|
schema: external_exports.object({
|
|
@@ -71909,6 +72075,8 @@ var init_agent_only = __esm({
|
|
|
71909
72075
|
name: "fs_exists",
|
|
71910
72076
|
category: "agent-only",
|
|
71911
72077
|
cost: "free",
|
|
72078
|
+
title: "Check Path Exists",
|
|
72079
|
+
annotations: { readOnly: true, openWorld: false },
|
|
71912
72080
|
surfaces: ["agent"],
|
|
71913
72081
|
description: "Check if a file or directory exists",
|
|
71914
72082
|
schema: external_exports.object({
|
|
@@ -71930,6 +72098,8 @@ var init_agent_only = __esm({
|
|
|
71930
72098
|
name: "batch_import",
|
|
71931
72099
|
category: "agent-only",
|
|
71932
72100
|
cost: "free",
|
|
72101
|
+
title: "Batch Import Media",
|
|
72102
|
+
annotations: { readOnly: false, openWorld: false },
|
|
71933
72103
|
surfaces: ["agent"],
|
|
71934
72104
|
description: "Import multiple media files from a directory into a project. Scans directory for video, audio, and image files.",
|
|
71935
72105
|
schema: external_exports.object({
|
|
@@ -71999,6 +72169,8 @@ var init_agent_only = __esm({
|
|
|
71999
72169
|
name: "batch_concat",
|
|
72000
72170
|
category: "agent-only",
|
|
72001
72171
|
cost: "free",
|
|
72172
|
+
title: "Batch Concatenate Sources",
|
|
72173
|
+
annotations: { readOnly: false, openWorld: false },
|
|
72002
72174
|
surfaces: ["agent"],
|
|
72003
72175
|
description: "Concatenate multiple sources into sequential clips on the timeline",
|
|
72004
72176
|
schema: external_exports.object({
|
|
@@ -72068,6 +72240,8 @@ var init_agent_only = __esm({
|
|
|
72068
72240
|
name: "batch_apply_effect",
|
|
72069
72241
|
category: "agent-only",
|
|
72070
72242
|
cost: "free",
|
|
72243
|
+
title: "Batch Apply Effect",
|
|
72244
|
+
annotations: { readOnly: false, openWorld: false },
|
|
72071
72245
|
surfaces: ["agent"],
|
|
72072
72246
|
description: "Apply an effect to multiple clips at once",
|
|
72073
72247
|
schema: external_exports.object({
|
|
@@ -72124,6 +72298,8 @@ var init_agent_only = __esm({
|
|
|
72124
72298
|
name: "timeline_clear",
|
|
72125
72299
|
category: "agent-only",
|
|
72126
72300
|
cost: "free",
|
|
72301
|
+
title: "Clear Timeline",
|
|
72302
|
+
annotations: { readOnly: false, openWorld: false },
|
|
72127
72303
|
surfaces: ["agent"],
|
|
72128
72304
|
description: "Clear timeline contents (remove clips, tracks, or sources)",
|
|
72129
72305
|
schema: external_exports.object({
|
|
@@ -72198,6 +72374,8 @@ var init_agent_only = __esm({
|
|
|
72198
72374
|
name: "project_set",
|
|
72199
72375
|
category: "agent-only",
|
|
72200
72376
|
cost: "free",
|
|
72377
|
+
title: "Update Project Settings",
|
|
72378
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
72201
72379
|
surfaces: ["agent"],
|
|
72202
72380
|
description: "Update timeline settings (name, aspect ratio, frame rate)",
|
|
72203
72381
|
schema: external_exports.object({
|
|
@@ -72243,6 +72421,8 @@ var init_agent_only = __esm({
|
|
|
72243
72421
|
name: "project_open",
|
|
72244
72422
|
category: "agent-only",
|
|
72245
72423
|
cost: "free",
|
|
72424
|
+
title: "Open Project",
|
|
72425
|
+
annotations: { readOnly: false, idempotent: true, openWorld: false },
|
|
72246
72426
|
surfaces: ["agent"],
|
|
72247
72427
|
description: "Open an existing project and set it as the current context",
|
|
72248
72428
|
schema: external_exports.object({
|
|
@@ -72281,6 +72461,8 @@ var init_agent_only = __esm({
|
|
|
72281
72461
|
name: "project_save",
|
|
72282
72462
|
category: "agent-only",
|
|
72283
72463
|
cost: "free",
|
|
72464
|
+
title: "Save Project",
|
|
72465
|
+
annotations: { readOnly: false, openWorld: false },
|
|
72284
72466
|
surfaces: ["agent"],
|
|
72285
72467
|
description: "Save the current project (uses ctx.agent.projectPath if no path given)",
|
|
72286
72468
|
schema: external_exports.object({
|
|
@@ -72315,6 +72497,8 @@ var init_agent_only = __esm({
|
|
|
72315
72497
|
name: "export_audio",
|
|
72316
72498
|
category: "agent-only",
|
|
72317
72499
|
cost: "free",
|
|
72500
|
+
title: "Export Audio",
|
|
72501
|
+
annotations: { readOnly: false, openWorld: false },
|
|
72318
72502
|
surfaces: ["agent"],
|
|
72319
72503
|
description: "Export audio track from a project. Not implemented \u2014 use export_video then strip audio with FFmpeg.",
|
|
72320
72504
|
schema: external_exports.object({
|
|
@@ -72333,6 +72517,8 @@ var init_agent_only = __esm({
|
|
|
72333
72517
|
name: "export_subtitles",
|
|
72334
72518
|
category: "agent-only",
|
|
72335
72519
|
cost: "free",
|
|
72520
|
+
title: "Export Subtitles",
|
|
72521
|
+
annotations: { readOnly: false, openWorld: false },
|
|
72336
72522
|
surfaces: ["agent"],
|
|
72337
72523
|
description: "Export subtitles from transcription. Not implemented \u2014 use audio_transcribe to generate subtitles from audio.",
|
|
72338
72524
|
schema: external_exports.object({
|
|
@@ -72351,6 +72537,8 @@ var init_agent_only = __esm({
|
|
|
72351
72537
|
name: "media_info",
|
|
72352
72538
|
category: "agent-only",
|
|
72353
72539
|
cost: "free",
|
|
72540
|
+
title: "Get Media Info",
|
|
72541
|
+
annotations: { readOnly: true, openWorld: false },
|
|
72354
72542
|
surfaces: ["agent"],
|
|
72355
72543
|
description: "Get information about a media file (duration, resolution, codec, etc.)",
|
|
72356
72544
|
schema: external_exports.object({
|
|
@@ -72435,6 +72623,8 @@ Audio:`);
|
|
|
72435
72623
|
name: "media_compress",
|
|
72436
72624
|
category: "agent-only",
|
|
72437
72625
|
cost: "free",
|
|
72626
|
+
title: "Compress Media",
|
|
72627
|
+
annotations: { readOnly: false, openWorld: false },
|
|
72438
72628
|
surfaces: ["agent"],
|
|
72439
72629
|
description: "Compress a video or audio file using FFmpeg",
|
|
72440
72630
|
schema: external_exports.object({
|
|
@@ -72496,6 +72686,8 @@ Audio:`);
|
|
|
72496
72686
|
name: "media_convert",
|
|
72497
72687
|
category: "agent-only",
|
|
72498
72688
|
cost: "free",
|
|
72689
|
+
title: "Convert Media",
|
|
72690
|
+
annotations: { readOnly: false, openWorld: false },
|
|
72499
72691
|
surfaces: ["agent"],
|
|
72500
72692
|
description: "Convert media file to a different format using FFmpeg",
|
|
72501
72693
|
schema: external_exports.object({
|
|
@@ -72543,6 +72735,8 @@ Audio:`);
|
|
|
72543
72735
|
name: "media_concat",
|
|
72544
72736
|
category: "agent-only",
|
|
72545
72737
|
cost: "free",
|
|
72738
|
+
title: "Concatenate Media Files",
|
|
72739
|
+
annotations: { readOnly: false, openWorld: false },
|
|
72546
72740
|
surfaces: ["agent"],
|
|
72547
72741
|
description: "Concatenate multiple media files into one using FFmpeg",
|
|
72548
72742
|
schema: external_exports.object({
|
|
@@ -72643,6 +72837,8 @@ var init_walkthrough = __esm({
|
|
|
72643
72837
|
name: "guide",
|
|
72644
72838
|
category: "agent",
|
|
72645
72839
|
cost: "free",
|
|
72840
|
+
title: "Load Workflow Guide",
|
|
72841
|
+
annotations: { readOnly: true, openWorld: false },
|
|
72646
72842
|
description: "Load the step-by-step guide for a vibe workflow (motion overlays, BUILD scene authoring, YAML pipeline authoring, architecture choices). Universal CLI-equivalent of `vibe guide <topic>` and Claude Code's /vibe-* slash commands. Without a topic, returns the guide catalog for discovery.",
|
|
72647
72843
|
schema: guideSchema,
|
|
72648
72844
|
async execute(args) {
|
|
@@ -72686,6 +72882,8 @@ var init_status = __esm({
|
|
|
72686
72882
|
name: "status_job",
|
|
72687
72883
|
category: "status",
|
|
72688
72884
|
cost: "free",
|
|
72885
|
+
title: "Check Job Status",
|
|
72886
|
+
annotations: { readOnly: false, destructive: false, openWorld: true },
|
|
72689
72887
|
description: "Read one local async job record and optionally refresh supported provider status. Supports Runway/Kling video and Replicate music live checks. Also tracks long-running MCP build/render jobs (jobType build/render, provider local): their records are updated in-process \u2014 on completion result.payload carries the full tool result; status 'unknown' means the MCP server restarted mid-job (check build-report.json / render-report.json on disk).",
|
|
72690
72888
|
schema: external_exports.object({
|
|
72691
72889
|
jobId: external_exports.string().describe("Local job id returned by a no-wait command."),
|
|
@@ -72721,6 +72919,8 @@ var init_status = __esm({
|
|
|
72721
72919
|
name: "status_project",
|
|
72722
72920
|
category: "status",
|
|
72723
72921
|
cost: "free",
|
|
72922
|
+
title: "Check Project Status",
|
|
72923
|
+
annotations: { readOnly: false, destructive: false, openWorld: true },
|
|
72724
72924
|
description: "Summarize build-report.json, review-report.json, and local async job records for a VibeFrame project.",
|
|
72725
72925
|
schema: external_exports.object({
|
|
72726
72926
|
projectDir: external_exports.string().optional().describe(PROJECT_DIR_DESCRIPTION4),
|
|
@@ -73013,7 +73213,7 @@ init_source();
|
|
|
73013
73213
|
// package.json
|
|
73014
73214
|
var package_default = {
|
|
73015
73215
|
name: "@vibeframe/cli",
|
|
73016
|
-
version: "0.
|
|
73216
|
+
version: "0.111.0",
|
|
73017
73217
|
description: "VibeFrame CLI - agentic video workflow runtime",
|
|
73018
73218
|
private: false,
|
|
73019
73219
|
license: "MIT",
|