@cueframe/kernel 0.2.24 → 0.2.25

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.
@@ -661,8 +661,15 @@ var AccountResponse = zod2.strictObject({
661
661
  "costCeilings": zod2.strictObject({
662
662
  "generateMediaUsdPerCall": zod2.number().nullable().describe("Per-call USD ceiling for generate_media: a generation whose ESTIMATE exceeds this 402s (generation_budget_exceeded) before any spend. Right-size the prompt/duration under this. null = unknown.")
663
663
  }).describe("Discoverable per-call cost ceilings so an agent can price/right-size a request before a guaranteed 402."),
664
- "billingConfigured": zod2.boolean().describe("false = billing is not configured in this environment, so plan/entitlement values are best-effort and may be null (unknown), not authoritative.")
665
- }).describe("Account discovery for the authenticated key: identity + plan + entitlements + cost ceilings. Read this to see what your plan/credits allow before a metered call (create_render / compose / generate_media / create_brand_kit).");
664
+ "billingConfigured": zod2.boolean().describe("false = billing is not configured in this environment, so plan/entitlement values are best-effort and may be null (unknown), not authoritative."),
665
+ "surfaces": zod2.strictObject({
666
+ "console": zod2.string().describe("Origin of the authenticated web console."),
667
+ "usage": zod2.string().describe("Browser URL for the usage ledger."),
668
+ "billing": zod2.string().describe("Browser URL for plan and credits."),
669
+ "apiKeys": zod2.string().describe("Browser URL for minting and revoking API keys."),
670
+ "project": zod2.null().describe("No per-project browser view exists yet, so there is no URL to hand a user for a project or its composition. Stated as an explicit null so a client does not construct a route that 404s (CUE-19). Show a rendered frame (preview_frame) or a completed render instead.")
671
+ }).describe('The browser URLs that actually exist, so an agent asked to "show me" can hand the user a real link instead of guessing one from an id. A null means the surface is not built, not that it is hidden from this key.')
672
+ }).describe("Account discovery for the authenticated key: identity + plan + entitlements + cost ceilings + the browser surfaces that exist. Read this to see what your plan/credits allow before a metered call (create_render / compose / generate_media / create_brand_kit).");
666
673
 
667
674
  // ../sdk/src/generated/zod/models/apiKeyCreateRequest.zod.ts
668
675
  import * as zod3 from "zod";
