@aicopycoders/exodus 2026.7.200-beta.11 → 2026.7.200-beta.13

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,7 +1,18 @@
1
1
  import { type ApiResponse } from "../lib/client.js";
2
2
  import { type PollOptions, type PollResult } from "../lib/poll.js";
3
+ import { type Channel } from "../lib/channel.js";
3
4
  export declare const helpText: string;
4
- export type WorkflowNodeKind = "brief" | "bot" | "primer" | "image" | "rig" | "storyboard" | "reference" | "scene-frames" | "video" | "voiceover" | "output" | "show-set" | "show-cast" | "show-voices" | "product-truth";
5
+ export type WorkflowNodeKind = "brief" | "bot" | "primer" | "image" | "rig" | "storyboard" | "reference" | "scene-frames" | "video" | "voiceover" | "output" | "push" | "gate" | "call" | "show-set" | "show-cast" | "show-voices" | "product-truth" | "transform";
6
+ export type WorkflowSlotState = "locked" | "auto" | "ask" | "inferred";
7
+ export interface WorkflowSlot {
8
+ id: string;
9
+ label: string;
10
+ state: WorkflowSlotState;
11
+ nodeId: string;
12
+ configKey: string;
13
+ value?: string;
14
+ hint?: string;
15
+ }
5
16
  export interface WorkflowNode {
6
17
  id: string;
7
18
  kind: WorkflowNodeKind;
@@ -18,6 +29,16 @@ export interface WorkflowEdge {
18
29
  target: string;
19
30
  targetHandle: string;
20
31
  }
32
+ export type WorkflowTriggerEvent = "winner-promoted";
33
+ export type WorkflowTrigger = {
34
+ type: "event";
35
+ event: WorkflowTriggerEvent;
36
+ enabled: boolean;
37
+ } | {
38
+ type: "cron";
39
+ cron: string;
40
+ enabled: boolean;
41
+ };
21
42
  export interface WorkflowContractJson {
22
43
  contract: "exodus-workflow";
23
44
  version: number;
@@ -25,6 +46,8 @@ export interface WorkflowContractJson {
25
46
  updatedAt?: string;
26
47
  name: string;
27
48
  description?: string;
49
+ slots?: WorkflowSlot[];
50
+ triggers?: WorkflowTrigger[];
28
51
  nodes: WorkflowNode[];
29
52
  edges: WorkflowEdge[];
30
53
  }
@@ -40,10 +63,11 @@ export interface WorkflowImportResult {
40
63
  workflowId?: string;
41
64
  nodeCount: number;
42
65
  edgeCount: number;
66
+ triggers?: WorkflowTrigger[];
43
67
  unresolved: UnresolvedWorkflowRef[];
44
68
  warnings: string[];
45
69
  }
46
- export type GraphIssueCode = "bad-shape" | "unknown-kind" | "duplicate-node-id" | "dangling-edge" | "unknown-port" | "type-mismatch" | "duplicate-input" | "cycle" | "missing-required-input" | "bad-config";
70
+ export type GraphIssueCode = "bad-shape" | "unknown-kind" | "duplicate-node-id" | "dangling-edge" | "unknown-port" | "type-mismatch" | "duplicate-input" | "session-fan-out" | "cycle" | "missing-required-input" | "bad-config" | "bad-slot" | "bad-trigger";
47
71
  export interface GraphIssue {
48
72
  code: GraphIssueCode;
49
73
  message: string;
@@ -59,7 +83,7 @@ export interface WorkflowImportError {
59
83
  issues?: GraphIssue[];
60
84
  currentUpdatedAt?: string;
61
85
  }
62
- export type WorkflowPortType = "text" | "primer" | "image" | "rig" | "storyboard" | "frames" | "video" | "audio" | "show";
86
+ export type WorkflowPortType = "text" | "primer" | "image" | "rig" | "storyboard" | "frames" | "video" | "audio" | "show" | "session";
63
87
  export type WorkflowPrimerKind = "body" | "hook" | "headline" | "summary";
64
88
  export type WorkflowDurationSpec = {
65
89
  kind: "fixed";
@@ -74,6 +98,8 @@ export interface CatalogVideoModel {
74
98
  label: string;
75
99
  durations: WorkflowDurationSpec;
76
100
  audioTogglable: boolean;
101
+ aspectRatios: string[];
102
+ resolutions: string[];
77
103
  }
78
104
  export type WorkflowParamKind = "select" | "text" | "textarea" | "toggle" | "number" | "multiselect";
79
105
  export interface CatalogInput {
@@ -104,7 +130,6 @@ export interface CatalogBot {
104
130
  inputs: CatalogInput[];
105
131
  params: CatalogParam[];
106
132
  outputType: string;
107
- splitsOutput: boolean;
108
133
  }
109
134
  export interface WorkflowCatalog {
110
135
  catalog: "exodus-workflow-catalog";
@@ -130,6 +155,12 @@ export interface WorkflowCatalog {
130
155
  summaryOnlySlugs: string[];
131
156
  notes: string;
132
157
  };
158
+ promptBot: {
159
+ slug: "prompt";
160
+ configKey: "promptText";
161
+ inputs: CatalogInput[];
162
+ notes: string;
163
+ };
133
164
  }
134
165
  export type WorkflowBriefSource = "text" | "swipe-ad" | "swipe-bundle" | "organic-url" | "ad-url";
135
166
  export interface WorkflowInputDescriptor {
@@ -149,6 +180,7 @@ export interface WorkflowOutputDescriptor {
149
180
  label: string;
150
181
  nodeId: string;
151
182
  botSlug?: string;
183
+ port?: string;
152
184
  }
153
185
  export interface WorkflowDescribeResponse {
154
186
  workflowId: string;
@@ -161,6 +193,15 @@ export interface WorkflowDescribeResponse {
161
193
  }>;
162
194
  outputs: WorkflowOutputDescriptor[];
163
195
  }
196
+ export interface WorkflowTemplateListItem {
197
+ key: string;
198
+ label: string;
199
+ description: string;
200
+ module?: string;
201
+ }
202
+ export interface WorkflowTemplatesResponse {
203
+ templates: WorkflowTemplateListItem[];
204
+ }
164
205
  export interface WorkflowListItem {
165
206
  _id: string;
166
207
  name: string;
@@ -175,12 +216,23 @@ export interface WorkflowListItem {
175
216
  export interface WorkflowListResponse {
176
217
  workflows: WorkflowListItem[];
177
218
  }
219
+ export interface WorkflowVersion {
220
+ version: number;
221
+ name: string;
222
+ savedAt: string;
223
+ savedByName?: string;
224
+ }
225
+ export interface WorkflowVersionsResponse {
226
+ versions: WorkflowVersion[];
227
+ }
178
228
  export type WorkflowRunStatus = "queued" | "running" | "awaiting-review" | "completed" | "partial" | "failed" | "canceled";
179
229
  export type WorkflowNodeRunStatus = "idle" | "running" | "done" | "failed" | "skipped";
180
230
  export type WorkflowArtifact = {
181
231
  type: "text";
182
232
  text: string;
183
233
  label?: string;
234
+ port?: string;
235
+ humanEdited?: boolean;
184
236
  } | {
185
237
  type: "primer";
186
238
  text: string;
@@ -189,6 +241,11 @@ export type WorkflowArtifact = {
189
241
  type: "image";
190
242
  storageId: string;
191
243
  imageUrl?: string;
244
+ } | {
245
+ type: "session";
246
+ sessionId: string;
247
+ label?: string;
248
+ port?: string;
192
249
  };
193
250
  export interface WorkflowRunOutput {
194
251
  nodeId: string;
@@ -224,6 +281,22 @@ export interface WorkflowCounts {
224
281
  skipped: number;
225
282
  total: number;
226
283
  }
284
+ export interface WorkflowRunSession {
285
+ sessionId: string;
286
+ nodeId: string;
287
+ title: string;
288
+ botSlug: string;
289
+ }
290
+ export type WorkflowPauseReason = "taste" | "repair" | "slots" | "call";
291
+ export interface WorkflowPendingSlot {
292
+ id: string;
293
+ label?: string;
294
+ state?: string;
295
+ nodeId?: string;
296
+ configKey?: string;
297
+ value?: string;
298
+ hint?: string;
299
+ }
227
300
  export interface WorkflowRun {
228
301
  _id: string;
229
302
  workflowId: string;
@@ -239,16 +312,25 @@ export interface WorkflowRun {
239
312
  isTerminal: boolean;
240
313
  nodes: WorkflowRunNode[];
241
314
  outputs?: WorkflowRunOutput[];
315
+ sessions?: WorkflowRunSession[];
316
+ pauseReason?: WorkflowPauseReason;
317
+ pausedNodeId?: string;
318
+ pendingSlots?: WorkflowPendingSlot[];
242
319
  }
243
320
  export type WorkflowRunProjection = Omit<WorkflowRun, "nodes"> & {
244
321
  nodes?: never;
245
322
  };
246
323
  export interface WorkflowRunDeps {
247
324
  get: (path: string) => Promise<ApiResponse<unknown>>;
325
+ getText: (path: string) => Promise<ApiResponse<string>>;
248
326
  post: (path: string, body: unknown) => Promise<ApiResponse<unknown>>;
249
327
  readFile: (path: string) => string;
250
328
  writeFile: (path: string, text: string) => void;
251
329
  poll: (opts: PollOptions) => Promise<PollResult>;
330
+ postDashboard?: (path: string, body: unknown, opts?: {
331
+ timeoutMs?: number;
332
+ }) => Promise<ApiResponse<unknown>>;
333
+ dashboardUrl?: string;
252
334
  }
253
335
  export interface FlowResult {
254
336
  code: number;
@@ -256,21 +338,28 @@ export interface FlowResult {
256
338
  }
257
339
  interface RunFlowOptions {
258
340
  inputs: Record<string, string>;
341
+ terminalNodeIds?: string[];
259
342
  wait: boolean;
260
343
  json: boolean;
261
344
  onProgressLine?: (line: string) => void;
262
345
  }
346
+ export declare function formatPauseNotice(pauseReason: WorkflowPauseReason | undefined, runId: string, dashboardUrl: string): string[];
263
347
  export declare function parseInputFlags(args: string[], readFile?: (path: string) => string): Record<string, string>;
348
+ export declare function parseTerminalFlags(args: string[]): string[];
264
349
  export declare function formatWorkflowList(workflows: WorkflowListItem[]): string;
265
350
  export declare function formatRecentRuns(runs: WorkflowRunProjection[]): string;
351
+ export declare function formatWorkflowVersions(versions: WorkflowVersion[]): string;
266
352
  export declare function formatImportSummary(result: WorkflowImportResult, mode?: {
267
353
  dryRun?: boolean;
268
354
  update?: boolean;
355
+ validate?: boolean;
269
356
  }): string;
270
357
  export declare function formatWorkflowRun(run: WorkflowRun): string;
271
358
  export declare function formatDescribe(res: WorkflowDescribeResponse): string;
272
359
  export declare function formatBotsList(catalog: WorkflowCatalog, category?: string): string;
273
360
  export declare function formatBotDetail(bot: CatalogBot): string;
361
+ export declare function formatTemplatesList(templates: WorkflowTemplateListItem[]): string;
362
+ export declare function formatSchema(payload: Record<string, unknown>): string;
274
363
  export declare function resolveWorkflowId(ref: string, deps: WorkflowRunDeps): Promise<string>;
275
364
  export declare function listFlow(json: boolean, deps: WorkflowRunDeps): Promise<FlowResult>;
276
365
  export declare function describeFlow(workflowRef: string, opts: {
@@ -288,11 +377,110 @@ export declare function statusFlow(opts: {
288
377
  }, deps: WorkflowRunDeps): Promise<FlowResult>;
289
378
  export declare function exportFlow(workflowRef: string, opts: {
290
379
  out?: string;
380
+ json?: boolean;
381
+ version?: number;
382
+ }, deps: WorkflowRunDeps): Promise<FlowResult>;
383
+ export declare function parseVersionFlag(flags: Record<string, string | boolean>): number | undefined;
384
+ export declare function versionsFlow(workflowRef: string, opts: {
385
+ json: boolean;
386
+ }, deps: WorkflowRunDeps, channel?: Channel): Promise<FlowResult>;
387
+ export declare function triggerExpect(t: WorkflowTrigger): {
388
+ type: string;
389
+ event?: string;
390
+ cron?: string;
391
+ };
392
+ export declare function formatTriggers(triggers: WorkflowTrigger[]): string;
393
+ export declare function triggersListFlow(workflowRef: string, opts: {
394
+ json: boolean;
395
+ }, deps: WorkflowRunDeps): Promise<FlowResult>;
396
+ export declare function triggersSetEnabledFlow(workflowRef: string, n: number, enabled: boolean, opts: {
397
+ json: boolean;
398
+ }, deps: WorkflowRunDeps): Promise<FlowResult>;
399
+ export declare function triggersFireFlow(workflowRef: string, opts: {
400
+ n?: number;
401
+ text?: string;
402
+ wait: boolean;
403
+ json: boolean;
404
+ onProgressLine?: (line: string) => void;
291
405
  }, deps: WorkflowRunDeps): Promise<FlowResult>;
292
406
  export declare function importFlow(file: string, opts: {
293
407
  dryRun: boolean;
294
408
  json: boolean;
295
409
  update?: string;
296
410
  }, deps: WorkflowRunDeps): Promise<FlowResult>;
411
+ export declare function validateFlow(file: string, opts: {
412
+ json: boolean;
413
+ update?: string;
414
+ }, deps: WorkflowRunDeps): Promise<FlowResult>;
415
+ export declare function templatesListFlow(json: boolean, deps: WorkflowRunDeps): Promise<FlowResult>;
416
+ export declare function templatesExportFlow(key: string, opts: {
417
+ out?: string;
418
+ json?: boolean;
419
+ }, deps: WorkflowRunDeps): Promise<FlowResult>;
420
+ export declare function schemaFlow(opts: {
421
+ json: boolean;
422
+ kind?: string;
423
+ face?: string;
424
+ }, deps: WorkflowRunDeps): Promise<FlowResult>;
425
+ export interface WorkflowInboxRow {
426
+ _id: string;
427
+ workflowId: string;
428
+ workflowName: string;
429
+ pausedNodeId?: string;
430
+ pausedNodeKind?: string;
431
+ pauseReason?: "taste" | "repair" | "slots";
432
+ counts?: WorkflowCounts;
433
+ createdAt: number | string;
434
+ queuedAt?: number | string;
435
+ hasShow?: boolean;
436
+ invocationMode?: "live" | "background";
437
+ triggeredBy?: {
438
+ type: "event" | "cron";
439
+ event?: string;
440
+ };
441
+ pendingSlotsCount?: number;
442
+ }
443
+ export interface WorkflowInboxResponse {
444
+ runs: WorkflowInboxRow[];
445
+ }
446
+ export declare function formatAge(value: number | string | undefined, now?: number): string;
447
+ export declare function parkBadge(pauseReason: string | undefined): string;
448
+ export declare function invocationBadge(row: WorkflowInboxRow): string;
449
+ export declare function formatInbox(rows: WorkflowInboxRow[], now?: number): string;
450
+ export declare function inboxFlow(json: boolean, deps: WorkflowRunDeps): Promise<FlowResult>;
451
+ export declare function gateShowFlow(runId: string, opts: {
452
+ json: boolean;
453
+ }, deps: WorkflowRunDeps): Promise<FlowResult>;
454
+ export declare function gatePickFlow(runId: string, numbers: number[], opts: {
455
+ json: boolean;
456
+ }, deps: WorkflowRunDeps): Promise<FlowResult>;
457
+ export declare function gateEditFlow(runId: string, n: number, sources: {
458
+ text?: string;
459
+ file?: string;
460
+ stdin?: string;
461
+ }, opts: {
462
+ json: boolean;
463
+ }, deps: WorkflowRunDeps): Promise<FlowResult>;
464
+ export declare function gatePushFlow(runId: string, message: string, opts: {
465
+ json: boolean;
466
+ }, deps: WorkflowRunDeps): Promise<FlowResult>;
467
+ export declare function gateApproveFlow(runId: string, opts: {
468
+ wait: boolean;
469
+ json: boolean;
470
+ onProgressLine?: (line: string) => void;
471
+ }, deps: WorkflowRunDeps): Promise<FlowResult>;
472
+ export declare function gateRejectFlow(runId: string, opts: {
473
+ reason?: string;
474
+ json: boolean;
475
+ }, deps: WorkflowRunDeps): Promise<FlowResult>;
476
+ export declare function repairFlow(runId: string, action: "retry" | "skip" | "kill", opts: {
477
+ wait: boolean;
478
+ json: boolean;
479
+ onProgressLine?: (line: string) => void;
480
+ }, deps: WorkflowRunDeps): Promise<FlowResult>;
481
+ export declare function parseSlotFlags(args: string[]): Record<string, string>;
482
+ export declare function answerFlow(runId: string, values: Record<string, string>, opts: {
483
+ json: boolean;
484
+ }, deps: WorkflowRunDeps): Promise<FlowResult>;
297
485
  export declare function run(flags: Record<string, string | boolean>): Promise<void>;
298
486
  export {};