@cueframe/kernel 0.2.16 → 0.2.18

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 (67) hide show
  1. package/dist/_members/composition/fonts/bundledFaces.d.ts +15 -0
  2. package/dist/_members/errors/registry.d.ts +6 -0
  3. package/dist/animate.js +2 -2
  4. package/dist/authoring/build-tools.js +6 -6
  5. package/dist/authoring/context.js +5 -5
  6. package/dist/authoring/tools.js +5 -5
  7. package/dist/authoring.js +10 -10
  8. package/dist/{chunk-WTGUORWJ.js → chunk-26MBA3WH.js} +1 -1
  9. package/dist/{chunk-HA4S2ZGH.js → chunk-2R35PKNK.js} +4 -77
  10. package/dist/{chunk-YROOHMJG.js → chunk-3BCGHUJS.js} +1 -1
  11. package/dist/{chunk-S3PZFAF5.js → chunk-7NQRYZCT.js} +1 -1
  12. package/dist/{chunk-TAXZ4KBF.js → chunk-7S73F5E6.js} +2 -2
  13. package/dist/{chunk-TARKDVP6.js → chunk-BAC7DKQZ.js} +5 -0
  14. package/dist/{chunk-ZFI3N2ID.js → chunk-CG2E43AN.js} +4 -4
  15. package/dist/{chunk-J3DIUG24.js → chunk-CHWA3TQM.js} +1 -0
  16. package/dist/{chunk-XMAA2HYI.js → chunk-CIWOJ5XJ.js} +3 -3
  17. package/dist/{chunk-QWIK3HKM.js → chunk-D3GMN4WL.js} +1 -1
  18. package/dist/{chunk-SD25VQDE.js → chunk-E25S4EQC.js} +1 -1
  19. package/dist/{chunk-HBT2OCUB.js → chunk-EZUDUMH3.js} +3 -3
  20. package/dist/{chunk-NNMXLNOI.js → chunk-HCZ53SOM.js} +6 -6
  21. package/dist/{chunk-IGP2CA7C.js → chunk-HGBHJL7X.js} +1 -1
  22. package/dist/{chunk-QZR4JCFY.js → chunk-IQ7DKM5C.js} +4 -2
  23. package/dist/{chunk-5CNS7IXO.js → chunk-KBLQKH3T.js} +1 -1
  24. package/dist/{chunk-X6U6XVU4.js → chunk-KYOVOZQC.js} +4 -4
  25. package/dist/{chunk-L2AHS3AW.js → chunk-L5XVJQQV.js} +1 -1
  26. package/dist/{chunk-O7G2NXUJ.js → chunk-MAD6MSXA.js} +1 -1
  27. package/dist/{chunk-C4P4NC66.js → chunk-TDJNQVTL.js} +2 -2
  28. package/dist/{chunk-WBNFSG6T.js → chunk-WL2NULVQ.js} +1 -1
  29. package/dist/chunk-WXHD6OUT.js +82 -0
  30. package/dist/{chunk-ODUWCQI3.js → chunk-YTQQ24BU.js} +1 -1
  31. package/dist/{chunk-LQRW5UPR.js → chunk-ZYGUHMX6.js} +1 -1
  32. package/dist/component-runtime/render.js +2 -2
  33. package/dist/component-runtime/sourceAdmission.d.ts +1 -0
  34. package/dist/component-runtime/sourceAdmission.js +12 -0
  35. package/dist/component-runtime.js +8 -6
  36. package/dist/compose.js +12 -12
  37. package/dist/composition/fonts.js +3 -1
  38. package/dist/composition/graphics-plan.js +3 -3
  39. package/dist/composition/ops.js +4 -4
  40. package/dist/composition/projection.js +4 -4
  41. package/dist/composition/validators.js +3 -3
  42. package/dist/composition-ops.js +7 -7
  43. package/dist/composition.js +6 -6
  44. package/dist/{context-VHBMKP65.js → context-JEIN7PNN.js} +5 -5
  45. package/dist/core/render.js +4 -4
  46. package/dist/core/select.js +2 -2
  47. package/dist/core.js +4 -4
  48. package/dist/director/ai-sdk.js +3 -3
  49. package/dist/director/domain.js +2 -2
  50. package/dist/director.js +3 -3
  51. package/dist/errors.js +1 -1
  52. package/dist/mcp/adapter.js +3 -3
  53. package/dist/mcp/curation.js +1 -1
  54. package/dist/mcp/server.js +2 -2
  55. package/dist/mcp.js +2 -2
  56. package/dist/primitives/captions.js +1 -1
  57. package/dist/primitives/effects.js +4 -4
  58. package/dist/primitives/layouts.js +3 -3
  59. package/dist/primitives/lib/index.js +11 -11
  60. package/dist/primitives/lib.js +11 -11
  61. package/dist/primitives/scenes.js +3 -3
  62. package/dist/primitives/ui-blocks.js +2 -2
  63. package/dist/primitives.js +8 -8
  64. package/dist/render-harness/cardAssetAdmission.js +2 -2
  65. package/dist/render-harness.js +10 -9
  66. package/package.json +12 -8
  67. package/dist/{chunk-VLJOIUHL.js → chunk-A76GTLSA.js} +3 -3