@@ -6037,7 +6044,7 @@ var CompositionOp = zod66.union([zod66.strictObject({
6037
6044
  "scene": SceneShotSpecV2,
6038
6045
  "assets": zod66.record(zod66.string(), zod66.string()),
6039
6046
  "transitionIn": TransitionSpec.optional()
6040
- }).describe('Author a scene shot and place it on a dedicated overlay track. The host validates the scene, generates and registers an immutable wrapper component source, and emits the ordinary track/clip operations carrying `props.componentRef` \u2014 you edit a scene SPEC, never wrapper TSX or a source hash. Registration and the composition update are ONE undoable edit; a failure publishes nothing and leaves no clip pointing at an unresolved source. Pass EXACTLY ONE of `trackId` (an existing dedicated scene track) or `newTrack: true` (mint one). That track holds scene-shot clips and gaps only \u2014 no generic component/primitive/media clips in v1 \u2014 and existing generic overlay tracks are unaffected. Scene clips use front zPlane and full-frame placement: outer per-clip `region`, `position`, `scale`, `rotation`, `fit`, `effects`, `animate`, `params.transition`, `params.sequenceGroup` and internal fadeIn/fadeOut are REFUSED with a path, because the shot\'s own layer transforms are the single transform owner. TEXT: `space: "screen"` text is composed above the world result, stays fixed in the frame and stays sharp through focus; `space: "world"` text is rasterized into the 3D scene, moves with the camera and is occluded by geometry. Screenshots and world text are UNLIT and colour-managed so product UI colours are not tinted by the studio lighting, while device bodies are lit and cast shadows; an unlit surface still occludes. SCOPE GAP (pre-existing, neither closed nor changed by scene shots): global wrap effects \u2014 composition-level grades and camera effects \u2014 do not reach front-overlay clips, so they do not affect a scene shot. Author the look INSIDE the shot (`post.grain`, `post.vignette`, `post.focus`, `backdrop`, `environment`) instead. DISCOVERY: there is no built-in scene primitive to look up in list_catalog; the wrapper this operation registers appears afterwards as an ordinary INSTALLED component under the existing catalog rules.'), zod66.strictObject({
6047
+ }).describe('Author a scene shot and place it on a dedicated overlay track. The host validates the scene, generates and registers an immutable wrapper component source, and emits the ordinary track/clip operations carrying `props.componentRef` \u2014 you edit a scene SPEC, never wrapper TSX or a source hash. Registration and the composition update are ONE undoable edit; a failure publishes nothing and leaves no clip pointing at an unresolved source. Pass EXACTLY ONE of `trackId` (an existing dedicated scene track) or `newTrack: true` (mint one). That track holds scene-shot clips and gaps only \u2014 no generic component/primitive/media clips in v1 \u2014 and existing generic overlay tracks are unaffected. Scene clips use front zPlane and full-frame placement: outer per-clip `region`, `position`, `scale`, `rotation`, `fit`, `effects`, `animate`, `params.transition`, `params.sequenceGroup` and internal fadeIn/fadeOut are REFUSED with a path, because the shot\'s own layer transforms are the single transform owner. TEXT: `space: "screen"` text is composed above the world result, stays fixed in the frame and stays sharp through focus; `space: "world"` text is rasterized into the 3D scene, moves with the camera and is occluded by geometry. Screenshots and world text are UNLIT and colour-managed so product UI colours are not tinted by the studio lighting, while device bodies are lit and cast shadows; an unlit surface still occludes. SCOPE GAP (pre-existing, neither closed nor changed by scene shots): global wrap effects \u2014 composition-level grades and camera effects \u2014 do not reach front-overlay clips, so they do not affect a scene shot. Author the look INSIDE the shot (`post.grain`, `post.vignette`, `post.focus`, `backdrop`, `environment`) instead. DISCOVERY: there is no built-in scene primitive to look up in list_catalog; the wrapper this operation registers appears afterwards as an ordinary INSTALLED component under the existing catalog rules. ASSETS: `assets` binds each slot name a layer references to a media id in the same project, and the slot\'s declared KIND decides what it admits \u2014 an image slot takes PNG, JPEG or WebP, a video slot MP4 or WebM. Binding the wrong kind is refused with the slot\'s path.'), zod66.strictObject({
6041
6048
  "type": zod66.literal("scene.update"),
6042
6049
  "clipId": zod66.string(),
6043
6050
  "startTime": zod66.number().min(compositionOpTwoStartTimeMin).optional(),
@@ -6045,7 +6052,7 @@ var CompositionOp = zod66.union([zod66.strictObject({
6045
6052
  "scene": SceneShotSpecV2.optional(),
6046
6053
  "assets": zod66.record(zod66.string(), zod66.string()).optional(),
6047
6054
  "transitionIn": TransitionSpec.optional()
6048
- }).describe("Revise a scene shot in place by clip id. Send a replacement `scene` and/or `assets`; timing changes use the ordinary clip timing fields (`startTime`, `duration`, `transitionIn`). Omitted fields keep their persisted values and the MERGED result is re-validated as a whole, so a partial edit cannot leave the shot invalid. Changing only values or asset IDs updates props and bindings and REUSES the pinned source; changing the referenced SLOT SET regenerates the wrapper manifest and registers a new immutable source version atomically. Undo restores the source reference, spec, bindings and timing together. Topology, asset bindings, text content, font properties, device kind and colours are STATIC within a shot's animation \u2014 change them here (a revised spec) rather than trying to animate them. This is not a source trim or slip: a shortened or extended clip resamples the SAME normalized animation over its new duration, and trim/slip requests on generated animation are rejected rather than reinterpreted as media trims. In one batch, `scene.update` may target a shot added by an earlier `scene.add`."), zod66.strictObject({
6055
+ }).describe("Revise a scene shot in place by clip id. Send a replacement `scene` and/or `assets`; timing changes use the ordinary clip timing fields (`startTime`, `duration`, `transitionIn`). Omitted fields keep their persisted values and the MERGED result is re-validated as a whole, so a partial edit cannot leave the shot invalid. Changing only values or asset IDs updates props and bindings and REUSES the pinned source; changing the referenced SLOT SET regenerates the wrapper manifest and registers a new immutable source version atomically. Undo restores the source reference, spec, bindings and timing together. Topology, asset bindings, text content, font properties, device kind and colours are STATIC within a shot's animation \u2014 change them here (a revised spec) rather than trying to animate them. This is not a source trim or slip: a shortened or extended clip resamples the SAME normalized animation over its new duration, and trim/slip requests on generated animation are rejected rather than reinterpreted as media trims. In one batch, `scene.update` may target a shot added by an earlier `scene.add`. ASSETS: `assets` binds each slot name a layer references to a media id in the same project, and the slot's declared KIND decides what it admits \u2014 an image slot takes PNG, JPEG or WebP, a video slot MP4 or WebM. Binding the wrong kind is refused with the slot's path."), zod66.strictObject({
6049
6056
  "type": zod66.literal("clip.add"),
6050
6057
  "clip": zod66.strictObject({
6051
6058
  "id": zod66.string().min(1),
@@ -9210,27 +9217,27 @@ var GENERATED_OPERATIONS = [
9210
9217
  { operationId: "analyzeTranscript", toolName: "cueframe_api_analyzeTranscript", title: "Analyze Transcript", method: "POST", pathTemplate: "/v1/media/{id}/transcript/analyze", pathParams: ["id"], queryParams: [], bodyKey: "analyzeTranscriptBody", description: "Analyse a media item's transcript \u2014 Ask ONE editorial question of a transcript and get the answer as text: `summary` (what is actually said, plus the takeaways), `chapters` (where the subject changes), or `highlights` (the moments that stand alone as a short). PRECISION: timestamps are ABSOLUTE seconds from the start of the media and every one is verified against the transcript before you see it (a fabricated timestamp fails the call rather than shipping) \u2014 but they are LINE-START markers roughly 15s apart, so a boundary can sit up to 15s BEFORE the moment you asked for. Treat every span as APPROXIMATE: use it to LOCATE the moment, then refine the in/out against the word timings from GET /v1/media/{id}/context before you cut. Feeding a raw span straight into a clip trim will start it mid-sentence. Pass `window` to analyse one slice; omit it for the whole thing. This is a METERED LLM call, not a read: it bills on measured token spend, and a recording too long to analyse in one pass is rejected with 422 `transcript_too_long` (over ~100k characters, roughly two hours of speech) rather than silently summarising only its first half \u2014 narrow it with `window`. 422 `media_no_transcript` means the item has no speech on file (or none inside your window); GET /v1/media/{id}/context shows transcript state, and GET /v1/media/{id}/transcript returns the raw words. \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": { "task": { "type": "string", "description": "Echo of the requested task \u2014 so a batched caller can pair answers to asks.", "enum": ["summary", "chapters", "highlights"] }, "result": { "type": "string", "description": "The answer, as text. `summary` is prose; `chapters` and `highlights` are one record per LINE in the shape documented on the request's `task` field \u2014 split on newlines to parse them. Timestamps are absolute seconds from the start of the media and every one is CHECKED against the transcript before the response is returned (a fabricated timestamp fails the call rather than shipping), but they are line-start markers about 15s apart \u2014 a boundary can sit up to 15s BEFORE the moment you want. Use them to locate, not to cut: refine against the word timings in GET /v1/media/{id}/context." } }, "additionalProperties": true } },
9211
9218
  { operationId: "applyComposition", toolName: "cueframe_api_applyComposition", title: "Apply Composition", method: "POST", pathTemplate: "/v1/projects/{id}/composition/apply", pathParams: ["id"], queryParams: [], bodyKey: "applyCompositionBody", description: "Apply a batch of operations to a project's composition (or dry-run validate) \u2014 Atomically applies an array of CompositionOps. All ops succeed or none do (transactional). Pass `if_match` for optimistic-concurrency control (409 stale_etag on mismatch). Pass `dry_run: true` to validate the batch \u2014 runs the same apply + projection accept/reject guards WITHOUT persisting, returning `{ valid, errors }` with `locator.op_index` on the first failing op. Both modes may carry `warnings[]` \u2014 non-fatal authoring advisories (e.g. a card whose html reads a CSS custom property no token defines). Warnings never block. \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 } },
9212
9219
  { operationId: "applyCompositionOp", toolName: "cueframe_api_applyCompositionOp", title: "Apply Composition Op", method: "POST", pathTemplate: "/v1/projects/{id}/composition/ops", pathParams: ["id"], queryParams: [], bodyKey: "applyCompositionOpBody", description: "Apply one operation to a project's composition \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 } },
9213
- { operationId: "cancelCompose", toolName: "cueframe_api_cancelCompose", title: "Cancel Compose", method: "POST", pathTemplate: "/v1/projects/{id}/compose/jobs/{composeJobId}/cancel", pathParams: ["id", "composeJobId"], queryParams: [], bodyKey: null, description: "Cancel an in-flight compose job \u2014 Cancel a running compose so an agent (or a cost guard) can abort a mis-priced or runaway ensemble without waiting out its budget or TTL. Cancellation is confirmed before the job becomes terminal; the compose.cancelled event is then emitted and any linked charge is released. Already-terminal jobs are rejected (422 compose_not_cancellable). \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": { "composeJobId": { "type": "string" }, "projectId": { "type": "string" }, "status": { "type": "string", "enum": ["queued", "running", "awaiting_input", "complete", "failed", "cancelled"] }, "error": { "type": "string" }, "request": { "type": "object" }, "candidates": { "type": "array" }, "winner": {}, "listUsd": { "type": "number" }, "startedAt": { "type": "number" }, "completedAt": { "type": "number" }, "advisoryResult": { "type": "object", "description": "The advisory envelope returned by a completed consult job (on ComposeJobDetailResponse.advisoryResult)." }, "checkpoint": { "type": "object" } }, "additionalProperties": true } },
9214
- { operationId: "cancelExport", toolName: "cueframe_api_cancelExport", title: "Cancel Export", method: "POST", pathTemplate: "/v1/projects/{id}/exports/{exportId}/cancel", pathParams: ["id", "exportId"], queryParams: [], bodyKey: null, description: "Cancel an in-flight export \u2014 Required permission: renders: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" }, "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" }, "outputExpiresAt": { "type": "string" }, "outputSizeBytes": { "type": "number" }, "outputDurationSec": { "type": "number" }, "error": { "description": "Set when status is `error`; null otherwise. The phase field localizes the failure to trim / build / upload / trigger." }, "trimCacheHit": { "type": "boolean" }, "clipSuggestionId": { "type": "string" }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" } }, "additionalProperties": true } },
9215
- { operationId: "cancelJob", toolName: "cueframe_api_cancelJob", title: "Cancel Job", method: "POST", pathTemplate: "/v1/jobs/{jobId}/cancel", pathParams: ["jobId"], queryParams: [], bodyKey: null, description: "Cancel an async job \u2014 Cancel a running async job so an agent can abort a mis-priced/runaway operation without waiting out its TTL. Cancellation is durable and never meters. Already-terminal jobs are rejected (422 job_not_cancellable). \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", "description": "Job id \u2014 pass to GET /v1/jobs/{id} / wait_job." }, "jobKey": { "type": "string", "description": "Deterministic identity of the work (idempotency key, e.g. `verify-<sessionId>-<contentHash>` \u2014 the hash covers the composition AND grading inputs). Re-enqueueing the same key returns the same job while it runs." }, "kind": { "type": "string", "description": "Job family, e.g. `verify`." }, "status": { "type": "string", "description": "Poll until terminal (`succeeded` | `failed` | `cancelled`).", "enum": ["running", "succeeded", "failed", "cancelled"] }, "progress": { "description": "Executor heartbeat while running; null when none reported." }, "result": { "description": "Kind-specific payload when status is `succeeded`; null otherwise." }, "error": { "description": "Stable failure code + human message when status is `failed`; null otherwise. `job_timeout` = the executor died mid-run and the stall sweep reaped the job \u2014 re-enqueue to retry." }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" }, "completedAt": { "type": "string" } }, "additionalProperties": true } },
9216
- { operationId: "cancelRender", toolName: "cueframe_api_cancelRender", title: "Cancel Render", method: "POST", pathTemplate: "/v1/projects/{id}/renders/{renderId}/cancel", pathParams: ["id", "renderId"], queryParams: [], bodyKey: null, description: "Cancel a render \u2014 Required permission: renders: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" }, "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" }, "outputExpiresAt": { "type": "string" }, "error": { "type": "string", "description": "Human-readable failure message. Pair with `errorCode` for a stable, machine-readable code an agent runner can branch on." }, "errorCode": { "type": "string", "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", "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 } },
9220
+ { operationId: "cancelCompose", toolName: "cueframe_api_cancelCompose", title: "Cancel Compose", method: "POST", pathTemplate: "/v1/projects/{id}/compose/jobs/{composeJobId}/cancel", pathParams: ["id", "composeJobId"], queryParams: [], bodyKey: null, description: "Cancel an in-flight compose job \u2014 Cancel a running compose so an agent (or a cost guard) can abort a mis-priced or runaway ensemble without waiting out its budget or TTL. Cancellation is confirmed before the job becomes terminal; the compose.cancelled event is then emitted and any linked charge is released. Already-terminal jobs are rejected (422 compose_not_cancellable). \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": { "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 } },
9221
+ { operationId: "cancelExport", toolName: "cueframe_api_cancelExport", title: "Cancel Export", method: "POST", pathTemplate: "/v1/projects/{id}/exports/{exportId}/cancel", pathParams: ["id", "exportId"], queryParams: [], bodyKey: null, description: "Cancel an in-flight export \u2014 Required permission: renders: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" }, "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 } },
9222
+ { operationId: "cancelJob", toolName: "cueframe_api_cancelJob", title: "Cancel Job", method: "POST", pathTemplate: "/v1/jobs/{jobId}/cancel", pathParams: ["jobId"], queryParams: [], bodyKey: null, description: "Cancel an async job \u2014 Cancel a running async job so an agent can abort a mis-priced/runaway operation without waiting out its TTL. Cancellation is durable and never meters. Already-terminal jobs are rejected (422 job_not_cancellable). \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", "description": "Job id \u2014 pass to GET /v1/jobs/{id} / wait_job." }, "jobKey": { "type": "string", "description": "Deterministic identity of the work (idempotency key, e.g. `verify-<sessionId>-<contentHash>` \u2014 the hash covers the composition AND grading inputs). Re-enqueueing the same key returns the same job while it runs." }, "kind": { "type": "string", "description": "Job family, e.g. `verify`." }, "status": { "type": "string", "description": "Poll until terminal (`succeeded` | `failed` | `cancelled`).", "enum": ["running", "succeeded", "failed", "cancelled"] }, "progress": { "description": "Executor heartbeat while running; null when none reported." }, "result": { "description": "Kind-specific payload when status is `succeeded`; null otherwise." }, "error": { "description": "Stable failure code + human message when status is `failed`; null otherwise. `job_timeout` = the executor died mid-run and the stall sweep reaped the job \u2014 re-enqueue to retry." }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" }, "completedAt": { "type": ["string", "null"] } }, "additionalProperties": true } },
9223
+ { operationId: "cancelRender", toolName: "cueframe_api_cancelRender", title: "Cancel Render", method: "POST", pathTemplate: "/v1/projects/{id}/renders/{renderId}/cancel", pathParams: ["id", "renderId"], queryParams: [], bodyKey: null, description: "Cancel a render \u2014 Required permission: renders: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" }, "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 } },
9217
9224
  { operationId: "closeComposeSession", toolName: "cueframe_api_closeComposeSession", title: "Close Compose Session", method: "DELETE", pathTemplate: "/v1/projects/{id}/compose-session/{sessionId}", pathParams: ["id", "sessionId"], queryParams: [], bodyKey: null, description: "Close a compose session \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": { "ok": { "type": "boolean" } }, "additionalProperties": true } },
9218
9225
  { operationId: "commitComposeSession", toolName: "cueframe_api_commitComposeSession", title: "Commit Compose Session", method: "POST", pathTemplate: "/v1/projects/{id}/compose-session/{sessionId}/commit", pathParams: ["id", "sessionId"], queryParams: [], bodyKey: null, description: "Commit the session scratch onto the project's active composition \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": { "etag": { "type": "string" } }, "additionalProperties": true } },
9219
9226
  { operationId: "compose", toolName: "cueframe_api_compose", title: "Compose", method: "POST", pathTemplate: "/v1/projects/{id}/compose", pathParams: ["id"], queryParams: [], bodyKey: "composeBody", description: "Start an async Director compose workflow \u2014 Async sibling of `composeFromSuggestion`. The Director execution authors a canonical wire-shape Composition and saves it as the project's active composition. Watch progress via the SSE stream at `/v1/projects/:id/compose/:composeJobId/stream`. \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": { "composeJobId": { "type": "string", "description": "Opaque compose job id; pass to the SSE stream URL." }, "projectId": { "type": "string" }, "status": { "type": "string", "description": "queued = normal; failed = startup failed and the job is already terminal (the SSE stream will emit a single `job_failed` frame and close).", "enum": ["queued", "failed"] }, "streamUrl": { "type": "string", "description": "Relative SSE endpoint to stream this job's events (per compose-api-contract.md)." } }, "additionalProperties": true } },
9220
9227
  { operationId: "composeFromSuggestion", toolName: "cueframe_api_composeFromSuggestion", title: "Compose From Suggestion", method: "POST", pathTemplate: "/v1/projects/{id}/composition/from-suggestion", pathParams: ["id"], queryParams: [], bodyKey: "composeFromSuggestionBody", description: "Build and persist a composition from a clip suggestion \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 } },
9221
9228
  { operationId: "consult", toolName: "cueframe_api_consult", title: "Consult", method: "POST", pathTemplate: "/v1/projects/{id}/consult", pathParams: ["id"], queryParams: [], bodyKey: "consultBody", description: "Ask the multi-agent Director for editing advice (never writes) \u2014 Ask the Director for editing advice on the project's current composition \u2014 it NEVER saves; you stay the decider. Async: poll the returned job for the advisory envelope. Modes: 'advise' = the planner agent (fast, ~30s-2min) returns a PLAN (framing/cuts/captions/graphics intents) as guidance you re-author from \u2014 no grounded scores; 'amend' = the full author\u2192judge\u2192refine loop (minutes) returns a GRADED assessment + an adoptable fix candidate (adopt via POST /compose/jobs/:jobId/select with its candidateIndex). ('explore' \u2014 a ranked slate of directions \u2014 is coming soon.) \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": { "consultJobId": { "type": "string", "description": "Opaque consult job id; poll it for the advisory result." }, "projectId": { "type": "string" }, "status": { "type": "string", "description": "queued = normal; failed = startup failed and the job is already terminal.", "enum": ["queued", "failed"] }, "streamUrl": { "type": "string", "description": "Relative SSE endpoint to stream this job's events." } }, "additionalProperties": true } },
9222
9229
  { operationId: "createApiKey", toolName: "cueframe_api_createApiKey", title: "Create Api Key", method: "POST", pathTemplate: "/v1/api-keys", pathParams: [], queryParams: [], bodyKey: "createApiKeyBody", description: "Create a scoped API key (session credential only) \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": { "key": { "type": "string", "description": "The full secret key (cf_test_\u2026 / cf_live_\u2026). Shown ONCE \u2014 store it now." }, "id": { "type": "string" }, "prefix": { "type": "string" }, "start": { "type": "string", "description": "First chars of the key, for later identification." } }, "additionalProperties": true } },
9223
- { 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" }, "tagline": { "type": "string" }, "colors": { "type": "object" }, "extraColors": { "type": "array" }, "fonts": { "type": "object" }, "voiceGuidelines": { "type": "string" }, "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 } },
9230
+ { 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 } },
9224
9231
  { 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 } },
9225
9232
  { 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 } },
9226
- { 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", "description": "The param field that carries this primitive's primary text; null = no single text slot." }, "subtextParam": { "type": "string", "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 } },
9233
+ { 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 } },
9227
9234
  { 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 } },
9228
9235
  { 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 } },
9229
- { 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" }, "outputExpiresAt": { "type": "string" }, "outputSizeBytes": { "type": "number" }, "outputDurationSec": { "type": "number" }, "error": { "description": "Set when status is `error`; null otherwise. The phase field localizes the failure to trim / build / upload / trigger." }, "trimCacheHit": { "type": "boolean" }, "clipSuggestionId": { "type": "string" }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" } }, "additionalProperties": true } },
9236
+ { 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 } },
9230
9237
  { operationId: "createMediaUpload", toolName: "cueframe_api_createMediaUpload", title: "Create Media Upload", method: "POST", pathTemplate: "/v1/media", pathParams: [], queryParams: [], bodyKey: "createMediaUploadBody", description: "Initiate a direct upload (presigned PUT URL) \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": { "id": { "type": "string" }, "uploadUrl": { "type": "string" }, "expiresAt": { "type": "string" } }, "additionalProperties": true } },
