@aicopycoders/exodus 2026.9.200 → 2026.9.1100-beta.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,213 @@
1
+ import { type ApiResponse } from "../lib/client.js";
2
+ export declare const helpText: string;
3
+ export interface ClipWord {
4
+ w: string;
5
+ s: number;
6
+ e: number;
7
+ }
8
+ export interface ClipQc {
9
+ verdict: "pass" | "fail";
10
+ attempts: number;
11
+ }
12
+ export interface ClipFinding {
13
+ check: string;
14
+ code: string;
15
+ severity: "fail" | "warn";
16
+ detail: string;
17
+ }
18
+ export type ArtifactSubset = {
19
+ type: "storyboard";
20
+ storyboard?: unknown;
21
+ storyboardJson?: string;
22
+ } | {
23
+ type: "frames";
24
+ frames?: Array<{
25
+ sceneIndex: number;
26
+ imageUrl?: string;
27
+ }>;
28
+ } | {
29
+ type: "image";
30
+ imageUrl?: string;
31
+ } | {
32
+ type: "video";
33
+ sceneIndex?: number;
34
+ videoUrl?: string;
35
+ durationSec?: number;
36
+ words?: ClipWord[];
37
+ qc?: ClipQc;
38
+ final?: boolean;
39
+ } | {
40
+ type: "audio";
41
+ sceneIndex?: number;
42
+ audioUrl?: string;
43
+ durationSec?: number;
44
+ } | {
45
+ type: "text" | "primer" | "session" | "document";
46
+ };
47
+ export interface VideoRunNode {
48
+ nodeId: string;
49
+ kind: string;
50
+ status: "idle" | "running" | "done" | "failed" | "skipped";
51
+ error?: string;
52
+ outputs?: ArtifactSubset[];
53
+ }
54
+ export type BuilderPauseReason = "taste" | "repair" | "slots" | "call" | "checkpoint";
55
+ export interface VideoRun {
56
+ _id: string;
57
+ status: string;
58
+ isTerminal: boolean;
59
+ error?: string;
60
+ pauseReason?: BuilderPauseReason;
61
+ pausedNodeId?: string;
62
+ nodes: VideoRunNode[];
63
+ }
64
+ export declare function asVideoRun(data: unknown): VideoRun;
65
+ export interface NodeItem {
66
+ nodeId: string;
67
+ sceneIndex: number;
68
+ itemKind: string;
69
+ status: string;
70
+ error?: string;
71
+ attempt?: number;
72
+ flagged?: boolean;
73
+ findings?: ClipFinding[];
74
+ }
75
+ export interface ShowRow {
76
+ id: string;
77
+ name: string;
78
+ status?: string;
79
+ medium?: string;
80
+ styleSlug?: string;
81
+ ready?: boolean;
82
+ setupProgress?: {
83
+ set?: boolean;
84
+ cast?: boolean;
85
+ voices?: boolean;
86
+ };
87
+ }
88
+ export interface FlowResult {
89
+ code: number;
90
+ lines: string[];
91
+ }
92
+ export interface VideoDeps {
93
+ get: (path: string) => Promise<ApiResponse<unknown>>;
94
+ post: (path: string, body: unknown) => Promise<ApiResponse<unknown>>;
95
+ mkdirp: (dir: string) => void;
96
+ writeFile: (filePath: string, text: string) => void;
97
+ downloadToFile: (url: string, filePath: string) => Promise<void>;
98
+ readFile: (filePath: string) => string;
99
+ readFileBytes: (filePath: string) => Uint8Array;
100
+ statFile: (filePath: string) => {
101
+ size: number;
102
+ } | null;
103
+ uploadBytes: (uploadUrl: string, contentType: string, bytes: Uint8Array) => Promise<{
104
+ ok: boolean;
105
+ status: number;
106
+ storageId?: string;
107
+ body?: string;
108
+ }>;
109
+ probeDurationSec: (filePath: string) => number | null;
110
+ sleep: (ms: number) => Promise<void>;
111
+ now: () => number;
112
+ dashboardUrl: string;
113
+ }
114
+ export declare const defaultDeps: VideoDeps;
115
+ export declare const VIDEO_NOT_FOUND_MESSAGE: string;
116
+ export declare function videoApiError(res: ApiResponse<unknown>): string;
117
+ export type RunStop = {
118
+ at: "running";
119
+ stage: string;
120
+ } | {
121
+ at: "storyboard-gate";
122
+ nodeId?: string;
123
+ } | {
124
+ at: "final-watch";
125
+ } | {
126
+ at: "paused";
127
+ nodeId?: string;
128
+ reason?: string;
129
+ } | {
130
+ at: "failed";
131
+ error?: string;
132
+ } | {
133
+ at: "finished";
134
+ status: string;
135
+ };
136
+ export declare function classifyRun(run: VideoRun): RunStop;
137
+ export declare function stageWord(stage: string): string;
138
+ export declare function stopLines(stop: RunStop, runId: string, dashboardUrl: string): string[];
139
+ export interface PullDownload {
140
+ file: string;
141
+ url: string;
142
+ }
143
+ export interface PullTextFile {
144
+ file: string;
145
+ body: string;
146
+ }
147
+ export interface ManifestScene {
148
+ sceneIndex: number;
149
+ durationSec: number | null;
150
+ clip: string | null;
151
+ words: string | null;
152
+ voice: string | null;
153
+ keyframe: string | null;
154
+ qc: ClipQc | null;
155
+ clipStatus: string;
156
+ error: string | null;
157
+ flagged: boolean;
158
+ findings: ClipFinding[];
159
+ }
160
+ export interface PullFailure {
161
+ file: string;
162
+ url: string;
163
+ error: string;
164
+ }
165
+ export interface VideoManifest {
166
+ runId: string;
167
+ pulledAt: string;
168
+ dashboardUrl: string;
169
+ storyboard: string | null;
170
+ reference: string | null;
171
+ music: string | null;
172
+ scenes: ManifestScene[];
173
+ failed: PullFailure[];
174
+ }
175
+ export interface PullPlan {
176
+ downloads: PullDownload[];
177
+ texts: PullTextFile[];
178
+ manifest: VideoManifest;
179
+ }
180
+ export declare function extensionFromUrl(url: string): string | undefined;
181
+ export declare function scenePrefix(sceneIndex: number): string;
182
+ export declare function planPull(run: VideoRun, items: NodeItem[], opts: {
183
+ pulledAt: string;
184
+ dashboardUrl: string;
185
+ }): PullPlan;
186
+ export declare function markPullFailure(manifest: VideoManifest, failure: PullFailure): void;
187
+ export declare function missingSetupLabels(progress: ShowRow["setupProgress"]): string[];
188
+ export declare function showsFlow(json: boolean, deps: VideoDeps): Promise<FlowResult>;
189
+ export interface StartOptions {
190
+ showId: string;
191
+ scriptFile: string;
192
+ voicePath?: string;
193
+ music?: boolean;
194
+ wait: boolean;
195
+ json: boolean;
196
+ }
197
+ export declare function startFlow(opts: StartOptions, deps: VideoDeps): Promise<FlowResult>;
198
+ export declare function waitFlow(runId: string, opts: {
199
+ json: boolean;
200
+ url?: string;
201
+ intervalMs?: number;
202
+ maxPolls?: number;
203
+ }, deps: VideoDeps): Promise<FlowResult>;
204
+ export declare function statusFlow(runId: string, json: boolean, deps: VideoDeps): Promise<FlowResult>;
205
+ export declare function storyboardFlow(runId: string, json: boolean, deps: VideoDeps): Promise<FlowResult>;
206
+ export declare function approveFlow(runId: string, json: boolean, deps: VideoDeps): Promise<FlowResult>;
207
+ export declare function flagFlow(runId: string, note: string, json: boolean, deps: VideoDeps): Promise<FlowResult>;
208
+ export declare function pullFlow(runId: string, dir: string, json: boolean, deps: VideoDeps): Promise<FlowResult>;
209
+ export declare function parseMvhdDurationSec(bytes: Uint8Array): number | null;
210
+ export declare const NO_DURATION_MESSAGE: string;
211
+ export declare function uploadFlow(runId: string, filePath: string, durationFlag: string | undefined, json: boolean, deps: VideoDeps): Promise<FlowResult>;
212
+ export declare function parsePositional(args?: string[]): string[];
213
+ export declare function run(flags: Record<string, string | boolean>): Promise<void>;