@vibeframe/cli 0.94.1 → 0.95.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +84 -19
  2. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -25754,8 +25754,18 @@ async function fileExists(path2) {
25754
25754
  return false;
25755
25755
  }
25756
25756
  }
25757
+ async function findProjectConfigPath(cwd = process.cwd()) {
25758
+ let dir = resolve4(cwd);
25759
+ for (; ; ) {
25760
+ const candidate = getProjectConfigPath(dir);
25761
+ if (await fileExists(candidate)) return candidate;
25762
+ const parent = resolve4(dir, "..");
25763
+ if (parent === dir) return null;
25764
+ dir = parent;
25765
+ }
25766
+ }
25757
25767
  async function getActiveScope(cwd) {
25758
- return await fileExists(getProjectConfigPath(cwd)) ? "project" : "user";
25768
+ return await findProjectConfigPath(cwd) ? "project" : "user";
25759
25769
  }
25760
25770
  function applyDefaults(parsed) {
25761
25771
  const defaults = createDefaultConfig();
@@ -25787,7 +25797,8 @@ async function loadConfig(options = {}) {
25787
25797
  const { scope, cwd, merge } = options;
25788
25798
  if (merge) {
25789
25799
  const user = await readConfigFile(USER_CONFIG_PATH);
25790
- const project2 = await readConfigFile(getProjectConfigPath(cwd));
25800
+ const projectPath2 = await findProjectConfigPath(cwd);
25801
+ const project2 = projectPath2 ? await readConfigFile(projectPath2) : null;
25791
25802
  if (!user && !project2) return null;
25792
25803
  if (!user) return project2;
25793
25804
  if (!project2) return user;
@@ -25808,7 +25819,8 @@ async function loadConfig(options = {}) {
25808
25819
  if (scope) {
25809
25820
  return readConfigFile(getConfigPath(scope, cwd));
25810
25821
  }
25811
- const project = await readConfigFile(getProjectConfigPath(cwd));
25822
+ const projectPath = await findProjectConfigPath(cwd);
25823
+ const project = projectPath ? await readConfigFile(projectPath) : null;
25812
25824
  if (project) return project;
25813
25825
  return readConfigFile(USER_CONFIG_PATH);
25814
25826
  }
@@ -26225,10 +26237,14 @@ _2\u20133 colours max. Declare explicit hex values; never name colours abstractl
26225
26237
  - _anti-pattern 3_`;
26226
26238
  return `# ${name} \u2014 Design
26227
26239
 
26228
- > **Hard-gate.** This file defines the visual identity of every scene.
26229
- > Author it before generating any HTML, backdrop image, or motion.
26230
- > The Hyperframes \`hyperframes\` skill enforces this: scenes that
26231
- > contradict DESIGN.md are rejected.
26240
+ > **Hard-gate (BUILD flow only).** This file is the visual contract for
26241
+ > the scene-project flow (\`vibe build\`, \`vibe scene ...\`, composition
26242
+ > HTML, backdrop image-gen). Author it before authoring scene HTML; the
26243
+ > Hyperframes \`hyperframes\` skill enforces it at composition time.
26244
+ >
26245
+ > **Single-asset requests (\`vibe generate image|video|speech|...\`) do
26246
+ > NOT consult this file.** Run the generate command directly with the
26247
+ > user's prompt. See AGENTS.md \u2192 "Route by the user's actual request".
26232
26248
 
26233
26249
  ${intro}
26234
26250
 
@@ -26321,12 +26337,35 @@ This project is **bilingual**: it works with both VibeFrame (\`vibe\`) and
26321
26337
  HeyGen Hyperframes (\`hyperframes\`). You can run either CLI inside this
26322
26338
  directory.
26323
26339
 
26324
- ## Visual identity hard-gate
26340
+ ## Route the request first
26341
+
26342
+ Before opening DESIGN.md, loading the hyperframes skill, or planning
26343
+ scenes, decide which flow the user actually wants:
26344
+
26345
+ - **ASSET (default for ambiguous prompts).** Single image, single video
26346
+ clip, single TTS line. Even a verb-less paste of a visual brief lands
26347
+ here. Just run \`vibe generate image|video|speech "<paste>" -o assets/<name>\`.
26348
+ Skip DESIGN.md, skip the hyperframes skill.
26349
+ - **BUILD.** Multi-scene / storyboard / composed video. Triggered when
26350
+ the user explicitly asks for "a video built from scenes", "a
26351
+ storyboard", "a multi-scene composition", or names \`vibe build\` /
26352
+ \`vibe scene ...\`. Only here does the hard-gate below apply.
26353
+ - **REMIX.** Transform a media file already on disk: \`vibe remix\`,
26354
+ \`vibe edit\`, \`vibe audio\`.
26355
+
26356
+ If you can't tell, ask: *"single asset or multi-scene project?"* before
26357
+ authoring DESIGN.md or invoking a skill.
26358
+
26359
+ ## Visual identity hard-gate (BUILD flow only)
26325
26360
 
26326
- **Author \`DESIGN.md\` before any scene HTML.** It defines palette,
26327
- typography, motion, and transition rules. Both the agent-driven path and
26328
- the fallback emit reference it; scenes that contradict DESIGN.md are
26329
- rejected by the Hyperframes \`hyperframes\` skill.
26361
+ **Within the BUILD flow,** author \`DESIGN.md\` before any scene HTML.
26362
+ It defines palette, typography, motion, and transition rules. Both the
26363
+ agent-driven path and the fallback emit reference it; scenes that
26364
+ contradict DESIGN.md are rejected by the Hyperframes \`hyperframes\`
26365
+ skill.
26366
+
26367
+ Single-asset requests (\`vibe generate image|video|speech|...\`) do NOT
26368
+ consult this file \u2014 run the generate command directly.
26330
26369
 
26331
26370
  Browse named styles: \`vibe scene list-styles\`. Re-seed from one with
26332
26371
  \`vibe scene init . --visual-style "Swiss Pulse"\` (idempotent).
@@ -63444,7 +63483,7 @@ init_source();
63444
63483
  // package.json
63445
63484
  var package_default = {
63446
63485
  name: "@vibeframe/cli",
63447
- version: "0.94.1",
63486
+ version: "0.95.1",
63448
63487
  description: "VibeFrame CLI - natural language video editing from the terminal",
63449
63488
  private: false,
63450
63489
  license: "MIT",
@@ -71685,10 +71724,29 @@ vibe walkthrough scene # step-by-step authoring guide (scene)
71685
71724
  vibe walkthrough pipeline # step-by-step authoring guide (pipeline)
71686
71725
  \`\`\`
71687
71726
 
71688
- ## Two flows \u2014 pick by intent
71727
+ ## Route by the user's actual request
71728
+
71729
+ Routing the user's request correctly is the most important judgement call
71730
+ you'll make. Do not force everything into a scene project.
71731
+
71732
+ **ASSET \u2014 default for any single-asset request OR ambiguous prompt.**
71733
+ If the user asks for a single image, single video clip, sound effect, music
71734
+ bed, or narration file \u2014 **OR pastes a visual/audio brief without explicit
71735
+ storyboard / scene / multi-scene language** \u2014 treat it as ASSET. Use
71736
+ \`vibe generate ...\` directly. Do **not** edit \`DESIGN.md\`,
71737
+ \`STORYBOARD.md\`, run \`vibe scene ...\`, or auto-load the hyperframes
71738
+ skill until BUILD intent is explicit. The visual-identity hard-gate
71739
+ applies to BUILD only.
71689
71740
 
71690
- VibeFrame splits cleanly into two flows. Routing the user's request
71691
- correctly is the most important judgement call you'll make.
71741
+ Examples:
71742
+ - "make this image" \u2192 \`vibe generate image "..." -o assets/name.png\`
71743
+ - "use this image to make a video" \u2192 \`vibe generate video "..." -i image.png -o renders/name.mp4\`
71744
+ - "please add visuals using OpenAI image gen" \u2192 \`vibe generate image "..." -p openai ...\`
71745
+ - *(verb-less paste)* "aerial view of a misty mountain peak at sunrise..." \u2192 \`vibe generate image "<paste>" -o assets/mountain-peak.png\`. **Don't** read it as a brief for DESIGN.md.
71746
+
71747
+ If genuinely uncertain, ask one short question: *"single asset or
71748
+ multi-scene project?"* before authoring DESIGN.md or loading the
71749
+ hyperframes skill.
71692
71750
 
71693
71751
  **BUILD \u2014 create new video from text intent.**
71694
71752
  Use \`vibe build\` with a STORYBOARD.md + DESIGN.md. The
@@ -71700,9 +71758,9 @@ bundle, then renders to MP4. Idempotent re-runs reuse cached assets.
71700
71758
  Use \`vibe remix\`, \`vibe edit\`, or \`vibe audio\`. One-shot,
71701
71759
  batch-oriented operations on a file the user already has on disk.
71702
71760
 
71703
- Decision rule: if the user is starting from intent (a script, a brand,
71704
- an idea), it's BUILD. If the user is starting from a media file, it's
71705
- REMIX.
71761
+ Decision rule: if the user asks for one asset, it's ASSET. If the user asks
71762
+ for a multi-scene/storyboard/composed video, it's BUILD. If the user is
71763
+ starting from a media file and wants it transformed, it's REMIX.
71706
71764
 
71707
71765
  ## Common workflows
71708
71766
 
@@ -71824,6 +71882,13 @@ overview content moved into AGENTS.md above):
71824
71882
  - \`/vibe-pipeline\` \u2014 YAML pipeline authoring helper (Video as Code)
71825
71883
  - \`/vibe-scene\` \u2014 per-scene HTML authoring + \`vibe build\`
71826
71884
 
71885
+ Claude-specific routing note: follow the ASSET / BUILD / REMIX decision
71886
+ rules in \`AGENTS.md\`. In particular, a request for one generated image or
71887
+ one generated video clip is an ASSET request: use \`vibe generate image\` or
71888
+ \`vibe generate video\` directly. Do not invoke \`/vibe-scene\`, edit
71889
+ \`DESIGN.md\`, or edit \`STORYBOARD.md\` unless the user explicitly asks for a
71890
+ scene, storyboard, or composed video.
71891
+
71827
71892
  To install / update them later:
71828
71893
 
71829
71894
  \`\`\`bash
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibeframe/cli",
3
- "version": "0.94.1",
3
+ "version": "0.95.1",
4
4
  "description": "VibeFrame CLI - natural language video editing from the terminal",
5
5
  "private": false,
6
6
  "license": "MIT",
@@ -183,8 +183,8 @@
183
183
  "tsx": "^4.21.0",
184
184
  "typescript": "^5.3.3",
185
185
  "vitest": "^1.2.2",
186
- "@vibeframe/ai-providers": "0.94.1",
187
- "@vibeframe/core": "0.94.1"
186
+ "@vibeframe/ai-providers": "0.95.1",
187
+ "@vibeframe/core": "0.95.1"
188
188
  },
189
189
  "engines": {
190
190
  "node": ">=20"