9231
- { operationId: "createPremiereExport", toolName: "cueframe_api_createPremiereExport", title: "Create Premiere Export", method: "POST", pathTemplate: "/v1/projects/{id}/exports/premiere", pathParams: ["id"], queryParams: [], bodyKey: "createPremiereExportBody", description: "Create a Premiere Pro export \u2014 Export the project to Adobe Premiere Pro \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" }, "outputExpiresAt": { "type": "string" }, "outputSizeBytes": { "type": "number" }, "outputDurationSec": { "type": "number" }, "error": { "description": "Set when status is `error`; null otherwise. The phase field localizes the failure to trim / build / upload / trigger." }, "trimCacheHit": { "type": "boolean" }, "clipSuggestionId": { "type": "string" }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" } }, "additionalProperties": true } },
9232
- { operationId: "createProject", toolName: "cueframe_api_createProject", title: "Create Project", method: "POST", pathTemplate: "/v1/projects", pathParams: [], queryParams: [], bodyKey: "createProjectBody", description: "Create a project \u2014 Create a video project \u2014 the container for a composition (the editable timeline), its media, brand kit, and renders. Every other authoring call (import or generate media, apply composition ops, compose, render, export) takes this project's id. Set the output format here (aspectRatio, fps, resolution). \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" }, "format": {}, "brandKitId": { "type": "string" }, "activeCompositionId": { "type": "string" }, "composition": { "type": "object", "description": "Summary of a project's stored composition." }, "lastRender": { "description": "Most recent render for a project, if any." }, "webUrl": { "type": "string", "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 } },
9233
- { operationId: "createRender", toolName: "cueframe_api_createRender", title: "Create Render", method: "POST", pathTemplate: "/v1/projects/{id}/renders", pathParams: ["id"], queryParams: [], bodyKey: "createRenderBody", description: "Create a render job \u2014 Render the project's composition to a finished MP4. Async: returns a render id; poll GET /projects/:id/renders/:renderId or stream progress over SSE, then download the signed output URL once status is complete. \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" }, "outputExpiresAt": { "type": "string" }, "error": { "type": "string", "description": "Human-readable failure message. Pair with `errorCode` for a stable, machine-readable code an agent runner can branch on." }, "errorCode": { "type": "string", "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", "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 } },
9238
+ { operationId: "createPremiereExport", toolName: "cueframe_api_createPremiereExport", title: "Create Premiere Export", method: "POST", pathTemplate: "/v1/projects/{id}/exports/premiere", pathParams: ["id"], queryParams: [], bodyKey: "createPremiereExportBody", description: "Create a Premiere Pro export \u2014 Export the project to Adobe Premiere Pro \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 } },
9239
+ { operationId: "createProject", toolName: "cueframe_api_createProject", title: "Create Project", method: "POST", pathTemplate: "/v1/projects", pathParams: [], queryParams: [], bodyKey: "createProjectBody", description: "Create a project \u2014 Create a video project \u2014 the container for a composition (the editable timeline), its media, brand kit, and renders. Every other authoring call (import or generate media, apply composition ops, compose, render, export) takes this project's id. Set the output format here (aspectRatio, fps, resolution). \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"] }, "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 } },
9240
+ { operationId: "createRender", toolName: "cueframe_api_createRender", title: "Create Render", method: "POST", pathTemplate: "/v1/projects/{id}/renders", pathParams: ["id"], queryParams: [], bodyKey: "createRenderBody", description: "Create a render job \u2014 Render the project's composition to a finished MP4. Async: returns a render id; poll GET /projects/:id/renders/:renderId or stream progress over SSE, then download the signed output URL once status is complete. \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 } },
9234
9241
  { operationId: "createSession", toolName: "cueframe_api_createSession", title: "Create Session", method: "POST", pathTemplate: "/v1/sessions", pathParams: [], queryParams: [], bodyKey: "createSessionBody", description: "Create a session \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": { "id": { "type": "string" }, "name": { "type": "string" }, "files": { "type": "array" }, "mux": { "type": "object" }, "createdAt": { "type": "string" } }, "additionalProperties": true } },
9235
9242
  { operationId: "createUploadToken", toolName: "cueframe_api_createUploadToken", title: "Create Upload Token", method: "POST", pathTemplate: "/v1/uploads/token", pathParams: [], queryParams: [], bodyKey: "createUploadTokenBody", description: "Mint a short-lived token for the signed upload lane \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": { "token": { "type": "string" }, "expiresAt": { "type": "integer", "description": "Expiry, ms since epoch (~30 min TTL)." } }, "additionalProperties": true } },
9236
9243
  { operationId: "createWebhook", toolName: "cueframe_api_createWebhook", title: "Create Webhook", method: "POST", pathTemplate: "/v1/webhooks", pathParams: [], queryParams: [], bodyKey: "createWebhookBody", description: 'Register a webhook endpoint \u2014 Register a webhook so long-running jobs (render/compose/media) notify you instead of blocking on wait_job. Body: `url` (https, must pass SSRF checks) + `events` (see the WebhookEvent enum). DELIVERY: each event is a POST with body `{ event, timestamp, projectId?, data }` and Standard-Webhooks headers `webhook-id`, `webhook-timestamp`, `webhook-signature: v1,<base64>` (+ `x-cueframe-event`). The `secret` (`whsec_<base64>`) is returned ONCE here \u2014 verify the raw body with `new Webhook(secret).verify(rawBody, headers)`. ACTIVATION (synchronous, no separate step): on create, CueFrame POSTs a signed `webhook.verify` challenge; your endpoint must reply 2xx echoing `data.token` (raw body === token, or JSON `{token}`/`{challenge}`). On success the response is `status:"active"`; otherwise `status:"pending"` with `verification.reason` and the webhook receives NO events until it verifies (recover with POST /webhooks/:id/verify \u2014 no delete/recreate). Full contract + per-event `data` shapes: GET /webhooks/events. \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" }, "url": { "type": "string" }, "events": { "type": "array" }, "settleMs": { "type": "integer" }, "enabled": { "type": "boolean" }, "status": { "type": "string", "description": "active = ownership verified + receiving events; pending = challenge not echoed, inactive.", "enum": ["active", "pending"] }, "secret": { "type": "string", "description": "Standard Webhooks signing secret, format `whsec_<base64>`. Returned ONCE at create; rotate = delete + recreate. Every delivery carries `webhook-id`, `webhook-timestamp` (unix seconds), and `webhook-signature: v1,<base64>` (HMAC-SHA256 over `{id}.{timestamp}.{rawBody}`). Verify with any Standard-Webhooks library (`standardwebhooks` / `svix`): `new Webhook(secret).verify(rawBody, headers)`." }, "verification": { "type": "object", "description": 'Present ONLY when ownership verification did not complete (status:"pending"). CueFrame POSTs a signed `webhook.verify` challenge whose `data.token` your endpoint must echo in a 2xx to activate; `reason` is one of token_not_echoed | non_2xx_<code> | unreachable | ssrf_blocked. A pending webhook receives no events \u2014 fix the receiver and POST /webhooks/:id/verify (no delete/recreate needed). See GET /webhooks/events for the full contract.' } }, "additionalProperties": true } },
@@ -9246,33 +9253,33 @@ var GENERATED_OPERATIONS = [
9246
9253
  { operationId: "extractBrandKit", toolName: "cueframe_api_extractBrandKit", title: "Extract Brand Kit", method: "POST", pathTemplate: "/v1/brand-kits/extract", pathParams: [], queryParams: [], bodyKey: "extractBrandKitBody", description: "Extract brand tokens from a website URL \u2014 Queue brand-token extraction from a website URL \u2014 ASYNC: returns a 202 job receipt; poll GET /v1/jobs/{jobId} (or MCP wait_job kind=brand_kit_extract) for the tokens (colors, fonts, title, description) on the succeeded result. The service inspects the site under a 20-second limit and does NOT persist a kit (pass the result to POST /brand-kits). A blocked (private-network), non-2xx, non-HTML, or slow URL degrades to EMPTY token arrays on a SUCCEEDED terminal rather than erroring; succeeded extractions are reused for 5 minutes per 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": true }, outputSchema: { "type": "object", "properties": { "jobId": { "type": "string", "description": "Poll GET /v1/jobs/{jobId} / wait_job until terminal." }, "jobKey": { "type": "string", "description": "Deterministic identity of the work (content hash of every input the result depends on). Re-enqueueing the same key returns the same job while it runs; a failed key revives as a fresh attempt." }, "kind": { "type": "string", "description": "Job family, e.g. `verify` | `preview` | `brand_kit_extract`." }, "status": { "type": "string", "description": "running on a fresh/deduped enqueue; succeeded when an identical request already completed. Cancelled is part of the shared status vocabulary; identical cancelled work revives to running.", "enum": ["running", "succeeded", "cancelled"] } }, "additionalProperties": true } },
9247
9254
  { operationId: "finalizeMedia", toolName: "cueframe_api_finalizeMedia", title: "Finalize Media", method: "POST", pathTemplate: "/v1/media/{id}/finalize", pathParams: ["id"], queryParams: [], bodyKey: "finalizeMediaBody", description: "Finalize a direct upload (trigger processing after the bytes are PUT) \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": { "id": { "type": "string" }, "status": { "type": "string", "enum": ["processing", "complete"] }, "processingPhase": { "type": "string" } }, "additionalProperties": true } },
9248
9255
  { operationId: "generateMedia", toolName: "cueframe_api_generateMedia", title: "Generate Media", method: "POST", pathTemplate: "/v1/media/generate", pathParams: [], queryParams: [], bodyKey: "generateMediaBody", description: "Generate media with AI (video, image, or Manim animation) \u2014 Generate a new media item from a text prompt: text-to-video, text-to-image, image-to-video, or a programmatic Manim animation (generator 'auto' picks the best one for the prompt). Async \u2014 returns a media id that flips to ready when generation finishes; poll GET /media/:id or register a media.completed webhook. Priced on what the model actually costs; refused with 402 if your balance cannot cover the quote (see GET /me). \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" }, "estimateUsd": { "type": "number" } }, "additionalProperties": true } },
9249
- { operationId: "getAccount", toolName: "cueframe_api_getAccount", title: "Get Account", method: "GET", pathTemplate: "/v1/me", pathParams: [], queryParams: [], bodyKey: null, description: "Return the caller's account: identity, plan, entitlements, cost ceilings \u2014 Returns the org this key is bound to (server-resolved from auth, never the body), the current plan, a per-feature `entitlements` map, and `costCeilings` (e.g. the generate_media per-call USD ceiling). Read it BEFORE a metered call (create_render / compose / generate_media / create_brand_kit) to budget without burning a round-trip on a 402. READ `balance`, NOT `included`: most capabilities are credit-funded \u2014 rendering, generation, previews, the judge and the Director carry no separate per-plan allowance and instead spend the shared wallet named in `fundedBy`, so each `balance` is that one wallet restated in the feature's own `unit`. Generation is also bounded by the disclosed generationLimit for accounts that have not purchased credits; `included:false` means the plan genuinely lacks the feature. Plan/entitlement values come from the billing backend best-effort; unknown values are `null` and `billingConfigured:false` flags an environment where billing isn't configured. \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": { "generationLimit": { "description": "Separate lifetime generation cap before a credit-pack purchase. Wallet balance is still shared; generation must also fit this remaining provider-cost allowance. null means unknown." }, "orgId": { "type": "string", "description": "The org this API key is bound to \u2014 resolved server-side from the Authorization credential, NEVER from the request body/query." }, "displayName": { "type": "string", "description": "Org/customer display name from the billing record; null when not set or unknown." }, "plan": { "description": "The customer's current base plan/tier. null = unknown (billing not configured, or no active plan resolvable yet)." }, "entitlements": { "type": "object", "description": "Per-feature entitlements keyed by featureId. Covers the billing-gated capabilities: `exports` gates create_render AND generate_media output; `compose` gates compose; `brand_kits` gates create_brand_kit; `resource_import` gates import_resource (a boolean grant: `listUsdPerUnit` 0 \u2014 stock search and import cost no credits for a keyed caller); plus ai_tokens/storage/compose_verify/compose_capture/etc. Read `listUsdPerUnit` for what one unit costs before you spend it. Most capabilities are CREDIT-FUNDED \u2014 `included` is true and the real limit is `balance`, drawn from the shared wallet named in `fundedBy` (`credits` \u2014 generation included; a free org is additionally bounded by a generation cap). So read `balance`, not `included`, to decide whether you can afford a call; `included:false` means the plan genuinely lacks the feature. Check BEFORE a metered call to avoid a mid-workflow 402 billing_required (whose error `details.featureId` names the gating feature)." }, "costCeilings": { "type": "object", "description": "Discoverable per-call cost ceilings so an agent can price/right-size a request before a guaranteed 402." }, "billingConfigured": { "type": "boolean", "description": "false = billing is not configured in this environment, so plan/entitlement values are best-effort and may be null (unknown), not authoritative." } }, "additionalProperties": true } },
9256
+ { operationId: "getAccount", toolName: "cueframe_api_getAccount", title: "Get Account", method: "GET", pathTemplate: "/v1/me", pathParams: [], queryParams: [], bodyKey: null, description: "Return the caller's account: identity, plan, entitlements, cost ceilings \u2014 Returns the org this key is bound to (server-resolved from auth, never the body), the current plan, a per-feature `entitlements` map, and `costCeilings` (e.g. the generate_media per-call USD ceiling). Read it BEFORE a metered call (create_render / compose / generate_media / create_brand_kit) to budget without burning a round-trip on a 402. READ `balance`, NOT `included`: most capabilities are credit-funded \u2014 rendering, generation, previews, the judge and the Director carry no separate per-plan allowance and instead spend the shared wallet named in `fundedBy`, so each `balance` is that one wallet restated in the feature's own `unit`. Generation is also bounded by the disclosed generationLimit for accounts that have not purchased credits; `included:false` means the plan genuinely lacks the feature. Plan/entitlement values come from the billing backend best-effort; unknown values are `null` and `billingConfigured:false` flags an environment where billing isn't configured. \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": { "generationLimit": { "description": "Separate lifetime generation cap before a credit-pack purchase. Wallet balance is still shared; generation must also fit this remaining provider-cost allowance. null means unknown." }, "orgId": { "type": "string", "description": "The org this API key is bound to \u2014 resolved server-side from the Authorization credential, NEVER from the request body/query." }, "displayName": { "type": ["string", "null"], "description": "Org/customer display name from the billing record; null when not set or unknown." }, "plan": { "description": "The customer's current base plan/tier. null = unknown (billing not configured, or no active plan resolvable yet)." }, "entitlements": { "type": "object", "description": "Per-feature entitlements keyed by featureId. Covers the billing-gated capabilities: `exports` gates create_render AND generate_media output; `compose` gates compose; `brand_kits` gates create_brand_kit; `resource_import` gates import_resource (a boolean grant: `listUsdPerUnit` 0 \u2014 stock search and import cost no credits for a keyed caller); plus ai_tokens/storage/compose_verify/compose_capture/etc. Read `listUsdPerUnit` for what one unit costs before you spend it. Most capabilities are CREDIT-FUNDED \u2014 `included` is true and the real limit is `balance`, drawn from the shared wallet named in `fundedBy` (`credits` \u2014 generation included; a free org is additionally bounded by a generation cap). So read `balance`, not `included`, to decide whether you can afford a call; `included:false` means the plan genuinely lacks the feature. Check BEFORE a metered call to avoid a mid-workflow 402 billing_required (whose error `details.featureId` names the gating feature)." }, "costCeilings": { "type": "object", "description": "Discoverable per-call cost ceilings so an agent can price/right-size a request before a guaranteed 402." }, "billingConfigured": { "type": "boolean", "description": "false = billing is not configured in this environment, so plan/entitlement values are best-effort and may be null (unknown), not authoritative." }, "surfaces": { "type": "object", "description": 'The browser URLs that actually exist, so an agent asked to "show me" can hand the user a real link instead of guessing one from an id. A null means the surface is not built, not that it is hidden from this key.' } }, "additionalProperties": true } },
9250
9257
  { operationId: "getBillingPlans", toolName: "cueframe_api_getBillingPlans", title: "Get Billing Plans", method: "GET", pathTemplate: "/v1/billing/plans", pathParams: [], queryParams: [], bodyKey: null, description: "List the plan catalog: tiers, intervals, product ids, prices \u2014 Returns every purchasable {tier, interval} and its billing catalog product id \u2014 discovery to read BEFORE POST /v1/billing/checkout so an agent requests a real plan/interval instead of guessing. `priceUsd` is best-effort (null if unavailable); `billingConfigured:false` flags an env without billing. \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": { "plans": { "type": "array", "description": "Every purchasable {tier, interval} and its product id." }, "billingConfigured": { "type": "boolean" } }, "additionalProperties": true } },
