@cueframe/kernel 0.2.42 → 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 (58) 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-DQRJJ2YN.js → chunk-46PFSJZE.js} +114 -74
  9. package/dist/{chunk-6PBYCESM.js → chunk-4GLMARCJ.js} +1 -1
  10. package/dist/{chunk-RO57QD5M.js → chunk-7XZW26U2.js} +3 -3
  11. package/dist/{chunk-UGYYZBG4.js → chunk-EC6VFQE6.js} +1 -0
  12. package/dist/{chunk-IHKMFEBT.js → chunk-FRNBTODO.js} +1 -1
  13. package/dist/{chunk-BUAAQDDJ.js → chunk-GOJKL5FM.js} +1 -1
  14. package/dist/{chunk-BUK4P6AW.js → chunk-JENEKKAM.js} +3 -3
  15. package/dist/{chunk-PCCVZYAF.js → chunk-JWMWVP64.js} +1 -1
  16. package/dist/{chunk-JX7NKSJP.js → chunk-K66NLMGX.js} +1 -1
  17. package/dist/{chunk-WEXGESUQ.js → chunk-KKHI5NLK.js} +1 -1
  18. package/dist/{chunk-UAOTQSS3.js → chunk-MYBK6DKF.js} +9 -9
  19. package/dist/{chunk-AYOVAVNO.js → chunk-OASSDEWY.js} +1 -1
  20. package/dist/{chunk-J53SGAWP.js → chunk-OZNULDQE.js} +1 -1
  21. package/dist/{chunk-P472GIBJ.js → chunk-SPF3AXTB.js} +1 -1
  22. package/dist/{chunk-IYZEK6WY.js → chunk-V7LQ7ZHV.js} +1 -1
  23. package/dist/{chunk-VCBLGZQQ.js → chunk-WKT7SEVP.js} +10 -3
  24. package/dist/{chunk-62VTAA6O.js → chunk-WL2MLKWU.js} +1 -1
  25. package/dist/{chunk-SLN5UKLT.js → chunk-WYRKF2OX.js} +2 -3
  26. package/dist/{chunk-QSWONRX2.js → chunk-XWOV6KI6.js} +17 -1
  27. package/dist/chunk-YIJZBLQE.js +102 -0
  28. package/dist/{chunk-D72CKEOC.js → chunk-ZXWSZUSU.js} +2 -2
  29. package/dist/component-runtime/browserOptions.js +2 -2
  30. package/dist/component-runtime/contracts.js +1 -1
  31. package/dist/component-runtime/importPolicy.js +2 -2
  32. package/dist/component-runtime/render.js +4 -4
  33. package/dist/component-runtime/sourceAdmission.js +2 -2
  34. package/dist/component-runtime.js +6 -6
  35. package/dist/compose.js +1 -1
  36. package/dist/composition/projection.js +2 -2
  37. package/dist/composition-ops.js +3 -3
  38. package/dist/composition.js +2 -2
  39. package/dist/core/render.js +3 -3
  40. package/dist/core/select.js +2 -2
  41. package/dist/core.js +3 -3
  42. package/dist/director/ai-sdk.js +3 -3
  43. package/dist/director/domain.js +2 -2
  44. package/dist/director.js +3 -3
  45. package/dist/errors.js +1 -1
  46. package/dist/mcp/adapter.js +2 -2
  47. package/dist/mcp/core.js +1 -1
  48. package/dist/mcp/executor.js +2 -1
  49. package/dist/mcp/scene-shot.js +2 -2
  50. package/dist/mcp/server.js +4 -4
  51. package/dist/mcp.js +6 -5
  52. package/dist/plane/conformance.js +1 -1
  53. package/dist/plane/contract.js +27 -46
  54. package/dist/plane.js +1 -1
  55. package/dist/render-harness/cardAssetAdmission.js +2 -2
  56. package/dist/render-harness/cardFonts.js +2 -2
  57. package/dist/render-harness.js +11 -11
  58. package/package.json +10 -10
@@ -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";
@@ -2,12 +2,12 @@ import {
2
2
  SCENE_SHOT_RESOURCE_DESCRIPTION,
3
3
  SCENE_SHOT_RESOURCE_URI,
4
4
  sceneShotContract
5
- } from "./chunk-P472GIBJ.js";
5
+ } from "./chunk-SPF3AXTB.js";
6
6
  import {
7
7
  querySchemaShape,
8
8
  serializeQuery,
9
9
  waitForJob
10
- } from "./chunk-J53SGAWP.js";
10
+ } from "./chunk-OZNULDQE.js";
11
11
  import {
12
12
  CURATED_TOOLS
13
13
  } from "./chunk-5YO4LAB7.js";
@@ -28,7 +28,7 @@ import {
28
28
  text,
29
29
  textWithData,
30
30
  withMedia
31
- } from "./chunk-DQRJJ2YN.js";
31
+ } from "./chunk-46PFSJZE.js";
32
32
 