@@ -148,3 +148,18 @@ export type StackFontFamily = {
148
148
  kind: "unknown";
149
149
  };
150
150
  export declare function bundledFamilyForStack(stack: string | undefined | null): StackFontFamily;
151
+ /**
152
+ * The family name a font admission should be decided against, for any value an author can put in
153
+ * a `fontFamily` field.
154
+ *
155
+ * A stack that names a bundled family collapses to THAT family, because it is the file the render
156
+ * will draw with. Anything else — an unknown family, a generic-only stack, a `$brand:` ref — stays
157
+ * exactly as authored, so the refusal names what the author wrote and the sealed brand font
158
+ * manifest still gets its chance to admit it.
159
+ *
160
+ * Both admission paths need this and they must not answer differently: `assertCaptionFontsAdmitted`
161
+ * resolves the caption stack, and `Root.tsx`'s sweep of every other `fontFamily` in the render
162
+ * input did not — so `{ fontFamily: "Inter, sans-serif" }` was drawn as a caption and refused as an
163
+ * overlay param, with a message calling the whole stack "not a bundled family".
164
+ */
165
+ export declare function admissibleFamilyForStack(stack: string): string;
@@ -385,6 +385,12 @@ export declare const ERROR_CODES: {
385
385
  readonly retryable: false;
386
386
  readonly httpStatus: 422;
387
387
  };
388
+ readonly component_source_unavailable: {
389
+ readonly stage: "validate";
390
+ readonly category: "authoring";
391
+ readonly retryable: false;
392
+ readonly httpStatus: 422;
393
+ };
388
394
  readonly component_deadline_exceeded: {
389
395
  readonly stage: "render";
390
396
  readonly category: "transient";
package/dist/animate.js CHANGED
@@ -102,7 +102,7 @@ import {
102
102
  useStage,
103
103
  weightsAt,
104
104
  worldTransform
105
- } from "./chunk-LQRW5UPR.js";
105
+ } from "./chunk-ZYGUHMX6.js";
106
106
  import {
107
107
  DEFAULT_LIGHTING_PROFILE,
108
108
  DEVICE_GLASS_OPACITY_ENCODED,
@@ -185,7 +185,7 @@ import {
185
185
  selectSceneBakeScale
186
186
  } from "./chunk-KKV5U5EA.js";
187
187
  import "./chunk-2L7PYYJK.js";
188
- import "./chunk-TARKDVP6.js";
188
+ import "./chunk-BAC7DKQZ.js";
189
189
  import "./chunk-2ESYSVXG.js";
190
190
  export {
191
191
  ALLOWED_BAKE_SCALES,
@@ -4,19 +4,19 @@ import {
4
4
  buildPlannerTools,
5
5
  buildToolsFromSchemas,
6
6
  extractProviderError
7
- } from "../chunk-5CNS7IXO.js";
8
- import "../chunk-X6U6XVU4.js";
7
+ } from "../chunk-KBLQKH3T.js";
8
+ import "../chunk-KYOVOZQC.js";
9
9
  import "../chunk-JOURGVOR.js";
10
10
  import "../chunk-7AZLFN26.js";
11
- import "../chunk-IGP2CA7C.js";
12
- import "../chunk-TAXZ4KBF.js";
13
- import "../chunk-QZR4JCFY.js";
11
+ import "../chunk-HGBHJL7X.js";
12
+ import "../chunk-7S73F5E6.js";
13
+ import "../chunk-IQ7DKM5C.js";
14
14
  import "../chunk-WPZKOVYF.js";
15
15
  import "../chunk-B7J5UUUV.js";
16
16
  import "../chunk-KYRDKK2D.js";
17
17
  import "../chunk-WREYUH2E.js";
18
18
  import "../chunk-7PA7FGLD.js";
19
- import "../chunk-TARKDVP6.js";
19
+ import "../chunk-BAC7DKQZ.js";
20
20
  import "../chunk-2ESYSVXG.js";
21
21
  export {
22
22
  ZERO_USAGE,
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  buildDirectorContext
3
- } from "../chunk-S3PZFAF5.js";
4
- import "../chunk-IGP2CA7C.js";
5
- import "../chunk-TAXZ4KBF.js";
6
- import "../chunk-QZR4JCFY.js";
3
+ } from "../chunk-7NQRYZCT.js";
4
+ import "../chunk-HGBHJL7X.js";
5
+ import "../chunk-7S73F5E6.js";
6
+ import "../chunk-IQ7DKM5C.js";
7
7
  import "../chunk-WPZKOVYF.js";
8
8
  import "../chunk-B7J5UUUV.js";
9
9
  import "../chunk-KYRDKK2D.js";
10
10
  import "../chunk-WREYUH2E.js";
11
- import "../chunk-TARKDVP6.js";
11
+ import "../chunk-BAC7DKQZ.js";
12
12
  import "../chunk-2ESYSVXG.js";