9251
- { operationId: "getBrandKit", toolName: "cueframe_api_getBrandKit", title: "Get Brand Kit", method: "GET", pathTemplate: "/v1/brand-kits/{id}", pathParams: ["id"], queryParams: [], bodyKey: null, description: "Get a brand kit 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" }, "name": { "type": "string" }, "description": { "type": "string" }, "tagline": { "type": "string" }, "colors": { "type": "object" }, "extraColors": { "type": "array" }, "fonts": { "type": "object" }, "voiceGuidelines": { "type": "string" }, "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 } },
9258
+ { operationId: "getBrandKit", toolName: "cueframe_api_getBrandKit", title: "Get Brand Kit", method: "GET", pathTemplate: "/v1/brand-kits/{id}", pathParams: ["id"], queryParams: [], bodyKey: null, description: "Get a brand kit 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" }, "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 } },
9252
9259
  { 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 } },
9253
9260
  { 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 } },
9254
9261
  { 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 } },
9255
- { 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", "description": "The param field that carries this primitive's primary text; null = no single text slot." }, "subtextParam": { "type": "string", "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 } },
9262
+ { 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 } },
9256
9263
  { 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 } },
9257
- { 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" }, "request": { "type": "object" }, "candidates": { "type": "array" }, "winner": {}, "listUsd": { "type": "number" }, "startedAt": { "type": "number" }, "completedAt": { "type": "number" }, "advisoryResult": { "type": "object", "description": "The advisory envelope returned by a completed consult job (on ComposeJobDetailResponse.advisoryResult)." }, "checkpoint": { "type": "object" } }, "additionalProperties": true } },
9264
+ { 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 } },
9258
9265
  { 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 } },
9259
9266
  { operationId: "getComposition", toolName: "cueframe_api_getComposition", title: "Get Composition", method: "GET", pathTemplate: "/v1/projects/{id}/composition", pathParams: ["id"], queryParams: [], 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 } },
