@cueframe/kernel 0.2.59-rc.1 → 0.2.59-rc.3

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 (116) hide show
  1. package/dist/_members/component-runtime/componentBundleServer.d.ts +7 -2
  2. package/dist/_members/component-runtime/componentBundleServer.d.ts.map +1 -1
  3. package/dist/_members/component-runtime/contracts.d.ts +0 -14
  4. package/dist/_members/component-runtime/contracts.d.ts.map +1 -1
  5. package/dist/_members/component-runtime/template/schema.d.ts +0 -6
  6. package/dist/_members/component-runtime/template/schema.d.ts.map +1 -1
  7. package/dist/_members/composition/componentClip.d.ts +96 -0
  8. package/dist/_members/composition/depth.d.ts +1 -1
  9. package/dist/_members/composition/scene/clipRules.d.ts +1 -1
  10. package/dist/_members/composition/validators/composition.d.ts +0 -52
  11. package/dist/_members/composition/validators/graphicKinds.d.ts +1 -1
  12. package/dist/_members/composition-ops/{alphaLayers.d.ts → componentClips.d.ts} +3 -2
  13. package/dist/_members/composition-ops/index.d.ts +6 -28
  14. package/dist/_members/core/render/compositionRender.d.ts +6 -1
  15. package/dist/_members/core/render/trackProjection.d.ts +3 -1
  16. package/dist/_members/errors/registry.d.ts +12 -0
  17. package/dist/_members/mcp/generated/harness.d.ts +1 -1
  18. package/dist/animate/preparation-facts.js +2 -2
  19. package/dist/animate.js +3 -3
  20. package/dist/authoring/context.js +6 -6
  21. package/dist/authoring/motion.js +3 -2
  22. package/dist/authoring/scene.js +2 -2
  23. package/dist/authoring.js +12 -11
  24. package/dist/{chunk-ZCEYEIRB.js → chunk-3KFQM7DG.js} +1 -1
  25. package/dist/{chunk-JNBNDHEF.js → chunk-3SMYBRYD.js} +2 -2
  26. package/dist/{chunk-H2ZZXISB.js → chunk-6D3KCUWA.js} +1 -1
  27. package/dist/{chunk-BZVOCVQV.js → chunk-BLVSFN6J.js} +0 -17
  28. package/dist/{chunk-NECN7TT4.js → chunk-BR6QZZEI.js} +4 -4
  29. package/dist/{chunk-3JEUNKDK.js → chunk-CMPRHO6D.js} +1 -1
  30. package/dist/{chunk-CEO47DIE.js → chunk-D5QWWPDL.js} +2 -2
  31. package/dist/{chunk-AK6QPX7A.js → chunk-DBBKM74E.js} +22 -45
  32. package/dist/chunk-DPMS7I65.js +11 -0
  33. package/dist/{chunk-ONSGT6UJ.js → chunk-E2DVOSUE.js} +37 -10
  34. package/dist/{chunk-4WBSXHQA.js → chunk-EA3J5XUJ.js} +2 -2
  35. package/dist/{chunk-3HLDIIWA.js → chunk-F5UOF52Q.js} +1 -1
  36. package/dist/{chunk-I2HNC4PQ.js → chunk-FZCVNHML.js} +1 -1
  37. package/dist/{chunk-DCKADD5B.js → chunk-HEMRBFLN.js} +1 -1
  38. package/dist/{chunk-IUJABAG2.js → chunk-HOQ45246.js} +55 -39
  39. package/dist/{chunk-T56BK7NS.js → chunk-JRGALHBZ.js} +1 -1
  40. package/dist/{chunk-FZB7UX44.js → chunk-KEQTT67U.js} +7 -49
  41. package/dist/{chunk-4VBLQIM5.js → chunk-KRIEZVXX.js} +1 -1
  42. package/dist/{chunk-PLWDYWK6.js → chunk-KWWWMU5S.js} +1 -1
  43. package/dist/{chunk-IVFMOHAC.js → chunk-L53YKOK4.js} +5 -5
  44. package/dist/{chunk-XOT2VWCO.js → chunk-LRS32NU7.js} +6 -6
  45. package/dist/{chunk-6KZCXAYL.js → chunk-MRLC4HLJ.js} +1 -1
  46. package/dist/{chunk-P6RVYHLT.js → chunk-NASGAME6.js} +4 -4
  47. package/dist/{chunk-XQGQ5EFS.js → chunk-O3RHY4ZI.js} +2 -0
  48. package/dist/{chunk-WPZKOVYF.js → chunk-OL3ULF5Q.js} +1 -1
  49. package/dist/{chunk-AFUITAH6.js → chunk-S6YSOEK5.js} +3 -12
  50. package/dist/{chunk-U7KSOA2L.js → chunk-SBKCVRJB.js} +1 -1
  51. package/dist/{chunk-MMJYII7Y.js → chunk-SBWXIK5K.js} +4 -4
  52. package/dist/{chunk-7II5OM7R.js → chunk-TBZEIN45.js} +1 -1
  53. package/dist/{chunk-RWJHZCOR.js → chunk-TG756AMB.js} +2 -2
  54. package/dist/{chunk-X2RTLS6K.js → chunk-TPQA5TPU.js} +1 -1
  55. package/dist/{chunk-CL5Y6V6K.js → chunk-UB6Z7RY4.js} +3 -3
  56. package/dist/{chunk-KC4LNZL5.js → chunk-VSHAP22Q.js} +2 -2
  57. package/dist/{chunk-LVMWPFV4.js → chunk-VW22APZC.js} +1 -1
  58. package/dist/chunk-WHYTCQYZ.js +161 -0
  59. package/dist/{chunk-XV2K3AQT.js → chunk-WONOHP4G.js} +1 -1
  60. package/dist/{chunk-ZPJQ3TQL.js → chunk-WYMJ5RXC.js} +1 -1
  61. package/dist/{chunk-6HA55CRU.js → chunk-X7DGPNSV.js} +1 -1
  62. package/dist/{chunk-2K2GBFLU.js → chunk-Y2NR3Y6J.js} +1 -1
  63. package/dist/{chunk-UGWJC4GA.js → chunk-ZTJYOHS3.js} +1 -1
  64. package/dist/{chunk-6HPEMDQW.js → chunk-ZUCLQVXD.js} +1 -1
  65. package/dist/component-runtime/browserOptions.js +3 -3
  66. package/dist/component-runtime/contracts.js +3 -11
  67. package/dist/component-runtime/importPolicy.js +2 -2
  68. package/dist/component-runtime/render.js +5 -5
  69. package/dist/component-runtime/sourceAdmission.js +2 -2
  70. package/dist/component-runtime/template/testing.js +11 -10
  71. package/dist/component-runtime/template.js +11 -10
  72. package/dist/component-runtime.js +8 -16
  73. package/dist/compose.js +11 -11
  74. package/dist/composition/component-clip.d.ts +1 -0
  75. package/dist/composition/component-clip.js +29 -0
  76. package/dist/composition/depth.js +3 -8
  77. package/dist/composition/graphics-plan.js +2 -2
  78. package/dist/composition/invariants.js +2 -2
  79. package/dist/composition/ops.js +5 -5
  80. package/dist/composition/projection.js +3 -2
  81. package/dist/composition/scene.js +1 -1
  82. package/dist/composition/timeline.js +2 -2
  83. package/dist/composition/validators/brand-kit-body.js +4 -4
  84. package/dist/composition/validators/graphic-kinds.js +1 -1
  85. package/dist/composition/validators.js +4 -6
  86. package/dist/composition-ops.js +17 -15
  87. package/dist/composition.js +9 -10
  88. package/dist/{context-7SWSVJ6Z.js → context-WOYP7QBB.js} +6 -6
  89. package/dist/core/render.js +9 -7
  90. package/dist/core/select.js +2 -2
  91. package/dist/core.js +9 -7
  92. package/dist/director/ai-sdk.js +3 -3
  93. package/dist/director/domain.js +2 -2
  94. package/dist/director.js +4 -4
  95. package/dist/errors.js +1 -1
  96. package/dist/mcp/adapter.js +3 -3
  97. package/dist/mcp/composition-ops.js +1 -1
  98. package/dist/mcp/core.js +1 -1
  99. package/dist/mcp/curation.js +1 -1
  100. package/dist/mcp/scene-shot.js +2 -2
  101. package/dist/mcp/server.js +6 -6
  102. package/dist/mcp.js +10 -10
  103. package/dist/primitives/captions.js +3 -3
  104. package/dist/primitives/effects.js +5 -5
  105. package/dist/primitives/layouts.js +4 -4
  106. package/dist/primitives/lib/index.js +3 -3
  107. package/dist/primitives/lib.js +3 -3
  108. package/dist/primitives/scenes.js +4 -4
  109. package/dist/primitives/ui-blocks.js +2 -2
  110. package/dist/primitives.js +9 -9
  111. package/dist/render-harness/cardAssetAdmission.js +2 -2
  112. package/dist/render-harness/cardFonts.js +2 -2
  113. package/dist/render-harness.js +20 -18
  114. package/dist/{src-XI5MULKD.js → src-XYW7BEJ5.js} +17 -15
  115. package/package.json +16 -12
  116. package/dist/{chunk-UGEUB763.js → chunk-7PSQUTL5.js} +3 -3
