@vibeframe/cli 0.104.3 → 0.105.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/adapters/claude.d.ts +14 -0
- package/dist/agent/adapters/gemini.d.ts +14 -0
- package/dist/agent/adapters/index.d.ts +27 -0
- package/dist/agent/adapters/ollama.d.ts +19 -0
- package/dist/agent/adapters/openai.d.ts +14 -0
- package/dist/agent/adapters/openrouter.d.ts +15 -0
- package/dist/agent/adapters/openrouter.test.d.ts +4 -0
- package/dist/agent/adapters/xai.d.ts +14 -0
- package/dist/agent/index.d.ts +109 -0
- package/dist/agent/memory/index.d.ts +69 -0
- package/dist/agent/prompts/system.d.ts +5 -0
- package/dist/agent/tools/e2e.test.d.ts +25 -0
- package/dist/agent/tools/index.d.ts +59 -0
- package/dist/agent/tools/integration.test.d.ts +10 -0
- package/dist/agent/tools/scene.test.d.ts +1 -0
- package/dist/agent/types.d.ts +72 -0
- package/dist/commands/_shared/build-asset-metadata.d.ts +43 -0
- package/dist/commands/_shared/build-asset-reference.d.ts +18 -0
- package/dist/commands/_shared/build-backdrop-prompt.d.ts +8 -0
- package/dist/commands/_shared/build-backdrop-prompt.test.d.ts +1 -0
- package/dist/commands/_shared/build-cache.d.ts +37 -0
- package/dist/commands/_shared/build-plan.d.ts +107 -0
- package/dist/commands/_shared/build-plan.test.d.ts +1 -0
- package/dist/commands/_shared/compose-prompts.d.ts +97 -0
- package/dist/commands/_shared/compose-prompts.test.d.ts +1 -0
- package/dist/commands/_shared/compose-scenes-skills.d.ts +282 -0
- package/dist/commands/_shared/compose-scenes-skills.test.d.ts +1 -0
- package/dist/commands/_shared/composer-resolve.d.ts +47 -0
- package/dist/commands/_shared/composer-resolve.test.d.ts +1 -0
- package/dist/commands/_shared/cost-tier.d.ts +58 -0
- package/dist/commands/_shared/edit/_helpers.d.ts +12 -0
- package/dist/commands/_shared/edit/caption.d.ts +47 -0
- package/dist/commands/_shared/edit/fade.d.ts +38 -0
- package/dist/commands/_shared/edit/jump-cut.d.ts +80 -0
- package/dist/commands/_shared/edit/noise-reduce.d.ts +33 -0
- package/dist/commands/_shared/edit/silence-cut.d.ts +63 -0
- package/dist/commands/_shared/edit/text-overlay.d.ts +50 -0
- package/dist/commands/_shared/edit/translate-srt.d.ts +40 -0
- package/dist/commands/_shared/edit/video-review.d.ts +62 -0
- package/dist/commands/_shared/execute-fill-gaps.d.ts +97 -0
- package/dist/commands/_shared/hf-skill-bundle/bundle-content.d.ts +16 -0
- package/dist/commands/_shared/hf-skill-bundle/bundle.d.ts +57 -0
- package/dist/commands/_shared/hf-skill-bundle/bundle.test.d.ts +1 -0
- package/dist/commands/_shared/init-templates.d.ts +58 -0
- package/dist/commands/_shared/init-templates.test.d.ts +1 -0
- package/dist/commands/_shared/install-skill.d.ts +76 -0
- package/dist/commands/_shared/install-skill.test.d.ts +1 -0
- package/dist/commands/_shared/openai-image.d.ts +49 -0
- package/dist/commands/_shared/openai-image.test.d.ts +1 -0
- package/dist/commands/_shared/product-surface.d.ts +11 -0
- package/dist/commands/_shared/product-surface.test.d.ts +1 -0
- package/dist/commands/_shared/project-config.d.ts +60 -0
- package/dist/commands/_shared/render-inspect.d.ts +104 -0
- package/dist/commands/_shared/render-inspect.test.d.ts +1 -0
- package/dist/commands/_shared/review-report.d.ts +65 -0
- package/dist/commands/_shared/root-sync.d.ts +39 -0
- package/dist/commands/_shared/scene-audio-mux.d.ts +74 -0
- package/dist/commands/_shared/scene-audio-mux.test.d.ts +6 -0
- package/dist/commands/_shared/scene-audio-scan.d.ts +93 -0
- package/dist/commands/_shared/scene-audio-scan.test.d.ts +5 -0
- package/dist/commands/_shared/scene-build-mode.d.ts +4 -0
- package/dist/commands/_shared/scene-build-mode.test.d.ts +1 -0
- package/dist/commands/_shared/scene-build.d.ts +452 -0
- package/dist/commands/_shared/scene-build.test.d.ts +1 -0
- package/dist/commands/_shared/scene-html-emit.d.ts +139 -0
- package/dist/commands/_shared/scene-html-emit.test.d.ts +1 -0
- package/dist/commands/_shared/scene-inspect.d.ts +56 -0
- package/dist/commands/_shared/scene-inspect.test.d.ts +1 -0
- package/dist/commands/_shared/scene-lint.d.ts +109 -0
- package/dist/commands/_shared/scene-lint.test.d.ts +1 -0
- package/dist/commands/_shared/scene-project.d.ts +147 -0
- package/dist/commands/_shared/scene-project.test.d.ts +1 -0
- package/dist/commands/_shared/scene-render.d.ts +109 -0
- package/dist/commands/_shared/scene-render.test.d.ts +1 -0
- package/dist/commands/_shared/scene-repair.d.ts +22 -0
- package/dist/commands/_shared/scene-repair.test.d.ts +1 -0
- package/dist/commands/_shared/status-jobs.d.ts +197 -0
- package/dist/commands/_shared/status-jobs.test.d.ts +1 -0
- package/dist/commands/_shared/storyboard-draft.d.ts +13 -0
- package/dist/commands/_shared/storyboard-draft.test.d.ts +1 -0
- package/dist/commands/_shared/storyboard-edit.d.ts +26 -0
- package/dist/commands/_shared/storyboard-edit.test.d.ts +1 -0
- package/dist/commands/_shared/storyboard-parse.d.ts +159 -0
- package/dist/commands/_shared/storyboard-parse.test.d.ts +1 -0
- package/dist/commands/_shared/storyboard-revise.d.ts +32 -0
- package/dist/commands/_shared/storyboard-revise.test.d.ts +1 -0
- package/dist/commands/_shared/timeline-project.d.ts +32 -0
- package/dist/commands/_shared/tts-resolve.d.ts +75 -0
- package/dist/commands/_shared/tts-resolve.test.d.ts +5 -0
- package/dist/commands/_shared/video-providers.d.ts +44 -0
- package/dist/commands/_shared/video-utils.d.ts +71 -0
- package/dist/commands/_shared/visual-styles.d.ts +55 -0
- package/dist/commands/_shared/visual-styles.test.d.ts +1 -0
- package/dist/commands/_shared/walkthroughs/walkthroughs.d.ts +47 -0
- package/dist/commands/_shared/walkthroughs/walkthroughs.test.d.ts +1 -0
- package/dist/commands/agent.d.ts +24 -0
- package/dist/commands/ai-analyze.d.ts +105 -0
- package/dist/commands/ai-animated-caption.d.ts +63 -0
- package/dist/commands/ai-audio.d.ts +92 -0
- package/dist/commands/ai-edit-cli.d.ts +13 -0
- package/dist/commands/ai-edit.d.ts +29 -0
- package/dist/commands/ai-fill-gaps.d.ts +15 -0
- package/dist/commands/ai-helpers.d.ts +26 -0
- package/dist/commands/ai-highlights.d.ts +126 -0
- package/dist/commands/ai-image.d.ts +71 -0
- package/dist/commands/ai-motion.d.ts +53 -0
- package/dist/commands/ai-review.d.ts +58 -0
- package/dist/commands/ai-script-pipeline-cli.d.ts +10 -0
- package/dist/commands/ai-script-pipeline.d.ts +74 -0
- package/dist/commands/ai-suggest-edit.d.ts +32 -0
- package/dist/commands/ai-video.d.ts +95 -0
- package/dist/commands/ai.test.d.ts +1 -0
- package/dist/commands/audio.d.ts +17 -0
- package/dist/commands/batch.d.ts +2 -0
- package/dist/commands/batch.test.d.ts +1 -0
- package/dist/commands/build.d.ts +2 -0
- package/dist/commands/completion.d.ts +20 -0
- package/dist/commands/completion.test.d.ts +1 -0
- package/dist/commands/context.d.ts +7 -0
- package/dist/commands/context.test.d.ts +1 -0
- package/dist/commands/demo.d.ts +6 -0
- package/dist/commands/detect.d.ts +55 -0
- package/dist/commands/doctor.d.ts +5 -0
- package/dist/commands/doctor.test.d.ts +1 -0
- package/dist/commands/edit/motion-overlay.d.ts +30 -0
- package/dist/commands/edit-cmd.d.ts +112 -0
- package/dist/commands/envelope-snapshots.test.d.ts +32 -0
- package/dist/commands/export.d.ts +60 -0
- package/dist/commands/export.test.d.ts +1 -0
- package/dist/commands/generate/background.d.ts +22 -0
- package/dist/commands/generate/image.d.ts +8 -0
- package/dist/commands/generate/music-status.d.ts +20 -0
- package/dist/commands/generate/music.d.ts +27 -0
- package/dist/commands/generate/sound-effect.d.ts +19 -0
- package/dist/commands/generate/speech.d.ts +21 -0
- package/dist/commands/generate/storyboard.d.ts +27 -0
- package/dist/commands/generate/thumbnail.d.ts +8 -0
- package/dist/commands/generate/video-cancel.d.ts +8 -0
- package/dist/commands/generate/video-extend.d.ts +8 -0
- package/dist/commands/generate/video-status.d.ts +8 -0
- package/dist/commands/generate/video.d.ts +8 -0
- package/dist/commands/generate.d.ts +36 -0
- package/dist/commands/init.d.ts +24 -0
- package/dist/commands/init.test.d.ts +1 -0
- package/dist/commands/inspect.d.ts +20 -0
- package/dist/commands/media.d.ts +2 -0
- package/dist/commands/output.d.ts +80 -0
- package/dist/commands/output.test.d.ts +1 -0
- package/dist/commands/plan.d.ts +2 -0
- package/dist/commands/project.d.ts +2 -0
- package/dist/commands/project.test.d.ts +1 -0
- package/dist/commands/provider-config-cli.test.d.ts +1 -0
- package/dist/commands/q-flag-collision.test.d.ts +1 -0
- package/dist/commands/remix.d.ts +20 -0
- package/dist/commands/render.d.ts +2 -0
- package/dist/commands/run.d.ts +14 -0
- package/dist/commands/sanitize.d.ts +20 -0
- package/dist/commands/scene.d.ts +92 -0
- package/dist/commands/scene.test.d.ts +1 -0
- package/dist/commands/schema.d.ts +12 -0
- package/dist/commands/setup.d.ts +5 -0
- package/dist/commands/setup.test.d.ts +1 -0
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/storyboard.d.ts +2 -0
- package/dist/commands/timeline.d.ts +2 -0
- package/dist/commands/timeline.test.d.ts +1 -0
- package/dist/commands/validate.d.ts +33 -0
- package/dist/commands/walkthrough.d.ts +21 -0
- package/dist/config/config.test.d.ts +1 -0
- package/dist/config/index.d.ts +110 -0
- package/dist/config/schema.d.ts +64 -0
- package/dist/config/scope.test.d.ts +1 -0
- package/dist/engine/index.d.ts +2 -0
- package/dist/engine/index.js +345 -0
- package/dist/engine/project.d.ts +93 -0
- package/dist/engine/project.test.d.ts +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +483 -291
- package/dist/pipeline/executor.d.ts +27 -0
- package/dist/pipeline/generate-actions.test.d.ts +1 -0
- package/dist/pipeline/index.d.ts +3 -0
- package/dist/pipeline/renderers/__tests__/html-template.test.d.ts +1 -0
- package/dist/pipeline/renderers/__tests__/integration.test.d.ts +1 -0
- package/dist/pipeline/renderers/chrome.d.ts +25 -0
- package/dist/pipeline/renderers/html-clips.d.ts +19 -0
- package/dist/pipeline/renderers/html-runtime.d.ts +6 -0
- package/dist/pipeline/renderers/html-template.d.ts +2 -0
- package/dist/pipeline/renderers/hyperframes.d.ts +7 -0
- package/dist/pipeline/renderers/project-builder.d.ts +7 -0
- package/dist/pipeline/renderers/types.d.ts +39 -0
- package/dist/pipeline/resolver.d.ts +19 -0
- package/dist/pipeline/scene-actions.test.d.ts +1 -0
- package/dist/pipeline/types.d.ts +81 -0
- package/dist/tools/adapters/agent.d.ts +9 -0
- package/dist/tools/adapters/agent.js +188 -0
- package/dist/tools/adapters/mcp.d.ts +34 -0
- package/dist/tools/adapters/mcp.js +173 -0
- package/dist/tools/define-tool.d.ts +82 -0
- package/dist/tools/define-tool.js +214 -0
- package/dist/tools/manifest/_project-io.d.ts +13 -0
- package/dist/tools/manifest/agent-only.d.ts +236 -0
- package/dist/tools/manifest/audio.d.ts +93 -0
- package/dist/tools/manifest/detect.d.ts +47 -0
- package/dist/tools/manifest/edit.d.ts +398 -0
- package/dist/tools/manifest/export.d.ts +27 -0
- package/dist/tools/manifest/generate.d.ts +307 -0
- package/dist/tools/manifest/index.d.ts +22 -0
- package/dist/tools/manifest/index.js +60628 -0
- package/dist/tools/manifest/inspect.d.ts +139 -0
- package/dist/tools/manifest/project.d.ts +33 -0
- package/dist/tools/manifest/remix.d.ts +154 -0
- package/dist/tools/manifest/scene.d.ts +221 -0
- package/dist/tools/manifest/status.d.ts +36 -0
- package/dist/tools/manifest/storyboard.d.ts +136 -0
- package/dist/tools/manifest/timeline.d.ts +173 -0
- package/dist/tools/manifest/walkthrough.d.ts +22 -0
- package/dist/tools/manifest.test.d.ts +13 -0
- package/dist/tools/zod-to-json-schema.d.ts +47 -0
- package/dist/utils/agent-host-detect.d.ts +61 -0
- package/dist/utils/agent-host-detect.test.d.ts +1 -0
- package/dist/utils/api-key.d.ts +58 -0
- package/dist/utils/api-key.test.d.ts +1 -0
- package/dist/utils/audio.d.ts +22 -0
- package/dist/utils/clipboard.d.ts +27 -0
- package/dist/utils/clipboard.test.d.ts +1 -0
- package/dist/utils/exec-safe.d.ts +21 -0
- package/dist/utils/first-run.d.ts +16 -0
- package/dist/utils/input-validation.d.ts +26 -0
- package/dist/utils/key-format.d.ts +15 -0
- package/dist/utils/key-live-test.d.ts +29 -0
- package/dist/utils/key-live-test.test.d.ts +1 -0
- package/dist/utils/open-url.d.ts +26 -0
- package/dist/utils/open-url.test.d.ts +1 -0
- package/dist/utils/project-resolver.d.ts +30 -0
- package/dist/utils/project-resolver.test.d.ts +8 -0
- package/dist/utils/provider-resolver.d.ts +32 -0
- package/dist/utils/provider-resolver.test.d.ts +13 -0
- package/dist/utils/remotion.d.ts +201 -0
- package/dist/utils/subtitle.d.ts +64 -0
- package/dist/utils/subtitle.test.d.ts +1 -0
- package/dist/utils/tty.d.ts +86 -0
- package/dist/utils/tty.test.d.ts +1 -0
- package/dist/utils/upload-host.d.ts +15 -0
- package/dist/utils/upload-host.test.d.ts +1 -0
- package/package.json +15 -115
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module ai-motion
|
|
3
|
+
* @description Motion graphics render and composite command.
|
|
4
|
+
*
|
|
5
|
+
* ## Commands: vibe generate motion
|
|
6
|
+
* ## Dependencies: Claude, Gemini, Remotion
|
|
7
|
+
*
|
|
8
|
+
* Extracted from ai.ts as part of modularisation.
|
|
9
|
+
* ai.ts re-exports all public types and functions from this module.
|
|
10
|
+
* @see MODELS.md for AI model configuration
|
|
11
|
+
*/
|
|
12
|
+
import { type Command } from "commander";
|
|
13
|
+
export interface MotionCommandOptions {
|
|
14
|
+
description: string;
|
|
15
|
+
duration?: number;
|
|
16
|
+
width?: number;
|
|
17
|
+
height?: number;
|
|
18
|
+
fps?: number;
|
|
19
|
+
style?: string;
|
|
20
|
+
/** If set, render the generated code with Remotion */
|
|
21
|
+
render?: boolean;
|
|
22
|
+
/** Base video to composite the motion graphic onto */
|
|
23
|
+
video?: string;
|
|
24
|
+
/** Image to analyze with Gemini — color/mood/composition fed into Claude prompt */
|
|
25
|
+
image?: string;
|
|
26
|
+
/** Analyze base video before generating motion: auto | off | required */
|
|
27
|
+
understand?: "auto" | "off" | "required";
|
|
28
|
+
/** Override the default video understanding prompt */
|
|
29
|
+
understandingPrompt?: string;
|
|
30
|
+
/** Path to existing TSX file to refine instead of generating from scratch */
|
|
31
|
+
fromTsx?: string;
|
|
32
|
+
/**
|
|
33
|
+
* LLM model alias for code generation.
|
|
34
|
+
* sonnet (default) | opus | gemini | gemini-3.1-pro
|
|
35
|
+
*/
|
|
36
|
+
model?: string;
|
|
37
|
+
/** Output path (TSX if code-only, WebM/MP4 if rendered) */
|
|
38
|
+
output?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface MotionCommandResult {
|
|
41
|
+
success: boolean;
|
|
42
|
+
codePath?: string;
|
|
43
|
+
renderedPath?: string;
|
|
44
|
+
compositedPath?: string;
|
|
45
|
+
componentName?: string;
|
|
46
|
+
error?: string;
|
|
47
|
+
}
|
|
48
|
+
export declare function executeMotion(options: MotionCommandOptions): Promise<MotionCommandResult>;
|
|
49
|
+
/**
|
|
50
|
+
* Register the 'motion' sub-command on the given parent command.
|
|
51
|
+
* Called from ai.ts: registerMotionCommand(aiCommand)
|
|
52
|
+
*/
|
|
53
|
+
export declare function registerMotionCommand(aiCommand: Command): void;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module ai-review
|
|
3
|
+
*
|
|
4
|
+
* AI-powered video quality review and auto-fix using Gemini.
|
|
5
|
+
*
|
|
6
|
+
* CLI command: review
|
|
7
|
+
*
|
|
8
|
+
* Execute function:
|
|
9
|
+
* executeReview - Analyze video quality across 5 categories and optionally auto-fix
|
|
10
|
+
*
|
|
11
|
+
* @dependencies Gemini (Google), FFmpeg (auto-fix filters)
|
|
12
|
+
*/
|
|
13
|
+
import { Command } from "commander";
|
|
14
|
+
import type { VideoReviewFeedback } from "./ai-edit.js";
|
|
15
|
+
/** Options for {@link executeReview}. */
|
|
16
|
+
export interface ReviewOptions {
|
|
17
|
+
/** Path to the video file to review */
|
|
18
|
+
videoPath: string;
|
|
19
|
+
/** Optional storyboard JSON for context-aware review */
|
|
20
|
+
storyboardPath?: string;
|
|
21
|
+
/** Optional project context for beat-aware review */
|
|
22
|
+
projectContext?: string;
|
|
23
|
+
/** Automatically apply fixable corrections via FFmpeg */
|
|
24
|
+
autoApply?: boolean;
|
|
25
|
+
/** Run a verification pass after applying fixes */
|
|
26
|
+
verify?: boolean;
|
|
27
|
+
/** Gemini model shorthand (default: "flash") */
|
|
28
|
+
model?: "flash" | "flash-2.5" | "pro";
|
|
29
|
+
/** Output path for the fixed video (auto-apply mode) */
|
|
30
|
+
outputPath?: string;
|
|
31
|
+
}
|
|
32
|
+
/** Result from {@link executeReview}. */
|
|
33
|
+
export interface ReviewResult {
|
|
34
|
+
/** Whether the review completed successfully */
|
|
35
|
+
success: boolean;
|
|
36
|
+
/** Structured review feedback with per-category scores */
|
|
37
|
+
feedback?: VideoReviewFeedback;
|
|
38
|
+
/** Descriptions of fixes that were auto-applied */
|
|
39
|
+
appliedFixes?: string[];
|
|
40
|
+
/** Post-fix verification quality score 1-10 */
|
|
41
|
+
verificationScore?: number;
|
|
42
|
+
/** Path to the reviewed/fixed output video */
|
|
43
|
+
outputPath?: string;
|
|
44
|
+
/** Error message on failure */
|
|
45
|
+
error?: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Review video quality using Gemini AI and optionally auto-fix issues.
|
|
49
|
+
*
|
|
50
|
+
* Analyzes 5 quality categories (pacing, color, text readability, audio-visual
|
|
51
|
+
* sync, composition) and returns scored feedback. When auto-apply is enabled,
|
|
52
|
+
* applies fixable corrections via FFmpeg filters.
|
|
53
|
+
*
|
|
54
|
+
* @param options - Review configuration
|
|
55
|
+
* @returns Result with structured feedback and optional fix details
|
|
56
|
+
*/
|
|
57
|
+
export declare function executeReview(options: ReviewOptions): Promise<ReviewResult>;
|
|
58
|
+
export declare function registerReviewCommand(aiCommand: Command): void;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module ai-script-pipeline-cli
|
|
3
|
+
* @description Commander wiring for `vibe pipeline regenerate-scene`. The
|
|
4
|
+
* sibling `script-to-video` subcommand and its execute function were
|
|
5
|
+
* removed in favour of the skill-driven `vibe scene build` flow; only
|
|
6
|
+
* regenerate-scene survives because it operates on existing on-disk
|
|
7
|
+
* storyboards. Execute function lives in `ai-script-pipeline.ts`.
|
|
8
|
+
*/
|
|
9
|
+
import { Command } from "commander";
|
|
10
|
+
export declare function registerScriptPipelineCommands(aiCommand: Command): void;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module ai-script-pipeline
|
|
3
|
+
*
|
|
4
|
+
* Library function for scene regeneration in script-to-video output
|
|
5
|
+
* directories, plus pass-through re-exports of `_shared/video-utils.js` and
|
|
6
|
+
* `_shared/video-providers.js` helpers (consumed by `ai-video.ts` and
|
|
7
|
+
* `generate/video.ts`).
|
|
8
|
+
*
|
|
9
|
+
* Powers the manifest tool `remix_regenerate_scene` and the user-facing
|
|
10
|
+
* `vibe pipeline regenerate-scene` CLI subcommand.
|
|
11
|
+
*
|
|
12
|
+
* Note: `executeScriptToVideo` and the `pipeline script-to-video` CLI / MCP
|
|
13
|
+
* surface were removed in favour of the Hyperframes-style skill-driven
|
|
14
|
+
* `vibe scene build` flow, which is idempotent, cheaper, and per-beat
|
|
15
|
+
* editable. The `regenerate-scene` half is preserved because it operates on
|
|
16
|
+
* the on-disk storyboard.{yaml,json} produced by older runs (and by other
|
|
17
|
+
* pipelines that still emit that layout).
|
|
18
|
+
*
|
|
19
|
+
* @dependencies ElevenLabs (TTS), OpenAI/Gemini/Grok (images),
|
|
20
|
+
* Kling/Runway/Veo/Grok (video), FFmpeg (extension)
|
|
21
|
+
*/
|
|
22
|
+
import { type StoryboardSegment, DEFAULT_VIDEO_RETRIES, RETRY_DELAY_MS, sleep, uploadToImgbb, extendVideoToTarget, logSceneFailure, waitForVideoWithRetry } from "./_shared/video-utils.js";
|
|
23
|
+
import { generateVideoWithRetryGrok, generateVideoWithRetryKling, generateVideoWithRetryRunway, generateVideoWithRetryVeo } from "./_shared/video-providers.js";
|
|
24
|
+
export { DEFAULT_VIDEO_RETRIES, RETRY_DELAY_MS, sleep, uploadToImgbb, extendVideoToTarget, logSceneFailure, waitForVideoWithRetry, generateVideoWithRetryGrok, generateVideoWithRetryKling, generateVideoWithRetryRunway, generateVideoWithRetryVeo, };
|
|
25
|
+
export type { StoryboardSegment };
|
|
26
|
+
/** Options for {@link executeRegenerateScene}. */
|
|
27
|
+
export interface RegenerateSceneOptions {
|
|
28
|
+
/** Path to the project output directory containing storyboard.json */
|
|
29
|
+
projectDir: string;
|
|
30
|
+
/** 1-indexed scene numbers to regenerate */
|
|
31
|
+
scenes: number[];
|
|
32
|
+
/** Only regenerate video (keep existing image) */
|
|
33
|
+
videoOnly?: boolean;
|
|
34
|
+
/** Only regenerate narration audio */
|
|
35
|
+
narrationOnly?: boolean;
|
|
36
|
+
/** Only regenerate scene image */
|
|
37
|
+
imageOnly?: boolean;
|
|
38
|
+
/** Video generation provider */
|
|
39
|
+
generator?: "grok" | "kling" | "runway" | "veo";
|
|
40
|
+
/** Image generation provider */
|
|
41
|
+
imageProvider?: "gemini" | "openai" | "grok";
|
|
42
|
+
/** ElevenLabs voice name or ID */
|
|
43
|
+
voice?: string;
|
|
44
|
+
/** Video aspect ratio */
|
|
45
|
+
aspectRatio?: "16:9" | "9:16" | "1:1";
|
|
46
|
+
/** Max retries per video generation call */
|
|
47
|
+
retries?: number;
|
|
48
|
+
/** Reference scene number for character consistency (auto-detects if not specified) */
|
|
49
|
+
referenceScene?: number;
|
|
50
|
+
/** Called at per-scene progress points (`Scene N: regenerating narration...`). */
|
|
51
|
+
onProgress?: (message: string) => void;
|
|
52
|
+
}
|
|
53
|
+
/** Result from {@link executeRegenerateScene}. */
|
|
54
|
+
export interface RegenerateSceneResult {
|
|
55
|
+
/** Whether all requested scenes were regenerated */
|
|
56
|
+
success: boolean;
|
|
57
|
+
/** 1-indexed scene numbers successfully regenerated */
|
|
58
|
+
regeneratedScenes: number[];
|
|
59
|
+
/** 1-indexed scene numbers that failed to regenerate */
|
|
60
|
+
failedScenes: number[];
|
|
61
|
+
/** Error message on failure */
|
|
62
|
+
error?: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Regenerate specific scene(s) in an existing script-to-video project.
|
|
66
|
+
*
|
|
67
|
+
* Reads the storyboard.{yaml,json} from the project directory, then
|
|
68
|
+
* regenerates the requested scenes using the specified video/image provider.
|
|
69
|
+
* Supports image-to-video via ImgBB URL upload for Kling.
|
|
70
|
+
*
|
|
71
|
+
* @param options - Scene regeneration configuration
|
|
72
|
+
* @returns Result with lists of regenerated and failed scene numbers
|
|
73
|
+
*/
|
|
74
|
+
export declare function executeRegenerateScene(options: RegenerateSceneOptions): Promise<RegenerateSceneResult>;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module ai-suggest-edit
|
|
3
|
+
* @description Library function for AI suggest. Powers `analyze suggest` via the
|
|
4
|
+
* manifest tool `analyze_suggest_edit`. The legacy `vibe ai suggest/edit/storyboard`
|
|
5
|
+
* Commander registrations were removed alongside the dead `commands/ai.ts`
|
|
6
|
+
* orchestrator (the `vibe ai *` namespace was never `addCommand`'d to `program`).
|
|
7
|
+
*
|
|
8
|
+
* @see MODELS.md for AI model configuration
|
|
9
|
+
*/
|
|
10
|
+
import { type EditSuggestion } from "@vibeframe/ai-providers";
|
|
11
|
+
export interface ExecuteSuggestEditOptions {
|
|
12
|
+
projectPath: string;
|
|
13
|
+
instruction: string;
|
|
14
|
+
apply?: boolean;
|
|
15
|
+
apiKey?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface SuggestEditEntry {
|
|
18
|
+
type: EditSuggestion["type"];
|
|
19
|
+
description: string;
|
|
20
|
+
confidence: number;
|
|
21
|
+
clipIds: string[];
|
|
22
|
+
params: Record<string, unknown>;
|
|
23
|
+
}
|
|
24
|
+
export interface ExecuteSuggestEditResult {
|
|
25
|
+
success: boolean;
|
|
26
|
+
suggestions?: SuggestEditEntry[];
|
|
27
|
+
applied?: boolean;
|
|
28
|
+
appliedSuggestion?: SuggestEditEntry;
|
|
29
|
+
outputPath?: string;
|
|
30
|
+
error?: string;
|
|
31
|
+
}
|
|
32
|
+
export declare function executeSuggestEdit(options: ExecuteSuggestEditOptions): Promise<ExecuteSuggestEditResult>;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module ai-video
|
|
3
|
+
* @description Library functions for video generation, status, cancel, and
|
|
4
|
+
* extension. Powers the manifest tools `generate_video`,
|
|
5
|
+
* `generate_video_status`, `generate_video_cancel`, `generate_video_extend`
|
|
6
|
+
* (the user reaches these via `vibe generate video[-...]`).
|
|
7
|
+
*
|
|
8
|
+
* The legacy `vibe ai video / video-status / video-cancel / kling / kling-status /
|
|
9
|
+
* video-extend` Commander registrations were removed alongside the dead
|
|
10
|
+
* `commands/ai.ts` orchestrator (the `vibe ai *` namespace was never
|
|
11
|
+
* `addCommand`'d to `program`).
|
|
12
|
+
*
|
|
13
|
+
* @see MODELS.md for AI model configuration
|
|
14
|
+
*/
|
|
15
|
+
export interface VideoGenerateOptions {
|
|
16
|
+
prompt: string;
|
|
17
|
+
provider?: "grok" | "runway" | "kling" | "veo" | "seedance" | "fal";
|
|
18
|
+
image?: string;
|
|
19
|
+
refImages?: string[];
|
|
20
|
+
refVideos?: string[];
|
|
21
|
+
refAudio?: string[];
|
|
22
|
+
duration?: number;
|
|
23
|
+
ratio?: string;
|
|
24
|
+
seed?: number;
|
|
25
|
+
mode?: string;
|
|
26
|
+
negative?: string;
|
|
27
|
+
resolution?: string;
|
|
28
|
+
veoModel?: string;
|
|
29
|
+
runwayModel?: string;
|
|
30
|
+
seedanceModel?: string;
|
|
31
|
+
generateAudio?: boolean;
|
|
32
|
+
output?: string;
|
|
33
|
+
wait?: boolean;
|
|
34
|
+
apiKey?: string;
|
|
35
|
+
}
|
|
36
|
+
export interface VideoGenerateResult {
|
|
37
|
+
success: boolean;
|
|
38
|
+
taskId?: string;
|
|
39
|
+
status?: string;
|
|
40
|
+
videoUrl?: string;
|
|
41
|
+
duration?: number;
|
|
42
|
+
outputPath?: string;
|
|
43
|
+
provider?: string;
|
|
44
|
+
error?: string;
|
|
45
|
+
}
|
|
46
|
+
export declare function executeVideoGenerate(options: VideoGenerateOptions): Promise<VideoGenerateResult>;
|
|
47
|
+
export interface VideoStatusOptions {
|
|
48
|
+
taskId: string;
|
|
49
|
+
provider?: "runway" | "kling";
|
|
50
|
+
taskType?: "text2video" | "image2video";
|
|
51
|
+
wait?: boolean;
|
|
52
|
+
output?: string;
|
|
53
|
+
apiKey?: string;
|
|
54
|
+
}
|
|
55
|
+
export interface VideoStatusResult {
|
|
56
|
+
success: boolean;
|
|
57
|
+
taskId?: string;
|
|
58
|
+
status?: string;
|
|
59
|
+
progress?: number;
|
|
60
|
+
videoUrl?: string;
|
|
61
|
+
duration?: number;
|
|
62
|
+
outputPath?: string;
|
|
63
|
+
error?: string;
|
|
64
|
+
}
|
|
65
|
+
export declare function executeVideoStatus(options: VideoStatusOptions): Promise<VideoStatusResult>;
|
|
66
|
+
export interface VideoCancelOptions {
|
|
67
|
+
taskId: string;
|
|
68
|
+
apiKey?: string;
|
|
69
|
+
}
|
|
70
|
+
export interface VideoCancelResult {
|
|
71
|
+
success: boolean;
|
|
72
|
+
error?: string;
|
|
73
|
+
}
|
|
74
|
+
export declare function executeVideoCancel(options: VideoCancelOptions): Promise<VideoCancelResult>;
|
|
75
|
+
export interface VideoExtendOptions {
|
|
76
|
+
videoId: string;
|
|
77
|
+
provider?: "kling" | "veo";
|
|
78
|
+
prompt?: string;
|
|
79
|
+
duration?: number;
|
|
80
|
+
negative?: string;
|
|
81
|
+
veoModel?: string;
|
|
82
|
+
output?: string;
|
|
83
|
+
wait?: boolean;
|
|
84
|
+
apiKey?: string;
|
|
85
|
+
}
|
|
86
|
+
export interface VideoExtendResult {
|
|
87
|
+
success: boolean;
|
|
88
|
+
taskId?: string;
|
|
89
|
+
status?: string;
|
|
90
|
+
videoUrl?: string;
|
|
91
|
+
duration?: number;
|
|
92
|
+
outputPath?: string;
|
|
93
|
+
error?: string;
|
|
94
|
+
}
|
|
95
|
+
export declare function executeVideoExtend(options: VideoExtendOptions): Promise<VideoExtendResult>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module audio
|
|
3
|
+
*
|
|
4
|
+
* Top-level `vibe audio` command group for audio operations.
|
|
5
|
+
*
|
|
6
|
+
* Commands:
|
|
7
|
+
* audio transcribe - Transcribe audio using Whisper
|
|
8
|
+
* audio list-voices - List available ElevenLabs voices
|
|
9
|
+
* audio isolate - Isolate vocals from audio (ElevenLabs)
|
|
10
|
+
* audio clone-voice - Clone a voice from audio samples (ElevenLabs)
|
|
11
|
+
* audio dub - Dub audio/video to another language (Whisper + Claude + ElevenLabs)
|
|
12
|
+
* audio duck - Auto-duck background music when voice is present (FFmpeg)
|
|
13
|
+
*
|
|
14
|
+
* @dependencies Whisper (OpenAI), ElevenLabs, Claude (Anthropic), FFmpeg
|
|
15
|
+
*/
|
|
16
|
+
import { Command } from "commander";
|
|
17
|
+
export declare const audioCommand: Command;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module commands/completion
|
|
3
|
+
*
|
|
4
|
+
* `vibe completion <shell>` — emit a shell completion script for the
|
|
5
|
+
* given shell (zsh / bash / fish). The script is generated by walking
|
|
6
|
+
* the live Commander program tree, so completion stays in sync with
|
|
7
|
+
* the actual command set without a parallel manifest.
|
|
8
|
+
*
|
|
9
|
+
* Install:
|
|
10
|
+
* zsh: vibe completion zsh >> ~/.zsh/completions/_vibe (then add the dir to fpath)
|
|
11
|
+
* or: echo 'eval "$(vibe completion zsh)"' >> ~/.zshrc
|
|
12
|
+
* bash: echo 'eval "$(vibe completion bash)"' >> ~/.bashrc
|
|
13
|
+
* fish: vibe completion fish > ~/.config/fish/completions/vibe.fish
|
|
14
|
+
*
|
|
15
|
+
* Cost tiers ride along in zsh descriptions (e.g.
|
|
16
|
+
* "[VERY-HIGH] Generate video …") so the user sees the price tag at
|
|
17
|
+
* tab-completion time, not just in --help.
|
|
18
|
+
*/
|
|
19
|
+
import { Command } from "commander";
|
|
20
|
+
export declare const completionCommand: Command;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context command - Output CONTEXT.md for agent runtime discovery.
|
|
3
|
+
* Allows AI agents to read CLI guidelines without needing CLAUDE.md or CONTEXT.md on disk.
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from "commander";
|
|
6
|
+
export declare function resolveContextPath(baseDir?: string): string | null;
|
|
7
|
+
export declare const contextCommand: Command;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
export interface DetectScenesOptions {
|
|
3
|
+
videoPath: string;
|
|
4
|
+
threshold?: number;
|
|
5
|
+
outputPath?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface DetectScenesResult {
|
|
8
|
+
success: boolean;
|
|
9
|
+
scenes?: {
|
|
10
|
+
index: number;
|
|
11
|
+
startTime: number;
|
|
12
|
+
endTime: number;
|
|
13
|
+
duration: number;
|
|
14
|
+
}[];
|
|
15
|
+
totalDuration?: number;
|
|
16
|
+
error?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface DetectSilenceOptions {
|
|
19
|
+
mediaPath: string;
|
|
20
|
+
noise?: string;
|
|
21
|
+
duration?: string;
|
|
22
|
+
outputPath?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface DetectSilenceResult {
|
|
25
|
+
success: boolean;
|
|
26
|
+
silences?: {
|
|
27
|
+
start: number;
|
|
28
|
+
end: number;
|
|
29
|
+
duration: number;
|
|
30
|
+
}[];
|
|
31
|
+
error?: string;
|
|
32
|
+
}
|
|
33
|
+
export interface DetectBeatsOptions {
|
|
34
|
+
audioPath: string;
|
|
35
|
+
outputPath?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface DetectBeatsResult {
|
|
38
|
+
success: boolean;
|
|
39
|
+
beats?: number[];
|
|
40
|
+
beatCount?: number;
|
|
41
|
+
error?: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Detect scene changes in video using FFmpeg.
|
|
45
|
+
*/
|
|
46
|
+
export declare function executeDetectScenes(options: DetectScenesOptions): Promise<DetectScenesResult>;
|
|
47
|
+
/**
|
|
48
|
+
* Detect silence periods in audio/video using FFmpeg.
|
|
49
|
+
*/
|
|
50
|
+
export declare function executeDetectSilence(options: DetectSilenceOptions): Promise<DetectSilenceResult>;
|
|
51
|
+
/**
|
|
52
|
+
* Detect beats in audio using FFmpeg ebur128 loudness analysis.
|
|
53
|
+
*/
|
|
54
|
+
export declare function executeDetectBeats(options: DetectBeatsOptions): Promise<DetectBeatsResult>;
|
|
55
|
+
export declare const detectCommand: Command;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { type MotionCommandOptions } from "../ai-motion.js";
|
|
3
|
+
export type MotionOverlayUnderstand = "auto" | "off" | "required";
|
|
4
|
+
export type MotionOverlayPosition = "full" | "center" | "top-left" | "top-right" | "bottom-left" | "bottom-right";
|
|
5
|
+
export interface MotionOverlayOptions {
|
|
6
|
+
videoPath: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
asset?: string;
|
|
9
|
+
output?: string;
|
|
10
|
+
duration?: number;
|
|
11
|
+
start?: number;
|
|
12
|
+
style?: string;
|
|
13
|
+
model?: MotionCommandOptions["model"];
|
|
14
|
+
understand?: MotionOverlayUnderstand;
|
|
15
|
+
understandingPrompt?: string;
|
|
16
|
+
position?: MotionOverlayPosition;
|
|
17
|
+
scale?: number;
|
|
18
|
+
opacity?: number;
|
|
19
|
+
loop?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface MotionOverlayResult {
|
|
22
|
+
success: boolean;
|
|
23
|
+
outputPath?: string;
|
|
24
|
+
codePath?: string;
|
|
25
|
+
renderedPath?: string;
|
|
26
|
+
provider?: "remotion" | "lottie";
|
|
27
|
+
error?: string;
|
|
28
|
+
}
|
|
29
|
+
export declare function executeMotionOverlay(options: MotionOverlayOptions): Promise<MotionOverlayResult>;
|
|
30
|
+
export declare function registerMotionOverlayCommand(parent: Command): void;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module edit-cmd
|
|
3
|
+
*
|
|
4
|
+
* Top-level `vibe edit` command group for post-production editing.
|
|
5
|
+
*
|
|
6
|
+
* Commands:
|
|
7
|
+
* edit silence-cut - Remove silent segments (FFmpeg / Gemini)
|
|
8
|
+
* edit jump-cut - Remove filler words (Whisper + FFmpeg)
|
|
9
|
+
* edit caption - Add styled captions (Whisper + FFmpeg)
|
|
10
|
+
* edit noise-reduce - Audio/video noise removal (FFmpeg)
|
|
11
|
+
* edit fade - Fade in/out effects (FFmpeg)
|
|
12
|
+
* edit translate-srt - Translate SRT subtitles (Claude or OpenAI)
|
|
13
|
+
* edit grade - Color grading (Claude + FFmpeg)
|
|
14
|
+
* edit text-overlay - Simple static text overlays (FFmpeg drawtext)
|
|
15
|
+
* edit motion-overlay - Designed motion graphics overlays (Remotion/Lottie)
|
|
16
|
+
* edit speed-ramp - Speed ramping (Whisper + Claude + FFmpeg)
|
|
17
|
+
* edit reframe - Reframe aspect ratio (Claude Vision + FFmpeg)
|
|
18
|
+
* edit image - Image editing (Gemini, OpenAI, or Grok)
|
|
19
|
+
* edit interpolate - Frame interpolation / slow motion (FFmpeg)
|
|
20
|
+
* edit upscale - Video upscaling (FFmpeg or Replicate)
|
|
21
|
+
* edit fill-gaps - Fill timeline gaps with AI video (Kling)
|
|
22
|
+
*
|
|
23
|
+
* @dependencies Whisper, Claude, Gemini, Kling, Replicate, FFmpeg
|
|
24
|
+
*/
|
|
25
|
+
import { Command } from "commander";
|
|
26
|
+
export declare const editCommand: Command;
|
|
27
|
+
export interface GradeOptions {
|
|
28
|
+
videoPath: string;
|
|
29
|
+
style?: string;
|
|
30
|
+
preset?: string;
|
|
31
|
+
output?: string;
|
|
32
|
+
analyzeOnly?: boolean;
|
|
33
|
+
apiKey?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface GradeResult {
|
|
36
|
+
success: boolean;
|
|
37
|
+
outputPath?: string;
|
|
38
|
+
style?: string;
|
|
39
|
+
description?: string;
|
|
40
|
+
ffmpegFilter?: string;
|
|
41
|
+
error?: string;
|
|
42
|
+
}
|
|
43
|
+
export declare function executeGrade(options: GradeOptions): Promise<GradeResult>;
|
|
44
|
+
export interface SpeedRampOptions {
|
|
45
|
+
videoPath: string;
|
|
46
|
+
output?: string;
|
|
47
|
+
style?: "dramatic" | "smooth" | "action";
|
|
48
|
+
minSpeed?: number;
|
|
49
|
+
maxSpeed?: number;
|
|
50
|
+
analyzeOnly?: boolean;
|
|
51
|
+
language?: string;
|
|
52
|
+
apiKey?: string;
|
|
53
|
+
}
|
|
54
|
+
export interface SpeedRampResult {
|
|
55
|
+
success: boolean;
|
|
56
|
+
outputPath?: string;
|
|
57
|
+
keyframes?: Array<{
|
|
58
|
+
time: number;
|
|
59
|
+
speed: number;
|
|
60
|
+
reason: string;
|
|
61
|
+
}>;
|
|
62
|
+
avgSpeed?: number;
|
|
63
|
+
error?: string;
|
|
64
|
+
}
|
|
65
|
+
export declare function executeSpeedRamp(options: SpeedRampOptions): Promise<SpeedRampResult>;
|
|
66
|
+
export interface ReframeOptions {
|
|
67
|
+
videoPath: string;
|
|
68
|
+
aspect?: string;
|
|
69
|
+
focus?: "auto" | "face" | "center" | "action";
|
|
70
|
+
output?: string;
|
|
71
|
+
analyzeOnly?: boolean;
|
|
72
|
+
apiKey?: string;
|
|
73
|
+
}
|
|
74
|
+
export interface ReframeResult {
|
|
75
|
+
success: boolean;
|
|
76
|
+
outputPath?: string;
|
|
77
|
+
sourceAspect?: string;
|
|
78
|
+
targetAspect?: string;
|
|
79
|
+
keyframeCount?: number;
|
|
80
|
+
error?: string;
|
|
81
|
+
}
|
|
82
|
+
export declare function executeReframe(options: ReframeOptions): Promise<ReframeResult>;
|
|
83
|
+
export interface InterpolateOptions {
|
|
84
|
+
videoPath: string;
|
|
85
|
+
output?: string;
|
|
86
|
+
factor?: number;
|
|
87
|
+
fps?: number;
|
|
88
|
+
quality?: "fast" | "quality";
|
|
89
|
+
}
|
|
90
|
+
export interface InterpolateResult {
|
|
91
|
+
success: boolean;
|
|
92
|
+
outputPath?: string;
|
|
93
|
+
originalFps?: number;
|
|
94
|
+
targetFps?: number;
|
|
95
|
+
factor?: number;
|
|
96
|
+
error?: string;
|
|
97
|
+
}
|
|
98
|
+
export declare function executeInterpolate(options: InterpolateOptions): Promise<InterpolateResult>;
|
|
99
|
+
export interface UpscaleOptions {
|
|
100
|
+
videoPath: string;
|
|
101
|
+
output?: string;
|
|
102
|
+
scale?: number;
|
|
103
|
+
quality?: "fast" | "quality";
|
|
104
|
+
}
|
|
105
|
+
export interface UpscaleResult {
|
|
106
|
+
success: boolean;
|
|
107
|
+
outputPath?: string;
|
|
108
|
+
originalRes?: string;
|
|
109
|
+
targetRes?: string;
|
|
110
|
+
error?: string;
|
|
111
|
+
}
|
|
112
|
+
export declare function executeUpscale(options: UpscaleOptions): Promise<UpscaleResult>;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file envelope-snapshots.test.ts
|
|
3
|
+
*
|
|
4
|
+
* Drift detection for Issue #33's CLI UX standardization. Snapshots:
|
|
5
|
+
* 1. The JSON Schema returned by `vibe <cmd> --describe` for every
|
|
6
|
+
* leaf command (catches schema/option/argument drift).
|
|
7
|
+
* 2. The `--dry-run --json` envelope shape for representative
|
|
8
|
+
* commands across the major groups (catches success-envelope
|
|
9
|
+
* drift — keys moved, renamed, removed).
|
|
10
|
+
*
|
|
11
|
+
* Why:
|
|
12
|
+
* - The new `outputSuccess()` envelope (#194-#199, v0.72.0) is now load-bearing.
|
|
13
|
+
* Every agent / MCP host parses `data.X` not `X`. A regression that
|
|
14
|
+
* re-flattens or renames keys would silently break agent integrations.
|
|
15
|
+
* Snapshots make the regression visible in PR review.
|
|
16
|
+
* - `--describe` is the agent's discovery channel for parameters. Drift
|
|
17
|
+
* in option descriptions / enum hints / argument shapes invalidates
|
|
18
|
+
* prompts that were written against the old schema.
|
|
19
|
+
*
|
|
20
|
+
* Normalization:
|
|
21
|
+
* - `elapsedMs` is replaced with `<elapsedMs>` before snapshotting (it
|
|
22
|
+
* varies per run). Other fields are kept verbatim.
|
|
23
|
+
* - Cost-estimate-driven `costUsd` is stable per command and not normalized.
|
|
24
|
+
*
|
|
25
|
+
* Maintenance:
|
|
26
|
+
* - When a snapshot diff is INTENTIONAL (e.g. you renamed a key on
|
|
27
|
+
* purpose), run with `-u` (`pnpm -F @vibeframe/cli exec vitest run -u`)
|
|
28
|
+
* to update the snapshot file, then review the diff.
|
|
29
|
+
* - When a snapshot diff is UNINTENTIONAL, the test names will tell
|
|
30
|
+
* you which command and which channel (--describe vs --dry-run).
|
|
31
|
+
*/
|
|
32
|
+
export {};
|