13
13
  export {
14
14
  buildDirectorContext
@@ -6,18 +6,18 @@ import {
6
6
  COMPOSE_ROLE_TOOLS,
7
7
  COMPOSE_ROLE_TOOL_NAMES,
8
8
  dispatchComposeRoleTool
9
- } from "../chunk-X6U6XVU4.js";
9
+ } from "../chunk-KYOVOZQC.js";
10
10
  import "../chunk-JOURGVOR.js";
11
11
  import "../chunk-7AZLFN26.js";
12
- import "../chunk-IGP2CA7C.js";
13
- import "../chunk-TAXZ4KBF.js";
14
- import "../chunk-QZR4JCFY.js";
12
+ import "../chunk-HGBHJL7X.js";
13
+ import "../chunk-7S73F5E6.js";
14
+ import "../chunk-IQ7DKM5C.js";
15
15
  import "../chunk-WPZKOVYF.js";
16
16
  import "../chunk-B7J5UUUV.js";
17
17
  import "../chunk-KYRDKK2D.js";
18
18
  import "../chunk-WREYUH2E.js";
19
19
  import "../chunk-7PA7FGLD.js";
20
- import "../chunk-TARKDVP6.js";
20
+ import "../chunk-BAC7DKQZ.js";
21
21
  import "../chunk-2ESYSVXG.js";
22
22
  export {
23
23
  COMPOSE_MOTION_TOOLS,
package/dist/authoring.js CHANGED
@@ -11,7 +11,7 @@ import {
11
11
  buildPlannerTools,
12
12
  buildToolsFromSchemas,
13
13
  extractProviderError
14
- } from "./chunk-5CNS7IXO.js";
14
+ } from "./chunk-KBLQKH3T.js";
15
15
  import {
16
16
  COMPOSE_MOTION_TOOLS,
17
17
  COMPOSE_MOTION_VERIFY_TOOLS,
@@ -20,14 +20,14 @@ import {
20
20
  COMPOSE_ROLE_TOOLS,
21
21
  COMPOSE_ROLE_TOOL_NAMES,
22
22
  dispatchComposeRoleTool
23
- } from "./chunk-X6U6XVU4.js";
23
+ } from "./chunk-KYOVOZQC.js";
24
24
  import {
25
25
  AgentFixableCaptureError,
26
26
  getExcludedTools
27
27
  } from "./chunk-JOURGVOR.js";
28
28
  import {
29
29
  buildDirectorContext
30
- } from "./chunk-S3PZFAF5.js";
30
+ } from "./chunk-7NQRYZCT.js";
31
31
  import {
32
32
  buildFastModel,
33
33
  buildModel,
@@ -48,28 +48,28 @@ import {
48
48
  formatPlanSteps,
49
49
  initCodeGenPrompts
50
50
  } from "./chunk-Y4HPN4BC.js";
51
- import "./chunk-C4P4NC66.js";
51
+ import "./chunk-TDJNQVTL.js";
52
52
  import {
53
53
  cssLayoutVars
54
- } from "./chunk-O7G2NXUJ.js";
54
+ } from "./chunk-MAD6MSXA.js";
55
55
  import "./chunk-ILO4NEZ3.js";
56
56
  import "./chunk-7AZLFN26.js";
57
57
  import "./chunk-VG2ND6PX.js";
58
- import "./chunk-IGP2CA7C.js";
59
- import "./chunk-TAXZ4KBF.js";
60
- import "./chunk-QZR4JCFY.js";
58
+ import "./chunk-HGBHJL7X.js";
59
+ import "./chunk-7S73F5E6.js";
60
+ import "./chunk-IQ7DKM5C.js";
61
61
  import "./chunk-WPZKOVYF.js";
62
62
  import "./chunk-B7J5UUUV.js";
63
63
  import "./chunk-KYRDKK2D.js";
64
64
  import "./chunk-WREYUH2E.js";
65
- import "./chunk-J3DIUG24.js";
65
+ import "./chunk-CHWA3TQM.js";
66
66
  import "./chunk-7PA7FGLD.js";
67
67
  import {
68
68
  collectSceneClipIssues,
69
69
  isSceneShotClip
70
70
  } from "./chunk-KKV5U5EA.js";
71
71
  import "./chunk-2L7PYYJK.js";
72
- import "./chunk-TARKDVP6.js";
72
+ import "./chunk-BAC7DKQZ.js";
73
73
  import "./chunk-2ESYSVXG.js";
74
74
 
75
75
  // ../authoring/src/agent.ts
