@cueframe/kernel 0.2.41 → 0.2.43

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 (64) hide show
  1. package/dist/_members/component-runtime/contracts.d.ts +19 -0
  2. package/dist/_members/component-runtime/contracts.d.ts.map +1 -1
  3. package/dist/_members/composition/floors/clips.d.ts +18 -0
  4. package/dist/_members/composition/floors/cohesionFloors.d.ts +31 -0
  5. package/dist/_members/composition/floors/craftFloors.d.ts +86 -0
  6. package/dist/_members/composition/floors/index.d.ts +24 -0
  7. package/dist/_members/composition/floors/occlusionFloor.d.ts +160 -0
  8. package/dist/_members/composition/floors/staticHold.d.ts +103 -0
  9. package/dist/_members/composition/floors/types.d.ts +52 -0
  10. package/dist/_members/composition/scene/introspection.d.ts +15 -0
  11. package/dist/_members/composition/scene/schema.d.ts +2 -8
  12. package/dist/_members/errors/registry.d.ts +6 -0
  13. package/dist/animate/preparation-facts.js +2 -2
  14. package/dist/animate.js +3 -3
  15. package/dist/authoring/scene.js +2 -2
  16. package/dist/authoring.js +2 -2
  17. package/dist/{chunk-JBWSK2YD.js → chunk-2PU2TSUG.js} +2 -2
  18. package/dist/{chunk-GA6NRDK3.js → chunk-46PFSJZE.js} +117 -75
  19. package/dist/{chunk-C7TTI7FP.js → chunk-62VTAA6O.js} +1 -1
  20. package/dist/{chunk-WAUVKF2F.js → chunk-7SXY6NFW.js} +4 -4
  21. package/dist/{chunk-XACXNDFL.js → chunk-CL5Y6V6K.js} +18 -16
  22. package/dist/{chunk-JRJQECCF.js → chunk-CZOVEX2D.js} +1 -1
  23. package/dist/chunk-JENEKKAM.js +571 -0
  24. package/dist/{chunk-5NGYBI5Z.js → chunk-JX7NKSJP.js} +1 -1
  25. package/dist/{chunk-4MK6YGKV.js → chunk-N2OZDD44.js} +4 -1
  26. package/dist/{chunk-L5XECASW.js → chunk-NPZWMZI6.js} +1 -1
  27. package/dist/{chunk-TE3PNQG6.js → chunk-O3SJTX6S.js} +2 -2
  28. package/dist/{chunk-JNOM4FW3.js → chunk-OZNULDQE.js} +1 -1
  29. package/dist/{chunk-5BAWOULP.js → chunk-PCCVZYAF.js} +2 -2
  30. package/dist/{chunk-CJF3KBJ5.js → chunk-RO57QD5M.js} +4 -4
  31. package/dist/{chunk-BLDL2EKL.js → chunk-SPF3AXTB.js} +8 -563
  32. package/dist/{chunk-QHLCJ3PE.js → chunk-UAOTQSS3.js} +4 -4
  33. package/dist/{chunk-ZVG446DJ.js → chunk-UGYYZBG4.js} +2 -0
  34. package/dist/{chunk-OBA6NW4S.js → chunk-XV2K3AQT.js} +1 -1
  35. package/dist/component-runtime/browserOptions.js +3 -3
  36. package/dist/component-runtime/contracts.js +3 -1
  37. package/dist/component-runtime/importPolicy.js +2 -2
  38. package/dist/component-runtime/render.js +5 -5
  39. package/dist/component-runtime/sourceAdmission.js +2 -2
  40. package/dist/component-runtime.js +9 -7
  41. package/dist/compose.js +21 -21
  42. package/dist/composition/floors.d.ts +1 -0
  43. package/dist/composition/floors.js +517 -0
  44. package/dist/composition/scene.js +1 -1
  45. package/dist/composition-ops.js +2 -2
  46. package/dist/core/render.js +2 -2
  47. package/dist/core.js +2 -2
  48. package/dist/mcp/adapter.js +2 -2
  49. package/dist/mcp/core.js +1 -1
  50. package/dist/mcp/scene-shot.d.ts +1 -0
  51. package/dist/mcp/scene-shot.js +18 -0
  52. package/dist/mcp/server.js +4 -3
  53. package/dist/mcp.js +4 -3
  54. package/dist/primitives/captions.js +3 -3
  55. package/dist/primitives/effects.js +5 -5
  56. package/dist/primitives/layouts.js +4 -4
  57. package/dist/primitives/lib/index.js +8 -8
  58. package/dist/primitives/lib.js +8 -8
  59. package/dist/primitives/scenes.js +4 -4
  60. package/dist/primitives/ui-blocks.js +4 -4
  61. package/dist/primitives.js +19 -19
  62. package/dist/render-harness.js +15 -15
  63. package/package.json +15 -7
  64. package/dist/{chunk-VLJOIUHL.js → chunk-B3GSTQLR.js} +6 -6