@@ -6,7 +6,7 @@ import {
6
6
  import {
7
7
  flattenCompoundClips,
8
8
  hasCompoundClips
9
- } from "./chunk-ZPJQ3TQL.js";
9
+ } from "./chunk-WYMJ5RXC.js";
10
10
  import {
11
11
  DOMINANCE_WEIGHTS,
12
12
  ENTER_SEC,
@@ -24,11 +24,14 @@ import {
24
24
  scoreAndRank,
25
25
  segmentShots,
26
26
  stabilizeSelectionHysteresis
27
- } from "./chunk-3HLDIIWA.js";
27
+ } from "./chunk-F5UOF52Q.js";
28
28
  import {
29
29
  compositionHasVo,
30
30
  roleDefaultGainDb
31
31
  } from "./chunk-P3EFZDM5.js";
32
+ import {
33
+ componentClipRenderInput
34
+ } from "./chunk-WHYTCQYZ.js";
32
35
  import {
33
36
  SHOT_SCALE_TARGET,
34
37
  shotScaleZoom
@@ -39,7 +42,7 @@ import {
39
42
  import {
40
43
  CueframeError,
41
44
  encodeError
42
- } from "./chunk-XQGQ5EFS.js";
45
+ } from "./chunk-O3RHY4ZI.js";
43
46
  import {
44
47
  SCENE_CAPTURE_IDENTITY_FIELDS_V1,
45
48
  SCENE_PRESET_TRIANGLES,
@@ -54,7 +57,7 @@ import {
54
57
  sceneFullMipLevels,
55
58
  sceneTextureBytes,
56
59
  selectSceneBakeScale
57
- } from "./chunk-CL5Y6V6K.js";
60
+ } from "./chunk-UB6Z7RY4.js";
58
61
  import {
59
62
  SCENE_CONTEXT_GL_BUDGET_BYTES,
60
63
  SCENE_MAX_TRIANGLES,
@@ -1663,7 +1666,7 @@ function clipTransformChannel(c) {
1663
1666
  ...c.animate !== void 0 ? { animate: c.animate } : {}
1664
1667
  };
1665
1668
  }
1666
- function projectOverlayTrack(track, trackIndex, trackCount, fps, alphaUrls = {}, isSceneClip = () => false) {
1669
+ function projectOverlayTrack(track, trackIndex, trackCount, fps, alphaUrls, componentClips, isSceneClip = () => false) {
1667
1670
  const overlays = [];
1668
1671
  for (let i = 0; i < track.contents.length; i++) {
1669
1672
  const c = track.contents[i];
@@ -1680,37 +1683,33 @@ function projectOverlayTrack(track, trackIndex, trackCount, fps, alphaUrls = {},
1680
1683
  { trackId: track.id, clipId: c.id, compositionPath: `composition.tracks[${track.id}].contents[${i}].effects` }
1681
1684
  );
1682
1685
  }
1683
- if (c.source.kind === "component") {
1686
+ if (c.source.kind === "component" && componentClips === "baked") {
1684
1687
  const { startFrame: startFrame2, durationInFrames: durationInFrames2 } = timelineSpanFrames(
1685
1688
  c.startTime,
1686
1689
  c.startTime + c.duration,
1687
1690
  fps
1688
1691
  );
1689
1692
  if (durationInFrames2 === 0) continue;
1690
- const rawRef = c.source.props.componentRef;
1691
- const ref = rawRef && typeof rawRef === "object" && !Array.isArray(rawRef) ? rawRef : null;
1692
- if (ref?.version !== 1 || typeof ref.sourceVersionId !== "string" || !/^[a-f0-9]{64}$/.test(ref.sourceVersionId)) {
1693
+ const src = alphaUrls[c.id];
1694
+ if (!src) {
1693
1695
  throw renderInputError(
1694
- "invalid_composition",
1695
- `composition.tracks[${track.id}].contents[${i}].source: component clip ${c.id} has no immutable source version`,
1696
- { trackId: track.id, clipId: c.id, componentId: c.source.componentId }
1696
+ "variant_not_baked",
1697
+ `composition.tracks[${track.id}].contents[${i}]: component clip ${c.id} has no baked alpha (alphaUrls[${c.id}] missing), bake before render`,
1698
+ {
1699
+ trackId: track.id,
1700
+ clipId: c.id,
1701
+ componentId: c.source.componentId,
1702
+ compositionPath: `composition.tracks[${track.id}].contents[${i}].source`
1703
+ }
1697
1704
  );
1698
1705
  }
1699
- const { componentRef: _reserved, renderSeed, ...params } = c.source.props;
1700
- if (renderSeed !== void 0 && (typeof renderSeed !== "string" || renderSeed.length === 0)) {
1701
- throw renderInputError("invalid_composition", `composition.tracks[${track.id}].contents[${i}].source.props.renderSeed must be a non-empty string`, transitionLocator);
1702
- }
1703
1706
  overlays.push({
1704
1707
  ...visualIdentity(track, trackIndex, trackCount, i),
1705
1708
  id: c.id,
1706
- template: "component",
1707
- componentId: c.source.componentId,
1708
- sourceVersionId: ref.sourceVersionId,
1709
- ...renderSeed !== void 0 ? { renderSeed } : {},
1710
- componentAssets: c.source.assets ?? {},
1709
+ template: "alpha-layer",
1711
1710
  startFrame: startFrame2,
1712
1711
  durationInFrames: durationInFrames2,
1713
- params,
1712
+ params: { src },
1714
1713
  ...c.source.zPlane !== void 0 ? { zPlane: c.source.zPlane } : {},
1715
1714
  ...c.region !== void 0 ? { region: c.region } : {},
1716
1715
  ...c.fit !== void 0 ? { fit: c.fit } : {},
@@ -1719,33 +1718,33 @@ function projectOverlayTrack(track, trackIndex, trackCount, fps, alphaUrls = {},
1719
1718
  });
1720
1719
  continue;
1721
1720
  }
1722
- if (c.source.kind === "alpha-layer") {
1721
+ if (c.source.kind === "component") {
1723
1722
  const { startFrame: startFrame2, durationInFrames: durationInFrames2 } = timelineSpanFrames(
1724
1723
  c.startTime,
1725
1724
  c.startTime + c.duration,
1726
1725
  fps
1727
1726
  );
1728
1727
  if (durationInFrames2 === 0) continue;
1729
- const src = alphaUrls[c.id];
1730
- if (!src) {
1728
+ const built = componentClipRenderInput({ id: c.id, componentId: c.source.componentId, props: c.source.props });
1729
+ if (!built.ok) {
1731
1730
  throw renderInputError(
1732
- "variant_not_baked",
1733
- `composition.tracks[${track.id}].contents[${i}]: alpha-layer clip ${c.id} has no baked alpha (alphaUrls[${c.id}] missing) \u2014 bake before render`,
1734
- {
1735
- trackId: track.id,
1736
- clipId: c.id,
1737
- componentId: c.source.componentId,
1738
- compositionPath: `composition.tracks[${track.id}].contents[${i}].source`
1739
- }
1731
+ built.refusal.code,
1732
+ `composition.tracks[${track.id}].contents[${i}].source: ${built.refusal.message}`,
1733
+ { trackId: track.id, clipId: c.id, componentId: c.source.componentId }
1740
1734
  );
1741
1735
  }
1736
+ const { sourceVersionId, params, seed } = built.input;
1742
1737
  overlays.push({
1743
1738
  ...visualIdentity(track, trackIndex, trackCount, i),
1744
1739
  id: c.id,
1745
- template: "alpha-layer",
1740
+ template: "component",
1741
+ componentId: c.source.componentId,
1742
+ sourceVersionId,
1743
+ renderSeed: seed,
1744
+ componentAssets: c.source.assets ?? {},
1746
1745
  startFrame: startFrame2,
1747
1746
  durationInFrames: durationInFrames2,
1748
- params: { src },
1747
+ params,
1749
1748
  ...c.source.zPlane !== void 0 ? { zPlane: c.source.zPlane } : {},
1750
1749
  ...c.region !== void 0 ? { region: c.region } : {},
1751
1750
  ...c.fit !== void 0 ? { fit: c.fit } : {},
@@ -1782,7 +1781,7 @@ function projectOverlayTrack(track, trackIndex, trackCount, fps, alphaUrls = {},
1782
1781
  if (c.source.kind !== "overlay") {
1783
1782
  throw renderInputError(
1784
1783
  "clip_source_track_mismatch",
1785
- `composition.tracks[${track.id}].contents[${i}]: kind=${c.source.kind} is invalid on an overlay track (expected 'overlay', 'alpha-layer', or 'card')`,
1784
+ `composition.tracks[${track.id}].contents[${i}]: kind=${c.source.kind} is invalid on an overlay track (expected 'overlay', 'component', or 'card')`,
1786
1785
  { trackId: track.id, clipId: c.id, compositionPath: `composition.tracks[${track.id}].contents[${i}].source` }
1787
1786
  );
1788
1787
  }
@@ -2014,6 +2013,14 @@ function assertMergedCaptionFacesDrawable(composition) {
2014
2013
  );
2015
2014
  }
2016
2015
  function compositionToRenderInput(composition, srcUrls, trajectoryUrls, coViewUrls, alphaUrls, subCompositions, trajectories, options) {
2016
+ const componentClips = options?.componentClips;
2017
+ if (componentClips !== "live" && componentClips !== "baked") {
2018
+ throw renderInputError(
2019
+ "internal_error",
2020
+ `render input must name its component lane ('live' or 'baked'), got ${String(componentClips)}`,
2021
+ {}
2022
+ );
2023
+ }
2017
2024
  const flattened = hasCompoundClips(composition) ? flattenCompoundClips(composition, (id) => subCompositions?.[id]) : composition;
2018
2025
  composition = flattened;
2019
2026
  for (const track of composition.tracks) {
@@ -2047,7 +2054,7 @@ function compositionToRenderInput(composition, srcUrls, trajectoryUrls, coViewUr
2047
2054
  trajectoryUrls,
2048
2055
  coViewUrls,
2049
2056
  trajectories,
2050
- options?.sourceDimensions
2057
+ options.sourceDimensions
2051
2058
  );
2052
2059
  clips.push(...c);
2053
2060
  audioTracks.push(...audio);
@@ -2069,7 +2076,8 @@ function compositionToRenderInput(composition, srcUrls, trajectoryUrls, coViewUr
2069
2076
  trackCount,
2070
2077
  fps,
2071
2078
  alphaUrls ?? {},
2072
- options?.isSceneClip
2079
+ componentClips,
2080
+ options.isSceneClip
2073
2081
  ));
2074
2082
  } else if (track.kind === "effect") {
2075
2083
  effects.push(...projectEffectTrack(track, trackIndex, trackCount, fps));
@@ -2093,7 +2101,7 @@ function compositionToRenderInput(composition, srcUrls, trajectoryUrls, coViewUr
2093
2101
  for (const e of effects) {
2094
2102
  consider(e.startFrame ?? 0, e.durationInFrames ?? 0);
2095
2103
  }
2096
- const SCENE_OVERLAY_TEMPLATES = /* @__PURE__ */ new Set(["alpha-layer", "custom", "card"]);
2104
+ const SCENE_OVERLAY_TEMPLATES = /* @__PURE__ */ new Set(["alpha-layer", "component", "custom", "card"]);
2097
2105
  let maxBackgroundEndFrames = 0;
2098
2106
  for (const c of clips) {
2099
2107
  const end = c.timelineStartFrames + c.durationInFrames;
@@ -2176,6 +2184,13 @@ function compositionToRenderInput(composition, srcUrls, trajectoryUrls, coViewUr
2176
2184
  };
2177
2185
  }
2178
2186
  function assembleRenderInput(composition, resolved) {
2187
+ if (resolved.componentClips === "baked" && Object.keys(resolved.componentSources ?? {}).length > 0) {
2188
+ throw renderInputError(
2189
+ "internal_error",
2190
+ "render input on the baked lane must not carry componentSources: component code goes to the bake step, never to the render",
2191
+ {}
2192
+ );
2193
+ }
2179
2194
  const resolveSource = resolved.componentSources ? sceneSourceResolverForPinnedRows(resolved.componentSources) : null;
2180
2195
  if (resolveSource) {
2181
2196
  assertSceneClipShapes(composition, {
@@ -2194,6 +2209,7 @@ function assembleRenderInput(composition, resolved) {
2194
2209
  // The same manifest-backed answer the shape rules used, so projection cannot floor a scene
2195
2210
  // clip's boundary into a length the rules above would have refused.
2196
2211
  {
2212
+ componentClips: resolved.componentClips,
2197
2213
  ...resolveSource ? { isSceneClip: (clip) => isSceneShotClip(clip, resolveSource) } : {},
2198
2214
  sourceDimensions: resolved.sourceDimensions
2199
2215
  }
@@ -55,7 +55,7 @@ function isSourceKindCompatible(trackKind, sourceKind) {
55
55
  case "image":
56
56
  return sourceKind === "media" || sourceKind === "component";
57
57
  case "overlay":
58
- return sourceKind === "overlay" || sourceKind === "component" || sourceKind === "alpha-layer" || sourceKind === "card";
58
+ return sourceKind === "overlay" || sourceKind === "component" || sourceKind === "card";
59
59
  case "effect":
60
60
  return sourceKind === "effect";
61
61
  }
@@ -1392,7 +1392,7 @@ var BriefCreateRequest = zod19.strictObject({
1392
1392
  "kind": zod19.literal("component"),
1393
1393
  "componentId": zod19.string().min(1),
1394
1394
  "props": zod19.record(zod19.string(), zod19.unknown()),
1395
- "assets": zod19.record(zod19.string(), zod19.string().min(1)).optional(),
1395
+ "assets": zod19.record(zod19.string(), zod19.string().min(1)).optional().describe("Manifest asset slot \u2192 project media id. At mount each slot arrives as `assets[slot].handle`, a fetchable URL for <Img>/<Video>/<Audio>; `props` becomes `params` and never carries an asset URL."),
1396
1396
  "zPlane": zod19.enum(["front", "behind-subject"]).optional()
1397
1397
  }), zod19.strictObject({
1398
1398
  "kind": zod19.literal("overlay"),
@@ -1409,12 +1409,6 @@ var BriefCreateRequest = zod19.strictObject({
1409
1409
  "kind": zod19.literal("effect"),
1410
1410
  "primitiveId": zod19.string().min(1),
1411
1411
  "params": zod19.record(zod19.string(), zod19.unknown()).optional()
1412
- }), zod19.strictObject({
1413
- "kind": zod19.literal("alpha-layer"),
1414
- "componentId": zod19.string().min(1),
1415
- "props": zod19.record(zod19.string(), zod19.unknown()),
1416
- "assets": zod19.record(zod19.string(), zod19.string().min(1)).optional().describe("Manifest asset slot \u2192 project media id. At mount each slot arrives as `assets[slot].handle`, a fetchable URL for <Img>/<Video>/<Audio>; `props` becomes `params` and never carries an asset URL."),
1417
- "zPlane": zod19.enum(["front", "behind-subject"]).optional()
1418
1412
  }), zod19.strictObject({
1419
1413
  "kind": zod19.literal("card"),
1420
1414
  "html": zod19.string().min(1).describe("Your card's HTML \u2014 rendered VERBATIM as the graphic (shell motion via applyMotionPreset in a FOLLOWING call). CANVAS CONTRACT: the card renders in a viewport equal to the composition format's pixel frame (1080\xD71920 at 9:16 fhd); the root is NOT auto-pinned \u2014 declare explicit width/height matching the frame (box-sizing:border-box) and anchor content with flex/grid; position:absolute;inset:0 on the root does NOT fill the frame; for edge-to-edge backgrounds add an inner absolutely-positioned layer with generous negative inset. Overlay compositing applies a ~92% safe-area inset \u2014 keep critical copy away from the extreme edges. FONTS: name a family from GET /v1/fonts (list_render_fonts) \u2014 the renderer loads those faces for the card and waits for them, so `font-family: Inter` draws Inter. `@import` and remote font files are REFUSED: the card renders with no network. A family that is not on that list has no bytes behind it and the browser falls back, so end any stack with a generic (`Inter, sans-serif`) rather than relying on a system face being present."),
@@ -1654,7 +1648,7 @@ var BriefResponse = zod21.strictObject({
1654
1648
  "kind": zod21.literal("component"),
1655
1649
  "componentId": zod21.string().min(1),
1656
1650
  "props": zod21.record(zod21.string(), zod21.unknown()),
1657
- "assets": zod21.record(zod21.string(), zod21.string().min(1)).optional(),
1651
+ "assets": zod21.record(zod21.string(), zod21.string().min(1)).optional().describe("Manifest asset slot \u2192 project media id. At mount each slot arrives as `assets[slot].handle`, a fetchable URL for <Img>/<Video>/<Audio>; `props` becomes `params` and never carries an asset URL."),
1658
1652
  "zPlane": zod21.enum(["front", "behind-subject"]).optional()
1659
1653
  }), zod21.strictObject({
1660
1654
  "kind": zod21.literal("overlay"),
@@ -1671,12 +1665,6 @@ var BriefResponse = zod21.strictObject({
1671
1665
  "kind": zod21.literal("effect"),
1672
1666
  "primitiveId": zod21.string().min(1),
1673
1667
  "params": zod21.record(zod21.string(), zod21.unknown()).optional()
1674
- }), zod21.strictObject({
1675
- "kind": zod21.literal("alpha-layer"),
1676
- "componentId": zod21.string().min(1),
1677
- "props": zod21.record(zod21.string(), zod21.unknown()),
1678
- "assets": zod21.record(zod21.string(), zod21.string().min(1)).optional().describe("Manifest asset slot \u2192 project media id. At mount each slot arrives as `assets[slot].handle`, a fetchable URL for <Img>/<Video>/<Audio>; `props` becomes `params` and never carries an asset URL."),
1679
- "zPlane": zod21.enum(["front", "behind-subject"]).optional()
1680
1668
  }), zod21.strictObject({
1681
1669
  "kind": zod21.literal("card"),
1682
1670
  "html": zod21.string().min(1).describe("Your card's HTML \u2014 rendered VERBATIM as the graphic (shell motion via applyMotionPreset in a FOLLOWING call). CANVAS CONTRACT: the card renders in a viewport equal to the composition format's pixel frame (1080\xD71920 at 9:16 fhd); the root is NOT auto-pinned \u2014 declare explicit width/height matching the frame (box-sizing:border-box) and anchor content with flex/grid; position:absolute;inset:0 on the root does NOT fill the frame; for edge-to-edge backgrounds add an inner absolutely-positioned layer with generous negative inset. Overlay compositing applies a ~92% safe-area inset \u2014 keep critical copy away from the extreme edges. FONTS: name a family from GET /v1/fonts (list_render_fonts) \u2014 the renderer loads those faces for the card and waits for them, so `font-family: Inter` draws Inter. `@import` and remote font files are REFUSED: the card renders with no network. A family that is not on that list has no bytes behind it and the browser falls back, so end any stack with a generic (`Inter, sans-serif`) rather than relying on a system face being present."),
@@ -1905,7 +1893,7 @@ var BriefPatchRequest = zod23.strictObject({
1905
1893
  "kind": zod23.literal("component"),
1906
1894
  "componentId": zod23.string().min(1),
1907
1895
  "props": zod23.record(zod23.string(), zod23.unknown()),
1908
- "assets": zod23.record(zod23.string(), zod23.string().min(1)).optional(),
1896
+ "assets": zod23.record(zod23.string(), zod23.string().min(1)).optional().describe("Manifest asset slot \u2192 project media id. At mount each slot arrives as `assets[slot].handle`, a fetchable URL for <Img>/<Video>/<Audio>; `props` becomes `params` and never carries an asset URL."),
1909
1897
  "zPlane": zod23.enum(["front", "behind-subject"]).optional()
1910
1898
  }), zod23.strictObject({
1911
1899
  "kind": zod23.literal("overlay"),
@@ -1922,12 +1910,6 @@ var BriefPatchRequest = zod23.strictObject({
1922
1910
  "kind": zod23.literal("effect"),
1923
1911
  "primitiveId": zod23.string().min(1),
1924
1912
  "params": zod23.record(zod23.string(), zod23.unknown()).optional()
1925
- }), zod23.strictObject({
1926
- "kind": zod23.literal("alpha-layer"),
1927
- "componentId": zod23.string().min(1),
1928
- "props": zod23.record(zod23.string(), zod23.unknown()),
1929
- "assets": zod23.record(zod23.string(), zod23.string().min(1)).optional().describe("Manifest asset slot \u2192 project media id. At mount each slot arrives as `assets[slot].handle`, a fetchable URL for <Img>/<Video>/<Audio>; `props` becomes `params` and never carries an asset URL."),
1930
- "zPlane": zod23.enum(["front", "behind-subject"]).optional()
1931
1913
  }), zod23.strictObject({
1932
1914
  "kind": zod23.literal("card"),
1933
1915
  "html": zod23.string().min(1).describe("Your card's HTML \u2014 rendered VERBATIM as the graphic (shell motion via applyMotionPreset in a FOLLOWING call). CANVAS CONTRACT: the card renders in a viewport equal to the composition format's pixel frame (1080\xD71920 at 9:16 fhd); the root is NOT auto-pinned \u2014 declare explicit width/height matching the frame (box-sizing:border-box) and anchor content with flex/grid; position:absolute;inset:0 on the root does NOT fill the frame; for edge-to-edge backgrounds add an inner absolutely-positioned layer with generous negative inset. Overlay compositing applies a ~92% safe-area inset \u2014 keep critical copy away from the extreme edges. FONTS: name a family from GET /v1/fonts (list_render_fonts) \u2014 the renderer loads those faces for the card and waits for them, so `font-family: Inter` draws Inter. `@import` and remote font files are REFUSED: the card renders with no network. A family that is not on that list has no bytes behind it and the browser falls back, so end any stack with a generic (`Inter, sans-serif`) rather than relying on a system face being present."),
@@ -2812,7 +2794,7 @@ var Composition = zod58.strictObject({
2812
2794
  "kind": zod58.literal("component"),
2813
2795
  "componentId": zod58.string().min(1),
2814
2796
  "props": zod58.record(zod58.string(), zod58.unknown()),
2815
- "assets": zod58.record(zod58.string(), zod58.string().min(1)).optional(),
2797
+ "assets": zod58.record(zod58.string(), zod58.string().min(1)).optional().describe("Manifest asset slot \u2192 project media id. At mount each slot arrives as `assets[slot].handle`, a fetchable URL for <Img>/<Video>/<Audio>; `props` becomes `params` and never carries an asset URL."),
2816
2798
  "zPlane": zod58.enum(["front", "behind-subject"]).optional()
2817
2799
  }), zod58.strictObject({
2818
2800
  "kind": zod58.literal("overlay"),
@@ -2829,12 +2811,6 @@ var Composition = zod58.strictObject({
2829
2811
  "kind": zod58.literal("effect"),
2830
2812
  "primitiveId": zod58.string().min(1),
2831
2813
  "params": zod58.record(zod58.string(), zod58.unknown()).optional()
2832
- }), zod58.strictObject({
2833
- "kind": zod58.literal("alpha-layer"),
2834
- "componentId": zod58.string().min(1),
2835
- "props": zod58.record(zod58.string(), zod58.unknown()),
2836
- "assets": zod58.record(zod58.string(), zod58.string().min(1)).optional().describe("Manifest asset slot \u2192 project media id. At mount each slot arrives as `assets[slot].handle`, a fetchable URL for <Img>/<Video>/<Audio>; `props` becomes `params` and never carries an asset URL."),
2837
- "zPlane": zod58.enum(["front", "behind-subject"]).optional()
2838
2814
  }), zod58.strictObject({
2839
2815
  "kind": zod58.literal("card"),
2840
2816
  "html": zod58.string().min(1).describe("Your card's HTML \u2014 rendered VERBATIM as the graphic (shell motion via applyMotionPreset in a FOLLOWING call). CANVAS CONTRACT: the card renders in a viewport equal to the composition format's pixel frame (1080\xD71920 at 9:16 fhd); the root is NOT auto-pinned \u2014 declare explicit width/height matching the frame (box-sizing:border-box) and anchor content with flex/grid; position:absolute;inset:0 on the root does NOT fill the frame; for edge-to-edge backgrounds add an inner absolutely-positioned layer with generous negative inset. Overlay compositing applies a ~92% safe-area inset \u2014 keep critical copy away from the extreme edges. FONTS: name a family from GET /v1/fonts (list_render_fonts) \u2014 the renderer loads those faces for the card and waits for them, so `font-family: Inter` draws Inter. `@import` and remote font files are REFUSED: the card renders with no network. A family that is not on that list has no bytes behind it and the browser falls back, so end any stack with a generic (`Inter, sans-serif`) rather than relying on a system face being present."),
@@ -6520,7 +6496,7 @@ var CompositionOp = zod67.union([zod67.strictObject({
6520
6496
  "kind": zod67.literal("component"),
6521
6497
  "componentId": zod67.string().min(1),
6522
6498
  "props": zod67.record(zod67.string(), zod67.unknown()),
6523
- "assets": zod67.record(zod67.string(), zod67.string().min(1)).optional(),
6499
+ "assets": zod67.record(zod67.string(), zod67.string().min(1)).optional().describe("Manifest asset slot \u2192 project media id. At mount each slot arrives as `assets[slot].handle`, a fetchable URL for <Img>/<Video>/<Audio>; `props` becomes `params` and never carries an asset URL."),
6524
6500
  "zPlane": zod67.enum(["front", "behind-subject"]).optional()
6525
6501
  }), zod67.strictObject({
6526
6502
  "kind": zod67.literal("overlay"),
@@ -6537,12 +6513,6 @@ var CompositionOp = zod67.union([zod67.strictObject({
6537
6513
  "kind": zod67.literal("effect"),
6538
6514
  "primitiveId": zod67.string().min(1),
6539
6515
  "params": zod67.record(zod67.string(), zod67.unknown()).optional()
6540
- }), zod67.strictObject({
6541
- "kind": zod67.literal("alpha-layer"),
6542
- "componentId": zod67.string().min(1),
6543
- "props": zod67.record(zod67.string(), zod67.unknown()),
6544
- "assets": zod67.record(zod67.string(), zod67.string().min(1)).optional().describe("Manifest asset slot \u2192 project media id. At mount each slot arrives as `assets[slot].handle`, a fetchable URL for <Img>/<Video>/<Audio>; `props` becomes `params` and never carries an asset URL."),
6545
- "zPlane": zod67.enum(["front", "behind-subject"]).optional()
6546
6516
  }), zod67.strictObject({
6547
6517
  "kind": zod67.literal("card"),
6548
6518
  "html": zod67.string().min(1).describe("Your card's HTML \u2014 rendered VERBATIM as the graphic (shell motion via applyMotionPreset in a FOLLOWING call). CANVAS CONTRACT: the card renders in a viewport equal to the composition format's pixel frame (1080\xD71920 at 9:16 fhd); the root is NOT auto-pinned \u2014 declare explicit width/height matching the frame (box-sizing:border-box) and anchor content with flex/grid; position:absolute;inset:0 on the root does NOT fill the frame; for edge-to-edge backgrounds add an inner absolutely-positioned layer with generous negative inset. Overlay compositing applies a ~92% safe-area inset \u2014 keep critical copy away from the extreme edges. FONTS: name a family from GET /v1/fonts (list_render_fonts) \u2014 the renderer loads those faces for the card and waits for them, so `font-family: Inter` draws Inter. `@import` and remote font files are REFUSED: the card renders with no network. A family that is not on that list has no bytes behind it and the browser falls back, so end any stack with a generic (`Inter, sans-serif`) rather than relying on a system face being present."),
@@ -6670,7 +6640,7 @@ var CompositionOp = zod67.union([zod67.strictObject({
6670
6640
  "kind": zod67.literal("component"),
6671
6641
  "componentId": zod67.string().min(1),
6672
6642
  "props": zod67.record(zod67.string(), zod67.unknown()),
6673
- "assets": zod67.record(zod67.string(), zod67.string().min(1)).optional(),
6643
+ "assets": zod67.record(zod67.string(), zod67.string().min(1)).optional().describe("Manifest asset slot \u2192 project media id. At mount each slot arrives as `assets[slot].handle`, a fetchable URL for <Img>/<Video>/<Audio>; `props` becomes `params` and never carries an asset URL."),
6674
6644
  "zPlane": zod67.enum(["front", "behind-subject"]).optional()
6675
6645
  }), zod67.strictObject({
6676
6646
  "kind": zod67.literal("overlay"),
@@ -6687,12 +6657,6 @@ var CompositionOp = zod67.union([zod67.strictObject({
6687
6657
  "kind": zod67.literal("effect"),
6688
6658
  "primitiveId": zod67.string().min(1),
6689
6659
  "params": zod67.record(zod67.string(), zod67.unknown()).optional()
6690
- }), zod67.strictObject({
6691
- "kind": zod67.literal("alpha-layer"),
6692
- "componentId": zod67.string().min(1),
6693
- "props": zod67.record(zod67.string(), zod67.unknown()),
6694
- "assets": zod67.record(zod67.string(), zod67.string().min(1)).optional().describe("Manifest asset slot \u2192 project media id. At mount each slot arrives as `assets[slot].handle`, a fetchable URL for <Img>/<Video>/<Audio>; `props` becomes `params` and never carries an asset URL."),
6695
- "zPlane": zod67.enum(["front", "behind-subject"]).optional()
6696
6660
  }), zod67.strictObject({
6697
6661
  "kind": zod67.literal("card"),
6698
6662
  "html": zod67.string().min(1).describe("Your card's HTML \u2014 rendered VERBATIM as the graphic (shell motion via applyMotionPreset in a FOLLOWING call). CANVAS CONTRACT: the card renders in a viewport equal to the composition format's pixel frame (1080\xD71920 at 9:16 fhd); the root is NOT auto-pinned \u2014 declare explicit width/height matching the frame (box-sizing:border-box) and anchor content with flex/grid; position:absolute;inset:0 on the root does NOT fill the frame; for edge-to-edge backgrounds add an inner absolutely-positioned layer with generous negative inset. Overlay compositing applies a ~92% safe-area inset \u2014 keep critical copy away from the extreme edges. FONTS: name a family from GET /v1/fonts (list_render_fonts) \u2014 the renderer loads those faces for the card and waits for them, so `font-family: Inter` draws Inter. `@import` and remote font files are REFUSED: the card renders with no network. A family that is not on that list has no bytes behind it and the browser falls back, so end any stack with a generic (`Inter, sans-serif`) rather than relying on a system face being present."),
@@ -6816,7 +6780,7 @@ var CompositionOp = zod67.union([zod67.strictObject({
6816
6780
  "kind": zod67.literal("component"),
6817
6781
  "componentId": zod67.string().min(1),
6818
6782
  "props": zod67.record(zod67.string(), zod67.unknown()),
6819
- "assets": zod67.record(zod67.string(), zod67.string().min(1)).optional(),
6783
+ "assets": zod67.record(zod67.string(), zod67.string().min(1)).optional().describe("Manifest asset slot \u2192 project media id. At mount each slot arrives as `assets[slot].handle`, a fetchable URL for <Img>/<Video>/<Audio>; `props` becomes `params` and never carries an asset URL."),
6820
6784
  "zPlane": zod67.enum(["front", "behind-subject"]).optional()
6821
6785
  }), zod67.strictObject({
6822
6786
  "kind": zod67.literal("overlay"),
@@ -6833,12 +6797,6 @@ var CompositionOp = zod67.union([zod67.strictObject({
6833
6797
  "kind": zod67.literal("effect"),
6834
6798
  "primitiveId": zod67.string().min(1),
6835
6799
  "params": zod67.record(zod67.string(), zod67.unknown()).optional()
6836
- }), zod67.strictObject({
6837
- "kind": zod67.literal("alpha-layer"),
6838
- "componentId": zod67.string().min(1),
6839
- "props": zod67.record(zod67.string(), zod67.unknown()),
6840
- "assets": zod67.record(zod67.string(), zod67.string().min(1)).optional().describe("Manifest asset slot \u2192 project media id. At mount each slot arrives as `assets[slot].handle`, a fetchable URL for <Img>/<Video>/<Audio>; `props` becomes `params` and never carries an asset URL."),
6841
- "zPlane": zod67.enum(["front", "behind-subject"]).optional()
6842
6800
  }), zod67.strictObject({
6843
6801
  "kind": zod67.literal("card"),
6844
6802
  "html": zod67.string().min(1).describe("Your card's HTML \u2014 rendered VERBATIM as the graphic (shell motion via applyMotionPreset in a FOLLOWING call). CANVAS CONTRACT: the card renders in a viewport equal to the composition format's pixel frame (1080\xD71920 at 9:16 fhd); the root is NOT auto-pinned \u2014 declare explicit width/height matching the frame (box-sizing:border-box) and anchor content with flex/grid; position:absolute;inset:0 on the root does NOT fill the frame; for edge-to-edge backgrounds add an inner absolutely-positioned layer with generous negative inset. Overlay compositing applies a ~92% safe-area inset \u2014 keep critical copy away from the extreme edges. FONTS: name a family from GET /v1/fonts (list_render_fonts) \u2014 the renderer loads those faces for the card and waits for them, so `font-family: Inter` draws Inter. `@import` and remote font files are REFUSED: the card renders with no network. A family that is not on that list has no bytes behind it and the browser falls back, so end any stack with a generic (`Inter, sans-serif`) rather than relying on a system face being present."),
@@ -5,7 +5,7 @@ var DescribeCompositionOpsInput = z.object({
5
5
  type: z.string().optional().describe("Exact CompositionOp type, such as captions.fromComposition. Omit for the operation list.")
6
6
  });
7
7
  async function describeCompositionOps(type) {
8
- const { CompositionOp } = await import("./src-XI5MULKD.js");
8
+ const { CompositionOp } = await import("./src-XYW7BEJ5.js");
9
9
  const variants = CompositionOp.options;
10
10
  const knownTypes = variants.map((variant2) => variant2.shape.type.value);
11
11
  if (type === void 0) {
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-XHMKPTHV.js";
4
4
  import {
5
5
  checkTracks
6
- } from "./chunk-T56BK7NS.js";
6
+ } from "./chunk-JRGALHBZ.js";
7
7
 
8
8
  // ../composition/src/invariants/etag.ts
9
9
  import { sha256 } from "@noble/hashes/sha256";
@@ -1,3 +1,6 @@
1
+ import {
2
+ isBehindSubjectDepthSource
3
+ } from "./chunk-DPMS7I65.js";
1
4
  import {
2
5
  activeFaceKeepOutSeries,
3
6
  boundingBox,
@@ -6,7 +9,7 @@ import {
6
9
  import {
7
10
  CueframeError,
8
11
  encodeError
9
- } from "./chunk-XQGQ5EFS.js";
12
+ } from "./chunk-O3RHY4ZI.js";
10
13
 
11
14
  // ../composition/src/projection/cardTokens.ts
12
15
  var CARD_MOTION_VAR_NAMES = [
@@ -251,10 +254,7 @@ function behindWindowsOf(composition) {
251
254
  const out = [];
252
255
  for (const track of tracksOf(composition)) {
253
256
  for (const clip of clipsOf(track)) {
254
- const src = clip.source;
255
- const kind = src?.kind;
256
- if (kind !== "overlay" && kind !== "alpha-layer") continue;
257
- if (src?.zPlane !== "behind-subject") continue;
257
+ if (!isBehindSubjectDepthSource(clip.source)) continue;
258
258
  if (clip.duration <= 0) continue;
259
259
  out.push({
260
260
  startMs: clip.startTime * 1e3,
@@ -2,18 +2,18 @@ import {
2
2
  SCENE_SHOT_RESOURCE_DESCRIPTION,
3
3
  SCENE_SHOT_RESOURCE_URI,
4
4
  sceneShotContract
5
- } from "./chunk-I2HNC4PQ.js";
5
+ } from "./chunk-FZCVNHML.js";
6
6
  import {
7
7
  WAIT_KINDS,
8
8
  querySchemaShape,
9
9
  serializeQuery,
10
10
  waitForJob
11
- } from "./chunk-7II5OM7R.js";
11
+ } from "./chunk-TBZEIN45.js";
12
12
  import {
13
13
  DESCRIBE_COMPOSITION_OPS_DESCRIPTION,
14
14
  DescribeCompositionOpsInput,
15
15
  describeCompositionOps
16
- } from "./chunk-4VBLQIM5.js";
16
+ } from "./chunk-KRIEZVXX.js";
17
17
  import {
18
18
  GENERATED_OPERATIONS,
19
19
  apiErrorFrom,
@@ -31,10 +31,10 @@ import {
31
31
  text,
32
32
  textWithData,
33
33
  withMedia
34
- } from "./chunk-FZB7UX44.js";
34
+ } from "./chunk-KEQTT67U.js";
35
35
  import {
36
36
  CURATED_TOOLS
37
- } from "./chunk-4WBSXHQA.js";
37
+ } from "./chunk-EA3J5XUJ.js";
38
38
 
39
39
  // ../mcp/src/prompts.ts
40
40
  var skillListCache = null;
@@ -117,7 +117,7 @@ Every long job is either polled or pushed \u2014 never guessed:
117
117
  - Webhooks (\`create_webhook\`): ONE terminal event per kind with status INSIDE the payload \u2014 \`render.completed\`, \`compose.completed\`, \`media.completed\`, \`suggest.completed\` \u2014 plus \`checkpoint.ready\` (a held compose paused for review). Read \`cueframe://webhook-events\` for the full contract before building a receiver.
118
118
  - Presigned URLs (stills, clips, render outputs) expire \u2014 render outputs last ~7 days (refresh via the render's refresh-url op); preview stills/clips ~1 hour. Re-read for a fresh link instead of caching one.
119
119
 
120
- CUSTOM GRAPHICS \u2014 author or FORK: \`create_component\` (tsxSource + contract-v2 manifest) from scratch, or \`get_component_source\` on a built-in primitive (e.g. \`cinematic-title\`) to fork its editable module. Iterate author\u2192preview\u2192fix with \`preview_component\` (202 + jobId; \`wait_job(kind:"preview")\` returns the verified artifact from the same immutable bundle used by production; a compile/runtime/capability failure lands on the job's FAILED terminal carrying the sanitized author-fixable message) \u2192 fix via \`update_component\` \u2192 preview again. Place the verified component artifact via \`apply_composition\` as an \`alpha-layer\` clip \u2014 the shared compositor never executes authored source.
120
+ CUSTOM GRAPHICS \u2014 author or FORK: \`create_component\` (tsxSource + contract-v2 manifest) from scratch, or \`get_component_source\` on a built-in primitive (e.g. \`cinematic-title\`) to fork its editable module. Iterate author\u2192preview\u2192fix with \`preview_component\` (202 + jobId; \`wait_job(kind:"preview")\` returns the verified artifact from the same immutable bundle used by production; a compile/runtime/capability failure lands on the job's FAILED terminal carrying the sanitized author-fixable message) \u2192 fix via \`update_component\` \u2192 preview again. Place the verified component via \`apply_composition\` as a \`{kind:'component', componentId, props}\` clip.
121
121
 
122
122
  Cleanup: \`delete_project\` / \`delete_media\` / \`delete_webhook\` / \`delete_composition\`. \`list_projects\` re-orients you in an existing workspace; \`list_media\` (filter by \`source\`/\`tag\`) lists the library.
123
123
 
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  GraphicRole,
3
3
  OpaqueId
4
- } from "./chunk-AFUITAH6.js";
4
+ } from "./chunk-S6YSOEK5.js";
5
5
  import {
6
6
  CardHtml
7
7
  } from "./chunk-EQH37KNZ.js";
@@ -3,13 +3,13 @@ import {
3
3
  assertSceneShotParamsAdmitted,
4
4
  materializeComponentSource,
5
5
  renderComponentAlpha
6
- } from "./chunk-AK6QPX7A.js";
6
+ } from "./chunk-DBBKM74E.js";
7
7
  import {
8
8
  assertSourceReadsDeclaredAssets
9
- } from "./chunk-6HPEMDQW.js";
9
+ } from "./chunk-ZUCLQVXD.js";
10
10
  import {
11
11
  resolvedComponentRenderer
12
- } from "./chunk-KC4LNZL5.js";
12
+ } from "./chunk-VSHAP22Q.js";
13
13
  import {
14
14
  componentArtifactId,
15
15
  componentBundleId,
@@ -25,7 +25,7 @@ import {
25
25
  ComponentRuntimeError,
26
26
  assertGraphicsReceiptMatches,
27
27
  assertRendererReceiptMatches
28
- } from "./chunk-BZVOCVQV.js";
28
+ } from "./chunk-BLVSFN6J.js";
29
29
 
30
30
  // ../execution/component-runtime/src/assetServer.ts
31
31
  import { createHash, randomBytes } from "crypto";
@@ -66,6 +66,7 @@ var ERROR_CODES = {
66
66
  component_does_not_compile: { stage: "validate", category: "authoring", retryable: false, httpStatus: 422 },
67
67
  component_runtime_error: { stage: "validate", category: "authoring", retryable: false, httpStatus: 422 },
68
68
  component_source_unavailable: { stage: "validate", category: "authoring", retryable: false, httpStatus: 422 },
69
+ component_source_unpinned: { stage: "validate", category: "authoring", retryable: false, httpStatus: 422 },
69
70
  scene_materialization_failed: { stage: "validate", category: "authoring", retryable: false, httpStatus: 422 },
70
71
  // ── CUE-28: codes that were thrown typed and arrived as internal_error 500 ──
71
72
  //
@@ -182,6 +183,7 @@ var ERROR_CODES = {
182
183
  wrong_status: { stage: "billing", category: "authoring", retryable: false, httpStatus: 409 },
183
184
  transcript_payload_empty: { stage: "import", category: "authoring", retryable: false, httpStatus: 422 },
184
185
  render_job_no_snapshot: { stage: "render", category: "internal", retryable: false, httpStatus: 500 },
186
+ composition_unreadable: { stage: "validate", category: "internal", retryable: false, httpStatus: 500 },
185
187
  project_revision_invariant: { stage: "system", category: "internal", retryable: false, httpStatus: 500 },
186
188
  // ── INTERNAL: the message would describe our infrastructure, not the request.
187
189
  // Registered anyway, so the CODE and `retryable` are still honest even though
@@ -1,5 +1,5 @@
1
1
  // ../composition/src/validators/graphicKinds.ts
2
- var AUTHORED_GRAPHIC_KINDS = ["overlay", "component", "card", "alpha-layer"];
2
+ var AUTHORED_GRAPHIC_KINDS = ["overlay", "component", "card"];
3
3
  var GRAPHIC_ROLE_CANONICAL_KIND = {
4
4
  "title-card": "overlay",
5
5
  stat: "overlay",
@@ -62,7 +62,9 @@ var ComponentClipSource = z2.object({
62
62
  kind: z2.literal("component"),
63
63
  componentId: z2.string().min(1),
64
64
  props: z2.record(z2.string(), z2.unknown()),
65
- assets: z2.record(z2.string().min(1), z2.string().min(1)).optional(),
65
+ assets: z2.record(z2.string().min(1), z2.string().min(1)).optional().describe(
66
+ "Manifest asset slot \u2192 project media id. At mount each slot arrives as `assets[slot].handle`, a fetchable URL for <Img>/<Video>/<Audio>; `props` becomes `params` and never carries an asset URL."
67
+ ),
66
68
  zPlane: z2.enum(["front", "behind-subject"]).optional()
67
69
  });
68
70
  var OverlayClipSource = z2.object({
@@ -78,15 +80,6 @@ var EffectClipSource = z2.object({
78
80
  primitiveId: z2.string().min(1),
79
81
  params: z2.record(z2.string(), z2.unknown()).optional()
80
82
  });
81
- var AlphaLayerClipSource = z2.object({
82
- kind: z2.literal("alpha-layer"),
83
- componentId: z2.string().min(1),
84
- props: z2.record(z2.string(), z2.unknown()),
85
- assets: z2.record(z2.string().min(1), z2.string().min(1)).optional().describe(
86
- "Manifest asset slot \u2192 project media id. At mount each slot arrives as `assets[slot].handle`, a fetchable URL for <Img>/<Video>/<Audio>; `props` becomes `params` and never carries an asset URL."
87
- ),
88
- zPlane: z2.enum(["front", "behind-subject"]).optional()
89
- });
90
83
  var CardClipSource = z2.object({
91
84
  kind: z2.literal("card"),
92
85
  html: CardHtml,
@@ -103,7 +96,6 @@ var ClipSource = z2.discriminatedUnion("kind", [
103
96
  ComponentClipSource,
104
97
  OverlayClipSource,
105
98
  EffectClipSource,
106
- AlphaLayerClipSource,
107
99
  CardClipSource,
108
100
  CompositionClipSource
109
101
  ]);
@@ -636,7 +628,6 @@ export {
636
628
  ComponentClipSource,
637
629
  OverlayClipSource,
638
630
  EffectClipSource,
639
- AlphaLayerClipSource,
640
631
  CardClipSource,
641
632
  CompositionClipSource,
642
633
  ClipSource,
@@ -5,7 +5,7 @@ import {
5
5
  import {
6
6
  decodeError,
7
7
  scrubSensitive
8
- } from "./chunk-XQGQ5EFS.js";
8
+ } from "./chunk-O3RHY4ZI.js";
9
9
 
10
10
  // ../director/src/domain/chat.ts
11
11
  import { z } from "zod";
@@ -1,9 +1,9 @@
1
- import {
2
- FitText
3
- } from "./chunk-XHGZ2E77.js";
4
1
  import {
5
2
  EASING_BY_INTENT
6
3
  } from "./chunk-MFHXCHRI.js";
4
+ import {
5
+ FitText
6
+ } from "./chunk-XHGZ2E77.js";
7
7
  import {
8
8
  ACCENT,
9
9
  ACCENT_STRONG,
@@ -26,7 +26,7 @@ import {
26
26
  perspectiveFor,
27
27
  resolveCamera,
28
28
  useStage
29
- } from "./chunk-RWJHZCOR.js";
29
+ } from "./chunk-TG756AMB.js";
30
30
 
31
31
  // ../execution/primitives/src/effects/blur/index.tsx
32
32
  import React2 from "react";
@@ -5,7 +5,7 @@ import {
5
5
  isOk,
6
6
  opById,
7
7
  safeParse
8
- } from "./chunk-FZB7UX44.js";
8
+ } from "./chunk-KEQTT67U.js";
9
9
 
10
10
  // ../mcp/src/wait.ts
11
11
  var WAIT_KINDS = [