@cueframe/kernel 0.2.43 → 0.2.44

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 (61) hide show
  1. package/dist/_members/component-runtime/contracts.d.ts +7 -1
  2. package/dist/_members/component-runtime/contracts.d.ts.map +1 -1
  3. package/dist/_members/errors/registry.d.ts +18 -0
  4. package/dist/_members/mcp/executor.d.ts +3 -2
  5. package/dist/_members/mcp/serverClient.d.ts +7 -0
  6. package/dist/_members/plane/contract.d.ts +28 -1
  7. package/dist/authoring.js +2 -2
  8. package/dist/{chunk-6PBYCESM.js → chunk-4GLMARCJ.js} +1 -1
  9. package/dist/{chunk-RO57QD5M.js → chunk-7XZW26U2.js} +3 -3
  10. package/dist/{chunk-UGYYZBG4.js → chunk-EC6VFQE6.js} +1 -0
  11. package/dist/{chunk-IHKMFEBT.js → chunk-FRNBTODO.js} +1 -1
  12. package/dist/{chunk-BUAAQDDJ.js → chunk-GOJKL5FM.js} +1 -1
  13. package/dist/{chunk-PCCVZYAF.js → chunk-JWMWVP64.js} +1 -1
  14. package/dist/{chunk-JX7NKSJP.js → chunk-K66NLMGX.js} +1 -1
  15. package/dist/{chunk-WEXGESUQ.js → chunk-KKHI5NLK.js} +1 -1
  16. package/dist/{chunk-UAOTQSS3.js → chunk-MYBK6DKF.js} +9 -9
  17. package/dist/{chunk-AYOVAVNO.js → chunk-OASSDEWY.js} +1 -1
  18. package/dist/{chunk-IYZEK6WY.js → chunk-V7LQ7ZHV.js} +1 -1
  19. package/dist/{chunk-VCBLGZQQ.js → chunk-WKT7SEVP.js} +10 -3
  20. package/dist/{chunk-62VTAA6O.js → chunk-WL2MLKWU.js} +1 -1
  21. package/dist/{chunk-SLN5UKLT.js → chunk-WYRKF2OX.js} +2 -3
  22. package/dist/{chunk-QSWONRX2.js → chunk-XWOV6KI6.js} +17 -1
  23. package/dist/chunk-YIJZBLQE.js +102 -0
  24. package/dist/{chunk-NPZWMZI6.js → chunk-ZXWSZUSU.js} +10 -10
  25. package/dist/component-runtime/browserOptions.js +2 -2
  26. package/dist/component-runtime/contracts.js +1 -1
  27. package/dist/component-runtime/importPolicy.js +2 -2
  28. package/dist/component-runtime/render.js +4 -4
  29. package/dist/component-runtime/sourceAdmission.js +2 -2
  30. package/dist/component-runtime.js +6 -6
  31. package/dist/compose.js +21 -21
  32. package/dist/composition/projection.js +2 -2
  33. package/dist/composition-ops.js +3 -3
  34. package/dist/composition.js +2 -2
  35. package/dist/core/render.js +3 -3
  36. package/dist/core/select.js +2 -2
  37. package/dist/core.js +3 -3
  38. package/dist/director/ai-sdk.js +3 -3
  39. package/dist/director/domain.js +2 -2
  40. package/dist/director.js +3 -3
  41. package/dist/errors.js +1 -1
  42. package/dist/mcp/executor.js +2 -1
  43. package/dist/mcp.js +2 -1
  44. package/dist/plane/conformance.js +1 -1
  45. package/dist/plane/contract.js +27 -46
  46. package/dist/plane.js +1 -1
  47. package/dist/primitives/effects.js +2 -2
  48. package/dist/primitives/hero-text.js +2 -2
  49. package/dist/primitives/scenes.js +2 -2
  50. package/dist/primitives/text.js +2 -2
  51. package/dist/primitives/ui-blocks.js +4 -4
  52. package/dist/primitives.js +20 -20
  53. package/dist/render-harness/cardAssetAdmission.js +2 -2
  54. package/dist/render-harness/cardFonts.js +2 -2
  55. package/dist/render-harness.js +15 -15
  56. package/package.json +9 -9
  57. package/dist/{chunk-O3SJTX6S.js → chunk-4B4V3HYW.js} +4 -4
  58. package/dist/{chunk-7SXY6NFW.js → chunk-5ZQLMPDY.js} +3 -3
  59. package/dist/{chunk-RL5SO653.js → chunk-7SQOXIWR.js} +3 -3
  60. package/dist/{chunk-B3GSTQLR.js → chunk-VLJOIUHL.js} +6 -6
  61. package/dist/{chunk-RBWS5XHE.js → chunk-X34KW2SL.js} +4 -4
@@ -765,7 +765,12 @@ export declare const ComponentRenderReceiptV2: z.ZodObject<{
765
765
  }, z.core.$strict>>;
