@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
package/dist/model.js
ADDED
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model overlay — pure functions that build a render tree by walking the frozen
|
|
3
|
+
* IR (static structure) and attaching the live NodeExecutionState instances for
|
|
4
|
+
* each node.
|
|
5
|
+
*
|
|
6
|
+
* The supervisor returns a flat NodeExecutionState[] keyed by node keys like
|
|
7
|
+
* "workflow/mapped/item:file-a/lane:0/round:2". A single IR node id can map to
|
|
8
|
+
* many runtime instances (fanout lanes, loop rounds, parallel branches). Rather
|
|
9
|
+
* than grouping every IR node's instances globally (which mixes lanes from
|
|
10
|
+
* different fanout items together and makes every descendant appear "(×N)"),
|
|
11
|
+
* we rebuild a *real* hierarchical tree keyed by the dynamic dimensions encoded
|
|
12
|
+
* in each node key.
|
|
13
|
+
*
|
|
14
|
+
* Each composite introduces a distinct dynamic dimension:
|
|
15
|
+
* - fanout → item + lane (one lane per item)
|
|
16
|
+
* - parallel → branch (children are distinct IR ids → single instance per lane)
|
|
17
|
+
* - loop → round
|
|
18
|
+
*
|
|
19
|
+
* So fanout/loop "expand" into one group row per lane/round, and every node
|
|
20
|
+
* underneath a group is scoped to that lane/round → it resolves to a single
|
|
21
|
+
* instance, no spurious "(×N)". The "(×N)" count therefore lives only on the
|
|
22
|
+
* fanout/loop container that actually fans.
|
|
23
|
+
*/
|
|
24
|
+
const DIM_RE = /^(item|lane|branch|round):(.*)$/;
|
|
25
|
+
/**
|
|
26
|
+
* Parse a node key into static path segments and dynamic dimensions.
|
|
27
|
+
* Mirrors runtime/src/keys.ts: dimensions are `type:value` segments appended at
|
|
28
|
+
* the tail in a fixed order. Last-write-wins for repeated dims (documents the
|
|
29
|
+
* nested same-kind composite limitation).
|
|
30
|
+
*/
|
|
31
|
+
export function parseNodeKey(key) {
|
|
32
|
+
const path = [];
|
|
33
|
+
const dims = new Map();
|
|
34
|
+
for (const seg of key.split("/")) {
|
|
35
|
+
const m = DIM_RE.exec(seg);
|
|
36
|
+
if (m)
|
|
37
|
+
dims.set(m[1], m[2]);
|
|
38
|
+
else
|
|
39
|
+
path.push(seg);
|
|
40
|
+
}
|
|
41
|
+
return { path, dims };
|
|
42
|
+
}
|
|
43
|
+
/** An instance belongs to the current subtree iff it matches every fixed dim. */
|
|
44
|
+
function matchesScope(parsed, scope) {
|
|
45
|
+
for (const [dim, val] of scope) {
|
|
46
|
+
if (parsed.dims.get(dim) !== val)
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
/** The dynamic dimension a composite kind introduces (causing it to fan). */
|
|
52
|
+
function dimIntroducedBy(kind) {
|
|
53
|
+
if (kind === "fanout")
|
|
54
|
+
return "lane";
|
|
55
|
+
if (kind === "loop")
|
|
56
|
+
return "round";
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
/** Build the full render tree for a run. */
|
|
60
|
+
export function buildRenderTree(ir, states) {
|
|
61
|
+
const byId = indexByNodeIdParsed(states);
|
|
62
|
+
const descendantIds = new Map();
|
|
63
|
+
collectDescendantIds(ir.root, descendantIds);
|
|
64
|
+
const ctx = { byId, descendantIds };
|
|
65
|
+
return buildNode(ir.root, ctx, new Map(), 0);
|
|
66
|
+
}
|
|
67
|
+
/** Collect, for every IR node, the set of its descendant IR ids (inclusive). */
|
|
68
|
+
function collectDescendantIds(node, out) {
|
|
69
|
+
const set = new Set([node.id]);
|
|
70
|
+
const kids = node.branches
|
|
71
|
+
? node.branches.flatMap((b) => b.children)
|
|
72
|
+
: node.children ?? [];
|
|
73
|
+
for (const child of kids) {
|
|
74
|
+
for (const id of collectDescendantIds(child, out))
|
|
75
|
+
set.add(id);
|
|
76
|
+
}
|
|
77
|
+
out.set(node.id, set);
|
|
78
|
+
return set;
|
|
79
|
+
}
|
|
80
|
+
function buildNode(irNode, ctx, scope, depth, branchLabel, branchWhen) {
|
|
81
|
+
const scopedInstances = (ctx.byId.get(irNode.id) ?? [])
|
|
82
|
+
.filter((p) => matchesScope(p.parsed, scope))
|
|
83
|
+
.map((p) => p.state);
|
|
84
|
+
const groupDim = dimIntroducedBy(irNode.kind);
|
|
85
|
+
if (groupDim) {
|
|
86
|
+
return buildExpandingNode(irNode, ctx, scope, depth, groupDim, scopedInstances, branchLabel, branchWhen);
|
|
87
|
+
}
|
|
88
|
+
const children = [];
|
|
89
|
+
if (irNode.branches) {
|
|
90
|
+
for (const branch of irNode.branches) {
|
|
91
|
+
for (const child of branch.children) {
|
|
92
|
+
children.push(buildNode(child, ctx, scope, depth + 1, branch.id, branch.when));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else if (irNode.children) {
|
|
97
|
+
for (const child of irNode.children) {
|
|
98
|
+
children.push(buildNode(child, ctx, scope, depth + 1));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
type: "ir",
|
|
103
|
+
irNode,
|
|
104
|
+
instances: scopedInstances,
|
|
105
|
+
children,
|
|
106
|
+
branchLabel,
|
|
107
|
+
branchWhen,
|
|
108
|
+
summary: summarize(irNode),
|
|
109
|
+
depth
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Build a fanout/loop container that expands into one synthetic group row per
|
|
114
|
+
* lane/round value. Each group's subtree is scoped to that value, so every
|
|
115
|
+
* descendant resolves to a single instance and "(×N)" appears only here.
|
|
116
|
+
*/
|
|
117
|
+
function buildExpandingNode(irNode, ctx, scope, depth, groupDim, ownInstances, branchLabel, branchWhen) {
|
|
118
|
+
const descendants = descendantInstances(irNode, ctx, scope);
|
|
119
|
+
const groupValues = [...new Set(descendants
|
|
120
|
+
.map((p) => p.parsed.dims.get(groupDim))
|
|
121
|
+
.filter((v) => v !== undefined))].sort((a, b) => numericCompare(a, b));
|
|
122
|
+
const groupRows = groupValues.map((gv) => {
|
|
123
|
+
const childScope = new Map(scope);
|
|
124
|
+
childScope.set(groupDim, gv);
|
|
125
|
+
if (groupDim === "lane") {
|
|
126
|
+
const item = itemForLane(descendants, gv);
|
|
127
|
+
if (item !== undefined)
|
|
128
|
+
childScope.set("item", item);
|
|
129
|
+
}
|
|
130
|
+
const groupChildren = (irNode.children ?? []).map((child) => buildNode(child, ctx, childScope, depth + 2));
|
|
131
|
+
const groupInstances = descendants
|
|
132
|
+
.filter((p) => matchesScope(p.parsed, childScope))
|
|
133
|
+
.map((p) => p.state);
|
|
134
|
+
return {
|
|
135
|
+
type: "group",
|
|
136
|
+
irNode,
|
|
137
|
+
instances: groupInstances,
|
|
138
|
+
children: groupChildren,
|
|
139
|
+
depth: depth + 1,
|
|
140
|
+
groupDim,
|
|
141
|
+
groupValue: gv,
|
|
142
|
+
groupLabel: labelForGroup(groupDim, gv, childScope),
|
|
143
|
+
groupItem: groupDim === "lane" ? childScope.get("item") : undefined
|
|
144
|
+
};
|
|
145
|
+
});
|
|
146
|
+
return {
|
|
147
|
+
type: "ir",
|
|
148
|
+
irNode,
|
|
149
|
+
instances: ownInstances,
|
|
150
|
+
children: groupRows,
|
|
151
|
+
branchLabel,
|
|
152
|
+
branchWhen,
|
|
153
|
+
summary: summarize(irNode),
|
|
154
|
+
depth,
|
|
155
|
+
fannedCount: groupValues.length
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
/** All runtime instances of any IR node in this subtree, scoped to `scope`. */
|
|
159
|
+
function descendantInstances(irNode, ctx, scope) {
|
|
160
|
+
const ids = ctx.descendantIds.get(irNode.id) ?? new Set([irNode.id]);
|
|
161
|
+
const out = [];
|
|
162
|
+
for (const id of ids) {
|
|
163
|
+
for (const p of ctx.byId.get(id) ?? []) {
|
|
164
|
+
if (matchesScope(p.parsed, scope))
|
|
165
|
+
out.push(p);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return out;
|
|
169
|
+
}
|
|
170
|
+
/** Find the fanout item value associated with a lane index. */
|
|
171
|
+
function itemForLane(descendants, lane) {
|
|
172
|
+
for (const p of descendants) {
|
|
173
|
+
if (p.parsed.dims.get("lane") === lane) {
|
|
174
|
+
const item = p.parsed.dims.get("item");
|
|
175
|
+
if (item !== undefined)
|
|
176
|
+
return item;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return undefined;
|
|
180
|
+
}
|
|
181
|
+
/** Friendly label for a lane/round group row, e.g. "lane=0 [moduleA]" or "round=2". */
|
|
182
|
+
function labelForGroup(groupDim, value, scope) {
|
|
183
|
+
if (groupDim === "lane") {
|
|
184
|
+
const item = scope.get("item");
|
|
185
|
+
return item !== undefined ? `lane=${value} [${item}]` : `lane=${value}`;
|
|
186
|
+
}
|
|
187
|
+
return `${groupDim}=${value}`;
|
|
188
|
+
}
|
|
189
|
+
/** Compare two dimension values numerically when possible, else lexically. */
|
|
190
|
+
function numericCompare(a, b) {
|
|
191
|
+
const na = Number(a);
|
|
192
|
+
const nb = Number(b);
|
|
193
|
+
if (!Number.isNaN(na) && !Number.isNaN(nb))
|
|
194
|
+
return na - nb;
|
|
195
|
+
return a.localeCompare(b);
|
|
196
|
+
}
|
|
197
|
+
/** Group runtime states by their original IR node id, each list sorted by key. */
|
|
198
|
+
export function indexByNodeId(states) {
|
|
199
|
+
const map = new Map();
|
|
200
|
+
for (const s of states) {
|
|
201
|
+
const list = map.get(s.nodeId) ?? [];
|
|
202
|
+
list.push(s);
|
|
203
|
+
map.set(s.nodeId, list);
|
|
204
|
+
}
|
|
205
|
+
for (const list of map.values()) {
|
|
206
|
+
list.sort((a, b) => a.nodeKey.localeCompare(b.nodeKey));
|
|
207
|
+
}
|
|
208
|
+
return map;
|
|
209
|
+
}
|
|
210
|
+
/** Like indexByNodeId but caches each state's parsed key. */
|
|
211
|
+
function indexByNodeIdParsed(states) {
|
|
212
|
+
const map = new Map();
|
|
213
|
+
for (const s of [...states].sort((a, b) => a.nodeKey.localeCompare(b.nodeKey))) {
|
|
214
|
+
const list = map.get(s.nodeId) ?? [];
|
|
215
|
+
list.push({ state: s, parsed: parseNodeKey(s.nodeKey) });
|
|
216
|
+
map.set(s.nodeId, list);
|
|
217
|
+
}
|
|
218
|
+
return map;
|
|
219
|
+
}
|
|
220
|
+
/** Flatten the render tree into a linear, display-ordered list. */
|
|
221
|
+
export function flatten(root) {
|
|
222
|
+
const out = [];
|
|
223
|
+
const walk = (n) => {
|
|
224
|
+
out.push(n);
|
|
225
|
+
for (const c of n.children)
|
|
226
|
+
walk(c);
|
|
227
|
+
};
|
|
228
|
+
walk(root);
|
|
229
|
+
return out;
|
|
230
|
+
}
|
|
231
|
+
/** Tree guide-line glyphs. */
|
|
232
|
+
const TREE = {
|
|
233
|
+
vertical: "│ ",
|
|
234
|
+
space: " ",
|
|
235
|
+
branch: "├─ ",
|
|
236
|
+
last: "└─ "
|
|
237
|
+
};
|
|
238
|
+
/**
|
|
239
|
+
* Build the colorable guide-line segments for a node.
|
|
240
|
+
* - `ancestorIsLast[i]` — whether the i-th ancestor on the path is its
|
|
241
|
+
* parent's last child (decides "│ "/" " columns and the final connector).
|
|
242
|
+
* - `ancestorKinds[i]` — the kind of the container that owns this column.
|
|
243
|
+
*/
|
|
244
|
+
function treeSegmentsFor(ancestorIsLast, ancestorKinds) {
|
|
245
|
+
const segments = [];
|
|
246
|
+
const n = ancestorIsLast.length;
|
|
247
|
+
for (let i = 0; i < n; i++) {
|
|
248
|
+
const ownerKind = ancestorKinds[i] ?? "pipeline";
|
|
249
|
+
if (i < n - 1) {
|
|
250
|
+
segments.push({ text: ancestorIsLast[i] ? TREE.space : TREE.vertical, ownerKind });
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
segments.push({ text: ancestorIsLast[i] ? TREE.last : TREE.branch, ownerKind });
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return segments;
|
|
257
|
+
}
|
|
258
|
+
/** Build the display-ordered, selectable rows for the whole tree. */
|
|
259
|
+
export function buildRows(root) {
|
|
260
|
+
const rows = [];
|
|
261
|
+
walkRows(root, rows, [], [], "");
|
|
262
|
+
return rows;
|
|
263
|
+
}
|
|
264
|
+
function walkRows(node, rows, ancestorIsLast, ancestorKinds, pathKey) {
|
|
265
|
+
const inst = node.instances.length === 1 ? node.instances[0] : undefined;
|
|
266
|
+
const treeSegments = treeSegmentsFor(ancestorIsLast, ancestorKinds);
|
|
267
|
+
if (node.type === "group") {
|
|
268
|
+
rows.push({
|
|
269
|
+
// pathKey makes rowKey globally unique: the same IR node (e.g. a LOOP)
|
|
270
|
+
// appearing under multiple fanout lanes produces distinct group rows.
|
|
271
|
+
rowKey: `${pathKey}/${node.irNode.id}@${node.groupDim}:${node.groupValue}`,
|
|
272
|
+
irNode: node.irNode,
|
|
273
|
+
depth: node.depth,
|
|
274
|
+
instance: inst,
|
|
275
|
+
state: inst?.state ?? aggregateState(node),
|
|
276
|
+
label: node.groupLabel ?? `${node.groupDim}:${node.groupValue}`,
|
|
277
|
+
isHeader: true,
|
|
278
|
+
nodeKey: inst?.nodeKey,
|
|
279
|
+
groupDim: node.groupDim,
|
|
280
|
+
groupValue: node.groupValue,
|
|
281
|
+
groupItem: node.groupItem,
|
|
282
|
+
treeSegments
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
const label = node.fannedCount !== undefined ? `${node.irNode.id} (×${node.fannedCount})` : node.irNode.id;
|
|
287
|
+
rows.push({
|
|
288
|
+
rowKey: `${pathKey}/${node.irNode.id}` + (inst ? `#${inst.nodeKey}` : ""),
|
|
289
|
+
irNode: node.irNode,
|
|
290
|
+
depth: node.depth,
|
|
291
|
+
instance: inst,
|
|
292
|
+
state: inst?.state ?? aggregateState(node),
|
|
293
|
+
label,
|
|
294
|
+
isHeader: node.children.length > 0,
|
|
295
|
+
nodeKey: inst?.nodeKey,
|
|
296
|
+
summary: node.summary,
|
|
297
|
+
branchLabel: node.branchLabel,
|
|
298
|
+
branchWhen: node.branchWhen,
|
|
299
|
+
treeSegments
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
node.children.forEach((child, i) => walkRows(child, rows, [...ancestorIsLast, i === node.children.length - 1], [...ancestorKinds, node.irNode.kind], `${pathKey}/${i}`));
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* The representative state for a node: the single instance if there is one,
|
|
306
|
+
* else the aggregate state across this subtree's instances (failed if any
|
|
307
|
+
* failed, completed only if all completed, etc.).
|
|
308
|
+
*/
|
|
309
|
+
export function aggregateState(node) {
|
|
310
|
+
const states = collectStates(node);
|
|
311
|
+
if (states.length === 0)
|
|
312
|
+
return undefined;
|
|
313
|
+
if (states.length === 1)
|
|
314
|
+
return states[0];
|
|
315
|
+
if (states.includes("failed"))
|
|
316
|
+
return "failed";
|
|
317
|
+
if (states.includes("cancelled"))
|
|
318
|
+
return "cancelled";
|
|
319
|
+
if (states.includes("running"))
|
|
320
|
+
return "running";
|
|
321
|
+
if (states.includes("awaiting"))
|
|
322
|
+
return "awaiting";
|
|
323
|
+
if (states.includes("paused"))
|
|
324
|
+
return "paused";
|
|
325
|
+
if (states.includes("pending"))
|
|
326
|
+
return "pending";
|
|
327
|
+
if (states.every((s) => s === "completed"))
|
|
328
|
+
return "completed";
|
|
329
|
+
return states[0];
|
|
330
|
+
}
|
|
331
|
+
/** Collect this node's own instance states plus all descendants' (deduped). */
|
|
332
|
+
function collectStates(node) {
|
|
333
|
+
const seen = new Set();
|
|
334
|
+
const out = [];
|
|
335
|
+
for (const n of flatten(node)) {
|
|
336
|
+
for (const inst of n.instances) {
|
|
337
|
+
if (seen.has(inst.nodeKey))
|
|
338
|
+
continue;
|
|
339
|
+
seen.add(inst.nodeKey);
|
|
340
|
+
out.push(inst.state);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
return out;
|
|
344
|
+
}
|
|
345
|
+
/** Count every distinct runtime instance by state, for the progress/legend panes. */
|
|
346
|
+
export function countByState(root) {
|
|
347
|
+
const counts = {
|
|
348
|
+
pending: 0,
|
|
349
|
+
running: 0,
|
|
350
|
+
awaiting: 0,
|
|
351
|
+
completed: 0,
|
|
352
|
+
failed: 0,
|
|
353
|
+
paused: 0,
|
|
354
|
+
cancelled: 0,
|
|
355
|
+
total: 0
|
|
356
|
+
};
|
|
357
|
+
const seen = new Set();
|
|
358
|
+
for (const node of flatten(root)) {
|
|
359
|
+
for (const inst of node.instances) {
|
|
360
|
+
if (seen.has(inst.nodeKey))
|
|
361
|
+
continue;
|
|
362
|
+
seen.add(inst.nodeKey);
|
|
363
|
+
counts[inst.state]++;
|
|
364
|
+
counts.total++;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
return counts;
|
|
368
|
+
}
|
|
369
|
+
/** Build a short human summary of a composite node from its IR metadata. */
|
|
370
|
+
function summarize(node) {
|
|
371
|
+
const m = node.metadata ?? {};
|
|
372
|
+
switch (node.kind) {
|
|
373
|
+
case "fanout": {
|
|
374
|
+
const parts = [];
|
|
375
|
+
if (typeof m.over === "string")
|
|
376
|
+
parts.push(`over ${m.over}`);
|
|
377
|
+
if (typeof m.join === "string")
|
|
378
|
+
parts.push(`join=${String(m.join)}`);
|
|
379
|
+
if (m.quorum !== undefined)
|
|
380
|
+
parts.push(`quorum=${String(m.quorum)}`);
|
|
381
|
+
if (typeof m.max_concurrency === "number")
|
|
382
|
+
parts.push(`conc=${m.max_concurrency}`);
|
|
383
|
+
return parts.length ? parts.join(" ") : undefined;
|
|
384
|
+
}
|
|
385
|
+
case "parallel": {
|
|
386
|
+
const parts = [];
|
|
387
|
+
if (typeof m.join === "string")
|
|
388
|
+
parts.push(`join=${String(m.join)}`);
|
|
389
|
+
if (typeof m.max_concurrency === "number")
|
|
390
|
+
parts.push(`conc=${m.max_concurrency}`);
|
|
391
|
+
return parts.length ? parts.join(" ") : undefined;
|
|
392
|
+
}
|
|
393
|
+
case "switch":
|
|
394
|
+
return typeof m.on === "string" ? `on ${m.on}` : undefined;
|
|
395
|
+
case "loop": {
|
|
396
|
+
const parts = [];
|
|
397
|
+
if (m.max_iterations !== undefined)
|
|
398
|
+
parts.push(`max=${String(m.max_iterations)}`);
|
|
399
|
+
if (typeof m.until === "string")
|
|
400
|
+
parts.push(`until ${m.until}`);
|
|
401
|
+
return parts.length ? parts.join(" ") : undefined;
|
|
402
|
+
}
|
|
403
|
+
case "subworkflow":
|
|
404
|
+
return typeof m.subworkflow === "string" ? String(m.subworkflow) : undefined;
|
|
405
|
+
default:
|
|
406
|
+
return undefined;
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
/** Format a duration between two ISO timestamps as HH:MM:SS. */
|
|
410
|
+
export function formatDuration(startedAt, completedAt, freezeAt) {
|
|
411
|
+
if (!startedAt)
|
|
412
|
+
return "--:--:--";
|
|
413
|
+
const start = Date.parse(startedAt);
|
|
414
|
+
const frozen = typeof freezeAt === "number" ? freezeAt : freezeAt ? Date.parse(freezeAt) : undefined;
|
|
415
|
+
const end = completedAt ? Date.parse(completedAt) : frozen ?? Date.now();
|
|
416
|
+
if (Number.isNaN(start) || Number.isNaN(end) || end < start)
|
|
417
|
+
return "--:--:--";
|
|
418
|
+
return formatElapsed(end - start);
|
|
419
|
+
}
|
|
420
|
+
/** Format a millisecond span as HH:MM:SS. */
|
|
421
|
+
export function formatElapsed(ms) {
|
|
422
|
+
const totalSec = Math.floor(ms / 1000);
|
|
423
|
+
const h = Math.floor(totalSec / 3600);
|
|
424
|
+
const m = Math.floor((totalSec % 3600) / 60);
|
|
425
|
+
const s = totalSec % 60;
|
|
426
|
+
const pad = (n) => String(n).padStart(2, "0");
|
|
427
|
+
return `${pad(h)}:${pad(m)}:${pad(s)}`;
|
|
428
|
+
}
|
|
429
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
|
package/dist/osc52.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"osc52.d.ts","sourceRoot":"","sources":["../src/osc52.ts"],"names":[],"mappings":"AAGA,0DAA0D;AAC1D,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAGlD"}
|
package/dist/osc52.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
const ESC = "\u001b";
|
|
2
|
+
const BEL = "\u0007";
|
|
3
|
+
/** Copy text to the terminal clipboard through OSC 52. */
|
|
4
|
+
export function copyToClipboard(text) {
|
|
5
|
+
const encoded = Buffer.from(text, "utf8").toString("base64");
|
|
6
|
+
process.stdout.write(`${ESC}]52;c;${encoded}${BEL}`);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=osc52.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"osc52.js","sourceRoot":"","sources":["../src/osc52.ts"],"names":[],"mappings":"AAAA,MAAM,GAAG,GAAG,QAAQ,CAAC;AACrB,MAAM,GAAG,GAAG,QAAQ,CAAC;AAErB,0DAA0D;AAC1D,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,SAAS,OAAO,GAAG,GAAG,EAAE,CAAC,CAAC;AACvD,CAAC"}
|
package/dist/poller.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Polling data layer. The supervisor is poll-only (no event stream), so the TUI
|
|
3
|
+
* repeatedly fetches run status + node states. The frozen IR is immutable, so
|
|
4
|
+
* it is fetched once and cached.
|
|
5
|
+
*/
|
|
6
|
+
import type { AcpusIr } from "@acpus/core";
|
|
7
|
+
import type { RunSupervisorClient, NodeExecutionState, RunState } from "@acpus/runtime";
|
|
8
|
+
export interface RunSnapshot {
|
|
9
|
+
ir?: AcpusIr;
|
|
10
|
+
run?: RunState;
|
|
11
|
+
nodes: NodeExecutionState[];
|
|
12
|
+
/** Connection / fetch error message, if the last poll failed. */
|
|
13
|
+
error?: string;
|
|
14
|
+
/** True once the first successful poll has landed. */
|
|
15
|
+
loaded: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare function isTerminal(status?: string): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Poll a run on an interval. Stops polling once the run reaches a terminal
|
|
20
|
+
* status (keeping the last frame). `refreshNonce` forces an immediate refetch
|
|
21
|
+
* (used right after a control action).
|
|
22
|
+
*/
|
|
23
|
+
export declare function useRunPoller(client: RunSupervisorClient, runId: string, intervalMs?: number, refreshNonce?: number): RunSnapshot;
|
|
24
|
+
//# sourceMappingURL=poller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poller.d.ts","sourceRoot":"","sources":["../src/poller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAExF,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,MAAM,EAAE,OAAO,CAAC;CACjB;AAID,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,mBAAmB,EAC3B,KAAK,EAAE,MAAM,EACb,UAAU,SAAM,EAChB,YAAY,SAAI,GACf,WAAW,CAuCb"}
|
package/dist/poller.js
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Polling data layer. The supervisor is poll-only (no event stream), so the TUI
|
|
3
|
+
* repeatedly fetches run status + node states. The frozen IR is immutable, so
|
|
4
|
+
* it is fetched once and cached.
|
|
5
|
+
*/
|
|
6
|
+
import { useEffect, useRef, useState } from "react";
|
|
7
|
+
const TERMINAL = new Set(["completed", "failed", "paused", "cancelled"]);
|
|
8
|
+
export function isTerminal(status) {
|
|
9
|
+
return status !== undefined && TERMINAL.has(status);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Poll a run on an interval. Stops polling once the run reaches a terminal
|
|
13
|
+
* status (keeping the last frame). `refreshNonce` forces an immediate refetch
|
|
14
|
+
* (used right after a control action).
|
|
15
|
+
*/
|
|
16
|
+
export function useRunPoller(client, runId, intervalMs = 400, refreshNonce = 0) {
|
|
17
|
+
const [snapshot, setSnapshot] = useState({ nodes: [], loaded: false });
|
|
18
|
+
const irRef = useRef(undefined);
|
|
19
|
+
const stopped = useRef(false);
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
stopped.current = false;
|
|
22
|
+
let timer;
|
|
23
|
+
const poll = async () => {
|
|
24
|
+
try {
|
|
25
|
+
if (!irRef.current) {
|
|
26
|
+
irRef.current = await client.getIr(runId);
|
|
27
|
+
}
|
|
28
|
+
const [run, nodes] = await Promise.all([
|
|
29
|
+
client.getRun(runId),
|
|
30
|
+
client.getNodeStates(runId)
|
|
31
|
+
]);
|
|
32
|
+
if (stopped.current)
|
|
33
|
+
return;
|
|
34
|
+
setSnapshot({ ir: irRef.current, run, nodes, loaded: true });
|
|
35
|
+
if (isTerminal(run.status))
|
|
36
|
+
return; // stop polling; keep last frame
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
if (stopped.current)
|
|
40
|
+
return;
|
|
41
|
+
setSnapshot((prev) => ({
|
|
42
|
+
...prev,
|
|
43
|
+
error: err instanceof Error ? err.message : String(err)
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
if (!stopped.current)
|
|
47
|
+
timer = setTimeout(poll, intervalMs);
|
|
48
|
+
};
|
|
49
|
+
void poll();
|
|
50
|
+
return () => {
|
|
51
|
+
stopped.current = true;
|
|
52
|
+
if (timer)
|
|
53
|
+
clearTimeout(timer);
|
|
54
|
+
};
|
|
55
|
+
}, [client, runId, intervalMs, refreshNonce]);
|
|
56
|
+
return snapshot;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=poller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poller.js","sourceRoot":"","sources":["../src/poller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAcpD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;AAEzE,MAAM,UAAU,UAAU,CAAC,MAAe;IACxC,OAAO,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACtD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,MAA2B,EAC3B,KAAa,EACb,UAAU,GAAG,GAAG,EAChB,YAAY,GAAG,CAAC;IAEhB,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAc,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACpF,MAAM,KAAK,GAAG,MAAM,CAAsB,SAAS,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE9B,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;QACxB,IAAI,KAAgD,CAAC;QAErD,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;YACtB,IAAI,CAAC;gBACH,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;oBACnB,KAAK,CAAC,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC5C,CAAC;gBACD,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBACrC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;oBACpB,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;iBAC5B,CAAC,CAAC;gBACH,IAAI,OAAO,CAAC,OAAO;oBAAE,OAAO;gBAC5B,WAAW,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC7D,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;oBAAE,OAAO,CAAC,gCAAgC;YACtE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,OAAO,CAAC,OAAO;oBAAE,OAAO;gBAC5B,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBACrB,GAAG,IAAI;oBACP,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBACxD,CAAC,CAAC,CAAC;YACN,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,OAAO;gBAAE,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC7D,CAAC,CAAC;QAEF,KAAK,IAAI,EAAE,CAAC;QACZ,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;YACvB,IAAI,KAAK;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;IAE9C,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/dist/theme.d.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Glyphs and colors for acpus's true 7-state node lifecycle, plus kind labels
|
|
3
|
+
* for composite/executable nodes. Deliberately mirrors acpus semantics — NOT
|
|
4
|
+
* the reference image's invented states (queued / needs-review / retried).
|
|
5
|
+
*/
|
|
6
|
+
import type { NodeState } from "@acpus/runtime";
|
|
7
|
+
import type { IrNodeKind } from "@acpus/core";
|
|
8
|
+
export interface StateStyle {
|
|
9
|
+
glyph: string;
|
|
10
|
+
color: string;
|
|
11
|
+
label: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* The unified 7 states. No "queued"/"needs-review"/"retried" — those are not
|
|
15
|
+
* acpus states.
|
|
16
|
+
*
|
|
17
|
+
* IMPORTANT: every glyph MUST be a single terminal column wide. Wide (emoji /
|
|
18
|
+
* East-Asian) glyphs like ⏳/⏸/▶ render as 2 columns and break the
|
|
19
|
+
* `justifyContent="space-between"` alignment in StatusOverview (and skew the
|
|
20
|
+
* graph tree indentation). Use single-width symbols only.
|
|
21
|
+
*/
|
|
22
|
+
export declare const STATE_STYLES: Record<NodeState, StateStyle>;
|
|
23
|
+
/** Short uppercase label for a composite container header. */
|
|
24
|
+
export declare const KIND_LABELS: Record<IrNodeKind, string>;
|
|
25
|
+
export interface KindStyle {
|
|
26
|
+
symbol: string;
|
|
27
|
+
color: string;
|
|
28
|
+
label: string;
|
|
29
|
+
}
|
|
30
|
+
/** Single-width node-kind symbols and colors shared by graph rows and legends. */
|
|
31
|
+
export declare const KIND_STYLES: Record<IrNodeKind, KindStyle>;
|
|
32
|
+
/** Composite kinds control other nodes; the rest are executable leaves. */
|
|
33
|
+
export declare const COMPOSITE_KINDS: ReadonlySet<IrNodeKind>;
|
|
34
|
+
export declare function isComposite(kind: IrNodeKind): boolean;
|
|
35
|
+
export declare function styleForState(state: NodeState | undefined): StateStyle;
|
|
36
|
+
export declare function styleForKind(kind: IrNodeKind): KindStyle;
|
|
37
|
+
//# sourceMappingURL=theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,UAAU,CAQtD,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAWlD,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,kFAAkF;AAClF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,SAAS,CAWrD,CAAC;AAEF,2EAA2E;AAC3E,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,UAAU,CAOlD,CAAC;AAEH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAErD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,CAEtE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,CAExD"}
|