9260
- { operationId: "getExport", toolName: "cueframe_api_getExport", title: "Get Export", method: "GET", pathTemplate: "/v1/projects/{id}/exports/{exportId}", pathParams: ["id", "exportId"], queryParams: [], bodyKey: null, description: "Get an export job \u2014 Required permission: renders: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" }, "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" }, "outputExpiresAt": { "type": "string" }, "outputSizeBytes": { "type": "number" }, "outputDurationSec": { "type": "number" }, "error": { "description": "Set when status is `error`; null otherwise. The phase field localizes the failure to trim / build / upload / trigger." }, "trimCacheHit": { "type": "boolean" }, "clipSuggestionId": { "type": "string" }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" } }, "additionalProperties": true } },
9261
- { operationId: "getJob", toolName: "cueframe_api_getJob", title: "Get Job", method: "GET", pathTemplate: "/v1/jobs/{jobId}", pathParams: ["jobId"], queryParams: [], bodyKey: null, description: "Get an async job's status and result \u2014 Read one async job \u2014 the uniform status/result resource behind every long-running operation. Poll until `status` is terminal (`succeeded` | `failed` | `cancelled`), then read `result` (kind-specific payload) or `error` (stable code + message). `job_timeout` means the executor died mid-run and the stall sweep reaped the job \u2014 re-enqueue the operation to retry. \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", "description": "Job id \u2014 pass to GET /v1/jobs/{id} / wait_job." }, "jobKey": { "type": "string", "description": "Deterministic identity of the work (idempotency key, e.g. `verify-<sessionId>-<contentHash>` \u2014 the hash covers the composition AND grading inputs). Re-enqueueing the same key returns the same job while it runs." }, "kind": { "type": "string", "description": "Job family, e.g. `verify`." }, "status": { "type": "string", "description": "Poll until terminal (`succeeded` | `failed` | `cancelled`).", "enum": ["running", "succeeded", "failed", "cancelled"] }, "progress": { "description": "Executor heartbeat while running; null when none reported." }, "result": { "description": "Kind-specific payload when status is `succeeded`; null otherwise." }, "error": { "description": "Stable failure code + human message when status is `failed`; null otherwise. `job_timeout` = the executor died mid-run and the stall sweep reaped the job \u2014 re-enqueue to retry." }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" }, "completedAt": { "type": "string" } }, "additionalProperties": true } },
9262
- { operationId: "getMedia", toolName: "cueframe_api_getMedia", title: "Get Media", method: "GET", pathTemplate: "/v1/media/{id}", pathParams: ["id"], queryParams: [], bodyKey: null, description: "Get a media item by id \u2014 Required permission: media: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" }, "status": { "type": "string" }, "source": { "type": "string", "enum": ["upload", "generated", "stock"] }, "name": { "type": "string" }, "mimeType": { "type": "string" }, "fileSize": { "type": "number" }, "duration": { "type": "number" }, "width": { "type": "number" }, "height": { "type": "number" }, "frameRate": { "type": "number" }, "progress": {}, "analysis": {}, "listUsd": { "type": "number", "description": "A2 money stamp \u2014 GENERATED media only: the generate meter's LIST price (USD) at the success terminal. A plan allowance may zero the invoice line. Absent for uploads/imports, failures, x402 (on-chain receipts)." }, "thumbnailUrl": { "type": "string", "description": "Presigned GET URL for the item's thumbnail (an uploaded image is its own thumbnail), valid ~7 days \u2014 fetch it directly, no auth header. null when no thumbnail exists yet (still processing, stock imports, audio)." }, "kind": { "type": "string" }, "tags": {}, "attribution": {}, "processingStatus": {}, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" } }, "additionalProperties": true } },
9263
- { operationId: "getMediaContext", toolName: "cueframe_api_getMediaContext", title: "Get Media Context", method: "GET", pathTemplate: "/v1/media/{id}/context", pathParams: ["id"], queryParams: [], bodyKey: null, description: "Get authoring context for a media item (faces + transcript + beat/word grids) \u2014 The read-only context an agent needs to author a composition over this source: the detected face/subject roster (face-0 = primary speaker, with normalized bbox + active-speaker share), the transcript, the temporal grids \u2014 `beatGrid` (a MUSIC bed's rhythm: bpm, beatTimesMs in milliseconds, confidence, method) and `wordGrid` (VO word-onset timings in milliseconds, from the transcript) \u2014 and a presigned `thumbnail` (~the footage at a glance). For stills at CHOSEN timestamps, call preview_frame with a one-clip composition over this media. Call this before authoring crop intents (reframe) and overlay/caption timing. Faces are lazily detected \u2014 `faces.status` is `not_detected` until a compose/detect pass has run over the source, never a faked empty roster. `beatGrid` is null until beat analysis has run: generated music beds are analyzed automatically at delivery; an uploaded/imported bed may not carry a grid yet (on-demand analysis is not client-triggerable today). `audioRole` is the DECLARED role of an audio asset (vo | music | sfx | ambience) \u2014 author the clip source's `audioRole` from it; `envelope` carries the coarse `envelopeClass` (transient | sweep | ambient) plus any probed attack/centroid/volume stats. Both are null for footage/images or an undeclared audio asset. \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": { "mediaId": { "type": "string" }, "durationSec": { "type": "number" }, "width": { "type": "number" }, "height": { "type": "number" }, "thumbnail": { "description": "Presigned processing thumbnail (~1 week) \u2014 the footage at a glance. For stills at chosen timestamps, use preview_frame with a one-clip composition over this media." }, "faces": { "type": "object" }, "transcript": { "type": "object" }, "beatGrid": { "description": "The MUSIC-role rhythm grid (audio-substrate MVP). Present only for a music bed that carries a computed beat grid; null otherwise. For a music-driven film, cut on these beats (transition midpoints on beats, risers resolving on downbeats)." }, "wordGrid": { "description": "The VO-role rhythm grid: word onsets surfaced from the transcript (pure exposure). Present only when a transcript exists; null otherwise. For a VO-driven (narration) film, cut every beat boundary to the voice \u2014 the film-spine rule." }, "audioRole": { "description": "DECLARED audio role of this asset (audio-substrate P0): 'vo' (narration), 'music' (bed that ducks under speech), 'sfx' (one-shot hit), 'ambience' (a bed that HOLDS under VO \u2014 never ducks). Author the clip source's `audioRole` from this. Null for footage/images or an undeclared audio asset." }, "envelope": { "description": "Envelope evidence (audio-substrate P0). `envelopeClass` is always present when an envelope exists (the SFX pack carries it); the numeric probe stats are present only when an audio probe has run. Null when no envelope is stored." }, "facts": { "type": "array", "description": "Derived facts about this source (subject tracks, mattes): what has been computed, its status, and what it was billed. Same shape as GET /media/{id}/facts." }, "offers": { "type": "array", "description": "Enhancements this source does not have yet, with a server quote. Same shape as GET /media/{id}/facts. Mattes are quoted per-window via POST /media/{id}/matte, never here." } }, "additionalProperties": true } },
9264
- { operationId: "getMediaTranscript", toolName: "cueframe_api_getMediaTranscript", title: "Get Media Transcript", method: "GET", pathTemplate: "/v1/media/{id}/transcript", pathParams: ["id"], queryParams: [{ "name": "after", "required": false, "description": "Zero-based utterance cursor returned as pagination.nextCursor.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "integer", "minimum": 0 } }, { "name": "before", "required": false, "description": "Zero-based utterance cursor for a backward page. Do not combine with after.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "integer", "minimum": 0 } }, { "name": "limit", "required": false, "description": "Utterances per page.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 20 } }], bodyKey: null, description: "Get a media transcript (paginated) \u2014 Required permission: media: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": { "mediaItemId": { "type": "string" }, "language": { "type": "string" }, "fullText": { "type": "string" }, "utterances": { "type": "array" }, "data": { "type": "array" }, "pagination": { "type": "object", "description": "Cursor pagination metadata." } }, "additionalProperties": true } },
9265
- { operationId: "getMuxJob", toolName: "cueframe_api_getMuxJob", title: "Get Mux Job", method: "GET", pathTemplate: "/v1/sessions/{id}/mux-job", pathParams: ["id"], queryParams: [], bodyKey: null, description: "Poll mux job status \u2014 Required permission: sessions: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": { "jobId": { "type": "string" }, "status": { "type": "string" }, "muxedItems": {}, "error": { "type": "string" }, "startedAt": { "type": "string" }, "completedAt": { "type": "string" } }, "additionalProperties": true } },
9267
+ { operationId: "getExport", toolName: "cueframe_api_getExport", title: "Get Export", method: "GET", pathTemplate: "/v1/projects/{id}/exports/{exportId}", pathParams: ["id", "exportId"], queryParams: [], bodyKey: null, description: "Get an export job \u2014 Required permission: renders: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" }, "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 } },
9268
+ { operationId: "getJob", toolName: "cueframe_api_getJob", title: "Get Job", method: "GET", pathTemplate: "/v1/jobs/{jobId}", pathParams: ["jobId"], queryParams: [], bodyKey: null, description: "Get an async job's status and result \u2014 Read one async job \u2014 the uniform status/result resource behind every long-running operation. Poll until `status` is terminal (`succeeded` | `failed` | `cancelled`), then read `result` (kind-specific payload) or `error` (stable code + message). `job_timeout` means the executor died mid-run and the stall sweep reaped the job \u2014 re-enqueue the operation to retry. \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", "description": "Job id \u2014 pass to GET /v1/jobs/{id} / wait_job." }, "jobKey": { "type": "string", "description": "Deterministic identity of the work (idempotency key, e.g. `verify-<sessionId>-<contentHash>` \u2014 the hash covers the composition AND grading inputs). Re-enqueueing the same key returns the same job while it runs." }, "kind": { "type": "string", "description": "Job family, e.g. `verify`." }, "status": { "type": "string", "description": "Poll until terminal (`succeeded` | `failed` | `cancelled`).", "enum": ["running", "succeeded", "failed", "cancelled"] }, "progress": { "description": "Executor heartbeat while running; null when none reported." }, "result": { "description": "Kind-specific payload when status is `succeeded`; null otherwise." }, "error": { "description": "Stable failure code + human message when status is `failed`; null otherwise. `job_timeout` = the executor died mid-run and the stall sweep reaped the job \u2014 re-enqueue to retry." }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" }, "completedAt": { "type": ["string", "null"] } }, "additionalProperties": true } },
9269
+ { operationId: "getMedia", toolName: "cueframe_api_getMedia", title: "Get Media", method: "GET", pathTemplate: "/v1/media/{id}", pathParams: ["id"], queryParams: [], bodyKey: null, description: "Get a media item by id \u2014 Required permission: media: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" }, "status": { "type": "string" }, "source": { "type": "string", "enum": ["upload", "generated", "stock"] }, "name": { "type": "string" }, "mimeType": { "type": "string" }, "fileSize": { "type": "number" }, "duration": { "type": ["number", "null"] }, "width": { "type": ["number", "null"] }, "height": { "type": ["number", "null"] }, "frameRate": { "type": ["number", "null"] }, "progress": {}, "analysis": {}, "listUsd": { "type": "number", "description": "A2 money stamp \u2014 GENERATED media only: the generate meter's LIST price (USD) at the success terminal. A plan allowance may zero the invoice line. Absent for uploads/imports, failures, x402 (on-chain receipts)." }, "thumbnailUrl": { "type": ["string", "null"], "description": "Presigned GET URL for the item's thumbnail (an uploaded image is its own thumbnail), valid ~7 days \u2014 fetch it directly, no auth header. null when no thumbnail exists yet (still processing, stock imports, audio)." }, "kind": { "type": ["string", "null"] }, "tags": {}, "attribution": {}, "processingStatus": {}, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" } }, "additionalProperties": true } },
9270
+ { operationId: "getMediaContext", toolName: "cueframe_api_getMediaContext", title: "Get Media Context", method: "GET", pathTemplate: "/v1/media/{id}/context", pathParams: ["id"], queryParams: [], bodyKey: null, description: "Get authoring context for a media item (faces + transcript + beat/word grids) \u2014 The read-only context an agent needs to author a composition over this source: the detected face/subject roster (face-0 = primary speaker, with normalized bbox + active-speaker share), the transcript, the temporal grids \u2014 `beatGrid` (a MUSIC bed's rhythm: bpm, beatTimesMs in milliseconds, confidence, method) and `wordGrid` (VO word-onset timings in milliseconds, from the transcript) \u2014 and a presigned `thumbnail` (~the footage at a glance). For stills at CHOSEN timestamps, call preview_frame with a one-clip composition over this media. Call this before authoring crop intents (reframe) and overlay/caption timing. Faces are lazily detected \u2014 `faces.status` is `not_detected` until a compose/detect pass has run over the source, never a faked empty roster. `beatGrid` is null until beat analysis has run: generated music beds are analyzed automatically at delivery; an uploaded/imported bed may not carry a grid yet (on-demand analysis is not client-triggerable today). `audioRole` is the DECLARED role of an audio asset (vo | music | sfx | ambience) \u2014 author the clip source's `audioRole` from it; `envelope` carries the coarse `envelopeClass` (transient | sweep | ambient) plus any probed attack/centroid/volume stats. Both are null for footage/images or an undeclared audio asset. \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": { "mediaId": { "type": "string" }, "durationSec": { "type": ["number", "null"] }, "width": { "type": ["number", "null"] }, "height": { "type": ["number", "null"] }, "thumbnail": { "description": "Presigned processing thumbnail (~1 week) \u2014 the footage at a glance. For stills at chosen timestamps, use preview_frame with a one-clip composition over this media." }, "faces": { "type": "object" }, "transcript": { "type": "object" }, "beatGrid": { "description": "The MUSIC-role rhythm grid (audio-substrate MVP). Present only for a music bed that carries a computed beat grid; null otherwise. For a music-driven film, cut on these beats (transition midpoints on beats, risers resolving on downbeats)." }, "wordGrid": { "description": "The VO-role rhythm grid: word onsets surfaced from the transcript (pure exposure). Present only when a transcript exists; null otherwise. For a VO-driven (narration) film, cut every beat boundary to the voice \u2014 the film-spine rule." }, "audioRole": { "description": "DECLARED audio role of this asset (audio-substrate P0): 'vo' (narration), 'music' (bed that ducks under speech), 'sfx' (one-shot hit), 'ambience' (a bed that HOLDS under VO \u2014 never ducks). Author the clip source's `audioRole` from this. Null for footage/images or an undeclared audio asset." }, "envelope": { "description": "Envelope evidence (audio-substrate P0). `envelopeClass` is always present when an envelope exists (the SFX pack carries it); the numeric probe stats are present only when an audio probe has run. Null when no envelope is stored." }, "facts": { "type": "array", "description": "Derived facts about this source (subject tracks, mattes): what has been computed, its status, and what it was billed. Same shape as GET /media/{id}/facts." }, "offers": { "type": "array", "description": "Enhancements this source does not have yet, with a server quote. Same shape as GET /media/{id}/facts. Mattes are quoted per-window via POST /media/{id}/matte, never here." } }, "additionalProperties": true } },
9271
+ { operationId: "getMediaTranscript", toolName: "cueframe_api_getMediaTranscript", title: "Get Media Transcript", method: "GET", pathTemplate: "/v1/media/{id}/transcript", pathParams: ["id"], queryParams: [{ "name": "after", "required": false, "description": "Zero-based utterance cursor returned as pagination.nextCursor.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "integer", "minimum": 0 } }, { "name": "before", "required": false, "description": "Zero-based utterance cursor for a backward page. Do not combine with after.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "integer", "minimum": 0 } }, { "name": "limit", "required": false, "description": "Utterances per page.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 20 } }], bodyKey: null, description: "Get a media transcript (paginated) \u2014 Required permission: media: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": { "mediaItemId": { "type": "string" }, "language": { "type": ["string", "null"] }, "fullText": { "type": "string" }, "utterances": { "type": "array" }, "data": { "type": "array" }, "pagination": { "type": "object", "description": "Cursor pagination metadata." } }, "additionalProperties": true } },
9272
+ { operationId: "getMuxJob", toolName: "cueframe_api_getMuxJob", title: "Get Mux Job", method: "GET", pathTemplate: "/v1/sessions/{id}/mux-job", pathParams: ["id"], queryParams: [], bodyKey: null, description: "Poll mux job status \u2014 Required permission: sessions: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": { "jobId": { "type": "string" }, "status": { "type": "string" }, "muxedItems": {}, "error": { "type": ["string", "null"] }, "startedAt": { "type": ["string", "null"] }, "completedAt": { "type": ["string", "null"] } }, "additionalProperties": true } },
9266
9273
  { operationId: "getOpenAPISpec", toolName: "cueframe_api_getOpenAPISpec", title: "Get Open API Spec", method: "GET", pathTemplate: "/openapi.json", pathParams: [], queryParams: [], bodyKey: null, description: "OpenAPI 3.1 document for the v1 API \u2014 Returns the generated OpenAPI 3.1 document. Unauthenticated so SDK tooling (Orval, Postman, redocly) can fetch without a key. Cacheable for 5 minutes. \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 } },
9267
9274
  { operationId: "getProfile", toolName: "cueframe_api_getProfile", title: "Get Profile", method: "GET", pathTemplate: "/v1/profile", pathParams: [], queryParams: [], bodyKey: null, description: "Read the org's Profile \u2014 its legible taste \u2014 One read for everything the platform knows about this org's taste: brand kits, registered critics (the machine-checkable standard both the Director's gates and score_composition enforce), the critics' reference media with presigned thumbnails, and the recent checkpoint-decision log (what was approved/revised/abandoned, where). Read this before composing for an org you haven't worked with \u2014 it is the house style. \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": { "brandKits": { "type": "array", "description": "The org's brand kits (bind one to a project via update_project). `audio` carries the brand sound kit when set." }, "critics": { "type": "array", "description": "Registered critics \u2014 run in the Director's gates AND score_composition." }, "references": { "type": "array", "description": "The union of critic reference media \u2014 the org's visual standard, with provenance." }, "recentDecisions": { "type": "array", "description": "The last recorded checkpoint decisions \u2014 the raw taste log phase 2 will distill." } }, "additionalProperties": true } },
9268
- { operationId: "getProject", toolName: "cueframe_api_getProject", title: "Get Project", method: "GET", pathTemplate: "/v1/projects/{id}", pathParams: ["id"], queryParams: [], bodyKey: null, description: "Get a project 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" }, "name": { "type": "string" }, "description": { "type": "string" }, "format": {}, "brandKitId": { "type": "string" }, "activeCompositionId": { "type": "string" }, "composition": { "type": "object", "description": "Summary of a project's stored composition." }, "lastRender": { "description": "Most recent render for a project, if any." }, "webUrl": { "type": "string", "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 } },
9275
+ { operationId: "getProject", toolName: "cueframe_api_getProject", title: "Get Project", method: "GET", pathTemplate: "/v1/projects/{id}", pathParams: ["id"], queryParams: [], bodyKey: null, description: "Get a project 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" }, "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 } },
9269
9276
  { operationId: "getProjectContext", toolName: "cueframe_api_getProjectContext", title: "Get Project Context", method: "GET", pathTemplate: "/v1/projects/{id}/context", pathParams: ["id"], queryParams: [], bodyKey: null, description: "One-call agent context: composition + media + transcript + brand \u2014 Everything an authoring agent needs to open a project, in ONE read: the active composition (with its format and markers hoisted), the org's media pool with a `hasTranscript` flag per item, the first transcribed item's word-timed transcript, and the brand kit bound to the project. Replaces the get_composition + get_media_context + get_profile opening sequence. A freshly created project reads back with `composition: null` \u2014 that is the empty state, not an error; 404 means the project doesn't exist for your org. Transcript BODIES are never inlined per media item \u2014 read another item's with GET /v1/media/{id}/transcript, and its faces/beat/word grids with GET /v1/media/{id}/context. \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": { "description": "The project's ACTIVE composition wire shape \u2014 identical to GET /v1/projects/{id}/composition. NULL when the project has no composition yet (a freshly created project): mint one with new_composition, or let the first apply_composition create it." }, "format": { "description": "The composition's format, hoisted \u2014 the pixel frame every card/graphic must be authored against. Null whenever `composition` is null." }, "media": { "type": "array", "description": "The org's media library (most recent first, capped) \u2014 the pool this project can draw clips from." }, "transcript": { "description": 'The FIRST transcribed media item\'s word-timed transcript, flattened \u2014 the spine a VO-driven film cuts to. `status:"ready"` carries the words; `status:"unavailable"` means the transcript exists but its body could not be fetched (retry); null means nothing in `media` is transcribed. For any OTHER transcribed item (see each entry\'s `hasTranscript`), read GET /v1/media/{id}/transcript.' }, "brandKit": { "description": "The kit BOUND to this project (`projects.brandKitId` is the brand SSOT \u2014 bind one via update_project). Null when the project has no kit bound; enumerate the org's kits with GET /v1/brand-kits." }, "markers": { "type": "array", "description": "The composition's markers \u2014 hoisted alongside `format`. Empty when the composition carries none AND when there is no composition yet." } }, "additionalProperties": true } },
9270
- { operationId: "getRender", toolName: "cueframe_api_getRender", title: "Get Render", method: "GET", pathTemplate: "/v1/projects/{id}/renders/{renderId}", pathParams: ["id", "renderId"], queryParams: [], bodyKey: null, description: "Get a render job \u2014 Required permission: renders: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" }, "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" }, "outputExpiresAt": { "type": "string" }, "error": { "type": "string", "description": "Human-readable failure message. Pair with `errorCode` for a stable, machine-readable code an agent runner can branch on." }, "errorCode": { "type": "string", "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", "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 } },
9277
+ { operationId: "getRender", toolName: "cueframe_api_getRender", title: "Get Render", method: "GET", pathTemplate: "/v1/projects/{id}/renders/{renderId}", pathParams: ["id", "renderId"], queryParams: [], bodyKey: null, description: "Get a render job \u2014 Required permission: renders: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" }, "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 } },
9271
9278
  { operationId: "getReviewPacket", toolName: "cueframe_api_getReviewPacket", title: "Get Review Packet", method: "GET", pathTemplate: "/v1/review/{id}", pathParams: ["id"], queryParams: [], bodyKey: null, description: "Read a hosted review packet (token-authenticated page data) \u2014 The checkpoint page's data: stage artifact (rendered from the packet's own snapshot), presigned stills, critic verdicts, the money triple, the recorded decision once resolved, and the run's v1\u2192vN version stack. Authenticated by the packet's reviewToken (?token=) \u2014 the URL from the checkpoint.ready webhook / get_checkpoint. Expired or already-answered packets still render (with their decision), never an error page. \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"] }, "createdAt": { "type": "number" }, "updatedAt": { "type": "number" }, "versionStack": { "type": "array", "description": "The run's v1\u2192vN gate history \u2014 per-version status + decision summaries." } }, "additionalProperties": true } },
9272
9279
  { operationId: "getSession", toolName: "cueframe_api_getSession", title: "Get Session", method: "GET", pathTemplate: "/v1/sessions/{id}", pathParams: ["id"], queryParams: [], bodyKey: null, description: "Get a session \u2014 Required permission: sessions: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" }, "files": { "type": "array" }, "mux": { "type": "object" }, "createdAt": { "type": "string" } }, "additionalProperties": true } },