766
766
  }, z.core.$strict>;
767
767
  export type ComponentRenderReceiptV2 = z.infer<typeof ComponentRenderReceiptV2>;
768
- export declare const COMPONENT_RUNTIME_ERROR_CODES: readonly ["invalid_component_source", "unsupported_runtime_version", "component_does_not_compile", "component_runtime_error", "component_deadline_exceeded", "component_resource_exhausted", "component_asset_undeclared", "component_asset_unavailable", "component_asset_integrity_failed", "component_network_denied", "component_import_denied", "component_graphics_unavailable", "component_graphics_mismatch", "component_device_lost", "component_output_invalid", "component_conflict", "component_scene_invalid"];
768
+ /**
769
+ * Every code the bake lane can raise, host side or sandbox side. Not only the
770
+ * ones a component can report about itself: the host's own artifact verifier
771
+ * refuses through the same channel, so its codes belong here too.
772
+ */
773
+ export declare const COMPONENT_RUNTIME_ERROR_CODES: readonly ["invalid_component_source", "unsupported_runtime_version", "component_does_not_compile", "component_runtime_error", "component_deadline_exceeded", "component_resource_exhausted", "component_asset_undeclared", "component_asset_unavailable", "component_asset_integrity_failed", "component_network_denied", "component_import_denied", "component_graphics_unavailable", "component_graphics_mismatch", "component_device_lost", "component_output_invalid", "component_output_unverifiable", "component_conflict", "component_scene_invalid"];
769
774
  export declare const ComponentRuntimeErrorCode: z.ZodEnum<{
770
775
  invalid_component_source: "invalid_component_source";
771
776
  unsupported_runtime_version: "unsupported_runtime_version";
@@ -782,6 +787,7 @@ export declare const ComponentRuntimeErrorCode: z.ZodEnum<{
782
787
  component_graphics_mismatch: "component_graphics_mismatch";
783
788
  component_device_lost: "component_device_lost";
784
789
  component_output_invalid: "component_output_invalid";
790
+ component_output_unverifiable: "component_output_unverifiable";
785
791
  component_conflict: "component_conflict";
786
792
  component_scene_invalid: "component_scene_invalid";
787
793
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
@@ -1120,6 +1120,24 @@ export declare const ERROR_CODES: {
1120
1120
  readonly httpStatus: 503;
1121
1121
  };
1122
1122
  readonly component_output_invalid: {
1123
+ readonly stage: "render";
1124
+ readonly category: "authoring";
1125
+ readonly retryable: false;
1126
+ readonly httpStatus: 422;
1127
+ };
1128
+ readonly component_output_unverifiable: {
1129
+ readonly stage: "render";
1130
+ readonly category: "internal";
1131
+ readonly retryable: false;
1132
+ readonly httpStatus: 500;
1133
+ };
1134
+ readonly sandbox_oom: {
1135
+ readonly stage: "render";
1136
+ readonly category: "internal";
1137
+ readonly retryable: true;
1138
+ readonly httpStatus: 503;
1139
+ };
1140
+ readonly component_bake_crashed: {
1123
1141
  readonly stage: "render";
1124
1142
  readonly category: "internal";
1125
1143
  readonly retryable: false;
@@ -1,10 +1,11 @@
1
1
  import { type Executor } from './core.js';
2
+ import { type ClientIdentity } from '../plane/contract.js';
2
3
  export declare const API_URLS: Record<string, string>;
3
- export declare function makeNetworkExecutor(baseUrl: string, apiKey: string): Executor;
4
+ export declare function makeNetworkExecutor(baseUrl: string, apiKey: string, client: ClientIdentity): Executor;
4
5
  export declare function makeSessionExecutor(opts: {
5
6
  baseUrl: string;
6
7
  getToken: () => Promise<string | null>;
7
- clientVersion: string;
8
+ client: ClientIdentity;
8
9
  }): Executor;
9
10
  export declare function makePlatformExecutor(baseUrl: string, deployKey: string, orgId: string, opts?: {
10
11
  actingUserId?: string;
@@ -0,0 +1,7 @@
1
+ import { type ClientIdentity } from '../plane/contract.js';
2
+ /**
3
+ * The stdio server is a first-party /v1 client like the desktop and the CLI,
4
+ * and it is the one agents run locally. Node-only, so it lives beside main.ts
5
+ * rather than in executor.ts, which browser bundles import.
6
+ */
7
+ export declare const MCP_SERVER_CLIENT: ClientIdentity;
@@ -73,7 +73,7 @@ export declare const PreviewFrameRequest: z.ZodObject<{
73
73
  }>>;
74
74
  scale: z.ZodOptional<z.ZodNumber>;
75
75
  jpegQuality: z.ZodOptional<z.ZodNumber>;
76
- }, z.core.$strip>;
76
+ }, z.core.$strict>;
77
77
  /** Synchronous desktop variant: the mounted persisted document is the only target. */
78
78
  export declare const DesktopPreviewFrameRequest: z.ZodObject<{
79
79
  timestamps: z.ZodArray<z.ZodNumber>;
@@ -84,3 +84,30 @@ export declare const DesktopPreviewFrameRequest: z.ZodObject<{
84
84
  scale: z.ZodOptional<z.ZodNumber>;
85
85
  jpegQuality: z.ZodOptional<z.ZodNumber>;
86
86
  }, z.core.$strict>;
87
+ /**
88
+ * Who is calling, in one request header. The server cannot infer this: a Tauri
89
+ * WebView2 request and a Chrome one carry the same user agent, so every
90
+ * first-party client states its surface, version and OS itself. Mirrors the
91
+ * `X-CueFrame-Contract` response header, from the other direction.
92
+ */
93
+ export declare const CLIENT_HEADER = "X-CueFrame-Client";
94
+ export declare const CLIENT_SURFACES: readonly ["studio", "web", "console", "cli", "mcp"];
95
+ export type ClientSurface = (typeof CLIENT_SURFACES)[number];
96
+ export declare const CLIENT_OSES: readonly ["macos", "windows", "linux", "browser", "unknown"];
97
+ export type ClientOs = (typeof CLIENT_OSES)[number];
98
+ export interface ClientIdentity {
99
+ surface: ClientSurface;
100
+ version: string;
101
+ os: ClientOs;
102
+ }
103
+ export declare function formatClientHeader(client: ClientIdentity): string;
104
+ /** Null means no first-party client said so, never a guessed identity. */
105
+ export declare function parseClientHeader(value: string | null | undefined): ClientIdentity | null;
106
+ /** Node's `process.platform`, named in our terms. Anything else is `unknown`. */
107
+ export declare function osFromNodePlatform(platform: string): ClientOs;
108
+ /**
109
+ * The host OS behind a webview, for clients with no OS API wired. Reports
110
+ * `unknown` rather than guessing: a wrong OS in a support log is worse than
111
+ * an absent one.
112
+ */
113
+ export declare function osFromUserAgent(agent: string): ClientOs;
package/dist/authoring.js CHANGED
@@ -48,7 +48,7 @@ import {
48
48
  formatPlanSteps,
49
49
  initCodeGenPrompts
50
50
  } from "./chunk-Y4HPN4BC.js";
51
- import "./chunk-AYOVAVNO.js";
51
+ import "./chunk-OASSDEWY.js";
52
52
  import {
53
53
  cssLayoutVars
54
54
  } from "./chunk-W5W3FDDI.js";
@@ -62,7 +62,7 @@ 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-QSWONRX2.js";
65
+ import "./chunk-XWOV6KI6.js";
66
66
  import "./chunk-7PA7FGLD.js";
67
67
  import {
68
68
  collectSceneClipIssues,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  CueframeError
3
- } from "./chunk-QSWONRX2.js";
3
+ } from "./chunk-XWOV6KI6.js";
4
4
  import {
5
5
  bundledFontFamilyFaces,
6
6
  isGenericOnlyStack,
@@ -9,13 +9,13 @@ import {
9
9
  } from "./chunk-EXY4JJPH.js";
10
10
  import {
11
11
  assertComponentImportsAllowed
12
- } from "./chunk-JX7NKSJP.js";
12
+ } from "./chunk-K66NLMGX.js";
13
13
  import {
14
14
  assertComponentBrowserHardware,
15
15
  componentBrowserBackend,
16
16
  componentBrowserOptions,
17
17
  readGpuAttestation
18
- } from "./chunk-PCCVZYAF.js";
18
+ } from "./chunk-JWMWVP64.js";
19
19
  import {
20
20
  ComponentCapturePageRasterAttestationV1,
21
21
  ComponentGraphicsApiV2,
@@ -25,7 +25,7 @@ import {
25
25
  ComponentStillPngContainerFactsV1,
26
26
  ComponentStillSessionAttestationV1,
27
27
  ComponentStillSessionHostAttestationV1
28
- } from "./chunk-UGYYZBG4.js";
28
+ } from "./chunk-EC6VFQE6.js";
29
29
  import {
30
30
  parseSceneShotSpecV2
31
31
  } from "./chunk-CL5Y6V6K.js";
@@ -244,6 +244,7 @@ var COMPONENT_RUNTIME_ERROR_CODES = [
244
244
  "component_graphics_mismatch",
245
245
  "component_device_lost",
246
246
  "component_output_invalid",
247
+ "component_output_unverifiable",
247
248
  "component_conflict",
248
249
  "component_scene_invalid"
249
250
  ];
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ChatErrorView,
3
3
  DirectorTurnContext
4
- } from "./chunk-WEXGESUQ.js";
4
+ } from "./chunk-KKHI5NLK.js";
5
5
  import {
6
6
  GenerationArtifact
7
7
  } from "./chunk-73DQTUWY.js";
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-OSMXQV5V.js";
5
5
  import {
6
6
  CueframeError
7
- } from "./chunk-QSWONRX2.js";
7
+ } from "./chunk-XWOV6KI6.js";
8
8
 
