@aicopycoders/exodus 2026.7.200-beta.13 → 2026.7.200-beta.14
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/CLAUDE.md +1 -1
- package/assets/skills/exodus/SKILL.md +1 -1
- package/assets/skills/exodus-workflow/SKILL.md +221 -31
- package/dist/commands/browse.js +2 -1
- package/dist/commands/creative.js +2 -2
- package/dist/commands/genesis.js +4 -4
- package/dist/commands/primer.js +2 -1
- package/dist/commands/status.js +4 -4
- package/dist/commands/swipe.js +4 -4
- package/dist/commands/template.js +2 -2
- package/dist/commands/winners.js +3 -3
- package/dist/commands/workflow.d.ts +83 -17
- package/dist/commands/workflow.js +892 -246
- package/dist/lib/format.d.ts +2 -0
- package/dist/lib/format.js +21 -5
- package/dist/lib/intel-format.js +2 -1
- package/dist/lib/poll.js +7 -4
- package/dist/lib/runStatus.d.ts +22 -0
- package/dist/lib/runStatus.js +139 -0
- package/package.json +1 -1
package/dist/lib/format.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
export declare function displayRunStatus(raw: unknown, missing?: string): string;
|
|
2
|
+
export declare function tickerRunStatus(raw: unknown): string;
|
|
1
3
|
export declare function formatGeneration(data: Record<string, unknown>): string;
|
|
2
4
|
export declare function formatGenesisRun(data: Record<string, unknown>): string;
|
|
3
5
|
export declare function formatBrowse(generations: unknown[]): string;
|
package/dist/lib/format.js
CHANGED
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
import { normalizeRunStatus, runStatusLabel } from "./runStatus.js";
|
|
2
|
+
export function displayRunStatus(raw, missing = "unknown") {
|
|
3
|
+
return typeof raw === "string" && raw.trim() ? runStatusLabel(raw) : missing;
|
|
4
|
+
}
|
|
5
|
+
const GENERIC_ACTIVE_STATUSES = new Set([
|
|
6
|
+
"queued",
|
|
7
|
+
"pending",
|
|
8
|
+
"running",
|
|
9
|
+
"processing",
|
|
10
|
+
"in-progress",
|
|
11
|
+
]);
|
|
12
|
+
export function tickerRunStatus(raw) {
|
|
13
|
+
if (typeof raw !== "string" || !raw.trim())
|
|
14
|
+
return "";
|
|
15
|
+
const canonical = normalizeRunStatus(raw);
|
|
16
|
+
const isPhaseWord = (canonical === "running" || canonical === "queued") && !GENERIC_ACTIVE_STATUSES.has(raw);
|
|
17
|
+
return isPhaseWord ? raw : runStatusLabel(raw);
|
|
18
|
+
}
|
|
1
19
|
function stepIcon(status) {
|
|
2
20
|
if (status === "completed" || status === "done")
|
|
3
21
|
return "✓";
|
|
@@ -29,9 +47,8 @@ function formatSteps(steps) {
|
|
|
29
47
|
}
|
|
30
48
|
export function formatGeneration(data) {
|
|
31
49
|
const lines = [];
|
|
32
|
-
const status = data["status"] ?? "unknown";
|
|
33
50
|
lines.push(`## Generation Result`);
|
|
34
|
-
lines.push(`**Status:** ${status}`);
|
|
51
|
+
lines.push(`**Status:** ${displayRunStatus(data["status"])}`);
|
|
35
52
|
if (data["agentName"] || data["agent"]) {
|
|
36
53
|
lines.push(`**Agent:** ${data["agentName"] ?? data["agent"]}`);
|
|
37
54
|
}
|
|
@@ -69,9 +86,8 @@ export function formatGeneration(data) {
|
|
|
69
86
|
}
|
|
70
87
|
export function formatGenesisRun(data) {
|
|
71
88
|
const lines = [];
|
|
72
|
-
const status = data["status"] ?? "unknown";
|
|
73
89
|
lines.push(`## Genesis Run`);
|
|
74
|
-
lines.push(`**Status:** ${status}`);
|
|
90
|
+
lines.push(`**Status:** ${displayRunStatus(data["status"])}`);
|
|
75
91
|
if (data["awarenessLevel"] || data["awareness"]) {
|
|
76
92
|
lines.push(`**Awareness Level:** ${data["awarenessLevel"] ?? data["awareness"]}`);
|
|
77
93
|
}
|
|
@@ -134,7 +150,7 @@ export function formatBrowse(generations) {
|
|
|
134
150
|
date = isNaN(parsed.getTime()) ? "—" : parsed.toISOString().slice(0, 10);
|
|
135
151
|
}
|
|
136
152
|
const agent = gen["agentName"] ?? gen["agentId"] ?? gen["agent"] ?? gen["pipeline"] ?? "—";
|
|
137
|
-
const status = gen["status"]
|
|
153
|
+
const status = displayRunStatus(gen["status"], "—");
|
|
138
154
|
const doc = gen["googleDocUrl"] ?? gen["docUrl"] ?? "—";
|
|
139
155
|
lines.push(`${date} | ${agent} | ${status} | ${doc}`);
|
|
140
156
|
}
|
package/dist/lib/intel-format.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { displayRunStatus } from "./format.js";
|
|
1
2
|
export function formatIntelResult(data) {
|
|
2
3
|
const lines = [];
|
|
3
4
|
lines.push("## Intel Analysis Result");
|
|
4
|
-
lines.push(`**Status:** ${data["status"]
|
|
5
|
+
lines.push(`**Status:** ${displayRunStatus(data["status"])}`);
|
|
5
6
|
if (data["mode"])
|
|
6
7
|
lines.push(`**Mode:** ${data["mode"]}`);
|
|
7
8
|
if (data["phase"] !== undefined)
|
package/dist/lib/poll.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { apiGet } from "./client.js";
|
|
2
|
-
|
|
2
|
+
import { isTerminalRunStatus, normalizeRunStatus } from "./runStatus.js";
|
|
3
3
|
function delay(ms) {
|
|
4
4
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
5
5
|
}
|
|
6
6
|
export async function pollUntilDone(opts) {
|
|
7
7
|
const { path, intervalMs = 3000, timeoutMs = 600_000, terminalStatuses, onProgress, isDone, } = opts;
|
|
8
|
-
const
|
|
8
|
+
const extraTerminal = new Set(terminalStatuses ?? []);
|
|
9
9
|
const deadline = Date.now() + timeoutMs;
|
|
10
10
|
while (true) {
|
|
11
11
|
const res = await apiGet(path);
|
|
@@ -16,10 +16,13 @@ export async function pollUntilDone(opts) {
|
|
|
16
16
|
if (!res.ok) {
|
|
17
17
|
return { ok: false, data: res.data, timedOut: false };
|
|
18
18
|
}
|
|
19
|
-
|
|
19
|
+
const canonical = status ? normalizeRunStatus(status) : undefined;
|
|
20
|
+
if (canonical === "failed" || canonical === "cancelled") {
|
|
20
21
|
return { ok: false, data: res.data, timedOut: false };
|
|
21
22
|
}
|
|
22
|
-
const statusTerminal = status
|
|
23
|
+
const statusTerminal = status
|
|
24
|
+
? isTerminalRunStatus(status) || extraTerminal.has(status)
|
|
25
|
+
: false;
|
|
23
26
|
const customDone = isDone ? isDone(res.data) : true;
|
|
24
27
|
if (statusTerminal && customDone) {
|
|
25
28
|
return { ok: true, data: res.data, timedOut: false };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare const RUN_STATUSES: readonly ["queued", "running", "awaiting-approval", "succeeded", "succeeded-with-warnings", "failed", "cancelled"];
|
|
2
|
+
export type RunStatus = (typeof RUN_STATUSES)[number];
|
|
3
|
+
export declare const RUN_STATUS_LABELS: Record<RunStatus, string>;
|
|
4
|
+
export type RunStatusTone = "pending" | "active" | "attention" | "success" | "warning" | "danger" | "muted";
|
|
5
|
+
export declare const RUN_STATUS_TONES: Record<RunStatus, RunStatusTone>;
|
|
6
|
+
export declare const LEGACY_RUN_STATUS_ALIASES: Record<string, RunStatus>;
|
|
7
|
+
export declare function normalizeRunStatus(raw: string | null | undefined, fallback?: RunStatus): RunStatus;
|
|
8
|
+
export declare function runStatusLabel(raw: string | null | undefined): string;
|
|
9
|
+
export declare function runStatusTone(raw: string | null | undefined): RunStatusTone;
|
|
10
|
+
export declare const TERMINAL_RUN_STATUSES: readonly ["succeeded", "succeeded-with-warnings", "failed", "cancelled"];
|
|
11
|
+
export declare const ACTIVE_RUN_STATUSES: readonly ["queued", "running"];
|
|
12
|
+
export declare function isTerminalRunStatus(raw: string | null | undefined): boolean;
|
|
13
|
+
export declare function isActiveRunStatus(raw: string | null | undefined): boolean;
|
|
14
|
+
export declare const WORKFLOW_RUN_STATUS_VALUES: readonly ["queued", "running", "awaiting-approval", "succeeded", "succeeded-with-warnings", "failed", "cancelled"];
|
|
15
|
+
export declare const LEGACY_WORKFLOW_RUN_STATUS_VALUES: readonly ["awaiting-review", "completed", "partial", "canceled"];
|
|
16
|
+
export declare function storedWorkflowStatusForms(status: RunStatus): string[];
|
|
17
|
+
export declare function workflowRunPresentation(rawStatus: string | null | undefined, pauseReason?: string | null): {
|
|
18
|
+
status: RunStatus;
|
|
19
|
+
label: string;
|
|
20
|
+
tone: RunStatusTone;
|
|
21
|
+
detail?: string;
|
|
22
|
+
};
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
export const RUN_STATUSES = [
|
|
2
|
+
"queued",
|
|
3
|
+
"running",
|
|
4
|
+
"awaiting-approval",
|
|
5
|
+
"succeeded",
|
|
6
|
+
"succeeded-with-warnings",
|
|
7
|
+
"failed",
|
|
8
|
+
"cancelled",
|
|
9
|
+
];
|
|
10
|
+
export const RUN_STATUS_LABELS = {
|
|
11
|
+
queued: "Queued",
|
|
12
|
+
running: "Running",
|
|
13
|
+
"awaiting-approval": "Awaiting approval",
|
|
14
|
+
succeeded: "Succeeded",
|
|
15
|
+
"succeeded-with-warnings": "Succeeded with warnings",
|
|
16
|
+
failed: "Failed",
|
|
17
|
+
cancelled: "Cancelled",
|
|
18
|
+
};
|
|
19
|
+
export const RUN_STATUS_TONES = {
|
|
20
|
+
queued: "pending",
|
|
21
|
+
running: "active",
|
|
22
|
+
"awaiting-approval": "attention",
|
|
23
|
+
succeeded: "success",
|
|
24
|
+
"succeeded-with-warnings": "warning",
|
|
25
|
+
failed: "danger",
|
|
26
|
+
cancelled: "muted",
|
|
27
|
+
};
|
|
28
|
+
export const LEGACY_RUN_STATUS_ALIASES = {
|
|
29
|
+
pending: "queued",
|
|
30
|
+
processing: "running",
|
|
31
|
+
"in-progress": "running",
|
|
32
|
+
walking: "running",
|
|
33
|
+
mining: "running",
|
|
34
|
+
scoring: "running",
|
|
35
|
+
selecting: "running",
|
|
36
|
+
writing: "running",
|
|
37
|
+
assembling: "running",
|
|
38
|
+
discovery: "running",
|
|
39
|
+
analyzing: "running",
|
|
40
|
+
combining: "running",
|
|
41
|
+
phase1_complete: "running",
|
|
42
|
+
phase2_complete: "running",
|
|
43
|
+
"phase1-running": "running",
|
|
44
|
+
"phase1-completed": "running",
|
|
45
|
+
"phase2-running": "running",
|
|
46
|
+
"script-prep-running": "running",
|
|
47
|
+
"parser-running": "running",
|
|
48
|
+
"storyboard-running": "running",
|
|
49
|
+
"cast-sheet-running": "running",
|
|
50
|
+
"storyboard-images-running": "running",
|
|
51
|
+
"voice-and-clips-running": "running",
|
|
52
|
+
stitching: "running",
|
|
53
|
+
extracting: "running",
|
|
54
|
+
ranking: "running",
|
|
55
|
+
conceptualizing: "running",
|
|
56
|
+
rendering: "running",
|
|
57
|
+
"awaiting-review": "awaiting-approval",
|
|
58
|
+
awaiting_hook_selection: "awaiting-approval",
|
|
59
|
+
paused: "awaiting-approval",
|
|
60
|
+
"script-review": "awaiting-approval",
|
|
61
|
+
"storyboard-review": "awaiting-approval",
|
|
62
|
+
"cast-sheet-review": "awaiting-approval",
|
|
63
|
+
completed: "succeeded",
|
|
64
|
+
complete: "succeeded",
|
|
65
|
+
done: "succeeded",
|
|
66
|
+
partial: "succeeded-with-warnings",
|
|
67
|
+
"partial-success": "succeeded-with-warnings",
|
|
68
|
+
"partial-error": "succeeded-with-warnings",
|
|
69
|
+
error: "failed",
|
|
70
|
+
stalled: "failed",
|
|
71
|
+
"verification-failed": "failed",
|
|
72
|
+
canceled: "cancelled",
|
|
73
|
+
superseded: "cancelled",
|
|
74
|
+
};
|
|
75
|
+
export function normalizeRunStatus(raw, fallback = "running") {
|
|
76
|
+
if (!raw)
|
|
77
|
+
return fallback;
|
|
78
|
+
if (RUN_STATUSES.includes(raw))
|
|
79
|
+
return raw;
|
|
80
|
+
return LEGACY_RUN_STATUS_ALIASES[raw] ?? fallback;
|
|
81
|
+
}
|
|
82
|
+
export function runStatusLabel(raw) {
|
|
83
|
+
return RUN_STATUS_LABELS[normalizeRunStatus(raw)];
|
|
84
|
+
}
|
|
85
|
+
export function runStatusTone(raw) {
|
|
86
|
+
return RUN_STATUS_TONES[normalizeRunStatus(raw)];
|
|
87
|
+
}
|
|
88
|
+
export const TERMINAL_RUN_STATUSES = [
|
|
89
|
+
"succeeded",
|
|
90
|
+
"succeeded-with-warnings",
|
|
91
|
+
"failed",
|
|
92
|
+
"cancelled",
|
|
93
|
+
];
|
|
94
|
+
export const ACTIVE_RUN_STATUSES = ["queued", "running"];
|
|
95
|
+
export function isTerminalRunStatus(raw) {
|
|
96
|
+
return TERMINAL_RUN_STATUSES.includes(normalizeRunStatus(raw));
|
|
97
|
+
}
|
|
98
|
+
export function isActiveRunStatus(raw) {
|
|
99
|
+
return ACTIVE_RUN_STATUSES.includes(normalizeRunStatus(raw));
|
|
100
|
+
}
|
|
101
|
+
export const WORKFLOW_RUN_STATUS_VALUES = RUN_STATUSES;
|
|
102
|
+
export const LEGACY_WORKFLOW_RUN_STATUS_VALUES = [
|
|
103
|
+
"awaiting-review",
|
|
104
|
+
"completed",
|
|
105
|
+
"partial",
|
|
106
|
+
"canceled",
|
|
107
|
+
];
|
|
108
|
+
const LEGACY_WORKFLOW_TWIN = {
|
|
109
|
+
"awaiting-approval": "awaiting-review",
|
|
110
|
+
succeeded: "completed",
|
|
111
|
+
"succeeded-with-warnings": "partial",
|
|
112
|
+
cancelled: "canceled",
|
|
113
|
+
};
|
|
114
|
+
export function storedWorkflowStatusForms(status) {
|
|
115
|
+
const twin = LEGACY_WORKFLOW_TWIN[status];
|
|
116
|
+
return twin ? [status, twin] : [status];
|
|
117
|
+
}
|
|
118
|
+
export function workflowRunPresentation(rawStatus, pauseReason) {
|
|
119
|
+
let status = normalizeRunStatus(rawStatus);
|
|
120
|
+
let detail;
|
|
121
|
+
if (status === "awaiting-approval") {
|
|
122
|
+
if (pauseReason === "call") {
|
|
123
|
+
status = "running";
|
|
124
|
+
detail = "sub-workflow";
|
|
125
|
+
}
|
|
126
|
+
else if (pauseReason === "slots") {
|
|
127
|
+
detail = "needs inputs";
|
|
128
|
+
}
|
|
129
|
+
else if (pauseReason === "repair") {
|
|
130
|
+
detail = "needs repair";
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
status,
|
|
135
|
+
label: RUN_STATUS_LABELS[status],
|
|
136
|
+
tone: RUN_STATUS_TONES[status],
|
|
137
|
+
detail,
|
|
138
|
+
};
|
|
139
|
+
}
|