9273
9280
  { operationId: "getSkill", toolName: "cueframe_api_getSkill", title: "Get Skill", method: "GET", pathTemplate: "/v1/skills/{name}", pathParams: ["name"], queryParams: [], bodyKey: null, description: "Get a skill's SKILL.md (markdown) \u2014 Returns the raw SKILL.md for the named skill as `text/markdown`, ready to load into an agent. 404 if the skill name is unknown. Unauthenticated. \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 } },
9274
9281
  { operationId: "getUsage", toolName: "cueframe_api_getUsage", title: "Get Usage", method: "GET", pathTemplate: "/v1/usage", 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" } }, { "name": "projectId", "required": false, "description": "Only events attributed to this project.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "string" } }, { "name": "jobId", "required": false, "description": 'Only events produced by this job \u2014 how to answer "did my failed render post a charge?" for one run.', "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "string" } }, { "name": "from", "required": false, "description": "Period start, epoch milliseconds, INCLUSIVE.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 } }, { "name": "to", "required": false, "description": "Period end, epoch milliseconds, EXCLUSIVE.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 } }], bodyKey: null, description: "List metered usage events (the A2 usage ledger) \u2014 Every metered billing event, newest-first, with attribution: featureId, amount, the project/job that produced it, and the event's LIST price in USD (the invoice may zero it inside a plan allowance). Filter by projectId, jobId, and/or a [from, to) epoch-ms period. Events appear moments after the job's success terminal (the meter is scheduler-dispatched). \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 } },
9275
- { operationId: "getWebhook", toolName: "cueframe_api_getWebhook", title: "Get Webhook", method: "GET", pathTemplate: "/v1/webhooks/{id}", pathParams: ["id"], queryParams: [], bodyKey: null, description: "Get a webhook endpoint \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": { "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" }, "lastFailedAt": { "type": "string" }, "consecutiveFailures": { "type": "integer" } }, "additionalProperties": true } },
9282
+ { operationId: "getWebhook", toolName: "cueframe_api_getWebhook", title: "Get Webhook", method: "GET", pathTemplate: "/v1/webhooks/{id}", pathParams: ["id"], queryParams: [], bodyKey: null, description: "Get a webhook endpoint \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": { "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 } },
9276
9283
  { operationId: "getWebhookEvents", toolName: "cueframe_api_getWebhookEvents", title: "Get Webhook Events", method: "GET", pathTemplate: "/v1/webhooks/events", pathParams: [], queryParams: [], bodyKey: null, description: "Get the webhook delivery contract \u2014 The machine-readable webhook contract: the delivery envelope, Standard-Webhooks signing (secret format, signed content, how to verify), the synchronous echo-the-token ownership handshake, and every subscribable event with its exact `data` fields. Read this before building a receiver \u2014 it answers 'what's the payload shape / how do I verify the signature / how does activation work' without guessing. \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": { "delivery": { "type": "object", "description": "The shared HTTP envelope + headers + retry semantics." }, "signing": { "type": "object", "description": "Standard Webhooks signing: secret format, signed content, how to verify." }, "ownershipVerification": { "type": "object", "description": "The synchronous echo-the-token activation handshake + recovery." }, "events": { "type": "array", "description": "Every subscribable event with its exact delivery `data` fields." }, "sample": { "type": "object", "description": "A fully-worked example delivery (headers + body)." } }, "additionalProperties": true } },
9277
9284
  { operationId: "health", toolName: "cueframe_api_health", title: "Health", method: "GET", pathTemplate: "/v1/health", pathParams: [], queryParams: [{ "name": "deep", "required": false, "description": "Pass `1` to run the deep dependency checks instead of the shallow liveness probe.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "string", "const": "1" } }], bodyKey: null, description: "Shallow + deep health check \u2014 Shallow (default) returns 200 with a minimal liveness payload for load balancers. Append `?deep=1` to exercise component bindings (rate-limiter). Unauthenticated. \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": { "status": { "type": "string", "enum": ["ok", "degraded"] }, "version": { "type": "string" }, "checks": { "type": "object" } }, "additionalProperties": true } },
9278
9285
  { operationId: "importMedia", toolName: "cueframe_api_importMedia", title: "Import Media", method: "POST", pathTemplate: "/v1/media/import", pathParams: [], queryParams: [], bodyKey: "importMediaBody", description: "Import media from a URL (server-side fetch) \u2014 Import media into the project from a public https URL \u2014 the server fetches and mirrors the bytes (SSRF-filtered), then processes it (transcode + transcribe). Async: returns a media id that flips to ready when the mirror and processing finish; poll GET /media/:id or use a media.completed webhook. \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" } }, "additionalProperties": true } },
@@ -9286,7 +9293,7 @@ var GENERATED_OPERATIONS = [
9286
9293
  { operationId: "listCritics", toolName: "cueframe_api_listCritics", title: "List Critics", method: "GET", pathTemplate: "/v1/critics", pathParams: [], queryParams: [], bodyKey: null, description: "List registered critics (Profile family) \u2014 Every enabled critic: id, label, tier, phase, floor, and reference media. Rubric text, rules, and evaluator URLs are write-only \u2014 registration config comes back, payloads don't. \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": { "critics": { "type": "array" } }, "additionalProperties": true } },
9287
9294
  { operationId: "listMedia", toolName: "cueframe_api_listMedia", title: "List Media", method: "GET", pathTemplate: "/v1/media", 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" } }, { "name": "kind", "required": false, "description": "Filter to one media kind.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "string", "enum": ["video", "audio", "image", "gif", "asset", "source", "stock"] } }, { "name": "source", "required": false, "description": "Filter by how the item entered the library.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "string", "enum": ["upload", "generated", "import-url", "stock"] } }, { "name": "tag", "required": false, "description": "Filter to items carrying this EXACT tag (not a prefix or substring match).", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "string" } }], bodyKey: null, description: "List media items \u2014 Paginated library list. Filter with ?kind= (video|audio|image|gif|asset|source|stock), ?source= (upload|generated|import-url|stock), ?tag= (exact tag) so a real library isn't an undifferentiated soup. \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 } },
9288
9295
  { operationId: "listMediaFacts", toolName: "cueframe_api_listMediaFacts", title: "List Media Facts", method: "GET", pathTemplate: "/v1/media/{id}/facts", pathParams: ["id"], queryParams: [{ "name": "kind", "required": false, "description": "Resolve one exact editor prerequisite. Requires startSec and endSec; the response includes the server-selected `exact` result.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "string", "enum": ["subjectTrack", "matte"] } }, { "name": "startSec", "required": false, "description": "Source-in of the clip's trim, in seconds. Must be sent WITH endSec \u2014 one without the other is a 400, never a silent whole-source default.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "number" } }, { "name": "endSec", "required": false, "description": "Source-out of the clip's trim, in seconds. Must be sent WITH startSec.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "number" } }], bodyKey: null, description: "List derived facts for a media item, with quotes for what is missing \u2014 The enhancement menu. `facts` is everything expensive we have already computed about this source \u2014 subject tracks, mattes \u2014 with its status, a small summary a caller can act on without fetching the artifact, and `charge` (what it was billed; absent when it cost nothing, e.g. a matte produced as a side effect of a compose you already paid for, or one delivered below the behind-subject presence floor). `offers` is what is NOT present yet, with a real server quote. A matte is offered ONLY when you pass `startSec`+`endSec` \u2014 the clip's SOURCE window \u2014 because a matte's price is a function of its duration and a whole-source quote for a three-second clip is not a price. Pass the window from the editor and you get a per-clip matte quote plus the status of that window's matte; omit it from the library and you get everything except the matte. \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": { "facts": { "type": "array" }, "offers": { "type": "array", "description": "What is NOT yet present and could be bought. A `matte` offer appears ONLY when the request carried `startSec`+`endSec` (the clip's SOURCE window) \u2014 a matte's price is a function of its duration, so there is no honest whole-source matte quote. `transcript` is never offered: it is produced by the ingest pipeline, not bought here." }, "exact": { "type": "object", "description": "The server-selected fact or offer for one exact source window. Present when kind, startSec, and endSec are supplied; clients consume this instead of recreating the fact hash." } }, "additionalProperties": true } },
9289
- { operationId: "listMediaSuggestions", toolName: "cueframe_api_listMediaSuggestions", title: "List Media Suggestions", method: "GET", pathTemplate: "/v1/media/{id}/suggestions", pathParams: ["id"], 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" } }, { "name": "platform", "required": false, "description": "Only suggestions cut for this delivery platform.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "string" } }, { "name": "format", "required": false, "description": "Only suggestions in this output format.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "string" } }, { "name": "topic", "required": false, "description": "Only suggestions matching this topic label.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "string" } }], bodyKey: null, description: "List clip suggestions for a media item \u2014 Required permission: media: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": { "status": { "type": "string", "enum": ["idle", "generating", "completed", "failed"] }, "createdAt": { "type": "string" }, "analyzedAt": { "type": "string" }, "jobId": { "type": "string" }, "topics": { "type": "array" }, "suggestions": { "type": "array" }, "pagination": { "type": "object", "description": "Cursor pagination metadata." } }, "additionalProperties": true } },
9296
+ { operationId: "listMediaSuggestions", toolName: "cueframe_api_listMediaSuggestions", title: "List Media Suggestions", method: "GET", pathTemplate: "/v1/media/{id}/suggestions", pathParams: ["id"], 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" } }, { "name": "platform", "required": false, "description": "Only suggestions cut for this delivery platform.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "string" } }, { "name": "format", "required": false, "description": "Only suggestions in this output format.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "string" } }, { "name": "topic", "required": false, "description": "Only suggestions matching this topic label.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "string" } }], bodyKey: null, description: "List clip suggestions for a media item \u2014 Required permission: media: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": { "status": { "type": "string", "enum": ["idle", "generating", "completed", "failed"] }, "createdAt": { "type": ["string", "null"] }, "analyzedAt": { "type": ["string", "null"] }, "jobId": { "type": ["string", "null"] }, "topics": { "type": "array" }, "suggestions": { "type": "array" }, "pagination": { "type": "object", "description": "Cursor pagination metadata." } }, "additionalProperties": true } },
9290
9297
  { operationId: "listProjectRenders", toolName: "cueframe_api_listProjectRenders", title: "List Project Renders", method: "GET", pathTemplate: "/v1/projects/{id}/renders", pathParams: ["id"], 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" } }, { "name": "status", "required": false, "description": "Comma-separated render statuses to include (e.g. `error,cancelled`). Omit for every status.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "string" } }], bodyKey: null, description: "List renders for a project \u2014 Required permission: renders: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 } },
9291
9298
  { operationId: "listProjects", toolName: "cueframe_api_listProjects", title: "List Projects", method: "GET", pathTemplate: "/v1/projects", 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 projects \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": { "data": { "type": "array" }, "pagination": { "type": "object", "description": "Cursor pagination metadata." } }, "additionalProperties": true } },
9292
9299
  { operationId: "listRenderFonts", toolName: "cueframe_api_listRenderFonts", title: "List Render Fonts", method: "GET", pathTemplate: "/v1/fonts", pathParams: [], queryParams: [], bodyKey: null, description: "List the font faces the renderer can actually draw \u2014 The renderer's admitted font set: per family the exact name authoring accepts, the weight ranges a shipped file declares, the styles bytes exist for, the caption default weights, and whether the bytes are bundled or an aliased metric-compatible stand-in. Choose from here and validate_composition will not refuse the face. Unlike POST /fonts/search (which searches the GOOGLE catalog) this is what the render page can rasterize. `manifestVersion` identifies the exact table and moves only when the admitted set does. Covers the BUNDLED set only \u2014 a brand kit's sealed faces are per-org and per-render, and a real italic can come only from one. \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": { "manifestVersion": { "type": "string", "description": "Identifies this exact face table. Derived from the table's own content, so it moves when and only when the admitted set moves. Record it beside a composition to state which face table a font choice was validated against." }, "families": { "type": "array" } }, "additionalProperties": true } },
@@ -9296,9 +9303,9 @@ var GENERATED_OPERATIONS = [
9296
9303
  { 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 } },
9297
9304
  { 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 } },
9298
9305
  { 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 } },
9299
- { 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" }, "format": {}, "brandKitId": { "type": "string" }, "activeCompositionId": { "type": "string" }, "composition": { "type": "object", "description": "Summary of a project's stored composition." }, "lastRender": { "description": "Most recent render for a project, if any." }, "webUrl": { "type": "string", "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 } },
9300
- { 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" }, "lastFailedAt": { "type": "string" }, "consecutiveFailures": { "type": "integer" } }, "additionalProperties": true } },
9301
- { 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" }, "outputExpiresAt": { "type": "string" }, "error": { "type": "string", "description": "Human-readable failure message. Pair with `errorCode` for a stable, machine-readable code an agent runner can branch on." }, "errorCode": { "type": "string", "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", "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 } },
9306
+ { 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 } },
9307
+ { 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 } },
9308
+ { 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 } },
9302
9309
  { operationId: "previewComponent", toolName: "cueframe_api_previewComponent", title: "Preview Component", method: "POST", pathTemplate: "/v1/projects/{id}/component-preview", pathParams: ["id"], queryParams: [], bodyKey: "previewComponentBody", description: "Render one component preview \u2014 Queue a preview of ONE org-installed component. It returns the SAME content-addressed VP9-alpha motion clip the production render composites. Returns a jobId \u2014 wait_job(kind='preview') for the artifact. Compile/runtime failures land on the job terminal with the sanitized author-fixable message. \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", "description": "Poll GET /v1/jobs/{jobId} / wait_job until terminal." }, "jobKey": { "type": "string", "description": "Deterministic identity of the work (content hash of every input the result depends on). Re-enqueueing the same key returns the same job while it runs; a failed key revives as a fresh attempt." }, "kind": { "type": "string", "description": "Job family, e.g. `verify` | `preview` | `brand_kit_extract`." }, "status": { "type": "string", "description": "running on a fresh/deduped enqueue; succeeded when an identical request already completed. Cancelled is part of the shared status vocabulary; identical cancelled work revives to running.", "enum": ["running", "succeeded", "cancelled"] } }, "additionalProperties": true } },