@@ -242,6 +242,9 @@ __export(zod_exports, {
242
242
  OpenComposeSessionBody: () => OpenComposeSessionBody2,
243
243
  OpenComposeSessionParams: () => OpenComposeSessionParams,
244
244
  OpenComposeSessionResponse: () => OpenComposeSessionResponse,
245
+ PatchComponentBody: () => PatchComponentBody,
246
+ PatchComponentParams: () => PatchComponentParams,
247
+ PatchComponentResponse: () => PatchComponentResponse,
245
248
  PatchProjectBody: () => PatchProjectBody,
246
249
  PatchProjectParams: () => PatchProjectParams,
247
250
  PatchProjectResponse: () => PatchProjectResponse,
@@ -532,6 +535,9 @@ __export(zod_exports, {
532
535
  openComposeSessionBodyLeaseJobIdMax: () => openComposeSessionBodyLeaseJobIdMax2,
533
536
  openComposeSessionParams: () => OpenComposeSessionParams,
534
537
  openComposeSessionResponse: () => OpenComposeSessionResponse,
538
+ patchComponentBody: () => PatchComponentBody,
539
+ patchComponentParams: () => PatchComponentParams,
540
+ patchComponentResponse: () => PatchComponentResponse,
535
541
  patchProjectBody: () => PatchProjectBody,
536
542
  patchProjectParams: () => PatchProjectParams,
537
543
  patchProjectResponse: () => PatchProjectResponse,
@@ -2144,7 +2150,7 @@ var componentCreateRequestDescriptionMax = 2e3;
2144
2150
  var componentCreateRequestEjectedFromMax = 200;
2145
2151
  var componentCreateRequestDurationInFramesExclusiveMin = 0;
2146
2152
  var ComponentCreateRequest = zod36.strictObject({
2147
- "componentId": zod36.string().min(1).max(componentCreateRequestComponentIdMax),
2153
+ "componentId": zod36.string().min(1).max(componentCreateRequestComponentIdMax).describe("Caller-chosen stable component id. On create it names the new component. On PUT/PATCH it is optional and, when present, must equal the id in the path; a mismatch is a 400 naming both."),
2148
2154
  "tsxSource": zod36.string().min(1),
2149
2155
  "name": zod36.string().min(1).max(componentCreateRequestNameMax),
2150
2156
  "description": zod36.string().max(componentCreateRequestDescriptionMax),
@@ -2153,16 +2159,16 @@ var ComponentCreateRequest = zod36.strictObject({
2153
2159
  "origin": zod36.enum(["customer-owned", "server-native"]).optional(),
2154
2160
  "ejectedFrom": zod36.string().max(componentCreateRequestEjectedFromMax).optional(),
2155
2161
  "tokens": zod36.record(zod36.string(), zod36.unknown()).optional(),
2156
- "examples": zod36.array(zod36.record(zod36.string(), zod36.unknown())).optional(),
2162
+ "examples": zod36.array(zod36.record(zod36.string(), zod36.unknown())).optional().describe("Usage examples, as authored. A built-in primitive projects {name, mood?, params?, description?}; an authored component's examples are whatever it wrote, which is why the item is open. One shape for both directions: what you write here is what you read back."),
2157
2163
  "durationInFrames": zod36.number().gt(componentCreateRequestDurationInFramesExclusiveMin).optional(),
2158
2164
  "manifest": ComponentManifestV2
2159
2165
  }).describe("POST /components body. Org/user are server-resolved; never accepted from the body.");
2160
2166
 
2161
2167
  // ../sdk/src/generated/zod/models/componentListResponse.zod.ts
2162
- import * as zod42 from "zod";
2168
+ import * as zod41 from "zod";
2163
2169
 
2164
2170
  // ../sdk/src/generated/zod/models/componentResponse.zod.ts
2165
- import * as zod40 from "zod";
2171
+ import * as zod39 from "zod";
2166
2172
 
2167
2173
  // ../sdk/src/generated/zod/models/componentPlacement.zod.ts
2168
2174
  import * as zod37 from "zod";
@@ -2171,77 +2177,98 @@ var ComponentPlacement = zod37.strictObject({
2171
2177
  "refField": zod37.enum(["primitiveId", "componentId"]).describe("Which id field keys the ClipSource: 'primitiveId' for built-ins (source:'default'), 'componentId' for installed components (source:'installed'). Using the wrong field will NOT resolve at render.")
2172
2178
  });
2173
2179
 
2174
- // ../sdk/src/generated/zod/models/primitiveExample.zod.ts
2175
- import * as zod38 from "zod";
2176
- var PrimitiveExample = zod38.strictObject({
2177
- "name": zod38.string(),
2178
- "mood": zod38.array(zod38.string()).optional(),
2179
- "params": zod38.record(zod38.string(), zod38.unknown()).optional(),
2180
- "description": zod38.string().optional()
2181
- });
2182
-
2183
2180
  // ../sdk/src/generated/zod/models/sceneFormat.zod.ts
2184
- import * as zod39 from "zod";
2185
- var SceneFormat = zod39.strictObject({
2186
- "aspectRatio": zod39.enum(["16:9", "9:16", "1:1", "4:5"]),
2187
- "fps": zod39.union([zod39.literal(24), zod39.literal(25), zod39.literal(30), zod39.literal(60)]).optional(),
2188
- "resolution": zod39.enum(["hd", "fhd", "4k"]).optional()
2181
+ import * as zod38 from "zod";
2182
+ var SceneFormat = zod38.strictObject({
2183
+ "aspectRatio": zod38.enum(["16:9", "9:16", "1:1", "4:5"]),
2184
+ "fps": zod38.union([zod38.literal(24), zod38.literal(25), zod38.literal(30), zod38.literal(60)]).optional(),
2185
+ "resolution": zod38.enum(["hd", "fhd", "4k"]).optional()
2189
2186
  });
2190
2187
 
2191
2188
  // ../sdk/src/generated/zod/models/componentResponse.zod.ts
2192
- var ComponentResponse = zod40.strictObject({
2193
- "id": zod40.string(),
2194
- "name": zod40.string(),
2195
- "description": zod40.string(),
2196
- "source": zod40.enum(["default", "installed"]).describe("'default' = built-in primitive (place by primitiveId); 'installed' = org-authored component (place by componentId)."),
2197
- "category": zod40.enum(["text", "effects", "transitions", "layouts", "backgrounds", "ui-blocks", "scenes"]),
2198
- "kind": zod40.enum(["component", "transition", "scene"]).describe("RENDER kind (component | transition | scene). NOT the ClipSource variant \u2014 see `placement` for how to author it on the timeline."),
2199
- "version": zod40.string(),
2200
- "propSchema": zod40.record(zod40.string(), zod40.unknown()),
2201
- "propDefaults": zod40.record(zod40.string(), zod40.unknown()).optional(),
2202
- "textParam": zod40.string().nullish().describe("The param field that carries this primitive's primary text; null = no single text slot."),
2203
- "subtextParam": zod40.string().nullish().describe("The param field for secondary text (subtitle/byline); null = none."),
2189
+ var componentResponseNameMax = 200;
2190
+ var componentResponseDescriptionMax = 2e3;
2191
+ var componentResponseEjectedFromMax = 200;
2192
+ var componentResponseDurationInFramesExclusiveMin = 0;
2193
+ var ComponentResponse = zod39.strictObject({
2194
+ "name": zod39.string().min(1).max(componentResponseNameMax),
2195
+ "description": zod39.string().max(componentResponseDescriptionMax),
2196
+ "category": zod39.enum(["text", "effects", "transitions", "layouts", "backgrounds", "ui-blocks", "scenes"]),
2197
+ "propSchema": zod39.record(zod39.string(), zod39.unknown()),
2198
+ "origin": zod39.enum(["customer-owned", "server-native"]).optional(),
2199
+ "ejectedFrom": zod39.string().max(componentResponseEjectedFromMax).optional(),
2200
+ "tokens": zod39.record(zod39.string(), zod39.unknown()).optional(),
2201
+ "examples": zod39.array(zod39.record(zod39.string(), zod39.unknown())).optional().describe("Usage examples, as authored. A built-in primitive projects {name, mood?, params?, description?}; an authored component's examples are whatever it wrote, which is why the item is open. One shape for both directions: what you write here is what you read back."),
2202
+ "durationInFrames": zod39.number().gt(componentResponseDurationInFramesExclusiveMin).optional(),
2203
+ "manifest": ComponentManifestV2.optional().describe("The stored runtime manifest (assets, graphics API, alpha policy) of an org-INSTALLED component: the same object the create/update body takes, so a manifest read back here can be written back unchanged. Built-in defaults have no stored manifest and omit it. Its `version` is always 2 (the contract version), unlike the entry's semver `version`."),
2204
+ "id": zod39.string().describe("The entry's id: a `primitiveId` for a built-in, a `componentId` for an installed component."),
2205
+ "source": zod39.enum(["default", "installed"]).describe("'default' = built-in primitive (place by primitiveId); 'installed' = org-authored component (place by componentId)."),
2206
+ "kind": zod39.enum(["component", "transition", "scene"]).describe("RENDER kind (component | transition | scene). NOT the ClipSource variant \u2014 see `placement` for how to author it on the timeline."),
2207
+ "version": zod39.string().describe("The ENTRY's version: a semver string ('0.0.0' until an authored component is versioned). Distinct from `manifest.version`, which is the runtime contract version and is always the literal 2."),
2208
+ "propDefaults": zod39.record(zod39.string(), zod39.unknown()).optional(),
2209
+ "textParam": zod39.string().nullish().describe("The param field that carries this primitive's primary text; null = no single text slot."),
2210
+ "subtextParam": zod39.string().nullish().describe("The param field for secondary text (subtitle/byline); null = none."),
2204
2211
  "format": SceneFormat.optional(),
2205
- "durationInFrames": zod40.number().optional(),
2206
- "intent": zod40.string().optional().describe("Selection signal: a verb naming what this primitive accomplishes (e.g. 'product-trailer'). Match it to the beat you are authoring."),
2207
- "useWhen": zod40.string().optional().describe("When to use this \u2014 AND when not to. The negative guidance is load-bearing; read it before picking."),
2208
- "pairsWith": zod40.array(zod40.string()).optional().describe("Authoring guidance: ids of primitives that COMPOSE well with this one in the same edit."),
2209
- "avoidWith": zod40.array(zod40.string()).optional().describe("Authoring guidance: ids of primitives that CONFLICT with this one \u2014 do not place together."),
2210
- "tags": zod40.array(zod40.string()).optional().describe("Free-text search keywords."),
2211
- "mood": zod40.array(zod40.string()).optional().describe("Vibe/tone tags (e.g. 'cinematic', 'minimal'). Filter to match the edit's mood."),
2212
- "tier": zod40.enum(["recommended", "standard", "niche"]).optional().describe("Quality/applicability RANKING (a preference, not a flag). Prefer 'recommended'; reach for 'niche' only when its specific use-case is exactly the beat."),
2213
- "useCase": zod40.array(zod40.enum(["intro", "outro", "full-scene", "title-over-footage", "transition", "background", "grade", "emphasis", "explainer", "social-cut"])).optional().describe("The edit ROLE(s) this primitive fills \u2014 the dimension to filter by for a beat (e.g. 'intro', 'title-over-footage', 'grade')."),
2214
- "examples": zod40.array(PrimitiveExample).optional(),
2215
- "fixedCopy": zod40.array(zod40.string()).optional().describe("On-screen strings this primitive BAKES \u2014 the read-side counterpart to propSchema. These literals render REGARDLESS of params (no param can change them); fork the source via get_component_source to edit them. Use this to see at author time what fixed copy (someone-else's marketing text, faux-code, faux-data) will appear before you render."),
2216
- "brandBindings": zod40.array(zod40.strictObject({
2217
- "param": zod40.string(),
2218
- "brandToken": zod40.string()
2212
+ "intent": zod39.string().optional().describe("Selection signal: a verb naming what this primitive accomplishes (e.g. 'product-trailer'). Match it to the beat you are authoring."),
2213
+ "useWhen": zod39.string().optional().describe("When to use this \u2014 AND when not to. The negative guidance is load-bearing; read it before picking."),
2214
+ "pairsWith": zod39.array(zod39.string()).optional().describe("Authoring guidance: ids of primitives that COMPOSE well with this one in the same edit."),
2215
+ "avoidWith": zod39.array(zod39.string()).optional().describe("Authoring guidance: ids of primitives that CONFLICT with this one \u2014 do not place together."),
2216
+ "tags": zod39.array(zod39.string()).optional().describe("Free-text search keywords."),
2217
+ "mood": zod39.array(zod39.string()).optional().describe("Vibe/tone tags (e.g. 'cinematic', 'minimal'). Filter to match the edit's mood."),
2218
+ "tier": zod39.enum(["recommended", "standard", "niche"]).optional().describe("Quality/applicability RANKING (a preference, not a flag). Prefer 'recommended'; reach for 'niche' only when its specific use-case is exactly the beat."),
2219
+ "useCase": zod39.array(zod39.enum(["intro", "outro", "full-scene", "title-over-footage", "transition", "background", "grade", "emphasis", "explainer", "social-cut"])).optional().describe("The edit ROLE(s) this primitive fills \u2014 the dimension to filter by for a beat (e.g. 'intro', 'title-over-footage', 'grade')."),
2220
+ "fixedCopy": zod39.array(zod39.string()).optional().describe("On-screen strings this primitive BAKES \u2014 the read-side counterpart to propSchema. These literals render REGARDLESS of params (no param can change them); fork the source via get_component_source to edit them. Use this to see at author time what fixed copy (someone-else's marketing text, faux-code, faux-data) will appear before you render."),
2221
+ "brandBindings": zod39.array(zod39.strictObject({
2222
+ "param": zod39.string(),
2223
+ "brandToken": zod39.string()
2219
2224
  })).optional().describe("Params that can follow the project brand kit. Each {param, brandToken} says: set `param` to `brandToken` (a `$brand:` ref, e.g. '$brand:colors.accent') to track the brand instead of a literal. See the list response's `brandTokens` for the full ref vocabulary. Omitted when nothing is brand-bound."),
2220
2225
  "placement": ComponentPlacement.describe("How to author this entry as a ClipSource via apply_composition: the exact ClipSource `kind` + the id field to key it by. Built-ins place as {kind:'overlay'|'effect', primitiveId}; installed components place as {kind:'component', componentId}. A kind:'scene' primitive has no 'scene' ClipSource \u2014 it is placed as {kind:'overlay', primitiveId}."),
2221
- "warnings": zod40.array(zod40.string()).optional().describe("Non-blocking save-time advisories \u2014 the create/update SUCCEEDED. Currently: a `fontFamily` string literal referencing a NON-vendored font (a bare CSS generic like 'serif', or an unknown named family like 'Arial') whose LIVE-lane pixels vary by render host \u2014 re-author with a vendored family or 'Georgia'. Omitted when there is nothing to flag; only present on the create/update responses.")
2226
+ "warnings": zod39.array(zod39.string()).optional().describe("Non-blocking save-time advisories \u2014 the create/update SUCCEEDED. Currently: a `fontFamily` string literal referencing a NON-vendored font (a bare CSS generic like 'serif', or an unknown named family like 'Arial') whose LIVE-lane pixels vary by render host \u2014 re-author with a vendored family or 'Georgia'. Omitted when there is nothing to flag; only present on the create/update responses.")
2222
2227
  }).describe("Component catalog entry per \xA7Components.");
2223
2228
 
2224
2229
  // ../sdk/src/generated/zod/models/sfxCatalogEntry.zod.ts
2225
- import * as zod41 from "zod";
2226
- var SfxCatalogEntry = zod41.strictObject({
2227
- "soundId": zod41.string().describe("Stable sound-pack item id."),
2228
- "family": zod41.enum(["tick", "pop", "impact", "confirm", "error", "whoosh", "riser"]).describe("Editorial family the compose sfx pass binds by."),
2229
- "envelopeClass": zod41.enum(["transient", "sweep", "ambient"]).describe("Coarse envelope shape \u2014 the browse grouping."),
2230
- "intensity": zod41.enum(["subtle", "standard", "strong"]),
2231
- "durationSec": zod41.number().describe("Duration of the mastered asset (seconds)."),
2232
- "description": zod41.string().describe("One-line human-legible caption."),
2233
- "attribution": zod41.string().describe("CC0 provenance string.")
2230
+ import * as zod40 from "zod";
2231
+ var SfxCatalogEntry = zod40.strictObject({
2232
+ "soundId": zod40.string().describe("Stable sound-pack item id."),
2233
+ "family": zod40.enum(["tick", "pop", "impact", "confirm", "error", "whoosh", "riser"]).describe("Editorial family the compose sfx pass binds by."),
2234
+ "envelopeClass": zod40.enum(["transient", "sweep", "ambient"]).describe("Coarse envelope shape \u2014 the browse grouping."),
2235
+ "intensity": zod40.enum(["subtle", "standard", "strong"]),
2236
+ "durationSec": zod40.number().describe("Duration of the mastered asset (seconds)."),
2237
+ "description": zod40.string().describe("One-line human-legible caption."),
2238
+ "attribution": zod40.string().describe("CC0 provenance string.")
2234
2239
  });
2235
2240
 
2236
2241
  // ../sdk/src/generated/zod/models/componentListResponse.zod.ts
2237
- var ComponentListResponse = zod42.strictObject({
2238
- "data": zod42.array(ComponentResponse),
2242
+ var ComponentListResponse = zod41.strictObject({
2243
+ "data": zod41.array(ComponentResponse),
2239
2244
  "pagination": PaginationMeta,
2240
- "brandTokens": zod42.array(zod42.string()).optional().describe("Catalog-level reference: the valid `$brand:` token refs a param value may carry (e.g. accentColor: \"$brand:colors.accent\"). Colors + fonts are the common bindings; the full design-token vocabulary is listed. Derived from the brand kit resolver so it can't drift. See each entry's `brandBindings` for which params are brand-bound by default."),
2241
- "sfx": zod42.array(SfxCatalogEntry).optional().describe("Catalog-level reference: the curated CC0 SFX pack (closed, versioned). The compose sfx pass places these deterministically; this is the pack-only structural inventory to pick a `soundId` by family. Present on the first page only."),
2242
- "audio": zod42.array(AudioPaletteEntry).optional().describe(`The UNIFIED org sound palette (audio-substrate Phase 2): the curated packs (SFX + music beds) unioned with THIS org's own uploads/imports (source:"org") and generated audio (source:"generated"), one uniform entry shape carrying role + envelopeClass + provenance + license; music entries carry bpm. Prefer an org sound when it fits \u2014 an org that uploads its product's real UI sounds hears ITS product. Present on the first page only.`)
2245
+ "brandTokens": zod41.array(zod41.string()).optional().describe("Catalog-level reference: the valid `$brand:` token refs a param value may carry (e.g. accentColor: \"$brand:colors.accent\"). Colors + fonts are the common bindings; the full design-token vocabulary is listed. Derived from the brand kit resolver so it can't drift. See each entry's `brandBindings` for which params are brand-bound by default."),
2246
+ "sfx": zod41.array(SfxCatalogEntry).optional().describe("Catalog-level reference: the curated CC0 SFX pack (closed, versioned). The compose sfx pass places these deterministically; this is the pack-only structural inventory to pick a `soundId` by family. Present on the first page only."),
2247
+ "audio": zod41.array(AudioPaletteEntry).optional().describe(`The UNIFIED org sound palette (audio-substrate Phase 2): the curated packs (SFX + music beds) unioned with THIS org's own uploads/imports (source:"org") and generated audio (source:"generated"), one uniform entry shape carrying role + envelopeClass + provenance + license; music entries carry bpm. Prefer an org sound when it fits \u2014 an org that uploads its product's real UI sounds hears ITS product. Present on the first page only.`)
2243
2248
  });
2244
2249
 
2250
+ // ../sdk/src/generated/zod/models/componentPatchRequest.zod.ts
2251
+ import * as zod42 from "zod";
2252
+ var componentPatchRequestComponentIdMax = 200;
2253
+ var componentPatchRequestNameMax = 200;
2254
+ var componentPatchRequestDescriptionMax = 2e3;
2255
+ var componentPatchRequestEjectedFromMax = 200;
2256
+ var componentPatchRequestDurationInFramesExclusiveMin = 0;
2257
+ var ComponentPatchRequest = zod42.strictObject({
2258
+ "componentId": zod42.string().min(1).max(componentPatchRequestComponentIdMax).optional().describe("Caller-chosen stable component id. On create it names the new component. On PUT/PATCH it is optional and, when present, must equal the id in the path; a mismatch is a 400 naming both."),
2259
+ "tsxSource": zod42.string().min(1).optional(),
2260
+ "name": zod42.string().min(1).max(componentPatchRequestNameMax).optional(),
2261
+ "description": zod42.string().max(componentPatchRequestDescriptionMax).optional(),
2262
+ "category": zod42.enum(["text", "effects", "transitions", "layouts", "backgrounds", "ui-blocks", "scenes"]).optional(),
2263
+ "propSchema": zod42.record(zod42.string(), zod42.unknown()).optional(),
2264
+ "origin": zod42.enum(["customer-owned", "server-native"]).optional(),
2265
+ "ejectedFrom": zod42.string().max(componentPatchRequestEjectedFromMax).optional(),
2266
+ "tokens": zod42.record(zod42.string(), zod42.unknown()).optional(),
2267
+ "examples": zod42.array(zod42.record(zod42.string(), zod42.unknown())).optional().describe("Usage examples, as authored. A built-in primitive projects {name, mood?, params?, description?}; an authored component's examples are whatever it wrote, which is why the item is open. One shape for both directions: what you write here is what you read back."),
2268
+ "durationInFrames": zod42.number().gt(componentPatchRequestDurationInFramesExclusiveMin).optional(),
2269
+ "manifest": ComponentManifestV2.optional()
2270
+ }).describe("PATCH /components/:id body, RFC 7396 merge: a field you omit is left exactly as it was. Org/user are server-resolved; never accepted from the body.");
2271
+
2245
2272
  // ../sdk/src/generated/zod/models/componentPreviewImageResult.zod.ts
2246
2273
  import * as zod43 from "zod";
2247
2274
  var ComponentPreviewImageResult = zod43.strictObject({
@@ -2272,28 +2299,34 @@ var ComponentPreviewJobResult = zod45.union([ComponentPreviewImageResult, Compon
2272
2299
 
2273
2300
  // ../sdk/src/generated/zod/models/componentSourceResponse.zod.ts
2274
2301
  import * as zod46 from "zod";
2302
+ var componentSourceResponseNameMax = 200;
2303
+ var componentSourceResponseDescriptionMax = 2e3;
2304
+ var componentSourceResponseEjectedFromMax = 200;
2305
+ var componentSourceResponseDurationInFramesExclusiveMin = 0;
2275
2306
  var ComponentSourceResponse = zod46.strictObject({
2276
- "id": zod46.string(),
2277
- "name": zod46.string(),
2278
- "description": zod46.string(),
2279
- "source": zod46.enum(["default", "installed"]),
2280
- "tsxSource": zod46.string(),
2307
+ "tsxSource": zod46.string().min(1),
2308
+ "name": zod46.string().min(1).max(componentSourceResponseNameMax),
2309
+ "description": zod46.string().max(componentSourceResponseDescriptionMax),
2281
2310
  "propSchema": zod46.record(zod46.string(), zod46.unknown()),
2282
2311
  "origin": zod46.enum(["customer-owned", "server-native"]).optional(),
2283
- "ejectedFrom": zod46.string().optional(),
2312
+ "ejectedFrom": zod46.string().max(componentSourceResponseEjectedFromMax).optional(),
2284
2313
  "tokens": zod46.record(zod46.string(), zod46.unknown()).optional(),
2285
- "examples": zod46.array(zod46.record(zod46.string(), zod46.unknown())).optional(),
2286
- "durationInFrames": zod46.number().optional(),
2287
- "manifest": ComponentManifestV2
2314
+ "examples": zod46.array(zod46.record(zod46.string(), zod46.unknown())).optional().describe("Usage examples, as authored. A built-in primitive projects {name, mood?, params?, description?}; an authored component's examples are whatever it wrote, which is why the item is open. One shape for both directions: what you write here is what you read back."),
2315
+ "durationInFrames": zod46.number().gt(componentSourceResponseDurationInFramesExclusiveMin).optional(),
2316
+ "manifest": ComponentManifestV2,
2317
+ "id": zod46.string(),
2318
+ "source": zod46.enum(["default", "installed"])
2288
2319
  }).describe("Installed component SOURCE (TSX) + ownership provenance per \xA7Components.");
2289
2320
 
2290
2321
  // ../sdk/src/generated/zod/models/componentUpdateRequest.zod.ts
2291
2322
  import * as zod47 from "zod";
2323
+ var componentUpdateRequestComponentIdMax = 200;
2292
2324
  var componentUpdateRequestNameMax = 200;
2293
2325
  var componentUpdateRequestDescriptionMax = 2e3;
2294
2326
  var componentUpdateRequestEjectedFromMax = 200;
2295
2327
  var componentUpdateRequestDurationInFramesExclusiveMin = 0;
2296
2328
  var ComponentUpdateRequest = zod47.strictObject({
2329
+ "componentId": zod47.string().min(1).max(componentUpdateRequestComponentIdMax).optional().describe("Caller-chosen stable component id. On create it names the new component. On PUT/PATCH it is optional and, when present, must equal the id in the path; a mismatch is a 400 naming both."),
2297
2330
  "tsxSource": zod47.string().min(1).optional(),
2298
2331
  "name": zod47.string().min(1).max(componentUpdateRequestNameMax).optional(),
2299
2332
  "description": zod47.string().max(componentUpdateRequestDescriptionMax).optional(),
@@ -2302,10 +2335,10 @@ var ComponentUpdateRequest = zod47.strictObject({
2302
2335
  "origin": zod47.enum(["customer-owned", "server-native"]).optional(),
2303
2336
  "ejectedFrom": zod47.string().max(componentUpdateRequestEjectedFromMax).optional(),
2304
2337
  "tokens": zod47.record(zod47.string(), zod47.unknown()).optional(),
2305
- "examples": zod47.array(zod47.record(zod47.string(), zod47.unknown())).optional(),
2338
+ "examples": zod47.array(zod47.record(zod47.string(), zod47.unknown())).optional().describe("Usage examples, as authored. A built-in primitive projects {name, mood?, params?, description?}; an authored component's examples are whatever it wrote, which is why the item is open. One shape for both directions: what you write here is what you read back."),
2306
2339
  "durationInFrames": zod47.number().gt(componentUpdateRequestDurationInFramesExclusiveMin).optional(),
2307
2340
  "manifest": ComponentManifestV2.optional()
2308
- }).describe("PUT /components/:id body. Org/user are server-resolved; never accepted from the body.");
2341
+ }).describe("PUT /components/:id body: every writable field, all optional; an omitted field is carried forward. Org/user are server-resolved; never accepted from the body.");
2309
2342
 
2310
2343
  // ../sdk/src/generated/zod/models/composeCreateRequest.zod.ts
2311
2344
  import * as zod48 from "zod";
@@ -6904,6 +6937,7 @@ var ErrorEnvelope = zod84.strictObject({
6904
6937
  "error": zod84.strictObject({
6905
6938
  "code": zod84.string().describe("Stable machine-readable error code per \xA7Error Model."),
6906
6939
  "message": zod84.string().describe("Human-readable message."),
6940
+ "contract": zod84.string().describe("Contract version that produced this verdict. If it differs between two calls, the rules changed underneath you, not your request."),
6907
6941
  "details": zod84.record(zod84.string(), zod84.unknown()).optional().describe("Optional context (currentEtag, projectIds, retryAfter, \u2026).")
6908
6942
  }).describe("Standard API error envelope.")
6909
6943
  }).describe("Error envelope used by every non-2xx response.");
@@ -8404,6 +8438,7 @@ var UsageListResponse = zod200.strictObject({
8404
8438
  // ../sdk/src/generated/zod/models/validateComposition200.zod.ts
8405
8439
  import * as zod201 from "zod";
8406
8440
  var ValidateComposition200 = zod201.strictObject({
8441
+ "contract": zod201.string().describe("The contract this verdict was computed against (the kernel version the deployment runs). If it differs between two calls, the validator changed, not your composition."),
8407
8442
  "valid": zod201.boolean(),
8408
8443
  "errors": zod201.array(zod201.strictObject({
8409
8444
  "code": zod201.string(),
@@ -8714,6 +8749,11 @@ var UpdateComponentParams = zod218.object({
8714
8749
  });
8715
8750
  var UpdateComponentBody = ComponentUpdateRequest;
8716
8751
  var UpdateComponentResponse = ComponentResponse;
8752
+ var PatchComponentParams = zod218.object({
8753
+ "id": zod218.string()
8754
+ });
8755
+ var PatchComponentBody = ComponentPatchRequest;
8756
+ var PatchComponentResponse = ComponentResponse;
8717
8757
  var GetComponentParams = zod218.object({
8718
8758
  "id": zod218.string()
8719
8759
  });
@@ -8831,6 +8871,7 @@ var DeriveCompositionBody = DeriveCompositionRequest;
8831
8871
  var DeriveCompositionResponseSchema = DeriveCompositionResponse;
8832
8872
  var ValidateCompositionBody = Composition;
8833
8873
  var ValidateCompositionResponse = zod221.object({
8874
+ "contract": zod221.string().describe("The contract this verdict was computed against (the kernel version the deployment runs). If it differs between two calls, the validator changed, not your composition."),
8834
8875
  "valid": zod221.boolean(),
8835
8876
  "errors": zod221.array(zod221.object({
8836
8877
  "code": zod221.string(),
@@ -9273,7 +9314,7 @@ var GENERATED_OPERATIONS = [
9273
9314
  { operationId: "createBrandKit", toolName: "cueframe_api_createBrandKit", title: "Create Brand Kit", method: "POST", pathTemplate: "/v1/brand-kits", pathParams: [], queryParams: [], bodyKey: "createBrandKitBody", description: 'Create (or upsert) a brand kit \u2014 Create or upsert a brand kit. Gated on the `brand_kits` boolean entitlement, which the FREE plan grants \u2014 brand-first authoring is deliberately never paywalled \u2014 so this is available to every account and costs no credits. A plan without it returns 402 billing_required (`details.featureId: "brand_kits"`). Discover the gate WITHOUT a failed round-trip via GET /v1/me \u2014 its `entitlements.brand_kits.included` tells you up front. \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.', annotations: { "readOnlyHint": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "description": { "type": ["string", "null"] }, "tagline": { "type": ["string", "null"] }, "colors": { "type": "object" }, "extraColors": { "type": "array" }, "fonts": { "type": "object" }, "voiceGuidelines": { "type": ["string", "null"] }, "captions": { "type": "object" }, "motion": { "type": "object" }, "logo": { "type": "object" }, "intro": { "type": "object" }, "outro": { "type": "object" }, "watermark": { "type": "object" }, "spacing": { "type": "object" }, "sizing": { "type": "object" }, "audio": { "type": "object" }, "exemplarKeys": { "type": "array" }, "contactSheetKey": { "type": "string" }, "motifs": { "type": "array" }, "styleRubric": { "type": "string" }, "density": { "type": "object" }, "inspiration": { "type": "object" }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" } }, "additionalProperties": true } },
9274
9315
  { operationId: "createBrief", toolName: "cueframe_api_createBrief", title: "Create Brief", method: "POST", pathTemplate: "/v1/briefs", pathParams: [], queryParams: [], bodyKey: "createBriefBody", description: "Create a brief (the persisted intent the Director composes from) \u2014 Persist the video's intent \u2014 goal/audience/format/tone/CTA, beats with optional moment pinning ({mediaId, startSec, endSec}), captions (style + emphasis phrases), seeded graphics (carried VERBATIM as locked clips), exclusions (hard negatives the Director must never author), and gate config (holdAt / autoApprove). Then compose it with POST /projects/:id/compose {briefId} \u2014 every field is honored or the compose is refused loudly naming the field. The response carries the brief-time quote (compose + estimated render) to relay BEFORE any metered call. \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "id": { "type": "string" }, "projectId": { "type": "string" }, "kind": { "type": "string", "description": "authored = create_brief; clip = minted by suggest_briefs from an AI clip suggestion.", "enum": ["authored", "clip"] }, "sourceSuggestionId": { "type": "string", "description": "kind:'clip' provenance \u2014 the suggestion this Brief was minted from." }, "name": { "type": "string" }, "goal": { "type": "string", "description": "What the video must accomplish." }, "audience": { "type": "string" }, "platform": { "type": "string" }, "format": { "type": "object", "description": "Output-format spec per \xA7Format." }, "durationSec": { "type": "number", "description": "Target output duration. HONOR-OR-REFUSE: compose validates it against the beat-source window (\xB11.5s) and refuses a brief it cannot honor." }, "tone": { "type": "string" }, "cta": { "type": "string" }, "locale": { "type": "string", "description": "Output language (BCP-47 tag, e.g. 'es-419'): ALL on-screen copy + captions." }, "hook": { "type": "string" }, "caption": { "type": "string" }, "beats": { "type": "array" }, "mustIncludes": { "type": "array" }, "references": { "type": "array" }, "captions": { "type": "object" }, "motionStyle": { "type": "object" }, "seededGraphics": { "type": "array", "description": "Client-authored graphic clips the Director must carry VERBATIM: seeded into the design loop's base composition as LOCKED clips (never re-authored, never discarded)." }, "exclusions": { "type": "array" }, "gates": { "type": "object" }, "audio": { "type": "object" }, "quote": { "type": "object" }, "createdAt": { "type": "number" }, "updatedAt": { "type": "number" } }, "additionalProperties": true } },
9275
9316
  { operationId: "createCheckout", toolName: "cueframe_api_createCheckout", title: "Create Checkout", method: "POST", pathTemplate: "/v1/billing/checkout", pathParams: [], queryParams: [], bodyKey: "createCheckoutBody", description: 'Start a hosted Stripe checkout for a plan/interval \u2014 Body `{ plan, interval }` \u2192 returns a hosted Stripe checkout `url` to open in a browser to complete payment. Upgrades the CURRENT org (server-resolved from your key/identity, NEVER the body). Always a hosted URL \u2014 an existing saved card is NEVER charged without the human confirming on Stripe. `interval:"year"` selects the annual plan. Discover valid combos with GET /v1/billing/plans. Requires `billing:write`. \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.', annotations: { "readOnlyHint": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "url": { "type": "string", "description": "Hosted Stripe checkout URL to open in a browser to complete payment. Always present on success \u2014 an existing saved card is never charged without confirming here." }, "plan": { "type": "string" }, "interval": { "type": "string" }, "productId": { "type": "string", "description": "Resolved billing catalog product id." } }, "additionalProperties": true } },
9276
- { operationId: "createComponent", toolName: "cueframe_api_createComponent", title: "Create Component", method: "POST", pathTemplate: "/v1/components", pathParams: [], queryParams: [], bodyKey: "createComponentBody", description: "Author (create) a component \u2014 Required permission: projects:write \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "description": { "type": "string" }, "source": { "type": "string", "description": "'default' = built-in primitive (place by primitiveId); 'installed' = org-authored component (place by componentId).", "enum": ["default", "installed"] }, "category": { "type": "string", "enum": ["text", "effects", "transitions", "layouts", "backgrounds", "ui-blocks", "scenes"] }, "kind": { "type": "string", "description": "RENDER kind (component | transition | scene). NOT the ClipSource variant \u2014 see `placement` for how to author it on the timeline.", "enum": ["component", "transition", "scene"] }, "version": { "type": "string" }, "propSchema": { "type": "object" }, "propDefaults": { "type": "object" }, "textParam": { "type": ["string", "null"], "description": "The param field that carries this primitive's primary text; null = no single text slot." }, "subtextParam": { "type": ["string", "null"], "description": "The param field for secondary text (subtitle/byline); null = none." }, "format": { "type": "object" }, "durationInFrames": { "type": "number" }, "intent": { "type": "string", "description": "Selection signal: a verb naming what this primitive accomplishes (e.g. 'product-trailer'). Match it to the beat you are authoring." }, "useWhen": { "type": "string", "description": "When to use this \u2014 AND when not to. The negative guidance is load-bearing; read it before picking." }, "pairsWith": { "type": "array", "description": "Authoring guidance: ids of primitives that COMPOSE well with this one in the same edit." }, "avoidWith": { "type": "array", "description": "Authoring guidance: ids of primitives that CONFLICT with this one \u2014 do not place together." }, "tags": { "type": "array", "description": "Free-text search keywords." }, "mood": { "type": "array", "description": "Vibe/tone tags (e.g. 'cinematic', 'minimal'). Filter to match the edit's mood." }, "tier": { "type": "string", "description": "Quality/applicability RANKING (a preference, not a flag). Prefer 'recommended'; reach for 'niche' only when its specific use-case is exactly the beat.", "enum": ["recommended", "standard", "niche"] }, "useCase": { "type": "array", "description": "The edit ROLE(s) this primitive fills \u2014 the dimension to filter by for a beat (e.g. 'intro', 'title-over-footage', 'grade')." }, "examples": { "type": "array" }, "fixedCopy": { "type": "array", "description": "On-screen strings this primitive BAKES \u2014 the read-side counterpart to propSchema. These literals render REGARDLESS of params (no param can change them); fork the source via get_component_source to edit them. Use this to see at author time what fixed copy (someone-else's marketing text, faux-code, faux-data) will appear before you render." }, "brandBindings": { "type": "array", "description": "Params that can follow the project brand kit. Each {param, brandToken} says: set `param` to `brandToken` (a `$brand:` ref, e.g. '$brand:colors.accent') to track the brand instead of a literal. See the list response's `brandTokens` for the full ref vocabulary. Omitted when nothing is brand-bound." }, "placement": { "type": "object" }, "warnings": { "type": "array", "description": "Non-blocking save-time advisories \u2014 the create/update SUCCEEDED. Currently: a `fontFamily` string literal referencing a NON-vendored font (a bare CSS generic like 'serif', or an unknown named family like 'Arial') whose LIVE-lane pixels vary by render host \u2014 re-author with a vendored family or 'Georgia'. Omitted when there is nothing to flag; only present on the create/update responses." } }, "additionalProperties": true } },
9317
+ { operationId: "createComponent", toolName: "cueframe_api_createComponent", title: "Create Component", method: "POST", pathTemplate: "/v1/components", pathParams: [], queryParams: [], bodyKey: "createComponentBody", description: "Author (create) a component \u2014 Required permission: projects:write \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "name": { "type": "string" }, "description": { "type": "string" }, "category": { "type": "string", "enum": ["text", "effects", "transitions", "layouts", "backgrounds", "ui-blocks", "scenes"] }, "propSchema": { "type": "object" }, "origin": { "type": "string", "enum": ["customer-owned", "server-native"] }, "ejectedFrom": { "type": "string" }, "tokens": { "type": "object" }, "examples": { "type": "array", "description": "Usage examples, as authored. A built-in primitive projects {name, mood?, params?, description?}; an authored component's examples are whatever it wrote, which is why the item is open. One shape for both directions: what you write here is what you read back." }, "durationInFrames": { "type": "number" }, "manifest": { "type": "object" }, "id": { "type": "string", "description": "The entry's id: a `primitiveId` for a built-in, a `componentId` for an installed component." }, "source": { "type": "string", "description": "'default' = built-in primitive (place by primitiveId); 'installed' = org-authored component (place by componentId).", "enum": ["default", "installed"] }, "kind": { "type": "string", "description": "RENDER kind (component | transition | scene). NOT the ClipSource variant \u2014 see `placement` for how to author it on the timeline.", "enum": ["component", "transition", "scene"] }, "version": { "type": "string", "description": "The ENTRY's version: a semver string ('0.0.0' until an authored component is versioned). Distinct from `manifest.version`, which is the runtime contract version and is always the literal 2." }, "propDefaults": { "type": "object" }, "textParam": { "type": ["string", "null"], "description": "The param field that carries this primitive's primary text; null = no single text slot." }, "subtextParam": { "type": ["string", "null"], "description": "The param field for secondary text (subtitle/byline); null = none." }, "format": { "type": "object" }, "intent": { "type": "string", "description": "Selection signal: a verb naming what this primitive accomplishes (e.g. 'product-trailer'). Match it to the beat you are authoring." }, "useWhen": { "type": "string", "description": "When to use this \u2014 AND when not to. The negative guidance is load-bearing; read it before picking." }, "pairsWith": { "type": "array", "description": "Authoring guidance: ids of primitives that COMPOSE well with this one in the same edit." }, "avoidWith": { "type": "array", "description": "Authoring guidance: ids of primitives that CONFLICT with this one \u2014 do not place together." }, "tags": { "type": "array", "description": "Free-text search keywords." }, "mood": { "type": "array", "description": "Vibe/tone tags (e.g. 'cinematic', 'minimal'). Filter to match the edit's mood." }, "tier": { "type": "string", "description": "Quality/applicability RANKING (a preference, not a flag). Prefer 'recommended'; reach for 'niche' only when its specific use-case is exactly the beat.", "enum": ["recommended", "standard", "niche"] }, "useCase": { "type": "array", "description": "The edit ROLE(s) this primitive fills \u2014 the dimension to filter by for a beat (e.g. 'intro', 'title-over-footage', 'grade')." }, "fixedCopy": { "type": "array", "description": "On-screen strings this primitive BAKES \u2014 the read-side counterpart to propSchema. These literals render REGARDLESS of params (no param can change them); fork the source via get_component_source to edit them. Use this to see at author time what fixed copy (someone-else's marketing text, faux-code, faux-data) will appear before you render." }, "brandBindings": { "type": "array", "description": "Params that can follow the project brand kit. Each {param, brandToken} says: set `param` to `brandToken` (a `$brand:` ref, e.g. '$brand:colors.accent') to track the brand instead of a literal. See the list response's `brandTokens` for the full ref vocabulary. Omitted when nothing is brand-bound." }, "placement": { "type": "object" }, "warnings": { "type": "array", "description": "Non-blocking save-time advisories \u2014 the create/update SUCCEEDED. Currently: a `fontFamily` string literal referencing a NON-vendored font (a bare CSS generic like 'serif', or an unknown named family like 'Arial') whose LIVE-lane pixels vary by render host \u2014 re-author with a vendored family or 'Georgia'. Omitted when there is nothing to flag; only present on the create/update responses." } }, "additionalProperties": true } },
9277
9318
  { operationId: "createCritic", toolName: "cueframe_api_createCritic", title: "Create Critic", method: "POST", pathTemplate: "/v1/critics", pathParams: [], queryParams: [], bodyKey: "createCriticBody", description: "Register a compose critic \u2014 Required permission: projects:write \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "id": { "type": "string" }, "criticId": { "type": "string" }, "tier": { "type": "string", "enum": ["rules", "rubric", "evaluator"] }, "secret": { "type": "string", "description": "evaluator tier: Standard-Webhooks signing secret, returned ONCE." } }, "additionalProperties": true } },
9278
9319
  { operationId: "createExemplarUploads", toolName: "cueframe_api_createExemplarUploads", title: "Create Exemplar Uploads", method: "POST", pathTemplate: "/v1/brand-kits/exemplar-uploads", pathParams: [], queryParams: [], bodyKey: "createExemplarUploadsBody", description: "Reserve presigned PUT slots for inspiration exemplar frames \u2014 Returns presigned PUT URLs under this org's `brand-inspiration/\u2026` prefix \u2014 the only namespace the brand-kit upsert accepts `exemplarKeys` from. PUT each curated reference frame (\u2264720px jpeg recommended \u2014 the frames become vision input downstream), then upsert the kit with the returned keys. This is the ingest door for agent-driven kit extraction (the `extracting-brand-kits` skill on GET /skills). \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "batchId": { "type": "string" }, "uploads": { "type": "array" }, "contactSheetUpload": { "type": "object" }, "expiresAt": { "type": "string" } }, "additionalProperties": true } },
9279
9320
  { operationId: "createFcpxmlExport", toolName: "cueframe_api_createFcpxmlExport", title: "Create Fcpxml Export", method: "POST", pathTemplate: "/v1/projects/{id}/exports/fcpxml", pathParams: ["id"], queryParams: [], bodyKey: "createFcpxmlExportBody", description: "Create a Final Cut Pro export \u2014 Export the project as a Final Cut Pro XML (FCPXML) timeline \u2014 eject the agent-authored edit into a professional NLE for human finishing, preserving clips, trims, and timeline structure. Async: poll GET /projects/:id/exports/:exportId for the download URL. \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "id": { "type": "string" }, "format": { "type": "string", "enum": ["fcpxml", "premiere"] }, "status": { "type": "string", "enum": ["queued", "trimming", "building", "uploading", "complete", "error", "cancelled"] }, "progress": { "type": "number", "description": "Fractional progress 0..1 across the trim/build/upload pipeline. Reaches 1 only on `complete`." }, "outputUrl": { "type": ["string", "null"] }, "outputExpiresAt": { "type": ["string", "null"] }, "outputSizeBytes": { "type": ["number", "null"] }, "outputDurationSec": { "type": ["number", "null"] }, "error": { "description": "Set when status is `error`; null otherwise. The phase field localizes the failure to trim / build / upload / trigger." }, "trimCacheHit": { "type": ["boolean", "null"] }, "clipSuggestionId": { "type": ["string", "null"] }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" } }, "additionalProperties": true } },
@@ -9302,8 +9343,8 @@ var GENERATED_OPERATIONS = [
9302
9343
  { operationId: "getBrandKitExemplars", toolName: "cueframe_api_getBrandKitExemplars", title: "Get Brand Kit Exemplars", method: "POST", pathTemplate: "/v1/brand-kits/{id}/exemplars", pathParams: ["id"], queryParams: [], bodyKey: "getBrandKitExemplarsBody", description: "Presign a brand kit's inspiration exemplar frames \u2014 Returns short-lived URLs for the kit's exemplar frames (the pixels the maker and judge condition on). Filter to one motif's evidence frames with `motifId`. Vision-budget-bounded consumers should keep `limit` small (default 6). \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "exemplars": { "type": "array" }, "contactSheetUrl": { "type": "string" } }, "additionalProperties": true } },
9303
9344
  { operationId: "getBrief", toolName: "cueframe_api_getBrief", title: "Get Brief", method: "GET", pathTemplate: "/v1/briefs/{id}", pathParams: ["id"], queryParams: [], bodyKey: null, description: "Get a brief by id \u2014 Required permission: projects:read \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": true, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "id": { "type": "string" }, "projectId": { "type": "string" }, "kind": { "type": "string", "description": "authored = create_brief; clip = minted by suggest_briefs from an AI clip suggestion.", "enum": ["authored", "clip"] }, "sourceSuggestionId": { "type": "string", "description": "kind:'clip' provenance \u2014 the suggestion this Brief was minted from." }, "name": { "type": "string" }, "goal": { "type": "string", "description": "What the video must accomplish." }, "audience": { "type": "string" }, "platform": { "type": "string" }, "format": { "type": "object", "description": "Output-format spec per \xA7Format." }, "durationSec": { "type": "number", "description": "Target output duration. HONOR-OR-REFUSE: compose validates it against the beat-source window (\xB11.5s) and refuses a brief it cannot honor." }, "tone": { "type": "string" }, "cta": { "type": "string" }, "locale": { "type": "string", "description": "Output language (BCP-47 tag, e.g. 'es-419'): ALL on-screen copy + captions." }, "hook": { "type": "string" }, "caption": { "type": "string" }, "beats": { "type": "array" }, "mustIncludes": { "type": "array" }, "references": { "type": "array" }, "captions": { "type": "object" }, "motionStyle": { "type": "object" }, "seededGraphics": { "type": "array", "description": "Client-authored graphic clips the Director must carry VERBATIM: seeded into the design loop's base composition as LOCKED clips (never re-authored, never discarded)." }, "exclusions": { "type": "array" }, "gates": { "type": "object" }, "audio": { "type": "object" }, "quote": { "type": "object" }, "createdAt": { "type": "number" }, "updatedAt": { "type": "number" } }, "additionalProperties": true } },
9304
9345
  { operationId: "getCheckpoint", toolName: "cueframe_api_getCheckpoint", title: "Get Checkpoint", method: "GET", pathTemplate: "/v1/checkpoints/{id}", pathParams: ["id"], queryParams: [], bodyKey: null, description: "Get a checkpoint packet \u2014 The full approval packet: the stage artifact under review, presigned storyboard/eval stills, critic verdicts (incl. lock_violation entries), the money triple {thisStep, jobSpendSoFar, estimatedJourneyTotal}, and the recorded decision once resolved. Answer an `awaiting` packet with POST /v1/checkpoints/{id}/resume. \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": true, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "id": { "type": "string" }, "projectId": { "type": "string" }, "composeJobId": { "type": "string" }, "briefId": { "type": "string" }, "kind": { "type": "string", "enum": ["gate", "score"] }, "stage": { "type": "string", "enum": ["content", "layout", "motion"] }, "version": { "type": "integer" }, "status": { "type": "string", "enum": ["awaiting", "approved", "revised", "abandoned", "expired", "superseded"] }, "artifact": { "description": "The stage artifact under review: the locked ComposePlan at content; the composition wire shape at layout/motion; the judged composition snapshot on kind:'score'." }, "stillUrls": { "type": "array", "description": "Presigned storyboard/eval stills \u2014 the packet's visual evidence (may be GC'd by the retention sweep after the job goes terminal; the decision record is immortal)." }, "criticVerdicts": { "description": "Per-criterion scores + critique from the design loop / judge, incl. lock_violation entries." }, "quote": { "type": "object" }, "revisionCycle": { "type": "integer", "description": "Revise cycles this gate has consumed. The brief quote states the included count (revisionCyclesIncluded); beyond it, resume(revise) is refused with a typed error." }, "decision": { "description": "The recorded decision {decision, comments?, globalNote?, decidedAt} once resolved." }, "reviewMode": { "type": "string", "description": "How this packet is decided (from the Brief's gates). 'hosted' = the review PAGE captures the decision; absent/'agent' = the decision flows back through the driving agent.", "enum": ["agent", "hosted"] }, "reviewUrl": { "type": "string", "description": "Hosted review-page URL (present when reviewMode is 'hosted') \u2014 a human decides from this link, no account or agent session; the recorded decision rides the SAME resume rail, and the agent learns of it via checkpoint webhooks / wait_job." }, "createdAt": { "type": "number" }, "updatedAt": { "type": "number" } }, "additionalProperties": true } },
9305
- { operationId: "getComponent", toolName: "cueframe_api_getComponent", title: "Get Component", method: "GET", pathTemplate: "/v1/components/{id}", pathParams: ["id"], queryParams: [], bodyKey: null, description: "Get a component entry \u2014 Required permission: projects:read \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": true, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "description": { "type": "string" }, "source": { "type": "string", "description": "'default' = built-in primitive (place by primitiveId); 'installed' = org-authored component (place by componentId).", "enum": ["default", "installed"] }, "category": { "type": "string", "enum": ["text", "effects", "transitions", "layouts", "backgrounds", "ui-blocks", "scenes"] }, "kind": { "type": "string", "description": "RENDER kind (component | transition | scene). NOT the ClipSource variant \u2014 see `placement` for how to author it on the timeline.", "enum": ["component", "transition", "scene"] }, "version": { "type": "string" }, "propSchema": { "type": "object" }, "propDefaults": { "type": "object" }, "textParam": { "type": ["string", "null"], "description": "The param field that carries this primitive's primary text; null = no single text slot." }, "subtextParam": { "type": ["string", "null"], "description": "The param field for secondary text (subtitle/byline); null = none." }, "format": { "type": "object" }, "durationInFrames": { "type": "number" }, "intent": { "type": "string", "description": "Selection signal: a verb naming what this primitive accomplishes (e.g. 'product-trailer'). Match it to the beat you are authoring." }, "useWhen": { "type": "string", "description": "When to use this \u2014 AND when not to. The negative guidance is load-bearing; read it before picking." }, "pairsWith": { "type": "array", "description": "Authoring guidance: ids of primitives that COMPOSE well with this one in the same edit." }, "avoidWith": { "type": "array", "description": "Authoring guidance: ids of primitives that CONFLICT with this one \u2014 do not place together." }, "tags": { "type": "array", "description": "Free-text search keywords." }, "mood": { "type": "array", "description": "Vibe/tone tags (e.g. 'cinematic', 'minimal'). Filter to match the edit's mood." }, "tier": { "type": "string", "description": "Quality/applicability RANKING (a preference, not a flag). Prefer 'recommended'; reach for 'niche' only when its specific use-case is exactly the beat.", "enum": ["recommended", "standard", "niche"] }, "useCase": { "type": "array", "description": "The edit ROLE(s) this primitive fills \u2014 the dimension to filter by for a beat (e.g. 'intro', 'title-over-footage', 'grade')." }, "examples": { "type": "array" }, "fixedCopy": { "type": "array", "description": "On-screen strings this primitive BAKES \u2014 the read-side counterpart to propSchema. These literals render REGARDLESS of params (no param can change them); fork the source via get_component_source to edit them. Use this to see at author time what fixed copy (someone-else's marketing text, faux-code, faux-data) will appear before you render." }, "brandBindings": { "type": "array", "description": "Params that can follow the project brand kit. Each {param, brandToken} says: set `param` to `brandToken` (a `$brand:` ref, e.g. '$brand:colors.accent') to track the brand instead of a literal. See the list response's `brandTokens` for the full ref vocabulary. Omitted when nothing is brand-bound." }, "placement": { "type": "object" }, "warnings": { "type": "array", "description": "Non-blocking save-time advisories \u2014 the create/update SUCCEEDED. Currently: a `fontFamily` string literal referencing a NON-vendored font (a bare CSS generic like 'serif', or an unknown named family like 'Arial') whose LIVE-lane pixels vary by render host \u2014 re-author with a vendored family or 'Georgia'. Omitted when there is nothing to flag; only present on the create/update responses." } }, "additionalProperties": true } },
9306
- { operationId: "getComponentSource", toolName: "cueframe_api_getComponentSource", title: "Get Component Source", method: "GET", pathTemplate: "/v1/components/{id}/source", pathParams: ["id"], queryParams: [], bodyKey: null, description: "Get a component's source \u2014 Required permission: projects:read \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": true, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "description": { "type": "string" }, "source": { "type": "string", "enum": ["default", "installed"] }, "tsxSource": { "type": "string" }, "propSchema": { "type": "object" }, "origin": { "type": "string", "enum": ["customer-owned", "server-native"] }, "ejectedFrom": { "type": "string" }, "tokens": { "type": "object" }, "examples": { "type": "array" }, "durationInFrames": { "type": "number" }, "manifest": { "type": "object" } }, "additionalProperties": true } },
9346
+ { operationId: "getComponent", toolName: "cueframe_api_getComponent", title: "Get Component", method: "GET", pathTemplate: "/v1/components/{id}", pathParams: ["id"], queryParams: [], bodyKey: null, description: "Get a component entry \u2014 Required permission: projects:read \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": true, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "name": { "type": "string" }, "description": { "type": "string" }, "category": { "type": "string", "enum": ["text", "effects", "transitions", "layouts", "backgrounds", "ui-blocks", "scenes"] }, "propSchema": { "type": "object" }, "origin": { "type": "string", "enum": ["customer-owned", "server-native"] }, "ejectedFrom": { "type": "string" }, "tokens": { "type": "object" }, "examples": { "type": "array", "description": "Usage examples, as authored. A built-in primitive projects {name, mood?, params?, description?}; an authored component's examples are whatever it wrote, which is why the item is open. One shape for both directions: what you write here is what you read back." }, "durationInFrames": { "type": "number" }, "manifest": { "type": "object" }, "id": { "type": "string", "description": "The entry's id: a `primitiveId` for a built-in, a `componentId` for an installed component." }, "source": { "type": "string", "description": "'default' = built-in primitive (place by primitiveId); 'installed' = org-authored component (place by componentId).", "enum": ["default", "installed"] }, "kind": { "type": "string", "description": "RENDER kind (component | transition | scene). NOT the ClipSource variant \u2014 see `placement` for how to author it on the timeline.", "enum": ["component", "transition", "scene"] }, "version": { "type": "string", "description": "The ENTRY's version: a semver string ('0.0.0' until an authored component is versioned). Distinct from `manifest.version`, which is the runtime contract version and is always the literal 2." }, "propDefaults": { "type": "object" }, "textParam": { "type": ["string", "null"], "description": "The param field that carries this primitive's primary text; null = no single text slot." }, "subtextParam": { "type": ["string", "null"], "description": "The param field for secondary text (subtitle/byline); null = none." }, "format": { "type": "object" }, "intent": { "type": "string", "description": "Selection signal: a verb naming what this primitive accomplishes (e.g. 'product-trailer'). Match it to the beat you are authoring." }, "useWhen": { "type": "string", "description": "When to use this \u2014 AND when not to. The negative guidance is load-bearing; read it before picking." }, "pairsWith": { "type": "array", "description": "Authoring guidance: ids of primitives that COMPOSE well with this one in the same edit." }, "avoidWith": { "type": "array", "description": "Authoring guidance: ids of primitives that CONFLICT with this one \u2014 do not place together." }, "tags": { "type": "array", "description": "Free-text search keywords." }, "mood": { "type": "array", "description": "Vibe/tone tags (e.g. 'cinematic', 'minimal'). Filter to match the edit's mood." }, "tier": { "type": "string", "description": "Quality/applicability RANKING (a preference, not a flag). Prefer 'recommended'; reach for 'niche' only when its specific use-case is exactly the beat.", "enum": ["recommended", "standard", "niche"] }, "useCase": { "type": "array", "description": "The edit ROLE(s) this primitive fills \u2014 the dimension to filter by for a beat (e.g. 'intro', 'title-over-footage', 'grade')." }, "fixedCopy": { "type": "array", "description": "On-screen strings this primitive BAKES \u2014 the read-side counterpart to propSchema. These literals render REGARDLESS of params (no param can change them); fork the source via get_component_source to edit them. Use this to see at author time what fixed copy (someone-else's marketing text, faux-code, faux-data) will appear before you render." }, "brandBindings": { "type": "array", "description": "Params that can follow the project brand kit. Each {param, brandToken} says: set `param` to `brandToken` (a `$brand:` ref, e.g. '$brand:colors.accent') to track the brand instead of a literal. See the list response's `brandTokens` for the full ref vocabulary. Omitted when nothing is brand-bound." }, "placement": { "type": "object" }, "warnings": { "type": "array", "description": "Non-blocking save-time advisories \u2014 the create/update SUCCEEDED. Currently: a `fontFamily` string literal referencing a NON-vendored font (a bare CSS generic like 'serif', or an unknown named family like 'Arial') whose LIVE-lane pixels vary by render host \u2014 re-author with a vendored family or 'Georgia'. Omitted when there is nothing to flag; only present on the create/update responses." } }, "additionalProperties": true } },
9347
+ { operationId: "getComponentSource", toolName: "cueframe_api_getComponentSource", title: "Get Component Source", method: "GET", pathTemplate: "/v1/components/{id}/source", pathParams: ["id"], queryParams: [], bodyKey: null, description: "Get a component's source \u2014 Required permission: projects:read \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": true, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "tsxSource": { "type": "string" }, "name": { "type": "string" }, "description": { "type": "string" }, "propSchema": { "type": "object" }, "origin": { "type": "string", "enum": ["customer-owned", "server-native"] }, "ejectedFrom": { "type": "string" }, "tokens": { "type": "object" }, "examples": { "type": "array", "description": "Usage examples, as authored. A built-in primitive projects {name, mood?, params?, description?}; an authored component's examples are whatever it wrote, which is why the item is open. One shape for both directions: what you write here is what you read back." }, "durationInFrames": { "type": "number" }, "manifest": { "type": "object" }, "id": { "type": "string" }, "source": { "type": "string", "enum": ["default", "installed"] } }, "additionalProperties": true } },
9307
9348
  { operationId: "getComposeJob", toolName: "cueframe_api_getComposeJob", title: "Get Compose Job", method: "GET", pathTemplate: "/v1/projects/{id}/compose/jobs/{composeJobId}", pathParams: ["id", "composeJobId"], queryParams: [], bodyKey: null, description: "Fetch a compose job's full ensemble state \u2014 Required permission: projects:read \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": true, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "composeJobId": { "type": "string" }, "projectId": { "type": "string" }, "status": { "type": "string", "enum": ["queued", "running", "awaiting_input", "complete", "failed", "cancelled"] }, "error": { "type": ["string", "null"] }, "request": { "type": "object" }, "candidates": { "type": "array" }, "winner": {}, "listUsd": { "type": "number" }, "startedAt": { "type": "number" }, "completedAt": { "type": ["number", "null"] }, "advisoryResult": { "type": "object", "description": "The advisory envelope returned by a completed consult job (on ComposeJobDetailResponse.advisoryResult)." }, "checkpoint": { "type": "object" } }, "additionalProperties": true } },
9308
9349
  { operationId: "getComposeSessionComposition", toolName: "cueframe_api_getComposeSessionComposition", title: "Get Compose Session Composition", method: "GET", pathTemplate: "/v1/projects/{id}/compose-session/{sessionId}/composition", pathParams: ["id", "sessionId"], queryParams: [], bodyKey: null, description: "Read the session's scratch composition \u2014 Pure read: returns the composition currently held in the session's SCRATCH (what the author LLM has been editing over this session), NOT the project's active composition. The Director ensemble reads this back per candidate and returns it as the authored composition \u2014 the winner is saved downstream, so a candidate never commits its scratch to active. 404 when the session is unknown/foreign or has never written a scratch. \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": true, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "composition": {} }, "additionalProperties": true } },
9309
9350
  { operationId: "getComposition", toolName: "cueframe_api_getComposition", title: "Get Composition", method: "GET", pathTemplate: "/v1/projects/{id}/composition", pathParams: ["id"], queryParams: [{ "name": "compositionId", "required": false, "description": "Read a SPECIFIC composition instead of the project's active one. Omit it and the active composition is returned. Pairs with `composition_id` on the apply op: an edit you can make to a second composition is one you can read back.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "string" } }], bodyKey: null, description: "Get a project's composition \u2014 Required permission: projects:read \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": true, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "v": { "type": "number" }, "format": { "type": "object" }, "tracks": { "type": "array" }, "markers": { "type": "array" }, "captions": { "type": "object" }, "license": { "type": "object" }, "accessibility": { "type": "object" } }, "additionalProperties": true } },
@@ -9346,6 +9387,7 @@ var GENERATED_OPERATIONS = [
9346
9387
  { operationId: "listWebhooks", toolName: "cueframe_api_listWebhooks", title: "List Webhooks", method: "GET", pathTemplate: "/v1/webhooks", pathParams: [], queryParams: [{ "name": "limit", "required": false, "description": "Page size (1..100), default 20. Out-of-range or unparseable clamps into the range.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "integer", "minimum": 1, "maximum": 100 } }, { "name": "after", "required": false, "description": "Opaque cursor from the previous page's `pagination.nextCursor`. Forward-only.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "string" } }], bodyKey: null, description: "List webhook endpoints \u2014 Required permission: webhooks:read \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": true, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "data": { "type": "array" }, "pagination": { "type": "object", "description": "Cursor pagination metadata." } }, "additionalProperties": true } },
9347
9388
  { operationId: "newComposition", toolName: "cueframe_api_newComposition", title: "New Composition", method: "POST", pathTemplate: "/v1/projects/{id}/compositions", pathParams: ["id"], queryParams: [], bodyKey: "newCompositionBody", description: "Create a new composition (video) in a project \u2014 Required permission: projects:write \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": false } },
9348
9389
  { operationId: "openComposeSession", toolName: "cueframe_api_openComposeSession", title: "Open Compose Session", method: "POST", pathTemplate: "/v1/projects/{id}/compose-session", pathParams: ["id"], queryParams: [], bodyKey: "openComposeSessionBody", description: "Open an isolated scratch composition \u2014 Mint isolated scratch state for project authoring. This returns immediately and starts no sandbox or render provider; use /preview-frame-jobs and /score-composition for durable preview and verification work. The scratch closes automatically after its idle TTL or explicitly via DELETE. Optionally seed it from a supplied composition (seedComposition); a bodyless open derives from the project's active composition. \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "sessionId": { "type": "string" } }, "additionalProperties": true } },
9390
+ { operationId: "patchComponent", toolName: "cueframe_api_patchComponent", title: "Patch Component", method: "PATCH", pathTemplate: "/v1/components/{id}", pathParams: ["id"], queryParams: [], bodyKey: "patchComponentBody", description: "Patch an authored component \u2014 RFC 7396 merge patch: send only the fields you are changing. Every field you omit keeps the value it already had. Identical in effect to PUT, which merges the same way. \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": false, "destructiveHint": true, "idempotentHint": false, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "name": { "type": "string" }, "description": { "type": "string" }, "category": { "type": "string", "enum": ["text", "effects", "transitions", "layouts", "backgrounds", "ui-blocks", "scenes"] }, "propSchema": { "type": "object" }, "origin": { "type": "string", "enum": ["customer-owned", "server-native"] }, "ejectedFrom": { "type": "string" }, "tokens": { "type": "object" }, "examples": { "type": "array", "description": "Usage examples, as authored. A built-in primitive projects {name, mood?, params?, description?}; an authored component's examples are whatever it wrote, which is why the item is open. One shape for both directions: what you write here is what you read back." }, "durationInFrames": { "type": "number" }, "manifest": { "type": "object" }, "id": { "type": "string", "description": "The entry's id: a `primitiveId` for a built-in, a `componentId` for an installed component." }, "source": { "type": "string", "description": "'default' = built-in primitive (place by primitiveId); 'installed' = org-authored component (place by componentId).", "enum": ["default", "installed"] }, "kind": { "type": "string", "description": "RENDER kind (component | transition | scene). NOT the ClipSource variant \u2014 see `placement` for how to author it on the timeline.", "enum": ["component", "transition", "scene"] }, "version": { "type": "string", "description": "The ENTRY's version: a semver string ('0.0.0' until an authored component is versioned). Distinct from `manifest.version`, which is the runtime contract version and is always the literal 2." }, "propDefaults": { "type": "object" }, "textParam": { "type": ["string", "null"], "description": "The param field that carries this primitive's primary text; null = no single text slot." }, "subtextParam": { "type": ["string", "null"], "description": "The param field for secondary text (subtitle/byline); null = none." }, "format": { "type": "object" }, "intent": { "type": "string", "description": "Selection signal: a verb naming what this primitive accomplishes (e.g. 'product-trailer'). Match it to the beat you are authoring." }, "useWhen": { "type": "string", "description": "When to use this \u2014 AND when not to. The negative guidance is load-bearing; read it before picking." }, "pairsWith": { "type": "array", "description": "Authoring guidance: ids of primitives that COMPOSE well with this one in the same edit." }, "avoidWith": { "type": "array", "description": "Authoring guidance: ids of primitives that CONFLICT with this one \u2014 do not place together." }, "tags": { "type": "array", "description": "Free-text search keywords." }, "mood": { "type": "array", "description": "Vibe/tone tags (e.g. 'cinematic', 'minimal'). Filter to match the edit's mood." }, "tier": { "type": "string", "description": "Quality/applicability RANKING (a preference, not a flag). Prefer 'recommended'; reach for 'niche' only when its specific use-case is exactly the beat.", "enum": ["recommended", "standard", "niche"] }, "useCase": { "type": "array", "description": "The edit ROLE(s) this primitive fills \u2014 the dimension to filter by for a beat (e.g. 'intro', 'title-over-footage', 'grade')." }, "fixedCopy": { "type": "array", "description": "On-screen strings this primitive BAKES \u2014 the read-side counterpart to propSchema. These literals render REGARDLESS of params (no param can change them); fork the source via get_component_source to edit them. Use this to see at author time what fixed copy (someone-else's marketing text, faux-code, faux-data) will appear before you render." }, "brandBindings": { "type": "array", "description": "Params that can follow the project brand kit. Each {param, brandToken} says: set `param` to `brandToken` (a `$brand:` ref, e.g. '$brand:colors.accent') to track the brand instead of a literal. See the list response's `brandTokens` for the full ref vocabulary. Omitted when nothing is brand-bound." }, "placement": { "type": "object" }, "warnings": { "type": "array", "description": "Non-blocking save-time advisories \u2014 the create/update SUCCEEDED. Currently: a `fontFamily` string literal referencing a NON-vendored font (a bare CSS generic like 'serif', or an unknown named family like 'Arial') whose LIVE-lane pixels vary by render host \u2014 re-author with a vendored family or 'Georgia'. Omitted when there is nothing to flag; only present on the create/update responses." } }, "additionalProperties": true } },
9349
9391
  { operationId: "patchProject", toolName: "cueframe_api_patchProject", title: "Patch Project", method: "PATCH", pathTemplate: "/v1/projects/{id}", pathParams: ["id"], queryParams: [], bodyKey: "patchProjectBody", description: "Update a project \u2014 Required permission: projects:write \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": false, "destructiveHint": true, "idempotentHint": false, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "description": { "type": ["string", "null"] }, "format": {}, "brandKitId": { "type": ["string", "null"] }, "activeCompositionId": { "type": ["string", "null"] }, "composition": { "type": "object", "description": "Summary of a project's stored composition." }, "lastRender": { "description": "Most recent render for a project, if any." }, "webUrl": { "type": ["string", "null"], "description": "A browser URL that opens THIS project, or null when CueFrame exposes no web view for a project. Null today: the console serves account surfaces (keys, usage, billing) and has no per-project page, so there is no link to give. Do NOT synthesise one \u2014 a guessed console path 404s. Show the user rendered output (create_render \u2192 outputUrl) or a preview still instead. This field becoming non-null is the signal that a real project view exists." }, "createdAt": { "type": "string" } }, "additionalProperties": true } },
9350
9392
  { operationId: "patchWebhook", toolName: "cueframe_api_patchWebhook", title: "Patch Webhook", method: "PATCH", pathTemplate: "/v1/webhooks/{id}", pathParams: ["id"], queryParams: [], bodyKey: "patchWebhookBody", description: "Update a webhook endpoint \u2014 Required permission: webhooks:write \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": false, "destructiveHint": true, "idempotentHint": false, "openWorldHint": true }, outputSchema: { "type": "object", "properties": { "id": { "type": "string" }, "url": { "type": "string" }, "events": { "type": "array" }, "settleMs": { "type": "integer" }, "enabled": { "type": "boolean" }, "verificationStatus": { "type": "string", "description": "pending = callback URL has not echoed the ownership challenge (receives no events); verified = ownership proven.", "enum": ["pending", "verified"] }, "createdAt": { "type": "string" }, "lastDeliveredAt": { "type": ["string", "null"] }, "lastFailedAt": { "type": ["string", "null"] }, "consecutiveFailures": { "type": "integer" } }, "additionalProperties": true } },
9351
9393
  { operationId: "previewClip", toolName: "cueframe_api_previewClip", title: "Preview Clip", method: "POST", pathTemplate: "/v1/projects/{id}/preview-clip", pathParams: ["id"], queryParams: [], bodyKey: "previewClipBody", description: "Render a scoped motion preview of the composition \u2014 A cheap, watchable MP4 of ONLY [fromSec, toSec) of the composition at preview quality (capped resolution, lighter encode). The way to judge motion \u2014 a cut, a transition, a component's animation \u2014 with real fidelity BEFORE paying for a full render. Async: returns a render job; wait_job(kind='render') or webhook render.completed for the URL. Meters the capture feature, never an exports credit. \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "id": { "type": "string" }, "status": { "type": "string", "enum": ["queued", "pending", "rendering", "complete", "error", "cancelled"] }, "progress": { "type": "object", "description": "Non-terminal render progress; phase is one of the worker's emitted stages." }, "outputUrl": { "type": ["string", "null"] }, "outputExpiresAt": { "type": ["string", "null"] }, "error": { "type": ["string", "null"], "description": "Human-readable failure message. Pair with `errorCode` for a stable, machine-readable code an agent runner can branch on." }, "errorCode": { "type": ["string", "null"], "description": "Stable, machine-readable error code (e.g. `render_pipeline_unavailable`, `render_route_missing`, `render_pipeline_failed`). Null when status is not `error` or unavailable for an older render." }, "errorDetails": { "description": "Structured failure context \u2014 `{ targetUrl?, upstreamStatus?, upstreamCode?, attemptedAt? }`. Surfaced so agent runners can distinguish operator-config issues from upstream-down vs route-missing without parsing `error`." }, "category": { "description": "Failure taxonomy when status is `error`; null otherwise. `authoring` = deterministic defect in YOUR composition/request \u2014 fix it, retrying is futile; `transient` = temporary pipeline/infra failure \u2014 safe to retry_render; `internal` = unexpected server fault \u2014 retry once then escalate. Mirrors the render.failed webhook's `category`." }, "retryable": { "type": ["boolean", "null"], "description": "Whether re-attempting the SAME render can succeed (status `error`); null otherwise. true \u2192 call retry_render. false \u2192 deterministic (category authoring/internal); fix the composition first \u2014 retry_render alone reproduces it. Mirrors the render.failed webhook's `retryable`." }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string", "description": "ISO-8601 timestamp of the render's most recent progress update. Compute staleness = now \u2212 updatedAt to distinguish a wedged render from a slow one and decide whether to wait, cancel, or retry." }, "listUsd": { "type": "number", "description": "A2 money stamp: the metered event's LIST price (USD), stamped at the success terminal (exports for deliverable renders, compose_capture for A8 previews). A plan allowance may zero the actual invoice line \u2014 this is the list price, never a Stripe charge. Absent while running, on failure, and for x402 orgs (on-chain receipts). Mirrors the get_usage ledger." }, "warnings": { "type": "array", "description": "Non-fatal advisories surfaced at render-CREATE (omitted when none, and on GET \u2014 create-time only)." } }, "additionalProperties": true } },
@@ -9372,8 +9414,8 @@ var GENERATED_OPERATIONS = [
9372
9414
  { operationId: "triggerMuxJob", toolName: "cueframe_api_triggerMuxJob", title: "Trigger Mux Job", method: "POST", pathTemplate: "/v1/sessions/{id}/mux-job", pathParams: ["id"], queryParams: [], bodyKey: null, description: "Trigger mux-audio-onto-video workflow \u2014 Required permission: sessions:write \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "jobId": { "type": "string" }, "status": { "type": "string" }, "muxedItems": {}, "error": { "type": ["string", "null"] }, "startedAt": { "type": ["string", "null"] }, "completedAt": { "type": ["string", "null"] } }, "additionalProperties": true } },
9373
9415
  { operationId: "triggerSubjectDetection", toolName: "cueframe_api_triggerSubjectDetection", title: "Trigger Subject Detection", method: "POST", pathTemplate: "/v1/media/{id}/detect-subjects", pathParams: ["id"], queryParams: [{ "name": "detector", "required": false, "description": "Which detector to run. Defaults to `face`; an unknown value is refused, never defaulted.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "string", "enum": ["face", "person"] } }], bodyKey: null, description: "Trigger standalone subject/face detection \u2014 Required permission: media:write \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "factId": { "type": "string", "description": "Opaque identifier for the derived fact." }, "status": { "type": "string", "description": "State of the fact right now. `ready` with `alreadyExisted` means the detection was already computed and is available immediately.", "enum": ["pending", "ready", "failed"] }, "quotedUsd": { "type": "number", "description": "The server's price for this detection, in USD, quoted from the source duration. Zero is charged when `alreadyExisted` is true." }, "alreadyExisted": { "type": "boolean", "description": "True when this exact detection was already pending or ready. Nothing was dispatched and nothing will be charged \u2014 the same fact is served twice for one price." } }, "additionalProperties": true } },
9374
9416
  { operationId: "updateBrief", toolName: "cueframe_api_updateBrief", title: "Update Brief", method: "PATCH", pathTemplate: "/v1/briefs/{id}", pathParams: ["id"], queryParams: [], bodyKey: "updateBriefBody", description: "Edit a brief \u2014 Partial update. While an ACTIVE compose job references this brief the edit is refused (409 conflict) \u2014 finish, resume, or abandon the job first; the Director never has its input edited out from under it. \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": false, "destructiveHint": true, "idempotentHint": false, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "id": { "type": "string" }, "projectId": { "type": "string" }, "kind": { "type": "string", "description": "authored = create_brief; clip = minted by suggest_briefs from an AI clip suggestion.", "enum": ["authored", "clip"] }, "sourceSuggestionId": { "type": "string", "description": "kind:'clip' provenance \u2014 the suggestion this Brief was minted from." }, "name": { "type": "string" }, "goal": { "type": "string", "description": "What the video must accomplish." }, "audience": { "type": "string" }, "platform": { "type": "string" }, "format": { "type": "object", "description": "Output-format spec per \xA7Format." }, "durationSec": { "type": "number", "description": "Target output duration. HONOR-OR-REFUSE: compose validates it against the beat-source window (\xB11.5s) and refuses a brief it cannot honor." }, "tone": { "type": "string" }, "cta": { "type": "string" }, "locale": { "type": "string", "description": "Output language (BCP-47 tag, e.g. 'es-419'): ALL on-screen copy + captions." }, "hook": { "type": "string" }, "caption": { "type": "string" }, "beats": { "type": "array" }, "mustIncludes": { "type": "array" }, "references": { "type": "array" }, "captions": { "type": "object" }, "motionStyle": { "type": "object" }, "seededGraphics": { "type": "array", "description": "Client-authored graphic clips the Director must carry VERBATIM: seeded into the design loop's base composition as LOCKED clips (never re-authored, never discarded)." }, "exclusions": { "type": "array" }, "gates": { "type": "object" }, "audio": { "type": "object" }, "quote": { "type": "object" }, "createdAt": { "type": "number" }, "updatedAt": { "type": "number" } }, "additionalProperties": true } },
9375
- { operationId: "updateComponent", toolName: "cueframe_api_updateComponent", title: "Update Component", method: "PUT", pathTemplate: "/v1/components/{id}", pathParams: ["id"], queryParams: [], bodyKey: "updateComponentBody", description: "Update an authored component \u2014 Required permission: projects:write \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "description": { "type": "string" }, "source": { "type": "string", "description": "'default' = built-in primitive (place by primitiveId); 'installed' = org-authored component (place by componentId).", "enum": ["default", "installed"] }, "category": { "type": "string", "enum": ["text", "effects", "transitions", "layouts", "backgrounds", "ui-blocks", "scenes"] }, "kind": { "type": "string", "description": "RENDER kind (component | transition | scene). NOT the ClipSource variant \u2014 see `placement` for how to author it on the timeline.", "enum": ["component", "transition", "scene"] }, "version": { "type": "string" }, "propSchema": { "type": "object" }, "propDefaults": { "type": "object" }, "textParam": { "type": ["string", "null"], "description": "The param field that carries this primitive's primary text; null = no single text slot." }, "subtextParam": { "type": ["string", "null"], "description": "The param field for secondary text (subtitle/byline); null = none." }, "format": { "type": "object" }, "durationInFrames": { "type": "number" }, "intent": { "type": "string", "description": "Selection signal: a verb naming what this primitive accomplishes (e.g. 'product-trailer'). Match it to the beat you are authoring." }, "useWhen": { "type": "string", "description": "When to use this \u2014 AND when not to. The negative guidance is load-bearing; read it before picking." }, "pairsWith": { "type": "array", "description": "Authoring guidance: ids of primitives that COMPOSE well with this one in the same edit." }, "avoidWith": { "type": "array", "description": "Authoring guidance: ids of primitives that CONFLICT with this one \u2014 do not place together." }, "tags": { "type": "array", "description": "Free-text search keywords." }, "mood": { "type": "array", "description": "Vibe/tone tags (e.g. 'cinematic', 'minimal'). Filter to match the edit's mood." }, "tier": { "type": "string", "description": "Quality/applicability RANKING (a preference, not a flag). Prefer 'recommended'; reach for 'niche' only when its specific use-case is exactly the beat.", "enum": ["recommended", "standard", "niche"] }, "useCase": { "type": "array", "description": "The edit ROLE(s) this primitive fills \u2014 the dimension to filter by for a beat (e.g. 'intro', 'title-over-footage', 'grade')." }, "examples": { "type": "array" }, "fixedCopy": { "type": "array", "description": "On-screen strings this primitive BAKES \u2014 the read-side counterpart to propSchema. These literals render REGARDLESS of params (no param can change them); fork the source via get_component_source to edit them. Use this to see at author time what fixed copy (someone-else's marketing text, faux-code, faux-data) will appear before you render." }, "brandBindings": { "type": "array", "description": "Params that can follow the project brand kit. Each {param, brandToken} says: set `param` to `brandToken` (a `$brand:` ref, e.g. '$brand:colors.accent') to track the brand instead of a literal. See the list response's `brandTokens` for the full ref vocabulary. Omitted when nothing is brand-bound." }, "placement": { "type": "object" }, "warnings": { "type": "array", "description": "Non-blocking save-time advisories \u2014 the create/update SUCCEEDED. Currently: a `fontFamily` string literal referencing a NON-vendored font (a bare CSS generic like 'serif', or an unknown named family like 'Arial') whose LIVE-lane pixels vary by render host \u2014 re-author with a vendored family or 'Georgia'. Omitted when there is nothing to flag; only present on the create/update responses." } }, "additionalProperties": true } },
9376
- { operationId: "validateComposition", toolName: "cueframe_api_validateComposition", title: "Validate Composition", method: "POST", pathTemplate: "/v1/composition/validate", pathParams: [], queryParams: [], bodyKey: "validateCompositionBody", description: "Validate a composition body without saving it (dry-run) \u2014 Dry-run the FULL save-time authoring guard set against a Composition body WITHOUT persisting it and without a project. Runs the same pure, DB-free guards saveComposition enforces \u2014 wire shape, primitive membership (unknown_primitive / custom_missing_sourcecode), required-param shape (invalid_primitive_params), clip\u2194track family (clip_source_track_mismatch), reframe coverage (reframe_coverage_gap), and font admission (font_not_reproducible: a caption/param face that is neither bundled nor sealed in a brand font asset) \u2014 and returns ONE shape, `200 { valid, errors[] }`, for BOTH wire-shape and deep-invariant failures (no 400-vs-200 split). `valid:false` lists every authoring error (sanitized envelopes) to fix before save/render. The ONLY checks NOT run here are the two DB-bound ones \u2014 trim-bounds (media duration) and image/asset-on-video-track (media kind) \u2014 which can only be caught at save/render. \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "valid": { "type": "boolean" }, "errors": { "type": "array" }, "advisories": { "type": "array", "description": "Deterministic, render-free QUALITY floors (the SAME named defects the Director's in-loop verify and score_composition surface: static-hold, caption-spine, sfx-density, sfx-speech-collision, bed-coverage, audio-role). NON-blocking \u2014 they never flip `valid` (an editorially-weak composition still renders); fix them for quality, not to save. Empty when the composition is clean or the wire shape failed (they need a parsed composition)." }, "warnings": { "type": "array", "description": "Non-blocking render-fidelity warnings detected before enqueue, including unavailable font families." }, "quote": { "type": "object", "description": "The A2 money triple for the commodity lane: validate is free; estimatedJourneyTotalUsd is the render price to finish from a valid composition \u2014 relay it BEFORE create_render." } }, "additionalProperties": true } },
9417
+ { operationId: "updateComponent", toolName: "cueframe_api_updateComponent", title: "Update Component", method: "PUT", pathTemplate: "/v1/components/{id}", pathParams: ["id"], queryParams: [], bodyKey: "updateComponentBody", description: "Update an authored component \u2014 Required permission: projects:write \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": false, "destructiveHint": true, "idempotentHint": true, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "name": { "type": "string" }, "description": { "type": "string" }, "category": { "type": "string", "enum": ["text", "effects", "transitions", "layouts", "backgrounds", "ui-blocks", "scenes"] }, "propSchema": { "type": "object" }, "origin": { "type": "string", "enum": ["customer-owned", "server-native"] }, "ejectedFrom": { "type": "string" }, "tokens": { "type": "object" }, "examples": { "type": "array", "description": "Usage examples, as authored. A built-in primitive projects {name, mood?, params?, description?}; an authored component's examples are whatever it wrote, which is why the item is open. One shape for both directions: what you write here is what you read back." }, "durationInFrames": { "type": "number" }, "manifest": { "type": "object" }, "id": { "type": "string", "description": "The entry's id: a `primitiveId` for a built-in, a `componentId` for an installed component." }, "source": { "type": "string", "description": "'default' = built-in primitive (place by primitiveId); 'installed' = org-authored component (place by componentId).", "enum": ["default", "installed"] }, "kind": { "type": "string", "description": "RENDER kind (component | transition | scene). NOT the ClipSource variant \u2014 see `placement` for how to author it on the timeline.", "enum": ["component", "transition", "scene"] }, "version": { "type": "string", "description": "The ENTRY's version: a semver string ('0.0.0' until an authored component is versioned). Distinct from `manifest.version`, which is the runtime contract version and is always the literal 2." }, "propDefaults": { "type": "object" }, "textParam": { "type": ["string", "null"], "description": "The param field that carries this primitive's primary text; null = no single text slot." }, "subtextParam": { "type": ["string", "null"], "description": "The param field for secondary text (subtitle/byline); null = none." }, "format": { "type": "object" }, "intent": { "type": "string", "description": "Selection signal: a verb naming what this primitive accomplishes (e.g. 'product-trailer'). Match it to the beat you are authoring." }, "useWhen": { "type": "string", "description": "When to use this \u2014 AND when not to. The negative guidance is load-bearing; read it before picking." }, "pairsWith": { "type": "array", "description": "Authoring guidance: ids of primitives that COMPOSE well with this one in the same edit." }, "avoidWith": { "type": "array", "description": "Authoring guidance: ids of primitives that CONFLICT with this one \u2014 do not place together." }, "tags": { "type": "array", "description": "Free-text search keywords." }, "mood": { "type": "array", "description": "Vibe/tone tags (e.g. 'cinematic', 'minimal'). Filter to match the edit's mood." }, "tier": { "type": "string", "description": "Quality/applicability RANKING (a preference, not a flag). Prefer 'recommended'; reach for 'niche' only when its specific use-case is exactly the beat.", "enum": ["recommended", "standard", "niche"] }, "useCase": { "type": "array", "description": "The edit ROLE(s) this primitive fills \u2014 the dimension to filter by for a beat (e.g. 'intro', 'title-over-footage', 'grade')." }, "fixedCopy": { "type": "array", "description": "On-screen strings this primitive BAKES \u2014 the read-side counterpart to propSchema. These literals render REGARDLESS of params (no param can change them); fork the source via get_component_source to edit them. Use this to see at author time what fixed copy (someone-else's marketing text, faux-code, faux-data) will appear before you render." }, "brandBindings": { "type": "array", "description": "Params that can follow the project brand kit. Each {param, brandToken} says: set `param` to `brandToken` (a `$brand:` ref, e.g. '$brand:colors.accent') to track the brand instead of a literal. See the list response's `brandTokens` for the full ref vocabulary. Omitted when nothing is brand-bound." }, "placement": { "type": "object" }, "warnings": { "type": "array", "description": "Non-blocking save-time advisories \u2014 the create/update SUCCEEDED. Currently: a `fontFamily` string literal referencing a NON-vendored font (a bare CSS generic like 'serif', or an unknown named family like 'Arial') whose LIVE-lane pixels vary by render host \u2014 re-author with a vendored family or 'Georgia'. Omitted when there is nothing to flag; only present on the create/update responses." } }, "additionalProperties": true } },
9418
+ { operationId: "validateComposition", toolName: "cueframe_api_validateComposition", title: "Validate Composition", method: "POST", pathTemplate: "/v1/composition/validate", pathParams: [], queryParams: [], bodyKey: "validateCompositionBody", description: "Validate a composition body without saving it (dry-run) \u2014 Dry-run the FULL save-time authoring guard set against a Composition body WITHOUT persisting it and without a project. Runs the same pure, DB-free guards saveComposition enforces \u2014 wire shape, primitive membership (unknown_primitive / custom_missing_sourcecode), required-param shape (invalid_primitive_params), clip\u2194track family (clip_source_track_mismatch), reframe coverage (reframe_coverage_gap), and font admission (font_not_reproducible: a caption/param face that is neither bundled nor sealed in a brand font asset) \u2014 and returns ONE shape, `200 { valid, errors[] }`, for BOTH wire-shape and deep-invariant failures (no 400-vs-200 split). `valid:false` lists every authoring error (sanitized envelopes) to fix before save/render. The ONLY checks NOT run here are the two DB-bound ones \u2014 trim-bounds (media duration) and image/asset-on-video-track (media kind) \u2014 which can only be caught at save/render. \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "contract": { "type": "string", "description": "The contract this verdict was computed against (the kernel version the deployment runs). If it differs between two calls, the validator changed, not your composition." }, "valid": { "type": "boolean" }, "errors": { "type": "array" }, "advisories": { "type": "array", "description": "Deterministic, render-free QUALITY floors (the SAME named defects the Director's in-loop verify and score_composition surface: static-hold, caption-spine, sfx-density, sfx-speech-collision, bed-coverage, audio-role). NON-blocking \u2014 they never flip `valid` (an editorially-weak composition still renders); fix them for quality, not to save. Empty when the composition is clean or the wire shape failed (they need a parsed composition)." }, "warnings": { "type": "array", "description": "Non-blocking render-fidelity warnings detected before enqueue, including unavailable font families." }, "quote": { "type": "object", "description": "The A2 money triple for the commodity lane: validate is free; estimatedJourneyTotalUsd is the render price to finish from a valid composition \u2014 relay it BEFORE create_render." } }, "additionalProperties": true } },
9377
9419
  { operationId: "verifyWebhook", toolName: "cueframe_api_verifyWebhook", title: "Verify Webhook", method: "POST", pathTemplate: "/v1/webhooks/{id}/verify", pathParams: ["id"], queryParams: [], bodyKey: null, description: 'Re-run webhook ownership verification \u2014 Re-send the signed `webhook.verify` ownership challenge to a PENDING webhook\'s url and, if the endpoint now echoes `data.token` in a 2xx, flip it active \u2014 IN PLACE (id + secret preserved; no delete/recreate). Use it to recover after fixing a receiver that failed the challenge at create time. An already-verified webhook returns `status:"active"` unchanged (idempotent). Returns the same `{ status, verification? }` shape as create. \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.', annotations: { "readOnlyHint": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": true }, outputSchema: { "type": "object", "properties": { "id": { "type": "string" }, "status": { "type": "string", "description": "active = ownership verified + receiving events; pending = challenge not echoed.", "enum": ["active", "pending"] }, "verification": { "type": "object", "description": "Present only when the re-challenge did not verify; `reason` names why (see WebhookCreateResponse.verification)." } }, "additionalProperties": true } },
9378
9420
  { operationId: "whoami", toolName: "cueframe_api_whoami", title: "Whoami", method: "GET", pathTemplate: "/v1/whoami", pathParams: [], queryParams: [], bodyKey: null, description: "Return the caller identity + permissions \u2014 Echoes the `orgId`, `permissions`, and key metadata derived from the Authorization header (or x402 payment). Useful for SDKs to confirm which org a key is bound to and what permissions it carries. \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": true, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "orgId": { "type": "string" }, "permissions": { "type": "object" }, "keyId": { "type": "string" }, "keyName": { "type": "string" } }, "additionalProperties": true } }
9379
9421
  ];
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ComponentRuntimeError
3
- } from "./chunk-ZVG446DJ.js";
3
+ } from "./chunk-UGYYZBG4.js";
4
4
 
5
5
  // ../execution/component-runtime/src/sourceAdmission.ts
6
6
  import { parse } from "@babel/parser";