9
9
  // ../execution/render-harness/src/cardAssetAdmission.ts
10
10
  import parseCss from "css-tree/parser";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ComponentHostAttestationV2,
3
3
  ComponentRuntimeError
4
- } from "./chunk-UGYYZBG4.js";
4
+ } from "./chunk-EC6VFQE6.js";
5
5
  import {
6
6
  STUDIO_SHADOW_MAP_BUDGET
7
7
  } from "./chunk-CL5Y6V6K.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ComponentRuntimeError
3
- } from "./chunk-UGYYZBG4.js";
3
+ } from "./chunk-EC6VFQE6.js";
4
4
 
5
5
  // ../execution/component-runtime/src/allowedImports.ts
6
6
  var COMPONENT_IMPORT_ALLOWLIST = Object.freeze([
@@ -9,7 +9,7 @@ import {
9
9
  import {
10
10
  decodeError,
11
11
  scrubSensitive
12
- } from "./chunk-QSWONRX2.js";
12
+ } from "./chunk-XWOV6KI6.js";
13
13
 
14
14
  // ../director/src/domain/chat.ts
15
15
  import { z } from "zod";
@@ -3,7 +3,7 @@ import {
3
3
  assertSceneShotParamsAdmitted,
4
4
  materializeComponentSource,
5
5
  renderComponentAlpha
6
- } from "./chunk-RO57QD5M.js";
6
+ } from "./chunk-7XZW26U2.js";
7
7
  import {
8
8
  componentArtifactId,
9
9
  componentBundleId,
@@ -13,10 +13,10 @@ import {
13
13
  } from "./chunk-EXY4JJPH.js";
14
14
  import {
15
15
  assertSourceReadsDeclaredAssets
16
- } from "./chunk-62VTAA6O.js";
16
+ } from "./chunk-WL2MLKWU.js";
17
17
  import {
18
18
  resolvedComponentRenderer
19
- } from "./chunk-PCCVZYAF.js";
19
+ } from "./chunk-JWMWVP64.js";
20
20
  import {
21
21
  ComponentBakeJobV2,
22
22
  ComponentBakeRequestV2,
@@ -25,7 +25,7 @@ import {
25
25
  ComponentRuntimeError,
26
26
  assertGraphicsReceiptMatches,
27
27
  assertRendererReceiptMatches
28
- } from "./chunk-UGYYZBG4.js";
28
+ } from "./chunk-EC6VFQE6.js";
29
29
 