9303
9310
  { operationId: "previewFrameJob", toolName: "cueframe_api_previewFrameJob", title: "Preview Frame Job", method: "POST", pathTemplate: "/v1/projects/{id}/preview-frame-jobs", pathParams: ["id"], queryParams: [], bodyKey: "previewFrameJobBody", description: "Queue still-frame evidence for a composition \u2014 Resolve and freeze the exact authored target, then queue durable still capture. Returns immediately; poll the generic job with wait_job(kind='preview_frame'). One successful request is one compose_capture operation regardless of timestamp count. \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", "description": "Poll GET /v1/jobs/{jobId} / wait_job until terminal." }, "jobKey": { "type": "string", "description": "Deterministic identity of the work (content hash of every input the result depends on). Re-enqueueing the same key returns the same job while it runs; a failed key revives as a fresh attempt." }, "kind": { "type": "string", "description": "Job family, e.g. `verify` | `preview` | `brand_kit_extract`." }, "status": { "type": "string", "description": "running on a fresh/deduped enqueue; succeeded when an identical request already completed. Cancelled is part of the shared status vocabulary; identical cancelled work revives to running.", "enum": ["running", "succeeded", "cancelled"] } }, "additionalProperties": true } },
9304
9311
  { operationId: "previewSelector", toolName: "cueframe_api_previewSelector", title: "Preview Selector", method: "POST", pathTemplate: "/v1/projects/{id}/selector/preview", pathParams: ["id"], queryParams: [], bodyKey: "previewSelectorBody", description: "Re-resolve a switch advisory under a hand-supplied policy (A/B taste; not persisted) \u2014 Required permission: media: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": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "projectId": { "type": "string" }, "groupId": { "type": "string" }, "selectorVersion": { "type": "string" }, "signalVersions": { "type": "object" }, "moments": { "type": "array" }, "recommendation": { "type": "object" }, "divergesFromComposition": { "type": "boolean" } }, "additionalProperties": true } },
@@ -9308,7 +9315,7 @@ var GENERATED_OPERATIONS = [
9308
9315
  { operationId: "refreshRenderUrl", toolName: "cueframe_api_refreshRenderUrl", title: "Refresh Render Url", method: "POST", pathTemplate: "/v1/projects/{id}/renders/{renderId}/refresh-url", pathParams: ["id", "renderId"], queryParams: [], bodyKey: null, description: "Refresh a render's output URL \u2014 Required permission: renders: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": { "outputUrl": { "type": "string" }, "outputExpiresAt": { "type": "string" } }, "additionalProperties": true } },
9309
9316
  { operationId: "resetMediaSuggestions", toolName: "cueframe_api_resetMediaSuggestions", title: "Reset Media Suggestions", method: "DELETE", pathTemplate: "/v1/media/{id}/suggestions", pathParams: ["id"], queryParams: [], bodyKey: null, description: "Reset clip suggestions for a media item \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": true, "idempotentHint": true, "openWorldHint": false } },
9310
9317
  { operationId: "resumeCheckpoint", toolName: "cueframe_api_resumeCheckpoint", title: "Resume Checkpoint", method: "POST", pathTemplate: "/v1/checkpoints/{id}/resume", pathParams: ["id"], queryParams: [], bodyKey: "resumeCheckpointBody", description: "Answer a held checkpoint (approve / revise / abandon) \u2014 The A1 review grammar: one `decision` for the gate, optionally carrying anchored `comments` ({beatId} or {timecodeMs} anchors; per-anchor verdict approve|revise|lock \u2014 lock freezes the element contractually) and/or `edits` (your revised stage artifact). `revise` loops IN-JOB: the director revises and re-presents this same gate with a new packet (version+1); the brief quote states the included revision cycles \u2014 beyond them, revise is refused 402 with the path forward. `abandon` ends the run. Approve-with-comments is legal: the notes record without gating. \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": { "ok": { "type": "boolean" } }, "additionalProperties": true } },
9311
- { operationId: "retryRender", toolName: "cueframe_api_retryRender", title: "Retry Render", method: "POST", pathTemplate: "/v1/projects/{id}/renders/{renderId}/retry", pathParams: ["id", "renderId"], queryParams: [], bodyKey: null, description: "Re-render against an existing renderJob's snapshot \u2014 Required permission: renders: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" }, "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" }, "outputExpiresAt": { "type": "string" }, "error": { "type": "string", "description": "Human-readable failure message. Pair with `errorCode` for a stable, machine-readable code an agent runner can branch on." }, "errorCode": { "type": "string", "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", "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 } },
9318
+ { operationId: "retryRender", toolName: "cueframe_api_retryRender", title: "Retry Render", method: "POST", pathTemplate: "/v1/projects/{id}/renders/{renderId}/retry", pathParams: ["id", "renderId"], queryParams: [], bodyKey: null, description: "Re-render against an existing renderJob's snapshot \u2014 Required permission: renders: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" }, "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 } },
9312
9319
  { operationId: "scoreComposition", toolName: "cueframe_api_scoreComposition", title: "Score Composition", method: "POST", pathTemplate: "/v1/projects/{id}/score-composition", pathParams: ["id"], queryParams: [], bodyKey: "scoreCompositionBody", description: "Score a composition (the standalone sighted judge) \u2014 Queue the server-side judge: it samples eval beats, renders them, and grades editorial/spatial/brand/caption (0\u201310 + weighted composite + worst-first critique). Your REGISTERED CRITICS run too (register_critic) \u2014 rules + rubric verdicts ride the result as clientScores, exactly like the Director's gates evaluate them (evaluator-webhook critics run in the Director lane only). Returns a jobId \u2014 wait_job(kind='verify') for the result, which ALSO carries a checkpointId: the verdicts mint a durable kind:'score' Checkpoint (the same evidence noun the Director's gates produce). Stateless \u2014 nothing to open, warm or close; the compose_verify meter fires on the job's success terminal. \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", "description": "Poll GET /v1/jobs/{jobId} / wait_job until terminal." }, "jobKey": { "type": "string", "description": "Deterministic identity of the work (content hash of every input the result depends on). Re-enqueueing the same key returns the same job while it runs; a failed key revives as a fresh attempt." }, "kind": { "type": "string", "description": "Job family, e.g. `verify` | `preview` | `brand_kit_extract`." }, "status": { "type": "string", "description": "running on a fresh/deduped enqueue; succeeded when an identical request already completed. Cancelled is part of the shared status vocabulary; identical cancelled work revives to running.", "enum": ["running", "succeeded", "cancelled"] } }, "additionalProperties": true } },
9313
9320
  { operationId: "scoreTrace", toolName: "cueframe_api_scoreTrace", title: "Score Trace", method: "POST", pathTemplate: "/v1/traces/{traceId}/scores", pathParams: ["traceId"], queryParams: [], bodyKey: "scoreTraceBody", description: "Attach production scores to one of your director traces \u2014 Record 1\u201310 named scores (0..1) on a trace the CueFrame gateway produced for YOUR director run \u2014 the trace id is the `trace_id` the client stamped on that run's requests. Only the trace's own user may score it; any other trace id answers 404. Scores are accepted asynchronously and acknowledged with 202. Free. \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": { "accepted": { "type": "integer" } }, "additionalProperties": true } },
9314
9321
  { operationId: "searchFonts", toolName: "cueframe_api_searchFonts", title: "Search Fonts", method: "POST", pathTemplate: "/v1/fonts/search", pathParams: [], queryParams: [], bodyKey: "searchFontsBody", description: "Search web font families by name/style \u2014 Search the Google Fonts web-font catalog by keyword. Returns matching font families (family name + category + available variants + a css2 stylesheet URL). DISCOVERY ONLY, and this is NOT the set the renderer can draw: a cloud render draws only the faces GET /v1/fonts lists, or a face sealed in a brand kit font asset. Naming any other family in captions/params fails validate_composition with font_not_reproducible. Read GET /v1/fonts to choose a family AND an admitted weight before authoring \u2014 it also states that no bundled family ships an italic. Read-only and free; results are cached server-side. An empty `results` array means no match (or the upstream catalog was unavailable). \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": { "results": { "type": "array" } }, "additionalProperties": true } },
@@ -9319,10 +9326,10 @@ var GENERATED_OPERATIONS = [
9319
9326
  { operationId: "suggestBriefs", toolName: "cueframe_api_suggestBriefs", title: "Suggest Briefs", method: "POST", pathTemplate: "/v1/media/{id}/suggestions", pathParams: ["id"], queryParams: [], bodyKey: null, description: "Trigger clip-suggestion analysis \u2014 Analyze a video for its best short-form moments \u2014 returns ranked clip suggestions with trims, hooks, titles, captions, hashtags, and platform fit for turning long footage into shorts. Async: returns 202; poll GET /media/:id/suggestions for the ranked results. \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": { "status": { "type": "string", "enum": ["queued", "running", "complete", "failed"] }, "alreadyRunning": { "type": "boolean" } }, "additionalProperties": true } },
9320
9327
  { operationId: "testWebhook", toolName: "cueframe_api_testWebhook", title: "Test Webhook", method: "POST", pathTemplate: "/v1/webhooks/{id}/test", pathParams: ["id"], queryParams: [], bodyKey: null, description: "Fire a webhook.test delivery \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": false, "idempotentHint": false, "openWorldHint": true }, outputSchema: { "type": "object", "properties": { "deliveryId": { "type": "string" }, "status": { "type": "string" } }, "additionalProperties": true } },
9321
9328
  { operationId: "triggerMatteBake", toolName: "cueframe_api_triggerMatteBake", title: "Trigger Matte Bake", method: "POST", pathTemplate: "/v1/media/{id}/matte", pathParams: ["id"], queryParams: [], bodyKey: "triggerMatteBakeBody", description: "Buy a behind-subject matte for one source window \u2014 Bakes the alpha matte that lets a graphic sit BEHIND the subject for a specific source window. The window is the clip's SOURCE trim (`startSec`/`endSec` in seconds into the underlying file), not timeline time, and it is required \u2014 a matte's cost scales with its duration. Async: poll `GET /media/{id}/facts` for the matte fact's status. If a matte for this exact window already exists (bought earlier, or baked by a compose that put a graphic behind the subject) this returns 200 with the existing state and charges NOTHING. `summary.presenceFraction` on the delivered fact is the viability signal: below 0.6 there is no reliable silhouette, and that matte is delivered free. \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" }, "status": { "type": "string", "enum": ["pending", "ready", "failed"] }, "quotedUsd": { "type": "number", "description": "The server's price for this matte, in USD, quoted from the window duration." }, "alreadyExisted": { "type": "boolean", "description": "True when a matte for this exact window was already pending or ready. Nothing was dispatched and nothing will be charged." } }, "additionalProperties": true } },
9322
- { 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" }, "startedAt": { "type": "string" }, "completedAt": { "type": "string" } }, "additionalProperties": true } },
9329
+ { 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 } },
9323
9330
  { 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 } },
9324
9331
  { 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 } },
9325
- { 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", "description": "The param field that carries this primitive's primary text; null = no single text slot." }, "subtextParam": { "type": "string", "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 } },
9332
+ { 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 } },
9326
9333
  { 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 } },
9327
9334
  { 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 } },
9328
9335
  { 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 } }
@@ -2,7 +2,7 @@ import {
2
2
  querySchemaShape,
3
3
  serializeQuery,
4
4
  waitForJob
5
- } from "./chunk-MMZMS3S4.js";
5
+ } from "./chunk-JTVHOHT6.js";
6
6
  import {
7
7
  CURATED_TOOLS
8
8
  } from "./chunk-3OOMVQ6I.js";
@@ -23,7 +23,7 @@ import {
23
23
  text,
24
24
  textWithData,
25
25
  withMedia
26
- } from "./chunk-PNJ7DACK.js";
26
+ } from "./chunk-F5B6OM73.js";
27
27
 
28
28
  // ../mcp/src/prompts.ts
29
29
  var skillListCache = null;
@@ -5,7 +5,7 @@ import {
5
5
  isOk,
6
6
  opById,
7
7
  safeParse
8
- } from "./chunk-PNJ7DACK.js";
8
+ } from "./chunk-F5B6OM73.js";
9
9
 
10
10
  // ../mcp/src/wait.ts
11
11
  var defaultSleep = (ms) => new Promise((r) => setTimeout(r, ms));
package/dist/compose.js CHANGED
@@ -5,40 +5,40 @@ import {
5
5
  import "./chunk-JQMPHKLU.js";
6
6
  import "./chunk-ZZRBKGDA.js";
7
7
  import "./chunk-GULDS3VE.js";
8
+ import {
9
+ catalog as catalog6
10
+ } from "./chunk-VLJOIUHL.js";
11
+ import {
12
+ catalog as catalog2
13
+ } from "./chunk-WAUVKF2F.js";
14
+ import {
15
+ catalog as catalog8
16
+ } from "./chunk-7SQOXIWR.js";
8
17
  import {
9
18
  catalog as catalog4
10
19
  } from "./chunk-JRJQECCF.js";
11
20
  import {
12
21
  catalog as catalog7
13
- } from "./chunk-TE3PNQG6.js";
22
+ } from "./chunk-IAQHWJUO.js";
23
+ import "./chunk-S5H6GH6M.js";
24
+ import "./chunk-QAGGJHAF.js";
25
+ import "./chunk-MFHXCHRI.js";
14
26
  import {
15
27
  catalog
16
- } from "./chunk-ZS3A3QUM.js";
28
+ } from "./chunk-ZDL7XEXW.js";
17
29
  import "./chunk-U4V4FZGE.js";
