@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.
- package/assets/docs/PIPELINES.md +2 -1
- package/assets/skills/exodus-meme/SKILL.md +4 -3
- package/assets/skills/exodus-template/SKILL.md +2 -1
- package/assets/skills/exodus-video/SKILL.md +126 -19
- package/assets/skills/exodus-workflow/SKILL.md +1 -1
- package/dist/commands/genesis.js +12 -133
- package/dist/commands/image.js +1 -1
- package/dist/commands/status.js +8 -18
- package/dist/commands/template.js +11 -4
- package/dist/commands/video.d.ts +119 -4
- package/dist/commands/video.js +613 -48
- package/dist/commands/workflow.d.ts +51 -3
- package/dist/commands/workflow.js +62 -9
- package/dist/lib/helperLedgerBase.d.ts +3 -0
- package/dist/lib/helperLedgerBase.js +3 -0
- package/package.json +1 -1
package/dist/commands/video.d.ts
CHANGED
|
@@ -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:
|
|
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
|
|
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,
|
|
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 {};
|