30
30
  // ../execution/component-runtime/src/assetServer.ts
31
31
  import { createHash, randomBytes } from "crypto";
@@ -170,7 +170,7 @@ function assertComponentOutputProbe(probe, expected) {
170
170
  const hasAlpha = expected.codec === "vp9" ? stream?.tags?.alpha_mode === "1" : Boolean(stream?.pix_fmt?.startsWith("yuva"));
171
171
  if (stream?.codec_name !== expectedCodec || stream.width !== expected.width || stream.height !== expected.height || frames !== expected.durationInFrames || !Number.isFinite(fps) || Math.abs(fps - expected.fps) > 1e-3 || !Number.isFinite(duration) || Math.abs(duration - expectedDuration) > Math.max(0.05, 1 / expected.fps) || !hasAlpha) {
172
172
  throw new ComponentRuntimeError(
173
- "component_output_invalid",
173
+ "component_output_unverifiable",
174
174
  "Rendered component artifact failed codec, alpha, dimensions, frame-count, FPS, or duration verification."
175
175
  );
176
176
  }
@@ -178,7 +178,7 @@ function assertComponentOutputProbe(probe, expected) {
178
178
  function verifyComponentOutput(options) {
179
179
  const size = statSync2(options.path).size;
180
180
  if (size <= 0 || size > (options.maxBytes ?? 1073741824)) {
181
- throw new ComponentRuntimeError("component_output_invalid", "Rendered component artifact has an invalid size.");
181
+ throw new ComponentRuntimeError("component_output_unverifiable", "Rendered component artifact has an invalid size.");
182
182
  }
183
183
  const bundledProbe = join(dirname(process.execPath), process.platform === "win32" ? "ffprobe.exe" : "ffprobe");
184
184
  const ffprobeExecutable = options.ffprobeExecutable ?? process.env.COMPONENT_FFPROBE_EXECUTABLE ?? (existsSync(bundledProbe) ? bundledProbe : "ffprobe");
@@ -197,7 +197,7 @@ function verifyComponentOutput(options) {
197
197
  options.path
198
198
  ], { encoding: "utf8", timeout: 3e4, maxBuffer: 2e6 }));
199
199
  } catch (error) {
200
- throw new ComponentRuntimeError("component_output_invalid", "Rendered component artifact could not be probed.", { cause: error });
200
+ throw new ComponentRuntimeError("component_output_unverifiable", "Rendered component artifact could not be probed.", { cause: error });
201
201
  }