@@ -43,7 +43,7 @@ import {
43
43
  makeDefaultScreenTexture,
44
44
  resolveCamera,
45
45
  useImageTexture
46
- } from "./chunk-LQRW5UPR.js";
46
+ } from "./chunk-ZYGUHMX6.js";
47
47
  import {
48
48
  DEVICE_GLASS_OPACITY_ENCODED,
49
49
  DeviceMesh,
@@ -3,7 +3,7 @@ import {
3
3
  assertSceneShotParamsAdmitted,
4
4
  materializeComponentSource,
5
5
  renderComponentAlpha
6
- } from "./chunk-QWIK3HKM.js";
6
+ } from "./chunk-D3GMN4WL.js";
7
7
  import {
8
8
  componentArtifactId,
9
9
  componentBundleId,
@@ -11,6 +11,9 @@ import {
11
11
  sha256Hex,
12
12
  sourceVersionId
13
13
  } from "./chunk-EXY4JJPH.js";
14
+ import {
15
+ assertSourceReadsDeclaredAssets
16
+ } from "./chunk-WXHD6OUT.js";
14
17
  import {
15
18
  resolvedComponentRenderer
16
19
  } from "./chunk-C5MPFJCD.js";
@@ -24,79 +27,6 @@ import {
24
27
  assertRendererReceiptMatches
25
28
  } from "./chunk-ZVG446DJ.js";
26
29
 
27
- // ../execution/component-runtime/src/sourceAdmission.ts
28
- import { parse } from "@babel/parser";
29
- function staticMember(node) {
30
- if (!node || typeof node !== "object") return null;
31
- const candidate = node;
32
- if (candidate.type !== "MemberExpression" && candidate.type !== "OptionalMemberExpression") return null;
33
- const property = candidate.property;
34
- if (!property) return null;
35
- const name = candidate.computed === true ? property.type === "StringLiteral" && typeof property.value === "string" ? property.value : null : property.type === "Identifier" && typeof property.name === "string" ? property.name : null;
36
- return name === null ? null : { object: candidate.object, property: name };
37
- }
38
- function sourceAssetHandleReads(tsxSource) {
39
- let root;
40
- try {
41
- root = parse(tsxSource, {
42
- sourceType: "module",
43
- plugins: ["jsx", "typescript"],
44
- errorRecovery: false
45
- });
46
- } catch (error) {
47
- throw new ComponentRuntimeError(
48
- "component_does_not_compile",
49
- error instanceof Error ? error.message : String(error),
50
- { cause: error }
51
- );
52
- }
53
- const reads = /* @__PURE__ */ new Set();
54
- const visit = (value) => {
55
- if (!value || typeof value !== "object") return;
56
- if (Array.isArray(value)) {
57
- for (const child of value) visit(child);
58
- return;
59
- }
60
- const node = value;
61
- const leaf = staticMember(node);
62
- if (leaf?.property === "handle") {
63
- const slot = staticMember(leaf.object);
64
- const rootObject = slot?.object;
65
- if (slot && rootObject?.type === "Identifier" && rootObject.name === "assets") {
66
- reads.add(slot.property);
67
- }
68
- }
69
- for (const [key, child] of Object.entries(node)) {
70
- if (key === "loc" || key === "start" || key === "end" || key === "errors" || key === "comments") continue;
71
- visit(child);
72
- }
73
- };
74
- visit(root);
75
- return reads;
76
- }
77
- function missingDeclaredAssetHandleReads(tsxSource, manifest) {
78
- const slots = Object.keys(manifest.assets);
79
- if (slots.length === 0) return [];
80
- const reads = sourceAssetHandleReads(tsxSource);
81
- return slots.filter((slot) => !reads.has(slot));
82
- }
83
- function assertSourceReadsDeclaredAssets(source) {
84
- const missing = missingDeclaredAssetHandleReads(source.tsxSource, source.manifest);
85
- if (missing.length === 0) return;
86
- throw new ComponentRuntimeError(
87
- "invalid_component_source",
88
- `The manifest declares asset slot(s) ${missing.map((slot) => JSON.stringify(slot)).join(", ")} but the source never reads ${missing.length === 1 ? "it" : "them"} through \`assets[slot].handle\`. Declared slots are delivered to the mount as \`assets[slot].handle\` (a fetchable URL for <Img>/<Video>/<Audio>); \`params\` is the clip's \`props\` and carries no asset URL. Mount as ({ durationInFrames, params, assets, render }) and read \`assets.${missing[0]}.handle\`.`,
89
- {
90
- locator: {
91
- stage: "source-admission",
92
- componentId: source.componentId,
93
- path: "manifest.assets",
94
- slots: missing
95
- }
96
- }
97
- );
98
- }
99
-
100
30
  // ../execution/component-runtime/src/assetServer.ts
101
31
  import { createHash, randomBytes } from "crypto";
102
32
  import { createReadStream, realpathSync, statSync } from "fs";
@@ -465,9 +395,6 @@ function sourceIdentityForBake(request) {
465
395
  }
466
396
 
467
397
  export {
468
- sourceAssetHandleReads,
469
- missingDeclaredAssetHandleReads,
470
- assertSourceReadsDeclaredAssets,
471
398
  startComponentAssetServer,
472
399
  parseAlphaOpaqueFractions,
473
400
  bakeOpacityContradictsPolicy,
@@ -24,7 +24,7 @@ import {
24
24
  } from "./chunk-W2245F6G.js";
25
25
  import {
26
26
  FlexLayout
27
- } from "./chunk-LQRW5UPR.js";
27
+ } from "./chunk-ZYGUHMX6.js";
28
28
 
29
29
  // ../execution/primitives/src/layouts/chat-to-preview-layout/index.tsx
30
30
  import { Easing, interpolate, useCurrentFrame, useVideoConfig } from "remotion";
@@ -2,7 +2,7 @@ import {
2
2
  selectAllClips,
3
3
  selectAllOverlays,
4
4
  selectSceneMarkers
5
- } from "./chunk-IGP2CA7C.js";
5
+ } from "./chunk-HGBHJL7X.js";
6
6
 