33
33
  // ../mcp/src/prompts.ts
34
34
  var skillListCache = null;
@@ -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 = [
@@ -5,7 +5,7 @@ import {
5
5
  isOk,
6
6
  opById,
7
7
  safeParse
8
- } from "./chunk-DQRJJ2YN.js";
8
+ } from "./chunk-46PFSJZE.js";
9
9
 
10
10
  // ../mcp/src/wait.ts
11
11
  var defaultSleep = (ms) => new Promise((r) => setTimeout(r, ms));
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  bodySchemaFor,
3
3
  opById
4
- } from "./chunk-DQRJJ2YN.js";
4
+ } from "./chunk-46PFSJZE.js";
5
5
 
6
6
  // ../mcp/src/generated/sceneContract.ts
7
7
  function deepFreeze(value) {
@@ -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
+ };
@@ -20,7 +20,7 @@ import {
20
20
  scoreAndRank,
21
21
  segmentShots,
22
22
  stabilizeSelectionHysteresis
23
- } from "./chunk-IYZEK6WY.js";
23
+ } from "./chunk-V7LQ7ZHV.js";
24
24
  import {
25
25
  flattenCompoundClips,
26
26
  hasCompoundClips
@@ -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,
@@ -7,7 +7,7 @@ import {
7
7
  sourceIdentityForBake,
8
8
  startComponentAssetServer,
9
9
  verifyComponentOutput
10
- } from "./chunk-UAOTQSS3.js";
10
+ } from "./chunk-MYBK6DKF.js";
11
11
  import {
12
12
  COMPONENT_MEDIA_HEADROOM,
13
13
  COMPONENT_MEDIA_TIERS,
@@ -52,7 +52,7 @@ import {
52
52
  stagedBrowserLocator,
53
53
  verifyLocalStagedBrowser,
54
54
  vp9AlphaFfmpegOverride
55
- } from "./chunk-RO57QD5M.js";
55
+ } from "./chunk-7XZW26U2.js";
56
56
  import "./chunk-WB2VFDQZ.js";
57
57
  import {
58
58
  bundleIdentityFields,
@@ -68,13 +68,13 @@ import {
68
68
  import {
69
69
  COMPONENT_IMPORT_ALLOWLIST,
70
70
  assertComponentImportsAllowed
71
- } from "./chunk-JX7NKSJP.js";
71
+ } from "./chunk-K66NLMGX.js";
72
72
  import {
73
73
  assertSourceReadsDeclaredAssets,
74
74
  describeMissingAssetReads,
75
75
  missingDeclaredAssetHandleReads,
76
76
  sourceAssetReads
77
- } from "./chunk-62VTAA6O.js";
77
+ } from "./chunk-WL2MLKWU.js";
78
78
  import {
79
79
  HALF_FLOAT_COLOR_TARGET_EXTENSIONS,
80
80
  admittedHost,
@@ -87,7 +87,7 @@ import {
87
87
  resolvedComponentRenderer,
88
88
  webGlRefusal,
89
89
  webglBackend
90
- } from "./chunk-PCCVZYAF.js";
90
+ } from "./chunk-JWMWVP64.js";
91
91
  import {
92
92
  CANVAS2D_COMPONENT_MANIFEST_V2,
93
93
  COMPONENT_BUNDLE_VERSION,
@@ -128,7 +128,7 @@ import {
128
128
  assertRendererReceiptMatches,
129
129
  authoredComponentProps,
130
130
  readComponentSourceRef
131
- } from "./chunk-UGYYZBG4.js";
131
+ } from "./chunk-EC6VFQE6.js";
132
132
  import "./chunk-CL5Y6V6K.js";
133
133
  import "./chunk-2L7PYYJK.js";
134
134
  import "./chunk-AVTEPAWI.js";
package/dist/compose.js CHANGED
@@ -54,7 +54,7 @@ import {
54
54
  import {
55
55
  CueframeError,
56
56
  encodeError
57
- } from "./chunk-QSWONRX2.js";
57
+ } from "./chunk-XWOV6KI6.js";
58
58
  import "./chunk-7PA7FGLD.js";
59
59
  import "./chunk-CL5Y6V6K.js";
60
60
  import "./chunk-2L7PYYJK.js";
@@ -32,7 +32,7 @@ import {
32
32
  silhouetteKeepOutForWindow,
33
33
  sourceRectToOutput,
34
34
  sourceWindowKey
35
- } from "../chunk-AYOVAVNO.js";
35
+ } from "../chunk-OASSDEWY.js";
36
36
  import {
37
37
  BRAND_TOKEN_REFS,
38
38
  BRAND_TOKEN_ROOT_KEYS,
@@ -74,7 +74,7 @@ import {
74
74
  contrastRatio
75
75
  } from "../chunk-ILO4NEZ3.js";
76
76
  import "../chunk-VG2ND6PX.js";
77
- import "../chunk-QSWONRX2.js";
77
+ import "../chunk-XWOV6KI6.js";
78
78
  import "../chunk-AVTEPAWI.js";
79
79
  import "../chunk-2ESYSVXG.js";
80
80
  export {
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  playableSpans
3
- } from "./chunk-D72CKEOC.js";
3
+ } from "./chunk-ZXWSZUSU.js";
4
4
  import "./chunk-QH3YI3ND.js";
