@acpus/tui 0.1.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.
- package/LICENSE +21 -0
- package/README.md +7 -0
- package/dist/agentTranscript.d.ts +33 -0
- package/dist/agentTranscript.d.ts.map +1 -0
- package/dist/agentTranscript.js +238 -0
- package/dist/agentTranscript.js.map +1 -0
- package/dist/components/App.d.ts +28 -0
- package/dist/components/App.d.ts.map +1 -0
- package/dist/components/App.js +516 -0
- package/dist/components/App.js.map +1 -0
- package/dist/components/DetailsPane.d.ts +65 -0
- package/dist/components/DetailsPane.d.ts.map +1 -0
- package/dist/components/DetailsPane.js +290 -0
- package/dist/components/DetailsPane.js.map +1 -0
- package/dist/components/Footer.d.ts +12 -0
- package/dist/components/Footer.d.ts.map +1 -0
- package/dist/components/Footer.js +34 -0
- package/dist/components/Footer.js.map +1 -0
- package/dist/components/GraphPane.d.ts +31 -0
- package/dist/components/GraphPane.d.ts.map +1 -0
- package/dist/components/GraphPane.js +35 -0
- package/dist/components/GraphPane.js.map +1 -0
- package/dist/components/RunPicker.d.ts +17 -0
- package/dist/components/RunPicker.d.ts.map +1 -0
- package/dist/components/RunPicker.js +53 -0
- package/dist/components/RunPicker.js.map +1 -0
- package/dist/components/StatusOverview.d.ts +20 -0
- package/dist/components/StatusOverview.d.ts.map +1 -0
- package/dist/components/StatusOverview.js +19 -0
- package/dist/components/StatusOverview.js.map +1 -0
- package/dist/controls.d.ts +15 -0
- package/dist/controls.d.ts.map +1 -0
- package/dist/controls.js +68 -0
- package/dist/controls.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/model.d.ts +130 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +429 -0
- package/dist/model.js.map +1 -0
- package/dist/osc52.d.ts +3 -0
- package/dist/osc52.d.ts.map +1 -0
- package/dist/osc52.js +8 -0
- package/dist/osc52.js.map +1 -0
- package/dist/poller.d.ts +24 -0
- package/dist/poller.d.ts.map +1 -0
- package/dist/poller.js +58 -0
- package/dist/poller.js.map +1 -0
- package/dist/theme.d.ts +37 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +68 -0
- package/dist/theme.js.map +1 -0
- package/dist/ui/inkui/JSONViewer.d.ts +37 -0
- package/dist/ui/inkui/JSONViewer.d.ts.map +1 -0
- package/dist/ui/inkui/JSONViewer.js +121 -0
- package/dist/ui/inkui/JSONViewer.js.map +1 -0
- package/dist/ui/inkui/KeyHint.d.ts +11 -0
- package/dist/ui/inkui/KeyHint.d.ts.map +1 -0
- package/dist/ui/inkui/KeyHint.js +7 -0
- package/dist/ui/inkui/KeyHint.js.map +1 -0
- package/dist/ui/inkui/Markdown.d.ts +9 -0
- package/dist/ui/inkui/Markdown.d.ts.map +1 -0
- package/dist/ui/inkui/Markdown.js +80 -0
- package/dist/ui/inkui/Markdown.js.map +1 -0
- package/dist/ui/inkui/ScrollArea.d.ts +29 -0
- package/dist/ui/inkui/ScrollArea.d.ts.map +1 -0
- package/dist/ui/inkui/ScrollArea.js +38 -0
- package/dist/ui/inkui/ScrollArea.js.map +1 -0
- package/dist/ui/inkui/Spinner.d.ts +19 -0
- package/dist/ui/inkui/Spinner.d.ts.map +1 -0
- package/dist/ui/inkui/Spinner.js +36 -0
- package/dist/ui/inkui/Spinner.js.map +1 -0
- package/dist/ui/inkui/Tabs.d.ts +14 -0
- package/dist/ui/inkui/Tabs.d.ts.map +1 -0
- package/dist/ui/inkui/Tabs.js +15 -0
- package/dist/ui/inkui/Tabs.js.map +1 -0
- package/dist/ui/inkui/index.d.ts +8 -0
- package/dist/ui/inkui/index.d.ts.map +1 -0
- package/dist/ui/inkui/index.js +8 -0
- package/dist/ui/inkui/index.js.map +1 -0
- package/dist/ui/inkui/theme.d.ts +20 -0
- package/dist/ui/inkui/theme.d.ts.map +1 -0
- package/dist/ui/inkui/theme.js +51 -0
- package/dist/ui/inkui/theme.js.map +1 -0
- package/dist/useTerminalSize.d.ts +20 -0
- package/dist/useTerminalSize.d.ts.map +1 -0
- package/dist/useTerminalSize.js +34 -0
- package/dist/useTerminalSize.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { formatDuration } from "../model.js";
|
|
4
|
+
import { KIND_LABELS, styleForState } from "../theme.js";
|
|
5
|
+
import { ScrollArea, Tabs, jsonViewerRows, markdownRows } from "../ui/inkui/index.js";
|
|
6
|
+
import { clampInline, wrapText } from "../ui/inkui/theme.js";
|
|
7
|
+
export function DetailsPane({ lines, sections, activeSectionKey, height, width = 38, focused, scrollOffset = 0, jsonDisplay }) {
|
|
8
|
+
const paneSections = sections ?? [{ key: "summary", label: "Details", lines: lines ?? [] }];
|
|
9
|
+
const activeSection = paneSections.find((section) => section.key === activeSectionKey) ?? paneSections[0];
|
|
10
|
+
const cols = Math.max(12, width - 4);
|
|
11
|
+
const contentCols = Math.max(11, cols - 1);
|
|
12
|
+
const visibleRows = detailContentRows(height);
|
|
13
|
+
const rows = activeSection ? detailSectionRows(activeSection, contentCols, jsonDisplay) : [];
|
|
14
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: focused ? "cyan" : "gray", paddingX: 1, width: width, height: height, overflow: "hidden", children: [_jsxs(Text, { bold: true, color: "magenta", children: ["NODE DETAILS", focused ? " ◂" : ""] }), paneSections.length > 0 ? (_jsx(Tabs, { tabs: paneSections.map((section) => ({ key: section.key, label: section.label })), activeKey: activeSection?.key ?? "", width: cols })) : null, _jsx(Box, { marginTop: 1, children: !activeSection || rows.length === 0 ? (_jsx(Text, { color: "gray", children: "No node selected." })) : (_jsx(ScrollArea, { height: visibleRows, width: cols, offset: scrollOffset, children: rows })) })] }));
|
|
15
|
+
}
|
|
16
|
+
export function detailContentRows(height) {
|
|
17
|
+
return Math.max(1, (height ?? 12) - 5);
|
|
18
|
+
}
|
|
19
|
+
export function detailSectionRowCount(section, width, jsonDisplay) {
|
|
20
|
+
if (!section)
|
|
21
|
+
return 0;
|
|
22
|
+
return detailSectionRows(section, Math.max(11, width - 5), jsonDisplay).length;
|
|
23
|
+
}
|
|
24
|
+
function detailSectionRows(section, cols, jsonDisplay) {
|
|
25
|
+
if (section.richContent?.kind === "markdown") {
|
|
26
|
+
return markdownRows(section.richContent.content, cols);
|
|
27
|
+
}
|
|
28
|
+
if (section.richContent?.kind === "json") {
|
|
29
|
+
return jsonViewerRows(section.richContent.data, cols, {
|
|
30
|
+
rootLabel: "root",
|
|
31
|
+
initialDepth: 3,
|
|
32
|
+
expandedIds: jsonDisplay?.expandedIds,
|
|
33
|
+
selectedIndex: jsonDisplay?.selectedIndex
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
return trimLeadingBlanks(section.lines).map((line, i) => renderDetailLine(line, i));
|
|
37
|
+
}
|
|
38
|
+
function renderDetailLine(line, key) {
|
|
39
|
+
return (_jsx(Text, { children: line.segments.length === 0 ? (" ") : (line.segments.map((seg, j) => (_jsx(Text, { color: seg.color, bold: seg.bold, children: seg.text }, j)))) }, key));
|
|
40
|
+
}
|
|
41
|
+
function trimLeadingBlanks(lines) {
|
|
42
|
+
let firstContent = 0;
|
|
43
|
+
while (firstContent < lines.length && lines[firstContent].segments.length === 0)
|
|
44
|
+
firstContent++;
|
|
45
|
+
return lines.slice(firstContent);
|
|
46
|
+
}
|
|
47
|
+
// ─── Line building (pure) ────────────────────────────────────────
|
|
48
|
+
/** A blank spacer line. */
|
|
49
|
+
function blank() {
|
|
50
|
+
return { segments: [] };
|
|
51
|
+
}
|
|
52
|
+
/** A "label: value" line — label gray, value in `valueColor` (default none). */
|
|
53
|
+
function field(label, value, cols, valueColor) {
|
|
54
|
+
// Keep the gap as its own segment so truncation never eats it.
|
|
55
|
+
return {
|
|
56
|
+
segments: [
|
|
57
|
+
{ text: `${label}: `, color: "gray" },
|
|
58
|
+
{ text: clampInline(value, Math.max(1, cols - label.length - 2)), color: valueColor }
|
|
59
|
+
]
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/** A "label: long value" field that wraps the value over multiple lines. */
|
|
63
|
+
function wrappedField(label, value, cols, valueColor) {
|
|
64
|
+
const prefix = `${label}: `;
|
|
65
|
+
const firstWidth = Math.max(1, cols - prefix.length);
|
|
66
|
+
const restPrefix = " ".repeat(prefix.length);
|
|
67
|
+
const chunks = wrapText(value, firstWidth);
|
|
68
|
+
return chunks.map((chunk, i) => ({
|
|
69
|
+
segments: i === 0
|
|
70
|
+
? [{ text: prefix, color: "gray" }, { text: chunk, color: valueColor }]
|
|
71
|
+
: [{ text: restPrefix, color: "gray" }, { text: chunk, color: valueColor }]
|
|
72
|
+
}));
|
|
73
|
+
}
|
|
74
|
+
/** A plain heading line (gray). */
|
|
75
|
+
function heading(text) {
|
|
76
|
+
return { segments: [{ text, color: "gray" }] };
|
|
77
|
+
}
|
|
78
|
+
/** Split a multi-line string into wrapped DetailLines. */
|
|
79
|
+
function textLines(s, cols, color) {
|
|
80
|
+
return s.split("\n").flatMap((line) => wrapText(line, cols).map((chunk) => ({
|
|
81
|
+
segments: [{ text: chunk, color }]
|
|
82
|
+
})));
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Flatten the selected row into a single array of colored lines. Pure: callers
|
|
86
|
+
* (App) reuse it to compute the scroll bound, then pass the result to the pane.
|
|
87
|
+
*/
|
|
88
|
+
export function buildDetailLines(row, width, artifactPaths, freezeAt, agentExecution) {
|
|
89
|
+
return buildDetailSections(row, width, artifactPaths, freezeAt, agentExecution).flatMap((section) => section.lines);
|
|
90
|
+
}
|
|
91
|
+
export function buildDetailSections(row, width, artifactPaths, freezeAt, agentExecution) {
|
|
92
|
+
if (!row)
|
|
93
|
+
return [];
|
|
94
|
+
const cols = Math.max(12, width - 4);
|
|
95
|
+
const inst = row.instance;
|
|
96
|
+
const style = styleForState(row.state);
|
|
97
|
+
const dyn = inst?.dynamicContext;
|
|
98
|
+
const meta = (row.irNode.metadata ?? {});
|
|
99
|
+
const sections = [];
|
|
100
|
+
const summary = [];
|
|
101
|
+
// ── Runtime info ──
|
|
102
|
+
summary.push(field("Node", row.label, cols));
|
|
103
|
+
summary.push(field("Kind", KIND_LABELS[row.irNode.kind], cols));
|
|
104
|
+
summary.push({
|
|
105
|
+
segments: [
|
|
106
|
+
{ text: "Status: ", color: "gray" },
|
|
107
|
+
{ text: `${style.glyph} ${style.label}`, color: style.color }
|
|
108
|
+
]
|
|
109
|
+
});
|
|
110
|
+
if (inst)
|
|
111
|
+
summary.push(field("Attempt", String(inst.attempt), cols));
|
|
112
|
+
if (row.groupDim === "lane")
|
|
113
|
+
summary.push(field("Lane", row.groupValue ?? "?", cols));
|
|
114
|
+
if (row.groupDim === "lane" && row.groupItem !== undefined)
|
|
115
|
+
summary.push(field("Item", row.groupItem, cols));
|
|
116
|
+
if (row.groupDim === "round")
|
|
117
|
+
summary.push(field("Round", row.groupValue ?? "?", cols));
|
|
118
|
+
if (row.branchLabel)
|
|
119
|
+
summary.push(field("Branch", row.branchLabel, cols));
|
|
120
|
+
if (row.branchWhen)
|
|
121
|
+
summary.push(...wrappedField("When", row.branchWhen, cols));
|
|
122
|
+
if (inst)
|
|
123
|
+
summary.push(field("Duration", formatDuration(inst.startedAt, inst.completedAt, freezeAt), cols));
|
|
124
|
+
if (row.nodeKey)
|
|
125
|
+
summary.push(...wrappedField("Key", row.nodeKey, cols));
|
|
126
|
+
sections.push({ key: "summary", label: "Summary", lines: summary });
|
|
127
|
+
// ── Definition (from IR metadata) ──
|
|
128
|
+
const definition = definitionLines(row.irNode.kind, meta, row.summary, row.state, cols);
|
|
129
|
+
if (hasContent(definition))
|
|
130
|
+
sections.push({ key: "definition", label: "Definition", lines: definition });
|
|
131
|
+
// ── Dynamic context ──
|
|
132
|
+
if (dyn) {
|
|
133
|
+
const context = [blank(), heading("Context:")];
|
|
134
|
+
if (dyn.item_id !== undefined)
|
|
135
|
+
context.push(field(" item_id", String(dyn.item_id), cols));
|
|
136
|
+
if (dyn.item_index !== undefined)
|
|
137
|
+
context.push(field(" item_idx", String(dyn.item_index), cols));
|
|
138
|
+
if (dyn.loop)
|
|
139
|
+
context.push(field(" loop.iter", String(dyn.loop.iter), cols));
|
|
140
|
+
sections.push({ key: "context", label: "Context", lines: context });
|
|
141
|
+
}
|
|
142
|
+
// ── Agent execution telemetry from the live/current attempt transcript ──
|
|
143
|
+
if (row.irNode.kind === "run.agent" && agentExecution) {
|
|
144
|
+
const execution = [blank(), heading("Execution:")];
|
|
145
|
+
execution.push(field(" Output tokens", formatOutputTokens(agentExecution), cols));
|
|
146
|
+
execution.push(field(" Tool calls", String(agentExecution.toolCallCount), cols));
|
|
147
|
+
if (agentExecution.recentToolCalls.length > 0) {
|
|
148
|
+
execution.push(heading(" Last tools:"));
|
|
149
|
+
for (const tool of agentExecution.recentToolCalls) {
|
|
150
|
+
execution.push(...textLines(` - ${formatToolCall(tool)}`, cols));
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
sections.push({ key: "execution", label: "Execution", lines: execution });
|
|
154
|
+
}
|
|
155
|
+
// ── Prompt (prefer runtime-rendered, fall back to IR template) ──
|
|
156
|
+
const prompt = inst?.renderedPrompt ?? (typeof meta.prompt === "string" ? meta.prompt : undefined);
|
|
157
|
+
if (prompt) {
|
|
158
|
+
sections.push({
|
|
159
|
+
key: "prompt",
|
|
160
|
+
label: "Prompt",
|
|
161
|
+
lines: [blank(), heading("Prompt:"), ...textLines(prompt, cols)],
|
|
162
|
+
richContent: { kind: "markdown", content: prompt }
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
// ── Error ──
|
|
166
|
+
if (inst?.error && inst.error !== "Aborted: paused") {
|
|
167
|
+
sections.push({
|
|
168
|
+
key: "error",
|
|
169
|
+
label: "Error",
|
|
170
|
+
lines: [blank(), { segments: [{ text: "Error:", color: "red" }] }, ...textLines(inst.error, cols, "red")]
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
// ── Output ──
|
|
174
|
+
if (inst?.output !== undefined) {
|
|
175
|
+
const outputValue = inst.output;
|
|
176
|
+
const outputText = JSON.stringify(outputValue, null, 2) ?? String(outputValue);
|
|
177
|
+
sections.push({
|
|
178
|
+
key: "output",
|
|
179
|
+
label: "Output",
|
|
180
|
+
lines: [blank(), heading("Output:"), ...textLines(outputText, cols)],
|
|
181
|
+
richContent: isExpandableJson(outputValue) ? { kind: "json", data: outputValue } : undefined
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
// ── Artifacts (cyan filename line + gray path line; no OSC 8) ──
|
|
185
|
+
if (inst?.artifactRefs && inst.artifactRefs.length > 0) {
|
|
186
|
+
const artifacts = [blank(), heading("Artifacts:")];
|
|
187
|
+
for (const [index, ref] of inst.artifactRefs.entries()) {
|
|
188
|
+
const absPath = artifactPaths[ref];
|
|
189
|
+
const name = ref.split("/").pop() ?? ref;
|
|
190
|
+
if (index > 0)
|
|
191
|
+
artifacts.push(blank());
|
|
192
|
+
artifacts.push({ segments: [{ text: clampInline(name, cols), color: "cyan" }] });
|
|
193
|
+
if (absPath) {
|
|
194
|
+
for (const l of textLines(absPath, cols, "gray"))
|
|
195
|
+
artifacts.push(l);
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
// Path not resolved yet: show the raw artifact:// URI.
|
|
199
|
+
for (const l of textLines(ref, cols, "gray"))
|
|
200
|
+
artifacts.push(l);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
sections.push({ key: "artifacts", label: "Artifacts", lines: artifacts });
|
|
204
|
+
}
|
|
205
|
+
return sections;
|
|
206
|
+
}
|
|
207
|
+
function hasContent(lines) {
|
|
208
|
+
return lines.some((line) => line.segments.length > 0);
|
|
209
|
+
}
|
|
210
|
+
/** Non-null objects and arrays benefit from the JSON tree viewer. */
|
|
211
|
+
function isExpandableJson(value) {
|
|
212
|
+
return value !== null && typeof value === "object";
|
|
213
|
+
}
|
|
214
|
+
/** Definition block lines, varying by node kind. */
|
|
215
|
+
function definitionLines(kind, meta, summary, state, cols) {
|
|
216
|
+
const out = [];
|
|
217
|
+
if (kind === "run.agent") {
|
|
218
|
+
const agent = (meta.agent ?? {});
|
|
219
|
+
const retry = meta.retry;
|
|
220
|
+
out.push(blank(), heading("Definition:"));
|
|
221
|
+
if (agent.use !== undefined)
|
|
222
|
+
out.push(...wrappedField(" Use", String(agent.use), cols));
|
|
223
|
+
out.push(field(" Type", String(agent.type ?? "builtin"), cols));
|
|
224
|
+
if (agent.model !== undefined)
|
|
225
|
+
out.push(field(" Model", String(agent.model), cols));
|
|
226
|
+
if (meta.timeout !== undefined)
|
|
227
|
+
out.push(field(" Timeout", String(meta.timeout), cols));
|
|
228
|
+
if (retry) {
|
|
229
|
+
out.push(field(" Retry", `max=${String(retry.max ?? "?")}${retry.backoff !== undefined ? ` backoff=${String(retry.backoff)}` : ""}`, cols));
|
|
230
|
+
}
|
|
231
|
+
return out;
|
|
232
|
+
}
|
|
233
|
+
if (kind === "run.program") {
|
|
234
|
+
const cmd = Array.isArray(meta.cmd) ? meta.cmd.map(String).join(" ") : undefined;
|
|
235
|
+
const capture = meta.capture;
|
|
236
|
+
out.push(blank(), heading("Definition:"));
|
|
237
|
+
if (cmd)
|
|
238
|
+
out.push(...wrappedField(" Command", cmd, cols));
|
|
239
|
+
if (capture) {
|
|
240
|
+
out.push(field(" Capture", `from=${String(capture.from ?? "?")}${capture.parse !== undefined ? ` parse=${String(capture.parse)}` : ""}`, cols));
|
|
241
|
+
}
|
|
242
|
+
return out;
|
|
243
|
+
}
|
|
244
|
+
if (kind === "guard") {
|
|
245
|
+
out.push(blank(), heading("Definition:"));
|
|
246
|
+
if (meta.when !== undefined)
|
|
247
|
+
out.push(...wrappedField(" When", String(meta.when), cols));
|
|
248
|
+
if (meta.then !== undefined)
|
|
249
|
+
out.push(field(" Then", String(meta.then), cols));
|
|
250
|
+
if (meta.else !== undefined)
|
|
251
|
+
out.push(field(" Else", String(meta.else), cols));
|
|
252
|
+
if (meta.message !== undefined)
|
|
253
|
+
out.push(...wrappedField(" Message", String(meta.message), cols));
|
|
254
|
+
return out;
|
|
255
|
+
}
|
|
256
|
+
if (kind === "approval") {
|
|
257
|
+
out.push(blank(), heading("Definition:"));
|
|
258
|
+
if (meta.timeout !== undefined)
|
|
259
|
+
out.push(field(" Timeout", String(meta.timeout), cols));
|
|
260
|
+
if (meta.on_timeout !== undefined)
|
|
261
|
+
out.push(field(" On timeout", String(meta.on_timeout), cols));
|
|
262
|
+
if (state === "awaiting") {
|
|
263
|
+
out.push({ segments: [{ text: " ⏳ awaiting decision — [a] approve [x] reject", color: "blue" }] });
|
|
264
|
+
}
|
|
265
|
+
return out;
|
|
266
|
+
}
|
|
267
|
+
// composite / subworkflow: surface the summary if any.
|
|
268
|
+
if (summary) {
|
|
269
|
+
out.push(blank(), heading("Definition:"), ...wrappedField(" Flow", summary, cols));
|
|
270
|
+
}
|
|
271
|
+
return out;
|
|
272
|
+
}
|
|
273
|
+
function formatToolCall(tool) {
|
|
274
|
+
const status = tool.status ?? "unknown";
|
|
275
|
+
const name = tool.title ?? tool.toolName ?? tool.kind ?? tool.toolCallId;
|
|
276
|
+
const suffix = [tool.toolName, tool.kind]
|
|
277
|
+
.filter((v) => v !== undefined && v !== name)
|
|
278
|
+
.join(" / ");
|
|
279
|
+
return suffix ? `${status} ${name} (${suffix})` : `${status} ${name}`;
|
|
280
|
+
}
|
|
281
|
+
function formatOutputTokens(summary) {
|
|
282
|
+
if (summary.outputTokens === undefined)
|
|
283
|
+
return "unknown";
|
|
284
|
+
return summary.outputTokenSource === "estimated" ? `~${summary.outputTokens}` : String(summary.outputTokens);
|
|
285
|
+
}
|
|
286
|
+
/** Plain text form used for clipboard copy; strips colors. */
|
|
287
|
+
export function formatDetailLinesPlainText(lines) {
|
|
288
|
+
return lines.map((line) => line.segments.map((seg) => seg.text).join("")).join("\n");
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=DetailsPane.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DetailsPane.js","sourceRoot":"","sources":["../../src/components/DetailsPane.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type KeyHintItem } from "../ui/inkui/index.js";
|
|
3
|
+
/** Bottom bar: keybinding hints only; dynamic messages live in StatusOverview. */
|
|
4
|
+
export declare function Footer({ focus, tabCount }: {
|
|
5
|
+
focus?: "graph" | "details";
|
|
6
|
+
tabCount?: number;
|
|
7
|
+
}): React.ReactElement;
|
|
8
|
+
export declare function footerHintGroups(focus?: "graph" | "details", tabCount?: number): {
|
|
9
|
+
nav: KeyHintItem[];
|
|
10
|
+
global: KeyHintItem[];
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=Footer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../src/components/Footer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAW,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEjE,kFAAkF;AAClF,wBAAgB,MAAM,CAAC,EACrB,KAAe,EACf,QAAY,EACb,EAAE;IACD,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,KAAK,CAAC,YAAY,CAQrB;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,GAAE,OAAO,GAAG,SAAmB,EACpC,QAAQ,SAAI,GACX;IAAE,GAAG,EAAE,WAAW,EAAE,CAAC;IAAC,MAAM,EAAE,WAAW,EAAE,CAAA;CAAE,CAwB/C"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box } from "ink";
|
|
3
|
+
import { KeyHint } from "../ui/inkui/index.js";
|
|
4
|
+
/** Bottom bar: keybinding hints only; dynamic messages live in StatusOverview. */
|
|
5
|
+
export function Footer({ focus = "graph", tabCount = 0 }) {
|
|
6
|
+
const { nav, global } = footerHintGroups(focus, tabCount);
|
|
7
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(KeyHint, { keys: nav }), _jsx(KeyHint, { keys: global })] }));
|
|
8
|
+
}
|
|
9
|
+
export function footerHintGroups(focus = "graph", tabCount = 0) {
|
|
10
|
+
const nav = focus === "details"
|
|
11
|
+
? [
|
|
12
|
+
{ key: "j/k", label: "scroll" },
|
|
13
|
+
{ key: "u/d", label: "half-page" },
|
|
14
|
+
{ key: "Space", label: "expand" },
|
|
15
|
+
...(tabCount > 0 ? [{ key: "1-9", label: `tabs (${tabCount})` }] : []),
|
|
16
|
+
{ key: "y", label: "copy all" }
|
|
17
|
+
]
|
|
18
|
+
: [
|
|
19
|
+
{ key: "j/k", label: "select" },
|
|
20
|
+
{ key: "g/G", label: "top/bottom" },
|
|
21
|
+
{ key: "Space", label: "fold" }
|
|
22
|
+
];
|
|
23
|
+
const global = [
|
|
24
|
+
{ key: "h/l", label: "focus" },
|
|
25
|
+
{ key: "p", label: "pause" },
|
|
26
|
+
{ key: "r", label: "resume" },
|
|
27
|
+
{ key: "c", label: "cancel" },
|
|
28
|
+
{ key: "R", label: "retry" },
|
|
29
|
+
{ key: "a/x", label: "approve/reject" },
|
|
30
|
+
{ key: "q", label: "quit" }
|
|
31
|
+
];
|
|
32
|
+
return { nav, global };
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=Footer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Footer.js","sourceRoot":"","sources":["../../src/components/Footer.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAoB,MAAM,sBAAsB,CAAC;AAEjE,kFAAkF;AAClF,MAAM,UAAU,MAAM,CAAC,EACrB,KAAK,GAAG,OAAO,EACf,QAAQ,GAAG,CAAC,EAIb;IACC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC1D,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,OAAO,IAAC,IAAI,EAAE,GAAG,GAAI,EACtB,KAAC,OAAO,IAAC,IAAI,EAAE,MAAM,GAAI,IACrB,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,QAA6B,OAAO,EACpC,QAAQ,GAAG,CAAC;IAEZ,MAAM,GAAG,GAAkB,KAAK,KAAK,SAAS;QAC5C,CAAC,CAAC;YACE,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE;YAC/B,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE;YAClC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE;YACjC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE;SAChC;QACH,CAAC,CAAC;YACE,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE;YAC/B,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE;YACnC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;SAChC,CAAC;IACN,MAAM,MAAM,GAAkB;QAC5B,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE;QAC9B,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE;QAC5B,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE;QAC7B,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE;QAC7B,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE;QAC5B,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE;QACvC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE;KAC5B,CAAC;IACF,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { DisplayRow } from "../model.js";
|
|
3
|
+
/**
|
|
4
|
+
* Workflow graph rendered as a nested tree/outline. Composite nodes
|
|
5
|
+
* (fanout/parallel/switch/loop/...) are labeled containers; fanout lanes and
|
|
6
|
+
* loop rounds are synthetic group rows; the rest are real IR nodes. Honors
|
|
7
|
+
* acpus's IR tree shape rather than the reference image's left-to-right boxed
|
|
8
|
+
* DAG.
|
|
9
|
+
*/
|
|
10
|
+
export declare function GraphPane({ rows, selectedIndex, focused, moreAbove, moreBelow, height, width, freezeAt, collapsedRows }: {
|
|
11
|
+
rows: DisplayRow[];
|
|
12
|
+
selectedIndex: number;
|
|
13
|
+
focused: boolean;
|
|
14
|
+
moreAbove?: number;
|
|
15
|
+
moreBelow?: number;
|
|
16
|
+
height?: number;
|
|
17
|
+
width?: number;
|
|
18
|
+
freezeAt?: string | number;
|
|
19
|
+
collapsedRows?: ReadonlySet<string>;
|
|
20
|
+
}): React.ReactElement;
|
|
21
|
+
export declare function GraphRow({ row, selected, collapsed, freezeAt }: {
|
|
22
|
+
row: DisplayRow;
|
|
23
|
+
selected: boolean;
|
|
24
|
+
collapsed?: boolean;
|
|
25
|
+
freezeAt?: string | number;
|
|
26
|
+
}): React.ReactElement;
|
|
27
|
+
export declare function collapseIndicatorForRow(row: DisplayRow, collapsed: boolean): {
|
|
28
|
+
glyph: "▸" | "▾";
|
|
29
|
+
color: string;
|
|
30
|
+
} | undefined;
|
|
31
|
+
//# sourceMappingURL=GraphPane.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphPane.d.ts","sourceRoot":"","sources":["../../src/components/GraphPane.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,aAAa,EACb,OAAO,EACP,SAAa,EACb,SAAa,EACb,MAAM,EACN,KAAK,EACL,QAAQ,EACR,aAAa,EACd,EAAE;IACD,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACrC,GAAG,KAAK,CAAC,YAAY,CA8BrB;AAED,wBAAgB,QAAQ,CAAC,EACvB,GAAG,EACH,QAAQ,EACR,SAAiB,EACjB,QAAQ,EACT,EAAE;IACD,GAAG,EAAE,UAAU,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B,GAAG,KAAK,CAAC,YAAY,CAoCrB;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,GAAG;IAAE,KAAK,EAAE,GAAG,GAAG,GAAG,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAM5H"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { formatDuration } from "../model.js";
|
|
4
|
+
import { isComposite, styleForKind, styleForState } from "../theme.js";
|
|
5
|
+
/**
|
|
6
|
+
* Workflow graph rendered as a nested tree/outline. Composite nodes
|
|
7
|
+
* (fanout/parallel/switch/loop/...) are labeled containers; fanout lanes and
|
|
8
|
+
* loop rounds are synthetic group rows; the rest are real IR nodes. Honors
|
|
9
|
+
* acpus's IR tree shape rather than the reference image's left-to-right boxed
|
|
10
|
+
* DAG.
|
|
11
|
+
*/
|
|
12
|
+
export function GraphPane({ rows, selectedIndex, focused, moreAbove = 0, moreBelow = 0, height, width, freezeAt, collapsedRows }) {
|
|
13
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: focused ? "cyan" : "gray", width: width, flexGrow: width ? undefined : 1, paddingX: 1, height: height, overflow: "hidden", children: [_jsx(Text, { bold: true, color: "magenta", children: "WORKFLOW GRAPH (IR)" }), moreAbove > 0 ? _jsxs(Text, { color: "gray", children: [" \u2191 ", moreAbove, " more"] }) : null, _jsx(Box, { flexDirection: "column", children: rows.map((row, i) => (_jsx(GraphRow, { row: row, selected: i === selectedIndex, collapsed: collapsedRows?.has(row.rowKey) ?? false, freezeAt: freezeAt }, row.rowKey))) }), moreBelow > 0 ? _jsxs(Text, { color: "gray", children: [" \u2193 ", moreBelow, " more"] }) : null] }));
|
|
14
|
+
}
|
|
15
|
+
export function GraphRow({ row, selected, collapsed = false, freezeAt }) {
|
|
16
|
+
const style = styleForState(row.state);
|
|
17
|
+
const kindStyle = styleForKind(row.irNode.kind);
|
|
18
|
+
const isGroup = row.groupDim !== undefined;
|
|
19
|
+
const composite = !isGroup && isComposite(row.irNode.kind);
|
|
20
|
+
const indicator = collapseIndicatorForRow(row, collapsed);
|
|
21
|
+
const dur = row.instance ? formatDuration(row.instance.startedAt, row.instance.completedAt, freezeAt) : "";
|
|
22
|
+
// Single-line row: render everything (incl. duration) inside one truncating
|
|
23
|
+
// Text so Ink never wraps the duration onto a second line. Tree guide-line
|
|
24
|
+
// segments stay outside the selection highlight and use the owning kind color.
|
|
25
|
+
return (_jsxs(Text, { wrap: "truncate", children: [row.treeSegments.map((seg, i) => (_jsx(Text, { color: styleForKind(seg.ownerKind).color, children: seg.text }, i))), _jsxs(Text, { color: selected ? "black" : undefined, backgroundColor: selected ? "cyan" : undefined, children: [_jsxs(Text, { color: style.color, children: [style.glyph, " "] }), isGroup ? (_jsx(Text, { color: "yellow", bold: true, children: row.label })) : (_jsx(Text, { bold: composite, children: row.label })), _jsxs(Text, { color: kindStyle.color, children: [" ", kindStyle.symbol] }), indicator ? _jsxs(Text, { color: indicator.color, children: [" ", indicator.glyph] }) : null, row.branchLabel ? _jsxs(Text, { color: "yellow", children: [" [", row.branchLabel, "]"] }) : null, row.summary ? _jsxs(Text, { color: "gray", children: [" (", row.summary, ")"] }) : null] }), dur ? _jsxs(Text, { color: "gray", children: [" ", dur] }) : null] }));
|
|
26
|
+
}
|
|
27
|
+
export function collapseIndicatorForRow(row, collapsed) {
|
|
28
|
+
if (!row.isHeader)
|
|
29
|
+
return undefined;
|
|
30
|
+
return {
|
|
31
|
+
glyph: collapsed ? "▸" : "▾",
|
|
32
|
+
color: styleForKind(row.irNode.kind).color
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=GraphPane.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphPane.js","sourceRoot":"","sources":["../../src/components/GraphPane.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { RunSupervisorClient } from "@acpus/runtime";
|
|
3
|
+
type RunPickerAction = "up" | "down" | "select" | "quit";
|
|
4
|
+
interface RunPickerKey {
|
|
5
|
+
upArrow?: boolean;
|
|
6
|
+
downArrow?: boolean;
|
|
7
|
+
return?: boolean;
|
|
8
|
+
ctrl?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function runPickerAction(input: string, key: RunPickerKey): RunPickerAction | undefined;
|
|
11
|
+
/** Run picker shown when no runId is given. Lists runs from the supervisor. */
|
|
12
|
+
export declare function RunPicker({ client, onSelect }: {
|
|
13
|
+
client: RunSupervisorClient;
|
|
14
|
+
onSelect: (runId: string) => void;
|
|
15
|
+
}): React.ReactElement;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=RunPicker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunPicker.d.ts","sourceRoot":"","sources":["../../src/components/RunPicker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,KAAK,EAAE,mBAAmB,EAAc,MAAM,gBAAgB,CAAC;AAEtE,KAAK,eAAe,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEzD,UAAU,YAAY;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,eAAe,GAAG,SAAS,CAM7F;AAED,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,EACxB,MAAM,EACN,QAAQ,EACT,EAAE;IACD,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,GAAG,KAAK,CAAC,YAAY,CAiErB"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
|
+
import { Box, Text, useApp, useInput } from "ink";
|
|
4
|
+
export function runPickerAction(input, key) {
|
|
5
|
+
if (input === "q" || (key.ctrl && input === "c"))
|
|
6
|
+
return "quit";
|
|
7
|
+
if (input === "k" || key.upArrow)
|
|
8
|
+
return "up";
|
|
9
|
+
if (input === "j" || key.downArrow)
|
|
10
|
+
return "down";
|
|
11
|
+
if (key.return)
|
|
12
|
+
return "select";
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
/** Run picker shown when no runId is given. Lists runs from the supervisor. */
|
|
16
|
+
export function RunPicker({ client, onSelect }) {
|
|
17
|
+
const { exit } = useApp();
|
|
18
|
+
const [runs, setRuns] = useState();
|
|
19
|
+
const [error, setError] = useState();
|
|
20
|
+
const [index, setIndex] = useState(0);
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
client
|
|
23
|
+
.listRuns()
|
|
24
|
+
.then((r) => setRuns(r))
|
|
25
|
+
.catch((e) => setError(e instanceof Error ? e.message : String(e)));
|
|
26
|
+
}, [client]);
|
|
27
|
+
useInput((input, key) => {
|
|
28
|
+
const action = runPickerAction(input, key);
|
|
29
|
+
if (action === "quit") {
|
|
30
|
+
exit();
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (!runs || runs.length === 0)
|
|
34
|
+
return;
|
|
35
|
+
if (action === "up")
|
|
36
|
+
setIndex((i) => Math.max(0, i - 1));
|
|
37
|
+
if (action === "down")
|
|
38
|
+
setIndex((i) => Math.min(runs.length - 1, i + 1));
|
|
39
|
+
if (action === "select")
|
|
40
|
+
onSelect(runs[index].runId);
|
|
41
|
+
});
|
|
42
|
+
if (error) {
|
|
43
|
+
return (_jsx(Box, { padding: 1, children: _jsxs(Text, { color: "red", children: ["Failed to list runs: ", error] }) }));
|
|
44
|
+
}
|
|
45
|
+
if (!runs) {
|
|
46
|
+
return (_jsx(Box, { padding: 1, children: _jsx(Text, { color: "yellow", children: "Loading runs\u2026" }) }));
|
|
47
|
+
}
|
|
48
|
+
if (runs.length === 0) {
|
|
49
|
+
return (_jsx(Box, { padding: 1, children: _jsx(Text, { color: "gray", children: "No runs found. Start one with `acpus workflows run <spec>`." }) }));
|
|
50
|
+
}
|
|
51
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", paddingX: 1, children: [_jsxs(Text, { bold: true, color: "magenta", children: ["SELECT A RUN ", _jsx(Text, { color: "gray", children: "(j/k, Enter, q)" })] }), _jsx(Box, { flexDirection: "column", marginTop: 1, children: runs.map((r, i) => (_jsxs(Text, { color: i === index ? "black" : undefined, backgroundColor: i === index ? "cyan" : undefined, children: [r.runId, " ", r.workflowName, " [", r.status, "] ", r.updatedAt] }, r.runId))) })] }));
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=RunPicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunPicker.js","sourceRoot":"","sources":["../../src/components/RunPicker.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAYlD,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,GAAiB;IAC9D,IAAI,KAAK,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,KAAK,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IAChE,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC9C,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,SAAS;QAAE,OAAO,MAAM,CAAC;IAClD,IAAI,GAAG,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IAChC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,SAAS,CAAC,EACxB,MAAM,EACN,QAAQ,EAIT;IACC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,EAA4B,CAAC;IAC7D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,EAAsB,CAAC;IACzD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEtC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM;aACH,QAAQ,EAAE;aACV,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aACvB,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC3C,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,IAAI,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACvC,IAAI,MAAM,KAAK,IAAI;YAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzD,IAAI,MAAM,KAAK,MAAM;YAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzE,IAAI,MAAM,KAAK,QAAQ;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CACL,KAAC,GAAG,IAAC,OAAO,EAAE,CAAC,YACb,MAAC,IAAI,IAAC,KAAK,EAAC,KAAK,sCAAuB,KAAK,IAAQ,GACjD,CACP,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CACL,KAAC,GAAG,IAAC,OAAO,EAAE,CAAC,YACb,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,mCAAqB,GACrC,CACP,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CACL,KAAC,GAAG,IAAC,OAAO,EAAE,CAAC,YACb,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,4EAAyE,GACvF,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,QAAQ,EAAE,CAAC,aAC5E,MAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,SAAS,+BACV,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,gCAAuB,IAClD,EACP,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,YACrC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAClB,MAAC,IAAI,IAEH,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EACxC,eAAe,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,aAEhD,CAAC,CAAC,KAAK,QAAI,CAAC,CAAC,YAAY,SAAK,CAAC,CAAC,MAAM,SAAK,CAAC,CAAC,SAAS,KAJlD,CAAC,CAAC,KAAK,CAKP,CACR,CAAC,GACE,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { NodeState } from "@acpus/runtime";
|
|
3
|
+
export interface OverviewMessage {
|
|
4
|
+
text: string;
|
|
5
|
+
level: "info" | "error";
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Left pane: aggregate dashboard. Total + per-state counts (always all 7 states,
|
|
9
|
+
* so it doubles as the legend) + overall progress bar. Counts use the runtime
|
|
10
|
+
* instance basis (fanout lanes / loop rounds each count once); Total == sum of
|
|
11
|
+
* the 7 state counts, so the three numbers are always self-consistent.
|
|
12
|
+
*/
|
|
13
|
+
export declare function StatusOverview({ counts, messages, height }: {
|
|
14
|
+
counts: Record<NodeState, number> & {
|
|
15
|
+
total: number;
|
|
16
|
+
};
|
|
17
|
+
messages?: OverviewMessage[];
|
|
18
|
+
height?: number;
|
|
19
|
+
}): React.ReactElement;
|
|
20
|
+
//# sourceMappingURL=StatusOverview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusOverview.d.ts","sourceRoot":"","sources":["../../src/components/StatusOverview.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,QAAQ,EACR,MAAM,EACP,EAAE;IACD,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACtD,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,KAAK,CAAC,YAAY,CA0ErB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { KIND_STYLES, STATE_STYLES } from "../theme.js";
|
|
4
|
+
/**
|
|
5
|
+
* Left pane: aggregate dashboard. Total + per-state counts (always all 7 states,
|
|
6
|
+
* so it doubles as the legend) + overall progress bar. Counts use the runtime
|
|
7
|
+
* instance basis (fanout lanes / loop rounds each count once); Total == sum of
|
|
8
|
+
* the 7 state counts, so the three numbers are always self-consistent.
|
|
9
|
+
*/
|
|
10
|
+
export function StatusOverview({ counts, messages, height }) {
|
|
11
|
+
const done = counts.completed;
|
|
12
|
+
const total = counts.total || 1;
|
|
13
|
+
const pct = Math.round((done / total) * 100);
|
|
14
|
+
const barWidth = 18;
|
|
15
|
+
const filled = Math.round((done / total) * barWidth);
|
|
16
|
+
const bar = "█".repeat(filled) + "░".repeat(barWidth - filled);
|
|
17
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 1, width: 28, height: height, overflow: "hidden", children: [_jsx(Text, { bold: true, color: "magenta", children: "STATUS OVERVIEW" }), _jsxs(Box, { marginTop: 1, justifyContent: "space-between", children: [_jsx(Text, { color: "gray", children: "Total Nodes" }), _jsx(Text, { bold: true, children: counts.total })] }), _jsx(Box, { flexDirection: "column", marginTop: 1, children: Object.keys(STATE_STYLES).map((s) => (_jsxs(Box, { justifyContent: "space-between", children: [_jsxs(Text, { color: STATE_STYLES[s].color, children: [STATE_STYLES[s].glyph, " ", STATE_STYLES[s].label] }), _jsx(Text, { color: STATE_STYLES[s].color, children: counts[s] })] }, s))) }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Box, { justifyContent: "space-between", children: [_jsx(Text, { color: "gray", children: "Overall Progress" }), _jsxs(Text, { color: "green", children: [pct, "%"] })] }), _jsxs(Text, { color: "green", children: ["[", bar, "]"] }), _jsxs(Text, { color: "gray", children: [done, " / ", counts.total, " completed"] })] }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { color: "gray", children: "Node Types" }), _jsx(Box, { flexDirection: "column", children: Object.entries(KIND_STYLES).map(([kind, style]) => (_jsxs(Text, { color: style.color, wrap: "truncate", children: [style.symbol, " ", style.label] }, kind))) })] }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { color: "gray", children: "Messages" }), (messages ?? []).length === 0 ? (_jsx(Text, { color: "gray", children: "-" })) : ((messages ?? []).map((msg, i) => (_jsx(Text, { color: msg.level === "error" ? "red" : "green", wrap: "wrap", children: msg.text }, i))))] })] }));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=StatusOverview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusOverview.js","sourceRoot":"","sources":["../../src/components/StatusOverview.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Control actions — map keypresses to supervisor control calls, guarding
|
|
3
|
+
* client-side by state so we only attempt actions that can succeed.
|
|
4
|
+
*/
|
|
5
|
+
import type { RunSupervisorClient, NodeExecutionState, NodeState, RunStatus } from "@acpus/runtime";
|
|
6
|
+
export type ControlAction = "pause" | "resume" | "cancel" | "retry" | "approve" | "reject";
|
|
7
|
+
/** Whether a node-addressed action is applicable to a node in the given state. */
|
|
8
|
+
export declare function canApply(action: ControlAction, state: NodeState | undefined): boolean;
|
|
9
|
+
/** Whether a Run-level action is applicable to a Run in the given status. */
|
|
10
|
+
export declare function canApplyRun(action: ControlAction, status: RunStatus | undefined): boolean;
|
|
11
|
+
/** Apply a node-addressed action. */
|
|
12
|
+
export declare function applyControl(client: RunSupervisorClient, action: ControlAction, runId: string, nodeKey: string): Promise<NodeExecutionState>;
|
|
13
|
+
/** Apply a Run-level control action. */
|
|
14
|
+
export declare function applyRunControl(client: RunSupervisorClient, action: ControlAction, runId: string): Promise<import("@acpus/runtime").RunState>;
|
|
15
|
+
//# sourceMappingURL=controls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controls.d.ts","sourceRoot":"","sources":["../src/controls.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEpG,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE3F,kFAAkF;AAClF,wBAAgB,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAUrF;AAED,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAiBzF;AAED,qCAAqC;AACrC,wBAAsB,YAAY,CAChC,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,kBAAkB,CAAC,CAa7B;AAED,wCAAwC;AACxC,wBAAsB,eAAe,CACnC,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,gBAAgB,EAAE,QAAQ,CAAC,CAe5C"}
|