@vibeframe/mcp-server 0.113.29 → 0.113.30

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 +34 -14
  2. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -24010,6 +24010,9 @@ function exitWithError(err) {
24010
24010
  if (err.suggestion) {
24011
24011
  console.error(source_default.dim(` ${err.suggestion}`));
24012
24012
  }
24013
+ if (err.retryWith && err.retryWith.length > 0) {
24014
+ console.error(source_default.dim(` Retry: ${err.retryWith[0]}`));
24015
+ }
24013
24016
  console.error();
24014
24017
  }
24015
24018
  process.exit(err.exitCode);
@@ -26127,7 +26130,7 @@ ${avoid}
26127
26130
  ---
26128
26131
 
26129
26132
  _Browse other named styles: \`vibe scene list-styles\`_
26130
- ${style ? `_This file was seeded by \`vibe scene init --visual-style "${style.name}"\`._` : `_Seed this file from a named style: \`vibe scene init <dir> --visual-style "<name>"\`._`}
26133
+ ${style ? `_This file was seeded by \`vibe init --visual-style "${style.name}"\`._` : `_Seed this file from a named style: \`vibe init <dir> --visual-style "<name>"\`._`}
26131
26134
  `;
26132
26135
  }
26133
26136
  function buildScriptMd(name, kind3 = DEFAULT_SCENE_KIND) {
@@ -26272,7 +26275,7 @@ Single-asset requests (\`vibe generate image|video|speech|...\`) do NOT
26272
26275
  consult this file - run the generate command directly.
26273
26276
 
26274
26277
  Browse named styles: \`vibe scene list-styles\`. Re-seed from one with
26275
- \`vibe scene init . --visual-style "Swiss Pulse"\` (idempotent).
26278
+ \`vibe init . --visual-style "Swiss Pulse"\` (idempotent).
26276
26279
 
26277
26280
  ## Brief and local media
26278
26281
 
@@ -26427,9 +26430,21 @@ npx hyperframes render
26427
26430
 
26428
26431
  ## Key Rules (for hand-authored scene HTML)
26429
26432
 
26433
+ 0. A scene file is a \`<template id="scene-<id>-template">\` wrapping ONE
26434
+ composition div - not a standalone \`<!doctype html>\` document:
26435
+ \`\`\`html
26436
+ <template id="scene-hook-template">
26437
+ <div data-composition-id="scene-hook" data-start="0" data-duration="3.3"
26438
+ data-width="1920" data-height="1080">\u2026</div>
26439
+ </template>
26440
+ \`\`\`
26441
+ The composition div **MUST** carry \`data-width\` and \`data-height\`.
26430
26442
  1. Every timed element needs \`data-start\`, \`data-duration\`, and \`data-track-index\`.
26431
26443
  2. Elements with timing **MUST** have \`class="clip"\` - the framework uses this for visibility control.
26432
- 3. Timelines must be paused and registered on \`window.__timelines\`:
26444
+ 3. Timelines must be paused and registered on \`window.__timelines\`, which is an
26445
+ OBJECT keyed by composition id - not an array, and \`.push()\` leaves the
26446
+ timeline undiscovered, which renders a black frame because \`gsap.from\` holds
26447
+ elements at their start state:
26433
26448
  \`\`\`js
26434
26449
  window.__timelines = window.__timelines || {};
26435
26450
  window.__timelines["composition-id"] = gsap.timeline({ paused: true });
@@ -268804,10 +268819,10 @@ async function getComposePrompts(opts) {
268804
268819
  error: msg
268805
268820
  });
268806
268821
  if (!existsSync43(designPath)) {
268807
- return baseError(`DESIGN.md not found at ${designPath}. Run \`vibe scene init <dir>\` first.`);
268822
+ return baseError(`DESIGN.md not found at ${designPath}. Run \`vibe init <dir>\` first.`);
268808
268823
  }
268809
268824
  if (!existsSync43(storyboardPath)) {
268810
- return baseError(`STORYBOARD.md not found at ${storyboardPath}. Run \`vibe scene init <dir>\` to create a starter, or add STORYBOARD.md with per-beat cues.`);
268825
+ return baseError(`STORYBOARD.md not found at ${storyboardPath}. Run \`vibe init <dir>\` to create a starter, or add STORYBOARD.md with per-beat cues.`);
268811
268826
  }