5
- import "./chunk-IYZEK6WY.js";
5
+ import "./chunk-V7LQ7ZHV.js";
6
6
  import "./chunk-QISFYLBB.js";
7
7
  import "./chunk-VZ7TYX6Z.js";
8
8
  import "./chunk-DENF4TPI.js";
@@ -30,7 +30,7 @@ import {
30
30
  } from "./chunk-B7J5UUUV.js";
31
31
  import "./chunk-KYRDKK2D.js";
32
32
  import "./chunk-WREYUH2E.js";
33
- import "./chunk-QSWONRX2.js";
33
+ import "./chunk-XWOV6KI6.js";
34
34
  import "./chunk-7PA7FGLD.js";
35
35
  import {
36
36
  SCENE_SLOT_MEDIA_FORMATS,
@@ -46,7 +46,7 @@ import {
46
46
  silhouetteKeepOutForWindow,
47
47
  sourceRectToOutput,
48
48
  sourceWindowKey
49
- } from "./chunk-AYOVAVNO.js";
49
+ } from "./chunk-OASSDEWY.js";
50
50
  import {
51
51
  BRAND_TOKEN_REFS,
52
52
  BRAND_TOKEN_ROOT_KEYS,
@@ -197,7 +197,7 @@ import {
197
197
  ReframeSegmentFields
198
198
  } from "./chunk-B7J5UUUV.js";
199
199
  import "./chunk-WREYUH2E.js";
200
- import "./chunk-QSWONRX2.js";
200
+ import "./chunk-XWOV6KI6.js";
201
201
  import "./chunk-AVTEPAWI.js";
202
202
  import "./chunk-2ESYSVXG.js";
203
203
 
@@ -66,19 +66,19 @@ import {
66
66
  sliceTranscriptWords,
67
67
  splitIntoSentences,
68
68
  validateComposition
69
- } from "../chunk-D72CKEOC.js";
69
+ } from "../chunk-ZXWSZUSU.js";
70
70
  import {
71
71
  buildEasedZooms,
72
72
  buildPannedCenters,
73
73
  easeOutCubic
74
74
  } from "../chunk-QH3YI3ND.js";
75
- import "../chunk-IYZEK6WY.js";
75
+ import "../chunk-V7LQ7ZHV.js";
76
76
  import "../chunk-QISFYLBB.js";
77
77
  import "../chunk-VZ7TYX6Z.js";
78
78
  import "../chunk-DENF4TPI.js";
79
79
  import "../chunk-KYRDKK2D.js";
80
80
  import "../chunk-WREYUH2E.js";
81
- import "../chunk-QSWONRX2.js";
81
+ import "../chunk-XWOV6KI6.js";
82
82
  import "../chunk-7PA7FGLD.js";
83
83
  import "../chunk-CL5Y6V6K.js";
84
84
  import "../chunk-2L7PYYJK.js";
@@ -7,8 +7,8 @@ import {
7
7
  stabilizeIncumbentChallenger,
8
8
  stabilizePresenceGate,
9
9
  stabilizeSelectionHysteresis
10
- } from "../chunk-IYZEK6WY.js";
11
- import "../chunk-QSWONRX2.js";
10
+ } from "../chunk-V7LQ7ZHV.js";
11
+ import "../chunk-XWOV6KI6.js";
12
12
  import "../chunk-2ESYSVXG.js";
13
13
 
14
14
  // ../execution/core/src/select/errorCodes.ts
package/dist/core.js CHANGED
@@ -10,15 +10,15 @@ import {
10
10
  ensureEven,
11
11
  extractCaptionWordsFromDoc,
12
12
  isEmphasized
13
- } from "./chunk-D72CKEOC.js";
13
+ } from "./chunk-ZXWSZUSU.js";
14
14
  import "./chunk-QH3YI3ND.js";
15
- import "./chunk-IYZEK6WY.js";
15
+ import "./chunk-V7LQ7ZHV.js";
16
16
  import "./chunk-QISFYLBB.js";
17
17
  import "./chunk-VZ7TYX6Z.js";
18
18
  import "./chunk-DENF4TPI.js";
19
19
  import "./chunk-KYRDKK2D.js";
20
20
  import "./chunk-WREYUH2E.js";
21
- import "./chunk-QSWONRX2.js";
21
+ import "./chunk-XWOV6KI6.js";
22
22
  import "./chunk-7PA7FGLD.js";
23
23
  import "./chunk-CL5Y6V6K.js";
24
24
  import "./chunk-2L7PYYJK.js";