@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.
Files changed (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +7 -0
  3. package/dist/agentTranscript.d.ts +33 -0
  4. package/dist/agentTranscript.d.ts.map +1 -0
  5. package/dist/agentTranscript.js +238 -0
  6. package/dist/agentTranscript.js.map +1 -0
  7. package/dist/components/App.d.ts +28 -0
  8. package/dist/components/App.d.ts.map +1 -0
  9. package/dist/components/App.js +516 -0
  10. package/dist/components/App.js.map +1 -0
  11. package/dist/components/DetailsPane.d.ts +65 -0
  12. package/dist/components/DetailsPane.d.ts.map +1 -0
  13. package/dist/components/DetailsPane.js +290 -0
  14. package/dist/components/DetailsPane.js.map +1 -0
  15. package/dist/components/Footer.d.ts +12 -0
  16. package/dist/components/Footer.d.ts.map +1 -0
  17. package/dist/components/Footer.js +34 -0
  18. package/dist/components/Footer.js.map +1 -0
  19. package/dist/components/GraphPane.d.ts +31 -0
  20. package/dist/components/GraphPane.d.ts.map +1 -0
  21. package/dist/components/GraphPane.js +35 -0
  22. package/dist/components/GraphPane.js.map +1 -0
  23. package/dist/components/RunPicker.d.ts +17 -0
  24. package/dist/components/RunPicker.d.ts.map +1 -0
  25. package/dist/components/RunPicker.js +53 -0
  26. package/dist/components/RunPicker.js.map +1 -0
  27. package/dist/components/StatusOverview.d.ts +20 -0
  28. package/dist/components/StatusOverview.d.ts.map +1 -0
  29. package/dist/components/StatusOverview.js +19 -0
  30. package/dist/components/StatusOverview.js.map +1 -0
  31. package/dist/controls.d.ts +15 -0
  32. package/dist/controls.d.ts.map +1 -0
  33. package/dist/controls.js +68 -0
  34. package/dist/controls.js.map +1 -0
  35. package/dist/index.d.ts +11 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +33 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/model.d.ts +130 -0
  40. package/dist/model.d.ts.map +1 -0
  41. package/dist/model.js +429 -0
  42. package/dist/model.js.map +1 -0
  43. package/dist/osc52.d.ts +3 -0
  44. package/dist/osc52.d.ts.map +1 -0
  45. package/dist/osc52.js +8 -0
  46. package/dist/osc52.js.map +1 -0
  47. package/dist/poller.d.ts +24 -0
  48. package/dist/poller.d.ts.map +1 -0
  49. package/dist/poller.js +58 -0
  50. package/dist/poller.js.map +1 -0
  51. package/dist/theme.d.ts +37 -0
  52. package/dist/theme.d.ts.map +1 -0
  53. package/dist/theme.js +68 -0
  54. package/dist/theme.js.map +1 -0
  55. package/dist/ui/inkui/JSONViewer.d.ts +37 -0
  56. package/dist/ui/inkui/JSONViewer.d.ts.map +1 -0
  57. package/dist/ui/inkui/JSONViewer.js +121 -0
  58. package/dist/ui/inkui/JSONViewer.js.map +1 -0
  59. package/dist/ui/inkui/KeyHint.d.ts +11 -0
  60. package/dist/ui/inkui/KeyHint.d.ts.map +1 -0
  61. package/dist/ui/inkui/KeyHint.js +7 -0
  62. package/dist/ui/inkui/KeyHint.js.map +1 -0
  63. package/dist/ui/inkui/Markdown.d.ts +9 -0
  64. package/dist/ui/inkui/Markdown.d.ts.map +1 -0
  65. package/dist/ui/inkui/Markdown.js +80 -0
  66. package/dist/ui/inkui/Markdown.js.map +1 -0
  67. package/dist/ui/inkui/ScrollArea.d.ts +29 -0
  68. package/dist/ui/inkui/ScrollArea.d.ts.map +1 -0
  69. package/dist/ui/inkui/ScrollArea.js +38 -0
  70. package/dist/ui/inkui/ScrollArea.js.map +1 -0
  71. package/dist/ui/inkui/Spinner.d.ts +19 -0
  72. package/dist/ui/inkui/Spinner.d.ts.map +1 -0
  73. package/dist/ui/inkui/Spinner.js +36 -0
  74. package/dist/ui/inkui/Spinner.js.map +1 -0
  75. package/dist/ui/inkui/Tabs.d.ts +14 -0
  76. package/dist/ui/inkui/Tabs.d.ts.map +1 -0
  77. package/dist/ui/inkui/Tabs.js +15 -0
  78. package/dist/ui/inkui/Tabs.js.map +1 -0
  79. package/dist/ui/inkui/index.d.ts +8 -0
  80. package/dist/ui/inkui/index.d.ts.map +1 -0
  81. package/dist/ui/inkui/index.js +8 -0
  82. package/dist/ui/inkui/index.js.map +1 -0
  83. package/dist/ui/inkui/theme.d.ts +20 -0
  84. package/dist/ui/inkui/theme.d.ts.map +1 -0
  85. package/dist/ui/inkui/theme.js +51 -0
  86. package/dist/ui/inkui/theme.js.map +1 -0
  87. package/dist/useTerminalSize.d.ts +20 -0
  88. package/dist/useTerminalSize.d.ts.map +1 -0
  89. package/dist/useTerminalSize.js +34 -0
  90. package/dist/useTerminalSize.js.map +1 -0
  91. package/package.json +65 -0
@@ -0,0 +1,68 @@
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
+ /** Whether a node-addressed action is applicable to a node in the given state. */
6
+ export function canApply(action, state) {
7
+ switch (action) {
8
+ case "retry":
9
+ return state === "failed";
10
+ case "approve":
11
+ case "reject":
12
+ return state === "awaiting";
13
+ default:
14
+ return false;
15
+ }
16
+ }
17
+ /** Whether a Run-level action is applicable to a Run in the given status. */
18
+ export function canApplyRun(action, status) {
19
+ switch (action) {
20
+ case "pause":
21
+ return status === "running";
22
+ case "cancel":
23
+ return status === "running" || status === "paused";
24
+ case "resume":
25
+ return status === "paused";
26
+ case "retry":
27
+ return status === "failed";
28
+ // approve/reject are node-level only; there is no Run-level decision.
29
+ case "approve":
30
+ case "reject":
31
+ return false;
32
+ default:
33
+ return false;
34
+ }
35
+ }
36
+ /** Apply a node-addressed action. */
37
+ export async function applyControl(client, action, runId, nodeKey) {
38
+ switch (action) {
39
+ case "retry":
40
+ return client.retryNode(runId, nodeKey);
41
+ case "approve":
42
+ return client.signalApproval(runId, nodeKey, true);
43
+ case "reject":
44
+ return client.signalApproval(runId, nodeKey, false);
45
+ case "pause":
46
+ case "resume":
47
+ case "cancel":
48
+ throw new Error(`'${action}' is not a Node-level action`);
49
+ }
50
+ }
51
+ /** Apply a Run-level control action. */
52
+ export async function applyRunControl(client, action, runId) {
53
+ switch (action) {
54
+ case "pause":
55
+ return client.pauseRun(runId);
56
+ case "resume":
57
+ return client.resumeRun(runId);
58
+ case "cancel":
59
+ return client.cancelRun(runId);
60
+ case "retry":
61
+ return client.retryRun(runId);
62
+ case "approve":
63
+ case "reject":
64
+ // Guarded out by canApplyRun; approve/reject are node-level only.
65
+ throw new Error(`'${action}' is not a Run-level action`);
66
+ }
67
+ }
68
+ //# sourceMappingURL=controls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controls.js","sourceRoot":"","sources":["../src/controls.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,kFAAkF;AAClF,MAAM,UAAU,QAAQ,CAAC,MAAqB,EAAE,KAA4B;IAC1E,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,OAAO;YACV,OAAO,KAAK,KAAK,QAAQ,CAAC;QAC5B,KAAK,SAAS,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,KAAK,KAAK,UAAU,CAAC;QAC9B;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,WAAW,CAAC,MAAqB,EAAE,MAA6B;IAC9E,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,OAAO;YACV,OAAO,MAAM,KAAK,SAAS,CAAC;QAC9B,KAAK,QAAQ;YACX,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,QAAQ,CAAC;QACrD,KAAK,QAAQ;YACX,OAAO,MAAM,KAAK,QAAQ,CAAC;QAC7B,KAAK,OAAO;YACV,OAAO,MAAM,KAAK,QAAQ,CAAC;QAC7B,sEAAsE;QACtE,KAAK,SAAS,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC;QACf;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED,qCAAqC;AACrC,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAA2B,EAC3B,MAAqB,EACrB,KAAa,EACb,OAAe;IAEf,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,OAAO;YACV,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC1C,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACrD,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QACtD,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ;YACX,MAAM,IAAI,KAAK,CAAC,IAAI,MAAM,8BAA8B,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,wCAAwC;AACxC,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAA2B,EAC3B,MAAqB,EACrB,KAAa;IAEb,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,OAAO;YACV,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChC,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACjC,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACjC,KAAK,OAAO;YACV,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChC,KAAK,SAAS,CAAC;QACf,KAAK,QAAQ;YACX,kEAAkE;YAClE,MAAM,IAAI,KAAK,CAAC,IAAI,MAAM,6BAA6B,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface RunTuiOptions {
2
+ /** Run to visualize. If omitted, a picker is shown. */
3
+ runId?: string;
4
+ /** Supervisor endpoint URL (required). */
5
+ endpoint: string;
6
+ }
7
+ /** Launch the TUI. Resolves when the user exits. */
8
+ export declare function runTui(options: RunTuiOptions): Promise<void>;
9
+ /** Clear the TUI frame after exit without touching non-interactive output. */
10
+ export declare function clearTerminalViewport(stdout?: NodeJS.WriteStream): boolean;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAUD,oDAAoD;AACpD,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CASlE;AAED,8EAA8E;AAC9E,wBAAgB,qBAAqB,CAAC,MAAM,GAAE,MAAM,CAAC,WAA4B,GAAG,OAAO,CAI1F"}
package/dist/index.js ADDED
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { render } from "ink";
4
+ import { RunSupervisorClient } from "@acpus/runtime";
5
+ import { App } from "./components/App.js";
6
+ import { RunPicker } from "./components/RunPicker.js";
7
+ function Root({ client, initialRunId }) {
8
+ const [runId, setRunId] = useState(initialRunId);
9
+ if (!runId) {
10
+ return _jsx(RunPicker, { client: client, onSelect: setRunId });
11
+ }
12
+ return _jsx(App, { client: client, runId: runId });
13
+ }
14
+ /** Launch the TUI. Resolves when the user exits. */
15
+ export async function runTui(options) {
16
+ const client = new RunSupervisorClient(options.endpoint);
17
+ client.clientKind = "visualize";
18
+ const { waitUntilExit } = render(_jsx(Root, { client: client, initialRunId: options.runId }));
19
+ try {
20
+ await waitUntilExit();
21
+ }
22
+ finally {
23
+ clearTerminalViewport();
24
+ }
25
+ }
26
+ /** Clear the TUI frame after exit without touching non-interactive output. */
27
+ export function clearTerminalViewport(stdout = process.stdout) {
28
+ if (!stdout.isTTY)
29
+ return false;
30
+ stdout.write("\x1b[2J\x1b[H");
31
+ return true;
32
+ }
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAStD,SAAS,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,EAA0D;IAC5F,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAqB,YAAY,CAAC,CAAC;IACrE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,KAAC,SAAS,IAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAI,CAAC;IAC3D,CAAC;IACD,OAAO,KAAC,GAAG,IAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;AAC/C,CAAC;AAED,oDAAoD;AACpD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAsB;IACjD,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzD,MAAM,CAAC,UAAU,GAAG,WAAW,CAAC;IAChC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAC,IAAI,IAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,KAAK,GAAI,CAAC,CAAC;IACxF,IAAI,CAAC;QACH,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC;YAAS,CAAC;QACT,qBAAqB,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,qBAAqB,CAAC,SAA6B,OAAO,CAAC,MAAM;IAC/E,IAAI,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAChC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC9B,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,130 @@
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
+ import type { AcpusIr, IrNode, IrNodeKind } from "@acpus/core";
25
+ import type { NodeExecutionState, NodeState } from "@acpus/runtime";
26
+ /** A dynamic dimension type encoded in node keys. */
27
+ export type Dim = "item" | "lane" | "branch" | "round";
28
+ /** A node key split into its static path segments and dynamic dimensions. */
29
+ export interface ParsedKey {
30
+ path: string[];
31
+ dims: Map<Dim, string>;
32
+ }
33
+ /**
34
+ * Parse a node key into static path segments and dynamic dimensions.
35
+ * Mirrors runtime/src/keys.ts: dimensions are `type:value` segments appended at
36
+ * the tail in a fixed order. Last-write-wins for repeated dims (documents the
37
+ * nested same-kind composite limitation).
38
+ */
39
+ export declare function parseNodeKey(key: string): ParsedKey;
40
+ /** A node in the render tree: an IR node (or a synthetic lane/round group). */
41
+ export interface RenderNode {
42
+ /** "ir" = a real IR node; "group" = a synthetic fanout-lane/loop-round group. */
43
+ type: "ir" | "group";
44
+ /** The IR node. Group rows carry their PARENT composite IR node. */
45
+ irNode: IrNode;
46
+ /** Live runtime states scoped to this node's lane/round. Usually 0 or 1. */
47
+ instances: NodeExecutionState[];
48
+ /** Child render nodes. */
49
+ children: RenderNode[];
50
+ /** For switch branches: the case label and predicate. */
51
+ branchLabel?: string;
52
+ branchWhen?: string;
53
+ /** Composite summary derived from metadata (e.g. "over=files join=quorum"). */
54
+ summary?: string;
55
+ /** Depth in the tree (root = 0). */
56
+ depth: number;
57
+ /** Set only on a fanout/loop container → drives the "(×N)" label. */
58
+ fannedCount?: number;
59
+ /** Set only on a synthetic group row. */
60
+ groupDim?: Dim;
61
+ groupValue?: string;
62
+ groupLabel?: string;
63
+ /** For lane group rows: the fanout item value (shown in DETAILS). */
64
+ groupItem?: string;
65
+ }
66
+ /** Build the full render tree for a run. */
67
+ export declare function buildRenderTree(ir: AcpusIr, states: NodeExecutionState[]): RenderNode;
68
+ /** Group runtime states by their original IR node id, each list sorted by key. */
69
+ export declare function indexByNodeId(states: NodeExecutionState[]): Map<string, NodeExecutionState[]>;
70
+ /** Flatten the render tree into a linear, display-ordered list. */
71
+ export declare function flatten(root: RenderNode): RenderNode[];
72
+ /**
73
+ * A single selectable/displayable row.
74
+ */
75
+ export interface DisplayRow {
76
+ /** Stable key for React + selection. */
77
+ rowKey: string;
78
+ irNode: IrNode;
79
+ /** Indentation depth for rendering. */
80
+ depth: number;
81
+ /** The runtime instance this row represents, if any. */
82
+ instance?: NodeExecutionState;
83
+ /** Representative state for this row (single instance or aggregate). */
84
+ state?: NodeState;
85
+ /** Display label (own node id, group label, or branch label). */
86
+ label: string;
87
+ /** True if this is a container header row (groups children). */
88
+ isHeader: boolean;
89
+ /** node key usable for control actions, if known. */
90
+ nodeKey?: string;
91
+ /** Composite summary (over/join/until ...). */
92
+ summary?: string;
93
+ branchLabel?: string;
94
+ branchWhen?: string;
95
+ /** Set on synthetic fanout-lane/loop-round group rows. */
96
+ groupDim?: Dim;
97
+ groupValue?: string;
98
+ /** For lane group rows: the fanout item value (shown in DETAILS). */
99
+ groupItem?: string;
100
+ /**
101
+ * Tree guide-line prefix split into colorable segments (one per column).
102
+ * Each segment is 3 chars (e.g. "│ ", " ", "├─ ", "└─ "). `ownerKind`
103
+ * marks the container kind that owns the column, so guide-line colors match
104
+ * the node-kind legend.
105
+ */
106
+ treeSegments: TreeSegment[];
107
+ }
108
+ /** One colorable column of a tree guide-line prefix. */
109
+ export interface TreeSegment {
110
+ text: string;
111
+ /** The node kind whose child column this segment belongs to. */
112
+ ownerKind: IrNodeKind;
113
+ }
114
+ /** Build the display-ordered, selectable rows for the whole tree. */
115
+ export declare function buildRows(root: RenderNode): DisplayRow[];
116
+ /**
117
+ * The representative state for a node: the single instance if there is one,
118
+ * else the aggregate state across this subtree's instances (failed if any
119
+ * failed, completed only if all completed, etc.).
120
+ */
121
+ export declare function aggregateState(node: RenderNode): NodeState | undefined;
122
+ /** Count every distinct runtime instance by state, for the progress/legend panes. */
123
+ export declare function countByState(root: RenderNode): Record<NodeState, number> & {
124
+ total: number;
125
+ };
126
+ /** Format a duration between two ISO timestamps as HH:MM:SS. */
127
+ export declare function formatDuration(startedAt?: string, completedAt?: string, freezeAt?: string | number): string;
128
+ /** Format a millisecond span as HH:MM:SS. */
129
+ export declare function formatElapsed(ms: number): string;
130
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}