202
202
  assertComponentOutputProbe(probe, options.expected);
203
203
  if (options.expected.source.manifest.alphaPolicy === "requires-transparency") {
@@ -222,10 +222,10 @@ function verifyComponentOutput(options) {
222
222
  ], { encoding: "utf8", timeout: 3e4, maxBuffer: 2e6 });
223
223
  fractions = parseAlphaOpaqueFractions(output);
224
224
  } catch (error) {
225
- throw new ComponentRuntimeError("component_output_invalid", "Rendered component alpha policy could not be verified.", { cause: error });
225
+ throw new ComponentRuntimeError("component_output_unverifiable", "Rendered component alpha policy could not be verified.", { cause: error });
226
226
  }
227
227
  if (fractions.length === 0) {
228
- throw new ComponentRuntimeError("component_output_invalid", "Rendered component alpha policy produced no samples.");
228
+ throw new ComponentRuntimeError("component_output_unverifiable", "Rendered component alpha policy produced no samples.");
229
229
  }
230
230
  if (bakeOpacityContradictsPolicy(options.expected.source.manifest.alphaPolicy, fractions)) {
231
231
  throw new ComponentRuntimeError("component_output_invalid", "Rendered component is opaque but its manifest requires transparency.");
@@ -6,7 +6,7 @@ import {
6
6
  import {
7
7
  CueframeError,
8
8
  encodeError
9
- } from "./chunk-QSWONRX2.js";
9
+ } from "./chunk-XWOV6KI6.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
  CueframeError,
3
3
  encodeError
4
- } from "./chunk-QSWONRX2.js";
4
+ } from "./chunk-XWOV6KI6.js";
5
5
 
6
6
  // ../execution/core/src/render/vcam/constants.ts
7
7
  var P_MIN = 0.5;
@@ -1,13 +1,19 @@
1
+ import {
2
+ CLIENT_HEADER,
3
+ formatClientHeader
4
+ } from "./chunk-YIJZBLQE.js";
5
+
1
6
  // ../mcp/src/executor.ts
2
7
  var API_URLS = {
3
8
  dev: "https://api-dev.cueframe.ai",
4
9
  prod: "https://api.cueframe.ai"
5
10
  };
