@kheleshikhi/studio-agent 0.6.1 → 0.9.0

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.
@@ -0,0 +1,207 @@
1
+ // Pure readers of the live `/v1/agent/context` projection.
2
+ //
3
+ // The CLI is a thin client of server authority: every list below (offered and
4
+ // frozen targets, deprecations, the Experience schema, the universal capability
5
+ // list, tools) is read from the server's context. Nothing here hard-codes a
6
+ // live contract. When the server does not project a field, the helpers answer
7
+ // "unknown" and the CLI defers to the server's own validation errors.
8
+ import { CliError } from "./types.js";
9
+ function stringList(value) {
10
+ return Array.isArray(value) ? value.filter((item) => typeof item === "string") : null;
11
+ }
12
+ function text(value) {
13
+ return typeof value === "string" && value ? value : null;
14
+ }
15
+ export function parseContext(raw) {
16
+ const deprecations = {};
17
+ if (raw.deprecations && typeof raw.deprecations === "object" && !Array.isArray(raw.deprecations)) {
18
+ for (const [key, value] of Object.entries(raw.deprecations))
19
+ if (typeof value === "string")
20
+ deprecations[key] = value;
21
+ }
22
+ const capabilities = Array.isArray(raw.experience_capabilities)
23
+ ? raw.experience_capabilities
24
+ .filter((item) => Boolean(item) && typeof item === "object" && typeof item.id === "string")
25
+ .map((item) => ({ id: String(item.id), versions: Array.isArray(item.versions) ? item.versions.map(Number).filter(Number.isFinite) : [] }))
26
+ : null;
27
+ const tools = raw.experience_tools && typeof raw.experience_tools === "object" && !Array.isArray(raw.experience_tools)
28
+ ? raw.experience_tools
29
+ : null;
30
+ const protocol = Number(raw.agent_protocol);
31
+ return {
32
+ agentProtocol: Number.isFinite(protocol) ? protocol : null,
33
+ minimumCliVersion: String(raw.minimum_cli_version || ""),
34
+ recommendedCliVersion: String(raw.recommended_cli_version || raw.minimum_cli_version || ""),
35
+ authoringTargets: stringList(raw.authoring_targets),
36
+ frozenAuthoringTargets: stringList(raw.frozen_authoring_targets),
37
+ deprecations,
38
+ sceneSchema: text(raw.scene_schema),
39
+ sceneManifestSchema: text(raw.scene_manifest_schema),
40
+ experienceSchema: text(raw.experience_schema),
41
+ experienceCapabilities: capabilities,
42
+ experienceTools: tools,
43
+ };
44
+ }
45
+ // ---------------------------------------------------------------- versions
46
+ function versionParts(value) {
47
+ const match = /^(\d+)\.(\d+)\.(\d+)/.exec(value);
48
+ if (!match)
49
+ throw new CliError(`Server returned an invalid CLI version: ${value}`, "AGENT_VERSION_INVALID", 5);
50
+ return match.slice(1).map(Number);
51
+ }
52
+ export function compareVersions(left, right) {
53
+ const a = versionParts(left);
54
+ const b = versionParts(right);
55
+ for (let index = 0; index < 3; index += 1) {
56
+ if (a[index] !== b[index])
57
+ return a[index] - b[index];
58
+ }
59
+ return 0;
60
+ }
61
+ export const PACKAGE_NAME = "@kheleshikhi/studio-agent";
62
+ /** Negotiate this CLI against the server's protocol and min/recommended versions. */
63
+ export function compatibilityReport(raw, cliVersion, cliProtocol) {
64
+ const context = parseContext(raw);
65
+ const base = {
66
+ cli_version: cliVersion,
67
+ agent_protocol: context.agentProtocol,
68
+ minimum_cli_version: context.minimumCliVersion,
69
+ recommended_cli_version: context.recommendedCliVersion,
70
+ };
71
+ if (context.agentProtocol !== cliProtocol) {
72
+ return { ...base, status: "protocol_incompatible", message: `NerdBro speaks Agent protocol ${raw.agent_protocol}; this CLI ${cliVersion} speaks protocol ${cliProtocol}. Install the current CLI: npm install -g ${PACKAGE_NAME}@latest.` };
73
+ }
74
+ if (compareVersions(cliVersion, context.minimumCliVersion) < 0) {
75
+ return { ...base, status: "upgrade_required", message: `CLI ${cliVersion} is too old; NerdBro requires ${context.minimumCliVersion} or newer (recommended ${context.recommendedCliVersion}). Run: npm install -g ${PACKAGE_NAME}@${context.recommendedCliVersion}.` };
76
+ }
77
+ if (compareVersions(cliVersion, context.recommendedCliVersion) < 0) {
78
+ return { ...base, status: "upgrade_recommended", message: `CLI ${context.recommendedCliVersion} is recommended (current ${cliVersion}); older CLIs may not offer the server's current Scene and Experience workflow. Run: npm install -g ${PACKAGE_NAME}@${context.recommendedCliVersion}.` };
79
+ }
80
+ return { ...base, status: "compatible", message: null };
81
+ }
82
+ // ---------------------------------------------------------------- targets
83
+ /** The Scene target ADR-0003 names for all new visual work. */
84
+ export const SCENE_TARGET = "sceneComposition";
85
+ /**
86
+ * Choose the `studio create` target. Without `--target` the Scene target is
87
+ * used (or the server's first offered target if it stops offering it). A target
88
+ * the server's context lists as frozen is refused here with the server's own
89
+ * deprecation text; any other value is sent unchanged for the server to judge.
90
+ */
91
+ export function resolveCreateTarget(requested, raw) {
92
+ const context = parseContext(raw);
93
+ if (requested === undefined) {
94
+ const offered = context.authoringTargets;
95
+ return !offered || offered.length === 0 || offered.includes(SCENE_TARGET) ? SCENE_TARGET : offered[0];
96
+ }
97
+ if (context.frozenAuthoringTargets?.includes(requested)) {
98
+ const reason = context.deprecations[requested] || "Frozen: kept only so existing assets keep reading.";
99
+ const offered = context.authoringTargets?.length ? context.authoringTargets.join(", ") : SCENE_TARGET;
100
+ throw new CliError(`Target ${requested} is frozen for new work. ${reason} Use --target ${offered.split(", ")[0]} (offered: ${offered}); a graph is a Scene math plane (see \`nerdbro docs open mathgraph\`).`, "STUDIO_TARGET_FROZEN", 2, { target: requested, offered_targets: context.authoringTargets, frozen_targets: context.frozenAuthoringTargets, deprecation: reason });
101
+ }
102
+ return requested;
103
+ }
104
+ // ---------------------------------------------------------------- brief
105
+ const GRAPH_FLAGS = ["graph-purpose", "graph-x", "graph-y", "graph-sync"];
106
+ /**
107
+ * Whether the brief asks for a Scene math plane. A graph is no longer a target
108
+ * (combined/mathGraph) but a plane inside the Scene, so the requirement follows
109
+ * only from the Maker's graph intent: `--math-plane` or any `--graph-*` meaning.
110
+ * Returns undefined when nothing was said, so the server keeps its default.
111
+ */
112
+ export function mathPlaneRequirement(flags) {
113
+ if (flags.has("no-math-plane"))
114
+ return false;
115
+ if (flags.has("math-plane"))
116
+ return true;
117
+ return GRAPH_FLAGS.some((name) => typeof flags.get(name) === "string") ? true : undefined;
118
+ }
119
+ // ---------------------------------------------------------------- views
120
+ export function deprecationFor(raw, key) {
121
+ return parseContext(raw).deprecations[key] ?? null;
122
+ }
123
+ /** The authoring summary `nerdbro context` prints beside the raw projection. */
124
+ export function contextSummary(raw, cliVersion, cliProtocol) {
125
+ const context = parseContext(raw);
126
+ return {
127
+ compatibility: compatibilityReport(raw, cliVersion, cliProtocol),
128
+ model: "Everything visual is a Scene (graphs are Scene math planes); interaction is an Experience.",
129
+ scene_schema: context.sceneSchema,
130
+ scene_manifest_schema: context.sceneManifestSchema,
131
+ experience_schema: context.experienceSchema,
132
+ authoring_targets: context.authoringTargets,
133
+ frozen_authoring_targets: context.frozenAuthoringTargets,
134
+ deprecations: context.deprecations,
135
+ universal_capabilities: context.experienceCapabilities?.map((item) => item.id) ?? null,
136
+ fields_missing: [
137
+ ["authoring_targets", context.authoringTargets],
138
+ ["frozen_authoring_targets", context.frozenAuthoringTargets],
139
+ ["experience_schema", context.experienceSchema],
140
+ ["experience_capabilities", context.experienceCapabilities],
141
+ ].filter(([, value]) => value === null).map(([name]) => name),
142
+ };
143
+ }
144
+ /**
145
+ * Decorate a `/v1/agent/schema/<topic>` answer: surface its deprecation, and for
146
+ * the `experience` topic attach the universal capability list from context.
147
+ */
148
+ export function schemaTopicView(topic, payload, raw) {
149
+ const contract = payload.contract && typeof payload.contract === "object" ? payload.contract : {};
150
+ const view = { ...payload };
151
+ if (typeof contract.deprecated === "string")
152
+ view.deprecated = contract.deprecated;
153
+ if (topic === "experience" && raw) {
154
+ const context = parseContext(raw);
155
+ view.universal_capabilities = context.experienceCapabilities;
156
+ view.capabilities_note = "Every canonical capability is available in every host; requiredCapabilities are derived by the server, never authored.";
157
+ if (context.experienceSchema)
158
+ view.authoring_schema = context.experienceSchema;
159
+ }
160
+ return view;
161
+ }
162
+ /** `nerdbro capabilities`: the Studio capability registry plus the universal Experience list. */
163
+ export function capabilitiesView(registry, raw) {
164
+ const context = raw ? parseContext(raw) : null;
165
+ return {
166
+ universal_capabilities: context?.experienceCapabilities ?? null,
167
+ experience_tools: context?.experienceTools ?? null,
168
+ registry,
169
+ };
170
+ }
171
+ /**
172
+ * A notice when a local Experience is not the server's authoring schema (e.g. a
173
+ * V2 document still read through the normalizer). The text is the server's.
174
+ */
175
+ export function experienceSchemaNotice(document, raw) {
176
+ if (!raw || !document || typeof document !== "object")
177
+ return null;
178
+ const context = parseContext(raw);
179
+ const schema = document.schema;
180
+ if (!context.experienceSchema || schema === context.experienceSchema)
181
+ return null;
182
+ const version = typeof schema === "string" ? /\.(v\d+)$/.exec(schema)?.[1] : undefined;
183
+ const deprecation = version ? context.deprecations[`experience.${version}`] : undefined;
184
+ return `source.json declares ${typeof schema === "string" ? schema : "no schema"}; new work is authored as ${context.experienceSchema}.${deprecation ? ` ${deprecation}` : ""}`;
185
+ }
186
+ function count(value) {
187
+ return Array.isArray(value) ? value.length : value !== null && typeof value === "object" ? Object.keys(value).length : null;
188
+ }
189
+ /** Summarise a server Experience draft preview, V3 blocks included. */
190
+ export function experiencePreviewSummary(preview) {
191
+ const entry = preview.entry && typeof preview.entry === "object" ? preview.entry : {};
192
+ const interaction = entry.interaction && typeof entry.interaction === "object" ? entry.interaction : null;
193
+ return {
194
+ mode: preview.mode ?? null,
195
+ source_hash: preview.sourceHash ?? null,
196
+ schema: entry.schema ?? null,
197
+ scenes: count(preview.scenes),
198
+ audio: count(preview.audio),
199
+ interaction: interaction
200
+ ? Object.fromEntries(["inputs", "requests", "handlers", "readouts", "exports", "tools"].map((key) => [key, count(interaction[key])]))
201
+ : null,
202
+ rounds: entry.rounds ? count(entry.rounds.pool) : null,
203
+ outcomes: count(entry.assessment?.outcomes),
204
+ required_capabilities: Array.isArray(entry.requiredCapabilities) ? entry.requiredCapabilities : null,
205
+ };
206
+ }
207
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
package/dist/daemon.js CHANGED
@@ -3,6 +3,10 @@ import http from "node:http";
3
3
  import { removeDaemonMetadata, writeDaemonMetadata } from "./state.js";