268812
268827
  if (!hyperframesSkillAvailable(projectDir)) {
268813
268828
  warnings.push(
@@ -268887,7 +268902,9 @@ function buildInstructions(args) {
268887
268902
  if (args.skillRef) {
268888
268903
  lines.push(`1. Read \`${args.skillRef}\` for the Hyperframes framework rules + house style. This is the visual-identity hard-gate.`);
268889
268904
  } else {
268890
- lines.push(`1. Run \`vibe scene install-skill\` to install the Hyperframes composition rules, then read them.`);
268905
+ lines.push(
268906
+ `1. Read this project's \`AGENTS.md\` section "Key Rules (for hand-authored scene HTML)" - written by \`vibe init\`, and the authoritative local contract. \`vibe scene install-skill\` adds Hyperframes' house style on top, but note it installs a ROUTER whose full contract sits behind \`/hyperframes-core\`, which resolves only in a host that has upstream's Hyperframes skills.`
268907
+ );
268891
268908
  }
268892
268909
  lines.push(`2. Read \`DESIGN.md\` for project-specific palette, typography, motion signature.`);
268893
268910
  if (args.compositionRef) {
@@ -268897,6 +268914,7 @@ function buildInstructions(args) {
268897
268914
  lines.push(`3b. Use each beat's \`finalDurationSec\` (narration-synced) for \`data-duration\` and timeline anchors when present \u2014 NOT the storyboard \`duration\`, which is only the minimum. Scenes composed at the storyboard duration end early and render black tails.`);
268898
268915
  lines.push(`3c. Never give inner \`.clip\` elements a non-zero \`data-start\` \u2014 the renderer does not toggle internal clip visibility inside sub-compositions, so phased clips render all phases at once (overlapping text). Use full-window clips and GSAP autoAlpha phase transitions instead. Also keep beats 6-15s; split anything longer in the storyboard first.`);
268899
268916
  lines.push(`3d. If your environment cannot write files (e.g. Claude Desktop / MCP-only hosts), author each beat's HTML and submit it with the \`scene_submit\` tool (beat id + html). It validates with the same Hyperframes lint and writes the file for you; on lint errors it returns the findings without writing \u2014 fix and resubmit.`);
268917
+ lines.push(`3e. Hard requirements the linter fails on, so satisfy them even without the full contract. A scene file is a \`<template id="scene-<id>-template">\` wrapping ONE \`<div data-composition-id="scene-<id>" data-start="0" data-duration="<sec>" data-width="1920" data-height="1080">\` \u2014 not a standalone \`<!doctype html>\` document. Register the paused GSAP timeline on the registry OBJECT keyed by composition id: \`window.__timelines = window.__timelines || {}; window.__timelines["scene-<id>"] = tl;\` \u2014 it is not an array, and \`.push()\` leaves the timeline undiscovered, which renders a black frame because \`gsap.from\` holds elements at their start state. Also put \`class="clip"\` on every timed element and give timeline-visible elements a stable \`id\`. Generate a reference scene with \`vibe scene add <id> --style <preset> --no-audio --no-image\` and match its shape.`);
268900
268918
  if (args.beatCount > 1) {
268901
268919
  lines.push(`4. After authoring all ${args.beatCount} beat(s), run \`vibe build <project> --stage sync --json\` to assemble the root composition (index.html) from the fragments. Lint needs that root, so sync comes first.`);
268902
268920
  } else if (args.filtered) {
@@ -269991,7 +270009,7 @@ async function executeSceneRender(opts = {}) {
269991
270009
  kind: "render",
269992
270010
  beat: opts.beatId ?? null,
269993
270011
  root: root2,
269994
- error: `Root composition not found: ${resolve33(projectDir, root2)}. Run \`vibe scene init\` first.`
270012
+ error: `Root composition not found: ${resolve33(projectDir, root2)}. Run \`vibe build ${projectDir}\` once to create the render scaffold, or scaffold it up front with \`vibe init <dir> --profile full\`.`
269995
270013
  };
269996
270014
  }
269997
270015
  const chrome2 = await preflightChrome();
@@ -272241,7 +272259,7 @@ async function executeSceneBuild(opts) {
272241
272259
  phase: "failed",
272242
272260
  mode,
272243
272261
  selectedStage,
272244
- error: `STORYBOARD.md not found at ${storyboardPath}. Run \`vibe scene init <dir>\` to create a starter, or add STORYBOARD.md with per-beat cues.`,
272262
+ error: `STORYBOARD.md not found at ${storyboardPath}. Run \`vibe init <dir>\` to create a starter, or add STORYBOARD.md with per-beat cues.`,
272245
272263
  beats: [],
272246
272264
  stageReports,
272247
272265
  warnings,
@@ -305086,7 +305104,7 @@ function insertClipIntoRoot(rootHtml, clip) {
305086
305104
  const closeMatch = rootHtml.match(/\n(\s*)<\/div>(\s*\n\s*<script>)/);
305087
305105
  if (!closeMatch) {
305088
305106
  throw new Error(
305089
- "Could not find root composition closing </div>. Ensure index.html follows the layout from `vibe scene init`."
305107
+ "Could not find root composition closing </div>. Ensure index.html follows the layout from `vibe init`."
305090
305108
  );
305091
305109
  }
305092
305110
  const closeIdx = closeMatch.index;
@@ -305487,7 +305505,7 @@ sceneCommand.command("list-styles").description("List vendored visual styles (or
305487
305505
  console.log(source_default.dim("Show details: "), source_default.cyan('vibe scene list-styles "<name>"'));
305488
305506
  console.log(
305489
305507
  source_default.dim("Seed DESIGN.md:"),
305490
- source_default.cyan('vibe scene init <dir> --visual-style "<name>"')
305508
+ source_default.cyan('vibe init <dir> --visual-style "<name>"')
305491
305509
  );
305492
305510
  return;
305493
305511
  }
@@ -305522,7 +305540,7 @@ sceneCommand.command("list-styles").description("List vendored visual styles (or
305522
305540
  console.log();
305523
305541
  console.log(
305524
305542
  source_default.dim("Seed DESIGN.md:"),
305525
- source_default.cyan(`vibe scene init <dir> --visual-style "${style.name}"`)
305543
+ source_default.cyan(`vibe init <dir> --visual-style "${style.name}"`)
305526
305544
  );
305527
305545
  });
305528
305546
  sceneCommand.command("add").description("Add a new scene to a project: AI narration + image + per-scene HTML").argument("<name>", "Scene name (slugified into the composition id)").option("--style <preset>", `Style preset: ${SCENE_PRESETS.join(", ")}`, "simple").option(
@@ -305780,7 +305798,9 @@ async function executeSceneAdd(opts) {
305780
305798
  error
305781
305799
  });
305782
305800
  if (!await pathExists2(rootPath)) {
305783
- return errResult(`Root composition not found: ${rootPath}. Run \`vibe scene init\` first.`);
305801
+ return errResult(
305802
+ `Root composition not found: ${rootPath}. Run \`vibe build\` once to create the render scaffold, or scaffold it up front with \`vibe init <dir> --profile full\`.`
305803
+ );
305784
305804
  }
305785
305805
  if (!opts.force && await pathExists2(scenePath)) {
305786
305806
  return errResult(`Scene already exists: ${sceneRel}. Re-run with --force to overwrite.`);
@@ -316070,7 +316090,7 @@ function handleCliFlags(argv, version2) {
316070
316090
  }
316071
316091
 
316072
316092
  // src/index.ts
316073
- if (handleCliFlags(process.argv.slice(2), "0.113.29")) {
316093
+ if (handleCliFlags(process.argv.slice(2), "0.113.30")) {
316074
316094
  process.exit(0);
316075
316095
  }
316076
316096
  console.log = (...args) => console.error(...args);
@@ -316083,7 +316103,7 @@ var server = new Server(
316083
316103
  {
316084
316104
  name: "vibeframe",
316085
316105
  // Stamped with the package version by build.js at bundle time.
316086
- version: "0.113.29"
316106
+ version: "0.113.30"
316087
316107
  },
316088
316108
  {
316089
316109
  capabilities: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibeframe/mcp-server",
3
- "version": "0.113.29",
3
+ "version": "0.113.30",
4
4
  "description": "VibeFrame MCP Server - frontier AI video generation for agents (Seedance, Runway, Veo, Kling) on your own keys, behind a hard cost cap",
5
5
  "type": "module",
6
6
  "bin": {
@@ -66,8 +66,8 @@
66
66
  "tsx": "^4.21.0",
67
67
  "typescript": "^5.3.3",
68
68
  "vitest": "^1.2.2",
69
- "@vibeframe/cli": "0.113.29",
70
- "@vibeframe/core": "0.113.29"
69
+ "@vibeframe/core": "0.113.30",
70
+ "@vibeframe/cli": "0.113.30"
71
71
  },
72
72
  "engines": {
73
73
  "node": ">=20"