6
- function makeNetworkExecutor(baseUrl, apiKey) {
11
+ function makeNetworkExecutor(baseUrl, apiKey, client) {
12
+ const clientHeader = formatClientHeader(client);
7
13
  return {
8
14
  async invoke({ method, path, body, query, payment }) {
9
15
  const url = `${baseUrl}${path}${query ? `?${query}` : ""}`;
10
- const headers = {};
16
+ const headers = { [CLIENT_HEADER]: clientHeader };
11
17
  if (payment) headers["PAYMENT-SIGNATURE"] = payment;
12
18
  else if (apiKey) headers["authorization"] = `Bearer ${apiKey}`;
13
19
  let payload;
@@ -25,6 +31,7 @@ function makeNetworkExecutor(baseUrl, apiKey) {
25
31
  };
26
32
  }
27
33
  function makeSessionExecutor(opts) {
34
+ const client = formatClientHeader(opts.client);
28
35
  return {
29
36
  async invoke({ method, path, body, query, idempotent }) {
30
37
  const token = await opts.getToken();
@@ -34,7 +41,7 @@ function makeSessionExecutor(opts) {
34
41
  const url = `${opts.baseUrl}${path}${query ? `?${query}` : ""}`;
35
42
  const headers = {
36
43
  authorization: `Bearer ${token}`,
37
- "x-client-version": opts.clientVersion
44
+ [CLIENT_HEADER]: client
38
45
  };
39
46
  let payload;
40
47
  if (body !== void 0) {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ComponentRuntimeError
3
- } from "./chunk-UGYYZBG4.js";
3
+ } from "./chunk-EC6VFQE6.js";
4
4
 
5
5
  // ../execution/component-runtime/src/sourceAdmission.ts
6
6
  import { parse } from "@babel/parser";
@@ -52,10 +52,9 @@ var PREVIEW_FRAME_CASES = [
52
52
  },
53
53
  {
54
54
  name: "an unrecognised body key is refused",
55
- why: "THREE DEFINITIONS, AND THE PUBLISHED ONE IS THE STRICTEST. The generated `previewFrameBody` ends `.strict()`, and SDK + MCP clients enforce it. But the route's own `PreviewFrameRequest` (evidence.ts:72) \u2014 the schema `zodJson` actually runs \u2014 ends `});` with NO `.strict()`, and the local handler has no unknown-key check either (ALLOWED_KEYS covers apply only). So a typo like `timestamp` or `dryRun` is accepted and ignored by BOTH servers while the published contract says it is rejected. This row asserts the STRICT reading because that is what is published and what every generated client already enforces; a server looser than its own spec is the divergence. Note this inverts the obvious stage-1 move: adopting the generated schema locally and nowhere else would make the desktop stricter than the cloud \u2014 a NEW divergence pointing the other way. Stage 1 has to settle strictness once, for both.",
55
+ why: "The published `previewFrameBody` ends `.strict()` and SDK + MCP clients enforce it; a server looser than its own spec is the divergence. Both lanes now run the strict schema, so a typo like `timestamp` or `dryRun` is a 400 everywhere.",
56
56
  body: { timestamps: [1], nonsenseKey: true },
57
- expect: { status: 400, code: "validation_error" },
58
- knownRed: ["cloud"]
57
+ expect: { status: 400, code: "validation_error" }
59
58
  }
60
59
  ];
61
60
  function isKnownRed(c, lane) {
@@ -218,7 +218,23 @@ var ERROR_CODES = {
218
218
  component_graphics_unavailable: { stage: "render", category: "authoring", retryable: false, httpStatus: 422 },
219
219
  component_graphics_mismatch: { stage: "render", category: "internal", retryable: false, httpStatus: 500 },
220
220
  component_device_lost: { stage: "render", category: "transient", retryable: true, httpStatus: 503 },
221
- component_output_invalid: { stage: "render", category: "internal", retryable: false, httpStatus: 500 },
221
+ // The component's own manifest declares transparency and its renderer produced
222
+ // an opaque frame. That is the author's contract contradicting itself, so the
223
+ // sentence naming it belongs on the wire. Fix: declare the component opaque,
224
+ // or stop painting an opaque background over the frame.
225
+ component_output_invalid: { stage: "render", category: "authoring", retryable: false, httpStatus: 422 },
226
+ // The other half of the same verifier: ffprobe would not read the artifact,
227
+ // the alpha sampler would not run or returned nothing, the artifact is empty
228
+ // or over the size ceiling, or it came back in a codec/size/fps we did not ask
229
+ // for. None of that is the author's doing and none of it is visible to them,
230
+ // so it stays a platform fault we see in Sentry.
231
+ component_output_unverifiable: { stage: "render", category: "internal", retryable: false, httpStatus: 500 },
232
+ // Two ways a bake dies without a diagnostic of its own. The sandbox ran out of
233
+ // memory: the same bake on a larger box can succeed, so it is worth one retry.
234
+ sandbox_oom: { stage: "render", category: "internal", retryable: true, httpStatus: 503 },
235
+ // The bake process died leaving nothing to read. Retrying reproduces it, so it
236
+ // is ours to diagnose from the run, not the caller's to wait out.
237
+ component_bake_crashed: { stage: "render", category: "internal", retryable: false, httpStatus: 500 },
222
238
  component_conflict: { stage: "validate", category: "authoring", retryable: false, httpStatus: 409 },
223
239
  component_scene_invalid: { stage: "validate", category: "authoring", retryable: false, httpStatus: 422 },
224
240
  motion_preset_unknown: { stage: "validate", category: "authoring", retryable: false, httpStatus: 422 },
@@ -0,0 +1,102 @@
1
+ // ../plane/src/contract.ts
2
+ import { z } from "zod";
3
+ var STILL_BUDGET_BASE_S = 60;
4
+ var STILL_BUDGET_PER_BEAT_S = 10;
5
+ var STILL_BUDGET_CEILING_S = 840;
6
+ var CO_BATCHED_CALLERS = 4;
7
+ var MAX_STILL_BEATS_PER_BATCH = 18;
8
+ function stillBudgetSeconds(beats) {
9
+ return STILL_BUDGET_BASE_S + STILL_BUDGET_PER_BEAT_S * beats;
10
+ }
11
+ var STILL_COBATCH_MAX_BEATS = 3;
12
+ var STILL_WORKER_COLD_START_S = 150;
13
+ function stillCaptureWaitSeconds(beats) {
14
+ const run = beats > STILL_COBATCH_MAX_BEATS ? beats : STILL_COBATCH_MAX_BEATS * CO_BATCHED_CALLERS;
15
+ return STILL_WORKER_COLD_START_S + stillBudgetSeconds(run);
16
+ }
17
+ var PreviewFrameRequest = z.object({
18
+ composition: z.unknown().optional().describe(
19
+ "The composition to render. Absent \u21D2 the project's ACTIVE composition \u2014 what create_render will encode. The response's `previewed.source` names what was rendered."
20
+ ),
21
+ compositionId: z.string().optional().describe(
22
+ "Preview a SPECIFIC persisted composition of this project (create_render parity). Absent \u21D2 the active one. A stale/foreign id is a 404 \u2014 never a silent fall-through."
23
+ ),
24
+ session_id: z.string().optional().describe(
25
+ "Compose-session id: render that session's SCRATCH composition (what the session has been editing) instead of the active row. Ignored when `composition` is passed."
26
+ ),
27
+ timestamps: z.array(z.number()).min(1).max(MAX_STILL_BEATS_PER_BATCH).describe(
28
+ `Composition seconds to capture, ${MAX_STILL_BEATS_PER_BATCH} per request. The batch renders as ONE unit of work \u2014 one warm container, one source decode, N seeks \u2014 and that unit has a fixed time budget, so a larger batch is refused here rather than accepted and timed out minutes later. For a denser sweep, split it across calls; identical beats are served from the still cache, so overlapping batches are cheap.`
29
+ ),
30
+ imageFormat: z.enum(["png", "jpeg"]).optional().describe(
31
+ "Still format. Default jpeg \u2014 these pixels go to a vision model, where jpeg is equivalent and png costs multiples in bytes to store and move. Pass png only when you need full fidelity."
32
+ ),
33
+ scale: z.number().min(0.1).max(1).optional().describe(
34
+ "Render scale 0.1\u20131. Default 0.5, which is what this schema has always recommended for vision-bound looks. Pass 1 when judging fine detail \u2014 it costs ~4x the vision tokens."
35
+ ),
36
+ jpegQuality: z.number().int().min(1).max(100).optional().describe(
37
+ "JPEG quality (jpeg only). Default 70 \u2014 the quality the eval panel grades at."
38
+ )
39
+ // The published `previewFrameBody` is a strictObject and every generated
40
+ // client enforces it. A server looser than its own spec accepted `timestamp`
41
+ // or `dryRun` and rendered the default instead (plane conformance).
42
+ }).strict();
43
+ var DesktopPreviewFrameRequest = PreviewFrameRequest.pick({
44
+ timestamps: true,
45
+ imageFormat: true,
46
+ scale: true,
47
+ jpegQuality: true
48
+ }).strict();
49
+ var CLIENT_HEADER = "X-CueFrame-Client";
50
+ var CLIENT_SURFACES = ["studio", "web", "console", "cli", "mcp"];
51
+ var CLIENT_OSES = ["macos", "windows", "linux", "browser", "unknown"];
52
+ var CLIENT_VERSION = /^[A-Za-z0-9][A-Za-z0-9._+-]{0,31}$/;
53
+ function formatClientHeader(client) {
54
+ if (!CLIENT_VERSION.test(client.version)) {
55
+ throw new Error(
56
+ `${CLIENT_HEADER} cannot carry the version ${JSON.stringify(client.version)}.`
57
+ );
58
+ }
59
+ return `${client.surface}/${client.version}/${client.os}`;
60
+ }
61
+ function parseClientHeader(value) {
62
+ if (typeof value !== "string") return null;
63
+ const [surface, version, os, ...rest] = value.split("/");
64
+ if (rest.length > 0 || os === void 0) return null;
65
+ if (!CLIENT_SURFACES.includes(surface)) return null;
66
+ if (!CLIENT_OSES.includes(os)) return null;
67
+ if (!CLIENT_VERSION.test(version)) return null;
68
+ return { surface, version, os };
69
+ }
70
+ function osFromNodePlatform(platform) {
71
+ if (platform === "darwin") return "macos";
72
+ if (platform === "win32") return "windows";
73
+ if (platform === "linux") return "linux";
74
+ return "unknown";
75
+ }
76
+ function osFromUserAgent(agent) {
77
+ if (/Mac OS X|Macintosh/.test(agent)) return "macos";
78
+ if (/Windows/.test(agent)) return "windows";
79
+ if (/Linux|X11|CrOS/.test(agent)) return "linux";
80
+ return "unknown";
81
+ }
82
+
83
+ export {
84
+ STILL_BUDGET_BASE_S,
85
+ STILL_BUDGET_PER_BEAT_S,
86
+ STILL_BUDGET_CEILING_S,
87
+ CO_BATCHED_CALLERS,
88
+ MAX_STILL_BEATS_PER_BATCH,
89
+ stillBudgetSeconds,
90
+ STILL_COBATCH_MAX_BEATS,
91
+ STILL_WORKER_COLD_START_S,
92
+ stillCaptureWaitSeconds,
93
+ PreviewFrameRequest,
94
+ DesktopPreviewFrameRequest,
95
+ CLIENT_HEADER,
96
+ CLIENT_SURFACES,
97
+ CLIENT_OSES,
98
+ formatClientHeader,
99
+ parseClientHeader,
100
+ osFromNodePlatform,
101
+ osFromUserAgent
102
+ };
@@ -3,14 +3,6 @@ import {
3
3
  buildEasedZooms,
4
4
  buildPannedCenters
5
5
  } from "./chunk-QH3YI3ND.js";
6
- import {
7
- flattenCompoundClips,
8
- hasCompoundClips
9
- } from "./chunk-QISFYLBB.js";
10
- import {
11
- compositionHasVo,
12
- roleDefaultGainDb
13
- } from "./chunk-VZ7TYX6Z.js";
14
6
  import {
15
7
  DOMINANCE_WEIGHTS,
16
8
  ENTER_SEC,
@@ -28,7 +20,15 @@ import {
28
20
  scoreAndRank,
29
21
  segmentShots,
30
22
  stabilizeSelectionHysteresis
31
- } from "./chunk-IYZEK6WY.js";
23
+ } from "./chunk-V7LQ7ZHV.js";
24
+ import {
25
+ flattenCompoundClips,
26
+ hasCompoundClips
27
+ } from "./chunk-QISFYLBB.js";
28
+ import {
29
+ compositionHasVo,
30
+ roleDefaultGainDb
31
+ } from "./chunk-VZ7TYX6Z.js";
32
32
  import {
33
33
  SHOT_SCALE_TARGET,
34
34
  shotScaleZoom
@@ -36,7 +36,7 @@ import {
36
36
  import {
37
37
  CueframeError,
38
38
  encodeError
39
- } from "./chunk-QSWONRX2.js";
39
+ } from "./chunk-XWOV6KI6.js";
40
40
  import {
41
41
  SCENE_CAPTURE_IDENTITY_FIELDS_V1,
42
42
  SCENE_PRESET_TRIANGLES,
@@ -4,8 +4,8 @@ import {
4
4
  componentBrowserOptions,
5
5
  resolvedComponentRenderer,
6
6
  webglBackend
7
- } from "../chunk-PCCVZYAF.js";
8
- import "../chunk-UGYYZBG4.js";
7
+ } from "../chunk-JWMWVP64.js";
8
+ import "../chunk-EC6VFQE6.js";
9
9
  import "../chunk-CL5Y6V6K.js";
10
10
  import "../chunk-2L7PYYJK.js";
11
11
  import "../chunk-2ESYSVXG.js";
@@ -38,7 +38,7 @@ import {
38
38
  assertRendererReceiptMatches,
39
39
  authoredComponentProps,
40
40
  readComponentSourceRef
41
- } from "../chunk-UGYYZBG4.js";
41
+ } from "../chunk-EC6VFQE6.js";
42
42
  import "../chunk-2ESYSVXG.js";
43
43
  export {
44
44
  CANVAS2D_COMPONENT_MANIFEST_V2,
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  COMPONENT_IMPORT_ALLOWLIST,
3
3
  assertComponentImportsAllowed
4
- } from "../chunk-JX7NKSJP.js";
5
- import "../chunk-UGYYZBG4.js";
4
+ } from "../chunk-K66NLMGX.js";
5
+ import "../chunk-EC6VFQE6.js";
6
6
  import "../chunk-2ESYSVXG.js";
7
7
  export {
8
8
  COMPONENT_IMPORT_ALLOWLIST,
@@ -26,13 +26,13 @@ import {
26
26
  stagedBrowserLocator,
27
27
  verifyLocalStagedBrowser,
28
28
  vp9AlphaFfmpegOverride
29
- } from "../chunk-RO57QD5M.js";
29
+ } from "../chunk-7XZW26U2.js";
30
30
  import "../chunk-WB2VFDQZ.js";
31
31
  import "../chunk-EXY4JJPH.js";
32
32
  import "../chunk-DAARYRNT.js";
33
- import "../chunk-JX7NKSJP.js";
34
- import "../chunk-PCCVZYAF.js";
35
- import "../chunk-UGYYZBG4.js";
33
+ import "../chunk-K66NLMGX.js";
34
+ import "../chunk-JWMWVP64.js";
35
+ import "../chunk-EC6VFQE6.js";
36
36
  import "../chunk-CL5Y6V6K.js";
37
37
  import "../chunk-2L7PYYJK.js";
38
38
  import "../chunk-AVTEPAWI.js";
@@ -3,8 +3,8 @@ import {
3
3
  describeMissingAssetReads,
4
4
  missingDeclaredAssetHandleReads,
5
5
  sourceAssetReads
6
- } from "../chunk-62VTAA6O.js";
7
- import "../chunk-UGYYZBG4.js";
6
+ } from "../chunk-WL2MLKWU.js";
7
+ import "../chunk-EC6VFQE6.js";
8
8
  import "../chunk-2ESYSVXG.js";
9
9
  export {
10
10
  assertSourceReadsDeclaredAssets,