4
4
  import { AgentApi, traceStorage } from "./protocol.js";
5
5
  import { StudioBrowser } from "./browser.js";
6
+ import { PresenceThrottle, stepPresence } from "./presence.js";
7
+ import { RenderJobs, renderJobRoute } from "./render-jobs.js";
8
+ import { rm } from "node:fs/promises";
9
+ const PRESENCE_SUBJECT = /^(asset|experience):[A-Za-z0-9_.-]{1,80}$/;
6
10
  import { CliError } from "./types.js";
7
11
  /** Context changes are bounded by a short TTL and reset on session changes. */
8
12
  export class BoundedContextCache {
@@ -50,6 +54,71 @@ export async function runDaemon(options) {
50
54
  const browser = new StudioBrowser(api);
51
55
  if (!options.noBrowser)
52
56
  await browser.start(options.headless);
57
+ /**
58
+ * Per-step Agent Presence for a drive. The daemon already holds the scoped
59
+ * Agent credential, so the CLI never needs a second channel; a failed
60
+ * presence update never fails the drive.
61
+ */
62
+ const presenceListener = (subject) => {
63
+ if (typeof subject !== "string" || !PRESENCE_SUBJECT.test(subject) || !agentToken)
64
+ return undefined;
65
+ const throttle = new PresenceThrottle();
66
+ return async (report) => {
67
+ if (!throttle.admit(String(report.summary.op), report.summary.ok !== true))
68
+ return;
69
+ await api.request("PUT", "/v1/agent/presence", stepPresence(subject, report)).catch(() => undefined);
70
+ };
71
+ };
72
+ /**
73
+ * Presentation renders run as jobs (see render-jobs.ts): the CLI polls
74
+ * short requests instead of holding one request open for minutes.
75
+ */
76
+ // Render workers: the main browser plus NERDBRO_RENDER_WORKERS - 1 more,
77
+ // each its own Chrome with its own profile, started on first use. One job
78
+ // runs per browser; memory per worker is the limit (see
79
+ // docs/guides/episode-video.md).
80
+ const renderWorkers = Math.max(1, Math.min(4, Math.floor(Number(process.env.NERDBRO_RENDER_WORKERS ?? "1")) || 1));
81
+ const pool = [browser, ...Array.from({ length: renderWorkers - 1 }, (_, index) => new StudioBrowser(api, `browser-profile-render-${index + 1}`))];
82
+ const leased = new Set();
83
+ const withRenderBrowser = async (work) => {
84
+ const worker = pool.find((candidate) => !leased.has(candidate));
85
+ if (!worker)
86
+ throw new CliError("Every render browser is busy.", "VIDEO_RENDER_BUSY", 3);
87
+ leased.add(worker);
88
+ try {
89
+ if (worker !== browser)
90
+ await worker.start(options.headless);
91
+ return await work(worker);
92
+ }
93
+ finally {
94
+ leased.delete(worker);
95
+ }
96
+ };
97
+ const renderJobs = new RenderJobs({ maxConcurrent: renderWorkers });
98
+ const sweeper = setInterval(() => renderJobs.sweep(), 5_000);
99
+ sweeper.unref();
100
+ const renderRunners = {
101
+ scene: (input, { signal, progress }) => withRenderBrowser((worker) => worker.renderFrames({ ...input, signal, onProgress: progress })),
102
+ experience: (input, { signal, progress }) => withRenderBrowser((worker) => worker.renderExperienceFrames({ ...input, signal, onProgress: progress })),
103
+ };
104
+ // A failed or cancelled job removes the frames and sound copies it wrote,
105
+ // unless the caller asked to keep frames for diagnosis.
106
+ const renderCleanup = async (input) => {
107
+ if (input.keepFramesOnFailure === true)
108
+ return;
109
+ for (const directory of [input.framesDirectory, input.audioDirectory]) {
110
+ if (typeof directory === "string" && directory)
111
+ await rm(directory, { recursive: true, force: true });
112
+ }
113
+ };
114
+ const renderCleanups = { scene: renderCleanup, experience: renderCleanup };
115
+ /** The legacy single-request render routes stop when their client disconnects. */
116
+ const clientSignal = (response) => {
117
+ const controller = new AbortController();
118
+ response.once("close", () => { if (!response.writableEnded)
119
+ controller.abort("client disconnected"); });
120
+ return controller.signal;
121
+ };
53
122
  let stopping = false;
54
123
  const server = http.createServer((request, response) => {
55
124
  const attemptId = request.headers["x-nerdbro-attempt-id"];
@@ -64,10 +133,15 @@ export async function runDaemon(options) {
64
133
  }
65
134
  try {
66
135
  const url = new URL(request.url || "/", "http://127.0.0.1");
136
+ const routed = await renderJobRoute(renderJobs, renderRunners, renderCleanups, request.method || "GET", url.pathname, () => body(request));
137
+ if (routed) {
138
+ send(response, routed.status, routed.value);
139
+ return;
140
+ }
67
141
  if (request.method === "GET" && url.pathname === "/status") {
68
142
  send(response, 200, {
69
143
  ok: true,
70
- daemon_version: options.version || "0.6.1",
144
+ daemon_version: options.version || "0.9.0",
71
145
  protocol_version: 1,
72
146
  browser_protocol_version: 1,
73
147
  pid: process.pid,
@@ -77,18 +151,20 @@ export async function runDaemon(options) {
77
151
  origin: options.apiOrigin,
78
152
  browser: options.noBrowser ? "disabled-for-test" : "running",
79
153
  headless: options.headless,
154
+ render_workers: renderWorkers,
80
155
  ...browser.authenticationDiagnostics(),
81
156
  });
82
157
  return;
83
158
  }
84
159
  if (request.method === "POST" && url.pathname === "/connect") {
85
160
  contextCache.clear();
86
- browser.clearAuthentication();
161
+ for (const worker of pool)
162
+ worker.clearAuthentication();
87
163
  const input = await body(request);
88
164
  const pairing = await api.request("POST", "/v1/agent/pairings", {
89
165
  agent_protocol: 1,
90
166
  client_label: input.clientLabel || `${process.platform} ${process.arch}`,
91
- client_version: input.clientVersion || options.version || "0.6.1",
167
+ client_version: input.clientVersion || options.version || "0.9.0",
92
168
  }, false);
93
169
  send(response, 202, { ok: true, phase: "pairing", pairing });
94
170
  return;
@@ -104,7 +180,8 @@ export async function runDaemon(options) {
104
180
  const value = envelope.data || {};
105
181
  if (typeof value.agent_token === "string") {
106
182
  contextCache.clear();
107
- browser.clearAuthentication();
183
+ for (const worker of pool)
184
+ worker.clearAuthentication();
108
185
  agentToken = value.agent_token;
109
186
  agentSessionId = String(value.session_id);
110
187
  sessionExpiresAt = String(value.session_expires_at);
@@ -122,7 +199,8 @@ export async function runDaemon(options) {
122
199
  agentSessionId = undefined;
123
200
  sessionExpiresAt = undefined;
124
201
  api.setToken(undefined);
125
- browser.clearAuthentication();
202
+ for (const worker of pool)
203
+ worker.clearAuthentication();
126
204
  send(response, 200, { ok: true, disconnected: true });
127
205
  return;
128
206
  }
@@ -158,7 +236,28 @@ export async function runDaemon(options) {
158
236
  }
159
237
  if (request.method === "POST" && url.pathname === "/browser/drive") {
160
238
  const input = await body(request);
161
- send(response, 200, { ok: true, result: await browser.drive(input) });
239
+ send(response, 200, { ok: true, result: await browser.drive({
240
+ ...input,
241
+ onStep: presenceListener(input.presenceSubject),
242
+ }) });
243
+ return;
244
+ }
245
+ if (request.method === "POST" && url.pathname === "/browser/experience-drive") {
246
+ const input = await body(request);
247
+ send(response, 200, { ok: true, result: await browser.driveExperience({
248
+ ...input,
249
+ onStep: presenceListener(input.presenceSubject),
250
+ }) });
251
+ return;
252
+ }
253
+ if (request.method === "POST" && url.pathname === "/browser/render-frames") {
254
+ const input = await body(request);
255
+ send(response, 200, { ok: true, result: await browser.renderFrames({ ...input, signal: clientSignal(response) }) });
256
+ return;
257
+ }
258
+ if (request.method === "POST" && url.pathname === "/browser/render-experience-frames") {
259
+ const input = await body(request);
260
+ send(response, 200, { ok: true, result: await browser.renderExperienceFrames({ ...input, signal: clientSignal(response) }) });
162
261
  return;
163
262
  }
164
263
  if (request.method === "POST" && url.pathname === "/browser/preview-observation") {
@@ -199,7 +298,10 @@ export async function runDaemon(options) {
199
298
  process.once("SIGINT", shutdown);
200
299
  process.once("SIGTERM", shutdown);
201
300
  await new Promise((resolve) => server.once("close", resolve));
202
- await browser.stop();
301
+ clearInterval(sweeper);
302
+ await renderJobs.stopAll();
303
+ for (const worker of pool)
304
+ await worker.stop();
203
305
  await removeDaemonMetadata();
204
306
  if (!stopping)
205
307
  process.exitCode = 1;
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ import { episodeTimeline, type Episode, type EpisodeShot, type ShotKeyInputs } from "./episode.js";
2
+ import { type Encoder, type RenderRecipe } from "./video.js";
3
+ /** What identity resolution found for one shot (everything but recipe, profile and encoder). */
4
+ export type ResolvedShot = {
5
+ sources: ShotKeyInputs["sources"];
6
+ dependency_digests: ShotKeyInputs["dependency_digests"];
7
+ audio_sha256: ShotKeyInputs["audio_sha256"];
8
+ /** Free-form identity detail for the manifest (revisions, manifests, notes). */
9
+ identity: Record<string, unknown>;
10
+ /** Opaque data the renderer needs (the candidate source, for instance). */
11
+ render?: unknown;
12
+ };
13
+ export type RenderedShot = {
14
+ output: string;
15
+ manifest: string;
16
+ };
17
+ export type EpisodeDeps = {
18
+ encoder: Encoder;
19
+ runtimeFingerprint: string | null;
20
+ resolveShot: (shot: EpisodeShot) => Promise<ResolvedShot>;
21
+ /** Render one shot into `destination` (a fresh directory); return its video.mp4 and render.json. */
22
+ renderShot: (shot: EpisodeShot, recipe: RenderRecipe, resolved: ResolvedShot, destination: string) => Promise<RenderedShot>;
23
+ log?: (message: string) => void;
24
+ };
25
+ export type EpisodeOptions = {
26
+ episode: Episode;
27
+ /** Relative audio paths resolve against this directory (the episode.json's). */
28
+ baseDirectory: string;
29
+ out: string;
30
+ cache: string;
31
+ workers: number;
32
+ deps: EpisodeDeps;
33
+ };
34
+ export declare function sha256File(file: string): Promise<string | null>;
35
+ export type EpisodeProbe = {
36
+ frames: number;
37
+ width: number;
38
+ height: number;
39
+ video_codec: string;
40
+ audio_codec: string | null;
41
+ duration: number;
42
+ video_duration: number | null;
43
+ audio_duration: number | null;
44
+ video_start: number | null;
45
+ audio_start: number | null;
46
+ pix_fmt: string;
47
+ };
48
+ /** Count frames and read both streams' start and duration. */
49
+ export declare function probeEpisodeFile(encoder: Encoder, file: string): Promise<EpisodeProbe | null>;
50
+ export type ShotPlan = {
51
+ id: string;
52
+ index: number;
53
+ subject: string;
54
+ key: string;
55
+ frames: number;
56
+ offset_seconds: number;
57
+ duration_seconds: number;
58
+ cache: "valid" | "missing" | "invalid";
59
+ cache_reason?: string;
60
+ inputs: ShotKeyInputs;
61
+ identity: Record<string, unknown>;
62
+ };
63
+ export type ShotOutcome = ShotPlan & {
64
+ state: "reused" | "rendered" | "failed" | "not_started";
65
+ video?: string;
66
+ render_json?: string;
67
+ video_sha256?: string;
68
+ render_seconds?: number;
69
+ error?: {
70
+ code: string;
71
+ message: string;
72
+ stage: string;
73
+ };
74
+ };
75
+ /** Resolve, key and check every shot against the cache. No rendering. */
76
+ export declare function planEpisode(options: EpisodeOptions): Promise<{
77
+ shots: ShotPlan[];
78
+ timeline: ReturnType<typeof episodeTimeline>;
79
+ }>;
80
+ export type EpisodeResult = {
81
+ ok: boolean;
82
+ output?: string;
83
+ srt?: string;
84
+ manifest: string;
85
+ state: string;
86
+ shots: ShotOutcome[];
87
+ reused: number;
88
+ rendered: number;
89
+ failed: number;
90
+ qc?: Array<{
91
+ check: string;
92
+ pass: boolean;
93
+ detail: string;
94
+ }>;
95
+ timings: Record<string, number>;
96
+ };
97
+ /**
98
+ * Render (or reuse) every shot, then assemble. A failed shot stops new
99
+ * renders; shots already rendered stay in the cache, so a retry reuses them
100
+ * and starts at the failed shot.
101
+ */
102
+ export declare function renderEpisode(options: EpisodeOptions): Promise<EpisodeResult>;
103
+ type AudioFile = {
104
+ path: string;
105
+ sha256: string;
106
+ };
107
+ /** Every episode audio file, resolved and hashed (narration, music, effects). */
108
+ export declare function episodeAudioFiles(options: EpisodeOptions): Promise<Map<string, AudioFile>>;
109
+ export {};