18
30
  import "./chunk-DLF4WVSE.js";
31
+ import "./chunk-LT4PWSR2.js";
32
+ import "./chunk-FWSJLHSV.js";
19
33
  import {
20
34
  catalog as catalog3
21
35
  } from "./chunk-FVDFPJHT.js";
22
36
  import "./chunk-QGAWDLYX.js";
23
- import {
24
- catalog as catalog6
25
- } from "./chunk-VLJOIUHL.js";
26
- import "./chunk-S5H6GH6M.js";
27
- import "./chunk-QAGGJHAF.js";
28
37
  import {
29
38
  catalog as catalog5
30
39
  } from "./chunk-RAXHCRVV.js";
31
- import {
32
- catalog as catalog2
33
- } from "./chunk-WAUVKF2F.js";
34
- import "./chunk-MFHXCHRI.js";
35
- import {
36
- catalog as catalog8
37
- } from "./chunk-RL5SO653.js";
38
- import "./chunk-LT4PWSR2.js";
39
- import "./chunk-FWSJLHSV.js";
40
- import "./chunk-ZFEXATWN.js";
41
40
  import "./chunk-XHGZ2E77.js";
41
+ import "./chunk-ZFEXATWN.js";
42
42
  import "./chunk-W2245F6G.js";
43
43
  import "./chunk-JBWSK2YD.js";
44
44
  import "./chunk-OBA6NW4S.js";
@@ -2,7 +2,7 @@ import {
2
2
  querySchemaShape,
3
3
  serializeQuery,
4
4
  waitForJob
5
- } from "../chunk-MMZMS3S4.js";
5
+ } from "../chunk-JTVHOHT6.js";
6
6
  import {
7
7
  CURATED_TOOLS
8
8
  } from "../chunk-3OOMVQ6I.js";
@@ -16,7 +16,7 @@ import {
16
16
  opById,
17
17
  safeParse,
18
18
  sniffImageMediaType
19
- } from "../chunk-PNJ7DACK.js";
19
+ } from "../chunk-F5B6OM73.js";
20
20
  import "../chunk-2ESYSVXG.js";
21
21
 
22
22
  // ../mcp/src/adapter.ts
package/dist/mcp/core.js CHANGED
@@ -18,7 +18,7 @@ import {
18
18
  text,
19
19
  textWithData,
20
20
  withMedia
21
- } from "../chunk-PNJ7DACK.js";
21
+ } from "../chunk-F5B6OM73.js";
22
22
  import "../chunk-2ESYSVXG.js";
23
23
  export {
24
24
  __resetPreviewCache,
@@ -7,10 +7,10 @@ import {
7
7
  registerRawTools,
8
8
  registerSkillPrompts,
9
9
  titleCase
10
- } from "../chunk-NXEJASGI.js";
11
- import "../chunk-MMZMS3S4.js";
10
+ } from "../chunk-JGXJEY77.js";
11
+ import "../chunk-JTVHOHT6.js";
12
12
  import "../chunk-3OOMVQ6I.js";
13
- import "../chunk-PNJ7DACK.js";
13
+ import "../chunk-F5B6OM73.js";
14
14
  import "../chunk-2ESYSVXG.js";
15
15
  export {
16
16
  RAW_EXCLUDED_OPERATION_IDS,
package/dist/mcp.js CHANGED
@@ -7,10 +7,10 @@ import {
7
7
  buildServer,
8
8
  registerCuratedTools,
9
9
  registerRawTools
10
- } from "./chunk-NXEJASGI.js";
11
- import "./chunk-MMZMS3S4.js";
10
+ } from "./chunk-JGXJEY77.js";
11
+ import "./chunk-JTVHOHT6.js";
12
12
  import "./chunk-3OOMVQ6I.js";
13
- import "./chunk-PNJ7DACK.js";
13
+ import "./chunk-F5B6OM73.js";
14
14
  import "./chunk-2ESYSVXG.js";
15
15
  export {
16
16
  API_URLS,
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  HeroText,
3
3
  catalog
4
- } from "../chunk-RL5SO653.js";
4
+ } from "../chunk-7SQOXIWR.js";
5
5
  import "../chunk-LT4PWSR2.js";
6
6
  import "../chunk-FWSJLHSV.js";
7
- import "../chunk-ZFEXATWN.js";
8
7
  import "../chunk-XHGZ2E77.js";
8
+ import "../chunk-ZFEXATWN.js";
9
9
  import "../chunk-W2245F6G.js";
10
10
  import "../chunk-2ESYSVXG.js";
11
11
  export {
@@ -8,11 +8,11 @@ import {
8
8
  ProductLaunchTrailer,
9
9
  TerminalToBrowserDeploy,
10
10
  catalog
11
- } from "../chunk-TE3PNQG6.js";
12
- import "../chunk-QGAWDLYX.js";
11
+ } from "../chunk-IAQHWJUO.js";
13
12
  import "../chunk-S5H6GH6M.js";
14
13
  import "../chunk-QAGGJHAF.js";
15
14
  import "../chunk-MFHXCHRI.js";
15
+ import "../chunk-QGAWDLYX.js";
16
16
  import "../chunk-W2245F6G.js";
17
17
  import "../chunk-JBWSK2YD.js";
18
18
  import "../chunk-OBA6NW4S.js";
@@ -21,13 +21,13 @@ import {
21
21
  TrackingIn,
22
22
  Typewriter,
23
23
  catalog
24
- } from "../chunk-ZS3A3QUM.js";
24
+ } from "../chunk-ZDL7XEXW.js";
25
25
  import "../chunk-U4V4FZGE.js";
26
26
  import "../chunk-DLF4WVSE.js";
27
27
  import "../chunk-LT4PWSR2.js";
28
28
  import "../chunk-FWSJLHSV.js";
29
- import "../chunk-ZFEXATWN.js";
30
29
  import "../chunk-XHGZ2E77.js";
30
+ import "../chunk-ZFEXATWN.js";
31
31
  import "../chunk-W2245F6G.js";
32
32
  import "../chunk-2ESYSVXG.js";
33
33
  export {
@@ -1,37 +1,37 @@
1
+ import {
2
+ catalog as catalog6
3
+ } from "./chunk-VLJOIUHL.js";
4
+ import {
5
+ catalog as catalog2
6
+ } from "./chunk-WAUVKF2F.js";
7
+ import {
8
+ catalog as catalog8
9
+ } from "./chunk-7SQOXIWR.js";
1
10
  import {
2
11
  catalog as catalog4
3
12
  } from "./chunk-JRJQECCF.js";
4
13
  import {
5
14
  catalog as catalog7
6
- } from "./chunk-TE3PNQG6.js";
15
+ } from "./chunk-IAQHWJUO.js";
16
+ import "./chunk-S5H6GH6M.js";
17
+ import "./chunk-QAGGJHAF.js";
18
+ import "./chunk-MFHXCHRI.js";
7
19
  import {
8
20
  catalog
9
- } from "./chunk-ZS3A3QUM.js";
21
+ } from "./chunk-ZDL7XEXW.js";
10
22
  import "./chunk-U4V4FZGE.js";
11
23
  import "./chunk-DLF4WVSE.js";
24
+ import "./chunk-LT4PWSR2.js";
25
+ import "./chunk-FWSJLHSV.js";
12
26
  import {
13
27
  catalog as catalog3
14
28
  } from "./chunk-FVDFPJHT.js";
15
29
  import "./chunk-QGAWDLYX.js";
16
- import {
17
- catalog as catalog6
18
- } from "./chunk-VLJOIUHL.js";
19
- import "./chunk-S5H6GH6M.js";
20
- import "./chunk-QAGGJHAF.js";
21
30
  import {
22
31
  catalog as catalog5
23
32
  } from "./chunk-RAXHCRVV.js";
24
- import {
25
- catalog as catalog2
26
- } from "./chunk-WAUVKF2F.js";
27
- import "./chunk-MFHXCHRI.js";
28
- import {
29
- catalog as catalog8
30
- } from "./chunk-RL5SO653.js";
31
- import "./chunk-LT4PWSR2.js";
32
- import "./chunk-FWSJLHSV.js";
33
- import "./chunk-ZFEXATWN.js";
34
33
  import "./chunk-XHGZ2E77.js";
34
+ import "./chunk-ZFEXATWN.js";
35
35
  import "./chunk-W2245F6G.js";
36
36
  import "./chunk-JBWSK2YD.js";
37
37
  import "./chunk-OBA6NW4S.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cueframe/kernel",
3
- "version": "0.2.24",
3
+ "version": "0.2.25",
4
4
  "type": "module",
5
5
  "description": "Publish-only aggregate of CueFrame's isomorphic kernel packages — composition, primitives, authoring, MCP, and friends shipped as one npm artifact. Members remain separate workspace packages; this only changes what ships.",
6
6
  "files": [
@@ -16,26 +16,26 @@
16
16
  "devDependencies": {
17
17
  "tsup": "^8.3.5",
18
18
  "typescript": "^5.9.3",
19
- "@cueframe/animate": "0.1.0",
20
19
  "@cueframe/account-model": "0.1.0",
20
+ "@cueframe/animate": "0.1.0",
21
21
  "@cueframe/brand-derivation": "0.1.0",
22
+ "@cueframe/authoring": "0.1.0",
22
23
  "@cueframe/cloud-import": "0.1.0",
23
- "@cueframe/composition": "0.1.0",
24
24
  "@cueframe/compose": "0.1.0",
25
- "@cueframe/component-runtime": "0.1.0",
26
- "@cueframe/authoring": "0.1.0",
27
- "@cueframe/director": "0.1.0",
28
- "@cueframe/foundation": "0.1.0",
29
- "@cueframe/errors": "0.1.0",
30
25
  "@cueframe/composition-ops": "0.1.0",
31
- "@cueframe/nle-export": "0.1.0",
32
- "@cueframe/core": "0.1.0",
33
- "@cueframe/plane": "0.1.0",
34
- "@cueframe/perception": "0.1.0",
26
+ "@cueframe/errors": "0.1.0",
27
+ "@cueframe/director": "0.1.0",
28
+ "@cueframe/component-runtime": "0.1.0",
35
29
  "@cueframe/mcp": "0.1.0",
30
+ "@cueframe/core": "0.1.0",
31
+ "@cueframe/nle-export": "0.1.0",
32
+ "@cueframe/media-model": "0.1.0",
36
33
  "@cueframe/render-harness": "0.1.0",
34
+ "@cueframe/perception": "0.1.0",
35
+ "@cueframe/foundation": "0.1.0",
36
+ "@cueframe/composition": "0.1.0",
37
37
  "@cueframe/primitives": "0.1.0",
38
- "@cueframe/media-model": "0.1.0"
38
+ "@cueframe/plane": "0.1.0"
39
39
  },
40
40
  "peerDependencies": {
41
41
  "gsap": "3.13.0",
@@ -4,15 +4,15 @@ import {
4
4
  import {
5
5
  resolveContrast
6
6
  } from "./chunk-FWSJLHSV.js";
7
+ import {
8
+ resolveFitFontSize
9
+ } from "./chunk-XHGZ2E77.js";
7
10
  import {
8
11
  fadeProgress,
9
12
  resolveEasing,
10
13
  staggerUp,
11
14
  wordPop
12
15
  } from "./chunk-ZFEXATWN.js";
13
- import {
14
- resolveFitFontSize
15
- } from "./chunk-XHGZ2E77.js";
16
16
 
17
17
  // ../execution/primitives/src/hero-text/HeroText.tsx
18
18
  import { useCurrentFrame, useVideoConfig } from "remotion";
@@ -1,7 +1,3 @@
1
- import {
2
- frostedGlassWipe,
3
- spatialPush
4
- } from "./chunk-QGAWDLYX.js";
5
1
  import {
6
2
  DashboardPopulate
7
3
  } from "./chunk-S5H6GH6M.js";
@@ -11,6 +7,10 @@ import {
11
7
  import {
12
8
  EASING_BY_INTENT
13
9
  } from "./chunk-MFHXCHRI.js";
10
+ import {
11
+ frostedGlassWipe,
12
+ spatialPush
13
+ } from "./chunk-QGAWDLYX.js";
14
14
  import {
15
15
  ACCENT,
16
16
  ACCENT_SOFT,
@@ -12,15 +12,15 @@ import {
12
12
  FLOOR_TEXT,
13
13
  resolveContrast
14
14
  } from "./chunk-FWSJLHSV.js";
15
+ import {
16
+ FitText,
17
+ resolveFitFontSize
18
+ } from "./chunk-XHGZ2E77.js";
15
19
  import {
16
20
  resolveEasing,
17
21
  staggerRise,
18
22
  staggerUp
19
23
  } from "./chunk-ZFEXATWN.js";
20
- import {
21
- FitText,
22
- resolveFitFontSize
23
- } from "./chunk-XHGZ2E77.js";
24
24
  import {
25
25
  ACCENT,
26
26
  ACCENT_STRONG,