@aicopycoders/exodus 2026.9.2000-beta.1 → 2026.9.2000-beta.10

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.
@@ -1,6 +1,9 @@
1
1
  import { type ApiResponse } from "../lib/client.js";
2
2
  import type { FlagOccurrence } from "../lib/args.js";
3
3
  import { type RunProvenance, type WorkflowRun } from "./workflow.js";
4
+ declare const CONCEIT_KEYS: readonly ["podcast", "ugc", "stage", "street", "personification"];
5
+ declare const VOICE_MODES: readonly ["native", "voice-first"];
6
+ type VoiceMode = (typeof VOICE_MODES)[number];
4
7
  export declare const helpText: string;
5
8
  export declare const VOICES_PATH = "/api/v2/video/voices";
6
9
  export interface ClipWord {
@@ -8,10 +11,31 @@ export interface ClipWord {
8
11
  s: number;
9
12
  e: number;
10
13
  }
14
+ export type ClipQcTakeNeighbours = {
15
+ state: "not-applicable";
16
+ } | {
17
+ state: "not-attached";
18
+ } | {
19
+ state: "none-accepted";
20
+ } | {
21
+ state: "attached";
22
+ scenes: number[];
23
+ };
24
+ export interface ClipQcTake {
25
+ kind: "take" | "soft-retry";
26
+ failCodes: string[];
27
+ warnCodes: string[];
28
+ neighbours: ClipQcTakeNeighbours;
29
+ judgeWording?: {
30
+ code: string;
31
+ wording: string;
32
+ }[];
33
+ }
11
34
  export interface ClipQc {
12
35
  verdict: "pass" | "fail";
13
36
  attempts: number;
14
37
  neighbours?: number[];
38
+ takes?: ClipQcTake[];
15
39
  }
16
40
  export interface ClipFinding {
17
41
  check: string;
@@ -21,6 +45,9 @@ export interface ClipFinding {
21
45
  judgeDetail?: string;
22
46
  judgeSeverity?: "fail" | "warn";
23
47
  }
48
+ export declare function qcWithoutJudgeWording(qc: ClipQc): ClipQc;
49
+ export declare const NO_TAKE_HISTORY_LINE = "no history recorded for this clip";
50
+ export declare function renderQcTakeHistory(takes: ClipQcTake[] | undefined): string[];
24
51
  export type ArtifactSubset = {
25
52
  type: "storyboard";
26
53
  storyboard?: unknown;
@@ -69,12 +96,23 @@ export type ArtifactSubset = {
69
96
  } | {
70
97
  type: "text" | "primer" | "session" | "document";
71
98
  };
99
+ export interface PlanFailureRecord {
100
+ kind: string;
101
+ partsTotal?: number;
102
+ acceptedParts?: number;
103
+ acceptedScenes?: number;
104
+ failedPart?: number;
105
+ reasons?: string[];
106
+ lines: string[];
107
+ }
72
108
  export interface VideoRunNode {
73
109
  nodeId: string;
74
110
  kind: string;
75
- status: "idle" | "running" | "done" | "failed" | "skipped";
111
+ status: "idle" | "running" | "done" | "failed" | "skipped" | "out-of-scope";
76
112
  error?: string;
77
113
  warning?: string;
114
+ planFailure?: PlanFailureRecord;
115
+ hasRejectedDraft?: boolean;
78
116
  outputs?: ArtifactSubset[];
79
117
  }
80
118
  export type BuilderPauseReason = "taste" | "repair" | "slots" | "call" | "checkpoint";
@@ -103,6 +141,8 @@ export interface VideoRun {
103
141
  pauseAhead?: WorkflowRun["pauseAhead"];
104
142
  castLock?: PullCastLock | null;
105
143
  provenance?: RunProvenance;
144
+ musicBed?: boolean;
145
+ videoChoice?: RunVideoChoice;
106
146
  workflowId?: string;
107
147
  moduleOwned?: boolean;
108
148
  }
@@ -117,6 +157,15 @@ export interface NodeItem {
117
157
  flagged?: boolean;
118
158
  findings?: ClipFinding[];
119
159
  staleClaim?: boolean;
160
+ lastRedo?: {
161
+ take: number;
162
+ outcome: string;
163
+ label: string;
164
+ displacedHistory?: {
165
+ title: string;
166
+ lines: string[];
167
+ };
168
+ };
120
169
  artifact?: ArtifactSubset;
121
170
  }
122
171
  export interface ShowRow {
@@ -168,6 +217,7 @@ export type RunStop = {
168
217
  at: "storyboard-gate";
169
218
  nodeId?: string;
170
219
  framesNodeId?: string;
220
+ showAd?: true;
171
221
  } | {
172
222
  at: "final-watch";
173
223
  } | {
@@ -184,11 +234,24 @@ export type RunStop = {
184
234
  at: "finished";
185
235
  status: string;
186
236
  };
237
+ export type ResolvedStop = Exclude<RunStop, {
238
+ at: "final-watch";
239
+ }> | {
240
+ at: "final-watch";
241
+ cutAttached: boolean | null;
242
+ };
187
243
  export declare function classifyRun(run: VideoRun): RunStop;
244
+ export declare function hasAttachedCut(items: NodeItem[]): boolean;
245
+ export declare function resolveStop(stop: RunStop, cutAttached: boolean | null): ResolvedStop;
246
+ export declare function resolveStopAtPark(stop: RunStop, runId: string, deps: Pick<VideoDeps, "get">): Promise<ResolvedStop>;
188
247
  export declare function stageWord(stage: string): string;
189
248
  export declare function stepName(kind: string | undefined): string;
249
+ export declare function isShowAd(run: Pick<VideoRun, "moduleOwned">): boolean;
190
250
  export declare function reviewUrl(dashboardUrl: string, run: Pick<VideoRun, "_id" | "workflowId" | "moduleOwned">): string;
191
- export declare function stopLines(stop: RunStop, runId: string, runUrl: string): string[];
251
+ export declare function stopLines(stop: ResolvedStop, runId: string, runUrl: string): string[];
252
+ export declare function failedStoryboardNode(run: VideoRun): VideoRunNode | undefined;
253
+ export declare function errorEchoesReasons(error: string | undefined, record: PlanFailureRecord | undefined): boolean;
254
+ export declare function planFailureLines(node: VideoRunNode | undefined, runId: string): string[];
192
255
  export interface PullDownload {
193
256
  file: string;
194
257
  url: string;
@@ -231,6 +294,14 @@ export interface ManifestCastRef {
231
294
  voiceLabel: string | null;
232
295
  voiceDescription: string | null;
233
296
  }
297
+ export type MusicBedState = "on" | "off" | "unknown";
298
+ export interface RunVideoChoice {
299
+ videoModel: string;
300
+ videoModelLabel: string;
301
+ voiceMode: string;
302
+ voiceModeLabel: string;
303
+ }
304
+ export declare const MUSIC_HEARD_CODE = "music-heard";
234
305
  export interface VideoManifest {
235
306
  runId: string;
236
307
  pulledAt: string;
@@ -238,6 +309,8 @@ export interface VideoManifest {
238
309
  storyboard: string | null;
239
310
  reference: string | null;
240
311
  music: string | null;
312
+ musicBed: MusicBedState;
313
+ musicHeardScenes: number[];
241
314
  cast: ManifestCastRef[];
242
315
  narration: {
243
316
  file: string;
@@ -246,8 +319,13 @@ export interface VideoManifest {
246
319
  scenes: ManifestScene[];
247
320
  failed: PullFailure[];
248
321
  provenance?: RunProvenance;
322
+ videoChoice?: {
323
+ videoModel: string;
324
+ voiceMode: string;
325
+ };
249
326
  }
250
- export declare const CAST_LEDGER_BASE = 910000;
327
+ export declare const CAST_LEDGER_BASE: number;
328
+ export declare function musicBedState(run: VideoRun): MusicBedState;
251
329
  export interface PullPlan {
252
330
  downloads: PullDownload[];
253
331
  texts: PullTextFile[];
@@ -270,7 +348,39 @@ export interface StartOptions {
270
348
  wait: boolean;
271
349
  json: boolean;
272
350
  }
351
+ export interface ScriptStartOptions {
352
+ scriptFile: string;
353
+ conceit: (typeof CONCEIT_KEYS)[number];
354
+ style: string;
355
+ direction?: string;
356
+ voicePath?: string;
357
+ videoModel?: string;
358
+ voiceMode?: VoiceMode;
359
+ music?: boolean;
360
+ wait: boolean;
361
+ json: boolean;
362
+ }
363
+ export type VideoStartPlan = {
364
+ kind: "usage";
365
+ line: string;
366
+ } | {
367
+ kind: "show";
368
+ opts: StartOptions;
369
+ } | {
370
+ kind: "script";
371
+ opts: ScriptStartOptions;
372
+ };
273
373
  export declare function startFlow(opts: StartOptions, deps: VideoDeps): Promise<FlowResult>;
374
+ export type MusicChoice = {
375
+ ok: true;
376
+ music: boolean | undefined;
377
+ } | {
378
+ ok: false;
379
+ line: string;
380
+ };
381
+ export declare function planMusicChoice(occurrences: FlagOccurrence[]): MusicChoice;
382
+ export declare function planVideoStart(flags: Record<string, string | boolean>, occurrences: FlagOccurrence[]): VideoStartPlan;
383
+ export declare function startScriptFlow(opts: ScriptStartOptions, deps: VideoDeps): Promise<FlowResult>;
274
384
  export declare function waitFlow(runId: string, opts: {
275
385
  json: boolean;
276
386
  url?: string;
@@ -278,8 +388,12 @@ export declare function waitFlow(runId: string, opts: {
278
388
  maxPolls?: number;
279
389
  }, deps: VideoDeps): Promise<FlowResult>;
280
390
  export declare function statusFlow(runId: string, json: boolean, deps: VideoDeps): Promise<FlowResult>;
391
+ export declare function rejectedDraftFlow(runId: string, json: boolean, deps: VideoDeps): Promise<FlowResult>;
281
392
  export declare function storyboardFlow(runId: string, json: boolean, deps: VideoDeps): Promise<FlowResult>;
282
- export declare function approveFlow(runId: string, json: boolean, deps: VideoDeps): Promise<FlowResult>;
393
+ export declare function approveFlow(runId: string, opts: {
394
+ json: boolean;
395
+ approveStaleCut: boolean;
396
+ }, deps: VideoDeps): Promise<FlowResult>;
283
397
  export declare function flagFlow(runId: string, note: string, json: boolean, deps: VideoDeps): Promise<FlowResult>;
284
398
  export declare function retryFrameFlow(runId: string, nodeId: string, sceneIndex: number, note: string | undefined, json: boolean, deps: VideoDeps): Promise<FlowResult>;
285
399
  export type ClipRedoPlan = {
@@ -365,3 +479,4 @@ export declare function describeFetchFailure(err: unknown): string;
365
479
  export declare function uploadFlow(runId: string, filePath: string, durationFlag: string | undefined, json: boolean, deps: VideoDeps): Promise<FlowResult>;
366
480
  export declare function parsePositional(args?: string[]): string[];
367
481
  export declare function run(flags: Record<string, string | boolean>, occurrences: FlagOccurrence[]): Promise<void>;
482
+ export {};