7
7
  // ../authoring/src/context/transcript.ts
8
8
  var MAX_TRANSCRIPT_CHARS = 6e4;
@@ -4,10 +4,10 @@ import {
4
4
  Format,
5
5
  GraphicRole,
6
6
  OpaqueId
7
- } from "./chunk-QZR4JCFY.js";
7
+ } from "./chunk-IQ7DKM5C.js";
8
8
  import {
9
9
  brandKitCaptionFaceIssues
10
- } from "./chunk-TARKDVP6.js";
10
+ } from "./chunk-BAC7DKQZ.js";
11
11
 
12
12
  // ../composition/src/validators/composePlan.ts
13
13
  import { z } from "zod";
@@ -160,6 +160,10 @@ function bundledFamilyForStack(stack) {
160
160
  }
161
161
  return bundled ? { kind: "bundled", family: bundled } : { kind: "default" };
162
162
  }
163
+ function admissibleFamilyForStack(stack) {
164
+ const resolved = bundledFamilyForStack(stack);
165
+ return resolved.kind === "bundled" ? resolved.family : stack;
166
+ }
163
167
 
164
168
  // ../composition/src/fonts/captionFaces.ts
165
169
  var CAPTION_FACE_DEFAULTS = Object.freeze({
@@ -406,6 +410,7 @@ export {
406
410
  parseFontStack,
407
411
  isGenericOnlyStack,
408
412
  bundledFamilyForStack,
413
+ admissibleFamilyForStack,
409
414
  CAPTION_FACE_DEFAULTS,
410
415
  CAPTION_DEFAULT_FAMILY,
411
416
  captionStackFamily,
@@ -1,9 +1,9 @@
1
- import {
2
- EASING_BY_INTENT
3
- } from "./chunk-MFHXCHRI.js";
4
1
  import {
5
2
  FitText
6
3
  } from "./chunk-XHGZ2E77.js";
4
+ import {
5
+ EASING_BY_INTENT
6
+ } from "./chunk-MFHXCHRI.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-LQRW5UPR.js";
29
+ } from "./chunk-ZYGUHMX6.js";
30
30
 
31
31
  // ../execution/primitives/src/effects/blur/index.tsx
32
32
  import React2 from "react";
@@ -63,6 +63,7 @@ var ERROR_CODES = {
63
63
  unsupported_runtime_version: { stage: "validate", category: "authoring", retryable: false, httpStatus: 422 },
64
64
  component_does_not_compile: { stage: "validate", category: "authoring", retryable: false, httpStatus: 422 },
65
65
  component_runtime_error: { stage: "validate", category: "authoring", retryable: false, httpStatus: 422 },
66
+ component_source_unavailable: { stage: "validate", category: "authoring", retryable: false, httpStatus: 422 },
66
67
  component_deadline_exceeded: { stage: "render", category: "transient", retryable: true, httpStatus: 503 },
67
68
  component_resource_exhausted: { stage: "render", category: "transient", retryable: true, httpStatus: 503 },
68
69
  component_asset_undeclared: { stage: "validate", category: "authoring", retryable: false, httpStatus: 422 },
@@ -3,6 +3,9 @@ import {
3
3
  serializeQuery,
4
4
  waitForJob
5
5
  } from "./chunk-3V75A6UH.js";
6
+ import {
7
+ CURATED_TOOLS
8
+ } from "./chunk-HCZ53SOM.js";
6
9
  import {
7
10
  GENERATED_OPERATIONS,
8
11
  apiErrorFrom,
@@ -20,9 +23,6 @@ import {
20
23
  text,
21
24
  withMedia
22
25
  } from "./chunk-TECEMBCI.js";
23
- import {
24
- CURATED_TOOLS
25
- } from "./chunk-NNMXLNOI.js";
26
26
 
27
27
  // ../mcp/src/prompts.ts
28
28
  var skillListCache = null;
@@ -31,7 +31,7 @@ import {
31
31
  } from "./chunk-KKV5U5EA.js";
32
32
  import {
33
33
  BUNDLED_FONT_FACES
34
- } from "./chunk-TARKDVP6.js";
34
+ } from "./chunk-BAC7DKQZ.js";
35
35
 
36
36
  // ../execution/component-runtime/src/sceneAdmission.ts
37
37
  import { ZodError } from "zod";
@@ -9,7 +9,7 @@ import {
9
9
  import {
10
10
  decodeError,
11
11
  scrubSensitive
12
- } from "./chunk-J3DIUG24.js";
12
+ } from "./chunk-CHWA3TQM.js";
13
13
 
14
14
  // ../director/src/domain/chat.ts
15
15
  import { z } from "zod";
@@ -24,7 +24,7 @@ import {
24
24
  scoreAndRank,
25
25
  segmentShots,
26
26
  stabilizeSelectionHysteresis
27
- } from "./chunk-L2AHS3AW.js";
27
+ } from "./chunk-L5XVJQQV.js";
28
28
  import {
29
29
  compositionHasVo,
30
30
  roleDefaultGainDb
@@ -36,7 +36,7 @@ import {
36
36
  import {
37
37
  CueframeError,
38
38
  encodeError
39
- } from "./chunk-J3DIUG24.js";
39
+ } from "./chunk-CHWA3TQM.js";
40
40
  import {
41
41
  SCENE_CAPTURE_IDENTITY_FIELDS_V1,
42
42
  SCENE_PRESET_TRIANGLES,
@@ -61,7 +61,7 @@ import {
61
61
  bundledFontFaceExists,
62
62
  mergedCaptionFaceIssues,
63
63
  unrenderableFaceField
64
- } from "./chunk-TARKDVP6.js";
64
+ } from "./chunk-BAC7DKQZ.js";
65
65
 
66
66
  // ../execution/core/src/render/sceneCaptureIdentity.ts
67
67
  var INTENT_FIELDS = [
@@ -374,7 +374,7 @@ Call wait_job(kind="preview_frame", id="${j.jobId}") for the rendered images.`,
374
374
  name: "preview_component",
375
375
  operationId: "previewComponent",
376
376
  pathArgs: { projectId: "id" },
377
- description: 'Queue a typed preview artifact for ONE org-installed component \u2014 ASYNC: returns a jobId immediately; then wait_job(kind="preview", id=jobId). The preview and production compositor consume the same content-addressed component bundle and verified artifact contract. `body.componentId` selects the component; pass `body.params` to render it with props. Compile/runtime/capability failures land on the job terminal with sanitized author-fixable messages. Idempotent per immutable render key.',
377
+ description: 'Queue a typed preview artifact for ONE org-installed component \u2014 ASYNC: returns a jobId immediately; then wait_job(kind="preview", id=jobId). The preview and production compositor consume the same content-addressed component bundle and verified artifact contract. `body.componentId` selects the component; pass `body.params` to render it with props (the mount\'s `params`); declared manifest asset slots are delivered separately as `assets[slot].handle`, never through params. Compile/runtime/capability failures land on the job terminal with sanitized author-fixable messages. Idempotent per immutable render key.',
378
378
  okFormat: (j) => `Preview job queued.
379
379
 
380
380
  jobId: ${j.jobId}
@@ -479,7 +479,7 @@ Call wait_job(kind="verify", id="${j.jobId}") to block until the scores + checkp
479
479
  {
480
480
  name: "create_component",
481
481
  operationId: "createComponent",
482
- description: "Create and store a custom graphic component (a reusable overlay/title/lower-third etc.) for the tenant. Returns the ComponentResponse (id + metadata) you can then reference from a composition. No project arg \u2014 components are tenant-scoped."
482
+ description: "Create and store a custom graphic component (a reusable overlay/title/lower-third etc.) for the tenant. Returns the ComponentResponse (id + metadata) you can then reference from a composition. No project arg \u2014 components are tenant-scoped. MOUNT CONTRACT (v2): the default export is called as ({ durationInFrames, params, assets, render }). `params` is the clip's `props`. Every slot declared in `manifest.assets` arrives as `assets[slot].handle` \u2014 a fetchable URL for <Img>/<Video>/<Audio> \u2014 NEVER inside params; a source that declares slots and never reads `assets` is refused (invalid_component_source). Bind slots on the clip via source.assets { slot: mediaId }."
483
483
  },
484
484
  {
485
485
  name: "list_catalog",
@@ -498,7 +498,7 @@ Call wait_job(kind="verify", id="${j.jobId}") to block until the scores + checkp
498
498
  name: "get_component_source",
499
499
  operationId: "getComponentSource",
500
500
  pathArgs: { componentId: "id" },
501
- description: `Read a component's editable TSX source. Pass a BUILT-IN primitive id (e.g. "cinematic-title", "lower-third", "kinetic-type") to get it as a SINGLE self-contained module \u2014 the server-native FORK path: edit the returned tsxSource, then create_component it back to own a customized copy. Also returns an org-installed component's own authored source. Returns { id, name, tsxSource, origin, ejectedFrom, propSchema, \u2026 }; 404 if the id is neither a known primitive nor an installed component carrying source.`,
501
+ description: `Read a component's editable TSX source. Pass a BUILT-IN primitive id (e.g. "cinematic-title", "lower-third", "kinetic-type") to get it as a SINGLE self-contained module \u2014 the server-native FORK path: edit the returned tsxSource, then create_component it back to own a customized copy. Also returns an org-installed component's own authored source. Returns { id, name, tsxSource, origin, ejectedFrom, propSchema, \u2026 }; 404 if the id is neither a known primitive nor an installed component carrying source. The returned module mounts as ({ durationInFrames, params, assets, render }): params = the clip's props; any slot you add to manifest.assets arrives as assets[slot].handle.`,
502
502
  okFormat: (j) => `Component source for ${j.id} (${j.name})${j.origin ? ` \u2014 origin: ${j.origin}` : ""}${j.ejectedFrom ? `, ejectedFrom: ${j.ejectedFrom}` : ""}.
503
503
  Edit this tsxSource and create_component it back to own a fork.
504
504
 
@@ -649,7 +649,7 @@ Render it with create_render(projectId="${a.projectId}", body={ compositionId: "
649
649
  {
650
650
  name: "import_resource",
651
651
  operationId: "importResource",
652
- description: 'Import a stock candidate (candidateId from search_resources) into a project as an ORG-OWNED media item \u2014 provider/externalId/license provenance preserved, bytes deduped across orgs. Pass projectId + candidateId. Returns { id, status:"importing"|"ready" }; processing is async \u2014 call wait_job(kind="media", id=mediaItemId), then use the returned id as a composition source. Gated on the resource_import plan feature (402 billing_required if your plan lacks it). 422 candidate_mismatch if the candidate expired \u2014 re-run search_resources.'
652
+ description: 'Import a stock candidate (candidateId from search_resources) into a project as an ORG-OWNED media item \u2014 provider/externalId/license provenance preserved, bytes deduped across orgs. Pass projectId + candidateId. Returns { id, status:"importing"|"ready" }; processing is async \u2014 call wait_job(kind="media", id=mediaItemId), then use the returned id as a composition source. Gated on the resource_import plan feature (402 billing_required if your plan lacks it). COST: 0 credits \u2014 search and import are both free for a keyed caller (get_account \u2192 entitlements.resource_import.listUsdPerUnit is 0); imported bytes count toward the storage gauge. 422 candidate_mismatch if the candidate expired \u2014 re-run search_resources.'
653
653
  },
654
654
  {
655
655
  name: "suggest_briefs",
@@ -720,7 +720,7 @@ Render it with create_render(projectId="${a.projectId}", body={ compositionId: "
720
720
  name: "update_component",
721
721
  operationId: "updateComponent",
722
722
  pathArgs: { componentId: "id" },
723
- description: "Update an authored component's tsxSource/metadata IN PLACE (same id) \u2014 the correct verb for the author\u2192preview\u2192fix loop (preview_component returns the compiler error; fix the source here and re-preview, instead of creating a new component each iteration). Pass componentId + the changed fields as `body`."
723
+ description: "Update an authored component's tsxSource/metadata IN PLACE (same id) \u2014 the correct verb for the author\u2192preview\u2192fix loop (preview_component returns the compiler error; fix the source here and re-preview, instead of creating a new component each iteration). Pass componentId + the changed fields as `body`. Same mount contract as create_component: ({ durationInFrames, params, assets, render }) \u2014 declared slots are read from `assets[slot].handle`, never params."
724
724
  },
725
725
  {
726
726
  name: "update_webhook",
@@ -777,7 +777,7 @@ Render it with create_render(projectId="${a.projectId}", body={ compositionId: "
777
777
  {
778
778
  name: "get_account",
779
779
  operationId: "getAccount",
780
- description: "ORIENT FIRST \u2014 show THIS key's account before you spend a metered call: the org it is bound to, the current plan, a per-feature entitlements map, and per-call cost ceilings. READ `balance`, NOT `included`. CueFrame is credit-funded: rendering (entitlements.exports), generation (generate), preview stills (compose_capture), the judge (compose_verify) and the Director (compose) have NO separate per-plan allowance \u2014 they all spend one shared wallet, named in `fundedBy` (`credits`; generation is metered in provider-cost units against that wallet). Each `balance` restates that ONE wallet in that feature's own unit at `creditCost` credits per unit, so they are alternative ways to spend the same money, not four budgets. Check the requested cost against the balance. For generation, also check generationLimit: free accounts have a separate provider-cost cap even with a positive wallet. A billing_required error with reason free_generation_cap requires a credit-pack purchase through normal checkout. `included:false` means the plan genuinely lacks the feature. Every new org starts with a free credit grant, so an account with an empty usage history can still render, generate, preview and score. costCeilings.generateMediaUsdPerCall is the generate_media per-call USD cap. No args \u2014 identity is resolved from your key (never echoed from input).",
780
+ description: "ORIENT FIRST \u2014 show THIS key's account before you spend a metered call: the org it is bound to, the current plan, a per-feature entitlements map, and per-call cost ceilings. READ `balance`, NOT `included`. CueFrame is credit-funded: rendering (entitlements.exports), generation (generate), preview stills (compose_capture), the judge (compose_verify) and the Director (compose) have NO separate per-plan allowance \u2014 they all spend one shared wallet, named in `fundedBy` (`credits`; generation is metered in provider-cost units against that wallet). Each `balance` restates that ONE wallet in that feature's own unit at `creditCost` credits per unit, so they are alternative ways to spend the same money, not four budgets. Each entitlement also carries `listUsdPerUnit`: the dollar quote for ONE unit before you call (0 = a plan grant that draws no credits, e.g. resource_import \u2014 stock search + import are free; null = not quotable up front). Check the requested cost against the balance. For generation, also check generationLimit: free accounts have a separate provider-cost cap even with a positive wallet. A billing_required error with reason free_generation_cap requires a credit-pack purchase through normal checkout. `included:false` means the plan genuinely lacks the feature. Every new org starts with a free credit grant, so an account with an empty usage history can still render, generate, preview and score. costCeilings.generateMediaUsdPerCall is the generate_media per-call USD cap. No args \u2014 identity is resolved from your key (never echoed from input).",
781
781
  annotations: { readOnlyHint: true }
782
782
  },
783
783
  {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Composition
3
- } from "./chunk-QZR4JCFY.js";
3
+ } from "./chunk-IQ7DKM5C.js";
4
4
  import {
5
5
  expandToLinkGroup
6
6
  } from "./chunk-KYRDKK2D.js";
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-B7J5UUUV.js";
4
4
  import {
5
5
  captionFaceIssues
6
- } from "./chunk-TARKDVP6.js";
6
+ } from "./chunk-BAC7DKQZ.js";
7
7
 
8
8
  // ../composition/src/validators/opaqueId.ts
9
9
  import { z } from "zod";
@@ -77,7 +77,9 @@ var AlphaLayerClipSource = z2.object({
77
77
  kind: z2.literal("alpha-layer"),
78
78
  componentId: z2.string().min(1),
79
79
  props: z2.record(z2.string(), z2.unknown()),
80
- assets: z2.record(z2.string().min(1), z2.string().min(1)).optional(),
80
+ assets: z2.record(z2.string().min(1), z2.string().min(1)).optional().describe(
81
+ "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."
82
+ ),
81
83
  zPlane: z2.enum(["front", "behind-subject"]).optional()
82
84
  });
83
85
  var CardClipSource = z2.object({
@@ -2,7 +2,7 @@ import {
2
2
  COMPOSE_PLANNER_TOOLS,
3
3
  COMPOSE_ROLE_TOOLS,
4
4
  dispatchComposeRoleTool
5
- } from "./chunk-X6U6XVU4.js";
5
+ } from "./chunk-KYOVOZQC.js";
6
6
 
7
7
  // ../authoring/src/agent/buildTools.ts
8
8
  import { tool } from "ai";
@@ -7,13 +7,13 @@ import {
7
7
  } from "./chunk-7AZLFN26.js";
8
8
  import {
9
9
  selectAllOverlays
10
- } from "./chunk-IGP2CA7C.js";
10
+ } from "./chunk-HGBHJL7X.js";
11
11
  import {
12
12
  ComposePlan
13
- } from "./chunk-TAXZ4KBF.js";
13
+ } from "./chunk-7S73F5E6.js";
14
14
  import {
15
15
  OverlayClipSource
16
- } from "./chunk-QZR4JCFY.js";
16
+ } from "./chunk-IQ7DKM5C.js";
17
17
 
18
18
  // ../authoring/src/tools/toolSets.ts
19
19
  var COMPOSE_PLANNER_TOOLS = [
@@ -63,7 +63,7 @@ var COMPOSE_ROLE_TOOLS = Object.freeze({
63
63
  schema: z.object({}),
64
64
  metadata: { label: "Get Context" },
65
65
  handler: async (_args, capabilities) => {
66
- const { buildDirectorContext } = await import("./context-VHBMKP65.js");
66
+ const { buildDirectorContext } = await import("./context-JEIN7PNN.js");
67
67
  return buildDirectorContext(capabilities);
68
68
  }
69
69
  },
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  CueframeError,
3
3
  encodeError
4
- } from "./chunk-J3DIUG24.js";
4
+ } from "./chunk-CHWA3TQM.js";
5
5
 
6
6
  // ../execution/core/src/render/vcam/constants.ts
7
7
  var P_MIN = 0.5;
@@ -10,7 +10,7 @@ import {
10
10
  import {
11
11
  captionFontSource,
12
12
  effectiveCaptionFamily
13
- } from "./chunk-TARKDVP6.js";
13
+ } from "./chunk-BAC7DKQZ.js";
14
14
 
15
15
  // ../composition/src/projection/brandKit.ts
16
16
  var LOGO_DEFAULT_PLACEMENT = "br";
@@ -2,11 +2,11 @@ import {
2
2
  activeFaceKeepOutSeries,
3
3
  boundingBox,
4
4
  resolveBrandRefsDeep
5
- } from "./chunk-O7G2NXUJ.js";
5
+ } from "./chunk-MAD6MSXA.js";
6
6
  import {
7
7
  CueframeError,
8
8
  encodeError
9
- } from "./chunk-J3DIUG24.js";
9
+ } from "./chunk-CHWA3TQM.js";
10
10
 
11
11
  // ../composition/src/projection/cardTokens.ts
12
12
  var CARD_MOTION_VAR_NAMES = [
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ChatErrorView,
3
3
  DirectorTurnContext
4
- } from "./chunk-SD25VQDE.js";
4
+ } from "./chunk-E25S4EQC.js";
5
5
  import {
6
6
  GenerationArtifact
7
7
  } from "./chunk-73DQTUWY.js";