@aicopycoders/exodus 2026.9.2000-beta.1 → 2026.9.2000-beta.11
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 +142 -21
- 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 +126 -5
- package/dist/commands/video.js +656 -54
- package/dist/commands/workflow.d.ts +52 -4
- 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;
|
|
@@ -47,6 +74,7 @@ export type ArtifactSubset = {
|
|
|
47
74
|
speechTrimmed?: boolean;
|
|
48
75
|
tailTrimmed?: boolean;
|
|
49
76
|
rawStorageId?: string;
|
|
77
|
+
voiceMode?: "voice-first";
|
|
50
78
|
} | {
|
|
51
79
|
type: "audio";
|
|
52
80
|
sceneIndex?: number;
|
|
@@ -69,12 +97,23 @@ export type ArtifactSubset = {
|
|
|
69
97
|
} | {
|
|
70
98
|
type: "text" | "primer" | "session" | "document";
|
|
71
99
|
};
|
|
100
|
+
export interface PlanFailureRecord {
|
|
101
|
+
kind: string;
|
|
102
|
+
partsTotal?: number;
|
|
103
|
+
acceptedParts?: number;
|
|
104
|
+
acceptedScenes?: number;
|
|
105
|
+
failedPart?: number;
|
|
106
|
+
reasons?: string[];
|
|
107
|
+
lines: string[];
|
|
108
|
+
}
|
|
72
109
|
export interface VideoRunNode {
|
|
73
110
|
nodeId: string;
|
|
74
111
|
kind: string;
|
|
75
|
-
status: "idle" | "running" | "done" | "failed" | "skipped";
|
|
112
|
+
status: "idle" | "running" | "done" | "failed" | "skipped" | "out-of-scope";
|
|
76
113
|
error?: string;
|
|
77
114
|
warning?: string;
|
|
115
|
+
planFailure?: PlanFailureRecord;
|
|
116
|
+
hasRejectedDraft?: boolean;
|
|
78
117
|
outputs?: ArtifactSubset[];
|
|
79
118
|
}
|
|
80
119
|
export type BuilderPauseReason = "taste" | "repair" | "slots" | "call" | "checkpoint";
|
|
@@ -103,6 +142,8 @@ export interface VideoRun {
|
|
|
103
142
|
pauseAhead?: WorkflowRun["pauseAhead"];
|
|
104
143
|
castLock?: PullCastLock | null;
|
|
105
144
|
provenance?: RunProvenance;
|
|
145
|
+
musicBed?: boolean;
|
|
146
|
+
videoChoice?: RunVideoChoice;
|
|
106
147
|
workflowId?: string;
|
|
107
148
|
moduleOwned?: boolean;
|
|
108
149
|
}
|
|
@@ -117,6 +158,15 @@ export interface NodeItem {
|
|
|
117
158
|
flagged?: boolean;
|
|
118
159
|
findings?: ClipFinding[];
|
|
119
160
|
staleClaim?: boolean;
|
|
161
|
+
lastRedo?: {
|
|
162
|
+
take: number;
|
|
163
|
+
outcome: string;
|
|
164
|
+
label: string;
|
|
165
|
+
displacedHistory?: {
|
|
166
|
+
title: string;
|
|
167
|
+
lines: string[];
|
|
168
|
+
};
|
|
169
|
+
};
|
|
120
170
|
artifact?: ArtifactSubset;
|
|
121
171
|
}
|
|
122
172
|
export interface ShowRow {
|
|
@@ -168,6 +218,7 @@ export type RunStop = {
|
|
|
168
218
|
at: "storyboard-gate";
|
|
169
219
|
nodeId?: string;
|
|
170
220
|
framesNodeId?: string;
|
|
221
|
+
showAd?: true;
|
|
171
222
|
} | {
|
|
172
223
|
at: "final-watch";
|
|
173
224
|
} | {
|
|
@@ -184,11 +235,24 @@ export type RunStop = {
|
|
|
184
235
|
at: "finished";
|
|
185
236
|
status: string;
|
|
186
237
|
};
|
|
238
|
+
export type ResolvedStop = Exclude<RunStop, {
|
|
239
|
+
at: "final-watch";
|
|
240
|
+
}> | {
|
|
241
|
+
at: "final-watch";
|
|
242
|
+
cutAttached: boolean | null;
|
|
243
|
+
};
|
|
187
244
|
export declare function classifyRun(run: VideoRun): RunStop;
|
|
245
|
+
export declare function hasAttachedCut(items: NodeItem[]): boolean;
|
|
246
|
+
export declare function resolveStop(stop: RunStop, cutAttached: boolean | null): ResolvedStop;
|
|
247
|
+
export declare function resolveStopAtPark(stop: RunStop, runId: string, deps: Pick<VideoDeps, "get">): Promise<ResolvedStop>;
|
|
188
248
|
export declare function stageWord(stage: string): string;
|
|
189
249
|
export declare function stepName(kind: string | undefined): string;
|
|
250
|
+
export declare function isShowAd(run: Pick<VideoRun, "moduleOwned">): boolean;
|
|
190
251
|
export declare function reviewUrl(dashboardUrl: string, run: Pick<VideoRun, "_id" | "workflowId" | "moduleOwned">): string;
|
|
191
|
-
export declare function stopLines(stop:
|
|
252
|
+
export declare function stopLines(stop: ResolvedStop, runId: string, runUrl: string): string[];
|
|
253
|
+
export declare function failedStoryboardNode(run: VideoRun): VideoRunNode | undefined;
|
|
254
|
+
export declare function errorEchoesReasons(error: string | undefined, record: PlanFailureRecord | undefined): boolean;
|
|
255
|
+
export declare function planFailureLines(node: VideoRunNode | undefined, runId: string): string[];
|
|
192
256
|
export interface PullDownload {
|
|
193
257
|
file: string;
|
|
194
258
|
url: string;
|
|
@@ -210,6 +274,7 @@ export interface ManifestScene {
|
|
|
210
274
|
revoiced: boolean | null;
|
|
211
275
|
speechTrimmed: boolean | null;
|
|
212
276
|
rawStorageId: string | null;
|
|
277
|
+
voiceMode: "voice-first" | null;
|
|
213
278
|
clipStatus: string;
|
|
214
279
|
error: string | null;
|
|
215
280
|
flagged: boolean;
|
|
@@ -231,6 +296,14 @@ export interface ManifestCastRef {
|
|
|
231
296
|
voiceLabel: string | null;
|
|
232
297
|
voiceDescription: string | null;
|
|
233
298
|
}
|
|
299
|
+
export type MusicBedState = "on" | "off" | "unknown";
|
|
300
|
+
export interface RunVideoChoice {
|
|
301
|
+
videoModel: string;
|
|
302
|
+
videoModelLabel: string;
|
|
303
|
+
voiceMode: string;
|
|
304
|
+
voiceModeLabel: string;
|
|
305
|
+
}
|
|
306
|
+
export declare const MUSIC_HEARD_CODE = "music-heard";
|
|
234
307
|
export interface VideoManifest {
|
|
235
308
|
runId: string;
|
|
236
309
|
pulledAt: string;
|
|
@@ -238,6 +311,8 @@ export interface VideoManifest {
|
|
|
238
311
|
storyboard: string | null;
|
|
239
312
|
reference: string | null;
|
|
240
313
|
music: string | null;
|
|
314
|
+
musicBed: MusicBedState;
|
|
315
|
+
musicHeardScenes: number[];
|
|
241
316
|
cast: ManifestCastRef[];
|
|
242
317
|
narration: {
|
|
243
318
|
file: string;
|
|
@@ -246,8 +321,13 @@ export interface VideoManifest {
|
|
|
246
321
|
scenes: ManifestScene[];
|
|
247
322
|
failed: PullFailure[];
|
|
248
323
|
provenance?: RunProvenance;
|
|
324
|
+
videoChoice?: {
|
|
325
|
+
videoModel: string;
|
|
326
|
+
voiceMode: string;
|
|
327
|
+
};
|
|
249
328
|
}
|
|
250
|
-
export declare const CAST_LEDGER_BASE
|
|
329
|
+
export declare const CAST_LEDGER_BASE: number;
|
|
330
|
+
export declare function musicBedState(run: VideoRun): MusicBedState;
|
|
251
331
|
export interface PullPlan {
|
|
252
332
|
downloads: PullDownload[];
|
|
253
333
|
texts: PullTextFile[];
|
|
@@ -270,7 +350,39 @@ export interface StartOptions {
|
|
|
270
350
|
wait: boolean;
|
|
271
351
|
json: boolean;
|
|
272
352
|
}
|
|
353
|
+
export interface ScriptStartOptions {
|
|
354
|
+
scriptFile: string;
|
|
355
|
+
conceit: (typeof CONCEIT_KEYS)[number];
|
|
356
|
+
style: string;
|
|
357
|
+
direction?: string;
|
|
358
|
+
voicePath?: string;
|
|
359
|
+
videoModel?: string;
|
|
360
|
+
voiceMode?: VoiceMode;
|
|
361
|
+
music?: boolean;
|
|
362
|
+
wait: boolean;
|
|
363
|
+
json: boolean;
|
|
364
|
+
}
|
|
365
|
+
export type VideoStartPlan = {
|
|
366
|
+
kind: "usage";
|
|
367
|
+
line: string;
|
|
368
|
+
} | {
|
|
369
|
+
kind: "show";
|
|
370
|
+
opts: StartOptions;
|
|
371
|
+
} | {
|
|
372
|
+
kind: "script";
|
|
373
|
+
opts: ScriptStartOptions;
|
|
374
|
+
};
|
|
273
375
|
export declare function startFlow(opts: StartOptions, deps: VideoDeps): Promise<FlowResult>;
|
|
376
|
+
export type MusicChoice = {
|
|
377
|
+
ok: true;
|
|
378
|
+
music: boolean | undefined;
|
|
379
|
+
} | {
|
|
380
|
+
ok: false;
|
|
381
|
+
line: string;
|
|
382
|
+
};
|
|
383
|
+
export declare function planMusicChoice(occurrences: FlagOccurrence[]): MusicChoice;
|
|
384
|
+
export declare function planVideoStart(flags: Record<string, string | boolean>, occurrences: FlagOccurrence[]): VideoStartPlan;
|
|
385
|
+
export declare function startScriptFlow(opts: ScriptStartOptions, deps: VideoDeps): Promise<FlowResult>;
|
|
274
386
|
export declare function waitFlow(runId: string, opts: {
|
|
275
387
|
json: boolean;
|
|
276
388
|
url?: string;
|
|
@@ -278,8 +390,12 @@ export declare function waitFlow(runId: string, opts: {
|
|
|
278
390
|
maxPolls?: number;
|
|
279
391
|
}, deps: VideoDeps): Promise<FlowResult>;
|
|
280
392
|
export declare function statusFlow(runId: string, json: boolean, deps: VideoDeps): Promise<FlowResult>;
|
|
393
|
+
export declare function rejectedDraftFlow(runId: string, json: boolean, deps: VideoDeps): Promise<FlowResult>;
|
|
281
394
|
export declare function storyboardFlow(runId: string, json: boolean, deps: VideoDeps): Promise<FlowResult>;
|
|
282
|
-
export declare function approveFlow(runId: string,
|
|
395
|
+
export declare function approveFlow(runId: string, opts: {
|
|
396
|
+
json: boolean;
|
|
397
|
+
approveStaleCut: boolean;
|
|
398
|
+
}, deps: VideoDeps): Promise<FlowResult>;
|
|
283
399
|
export declare function flagFlow(runId: string, note: string, json: boolean, deps: VideoDeps): Promise<FlowResult>;
|
|
284
400
|
export declare function retryFrameFlow(runId: string, nodeId: string, sceneIndex: number, note: string | undefined, json: boolean, deps: VideoDeps): Promise<FlowResult>;
|
|
285
401
|
export type ClipRedoPlan = {
|
|
@@ -297,7 +413,11 @@ export interface ClipRedoTarget {
|
|
|
297
413
|
nodeId?: string;
|
|
298
414
|
}
|
|
299
415
|
export declare function planClipRedo(run: VideoRun, items: NodeItem[], target: ClipRedoTarget): ClipRedoPlan;
|
|
300
|
-
export
|
|
416
|
+
export interface ClipRedoOptions {
|
|
417
|
+
note?: string;
|
|
418
|
+
voiceFirst?: boolean;
|
|
419
|
+
}
|
|
420
|
+
export declare function retryClipFlow(runId: string, target: ClipRedoTarget, { note, voiceFirst }: ClipRedoOptions, json: boolean, deps: VideoDeps): Promise<FlowResult>;
|
|
301
421
|
export declare const VOICE_PATHS_NEVER_HEARD: Set<string>;
|
|
302
422
|
export declare function planClipRevoice(run: VideoRun, items: NodeItem[], target: ClipRedoTarget): ClipRedoPlan;
|
|
303
423
|
export type RevoiceTarget = ClipRedoTarget | {
|
|
@@ -365,3 +485,4 @@ export declare function describeFetchFailure(err: unknown): string;
|
|
|
365
485
|
export declare function uploadFlow(runId: string, filePath: string, durationFlag: string | undefined, json: boolean, deps: VideoDeps): Promise<FlowResult>;
|
|
366
486
|
export declare function parsePositional(args?: string[]): string[];
|
|
367
487
|
export declare function run(flags: Record<string, string | boolean>, occurrences: FlagOccurrence[]): Promise<void>;
|
|
488
|
+
export {};
|