@mono-agent/tui 0.4.0 → 0.5.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/README.md +60 -10
- package/dist/bin/cli.d.ts +4 -1
- package/dist/bin/cli.d.ts.map +1 -1
- package/dist/bin/cli.js +36 -53
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/mono-agent-tui.js +21 -10
- package/dist/bin/mono-agent-tui.js.map +1 -1
- package/dist/config/pane.d.ts +9 -9
- package/dist/config/pane.d.ts.map +1 -1
- package/dist/config/pane.js +15 -196
- package/dist/config/pane.js.map +1 -1
- package/dist/data/instances.d.ts +48 -0
- package/dist/data/instances.d.ts.map +1 -0
- package/dist/data/instances.js +101 -0
- package/dist/data/instances.js.map +1 -0
- package/dist/data/replay.d.ts +68 -0
- package/dist/data/replay.d.ts.map +1 -0
- package/dist/data/replay.js +149 -0
- package/dist/data/replay.js.map +1 -0
- package/dist/index.d.ts +10 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/remote/client.d.ts +44 -0
- package/dist/remote/client.d.ts.map +1 -0
- package/dist/remote/client.js +173 -0
- package/dist/remote/client.js.map +1 -0
- package/dist/runtime/start.d.ts +11 -18
- package/dist/runtime/start.d.ts.map +1 -1
- package/dist/runtime/start.js +19 -33
- package/dist/runtime/start.js.map +1 -1
- package/dist/ui/app.d.ts +142 -0
- package/dist/ui/app.d.ts.map +1 -0
- package/dist/ui/app.js +586 -0
- package/dist/ui/app.js.map +1 -0
- package/dist/ui/components/event-list.d.ts +60 -0
- package/dist/ui/components/event-list.d.ts.map +1 -0
- package/dist/ui/components/event-list.js +369 -0
- package/dist/ui/components/event-list.js.map +1 -0
- package/dist/ui/components/status-bar.d.ts +65 -0
- package/dist/ui/components/status-bar.d.ts.map +1 -0
- package/dist/ui/components/status-bar.js +126 -0
- package/dist/ui/components/status-bar.js.map +1 -0
- package/dist/ui/components/tool-panel.d.ts +30 -0
- package/dist/ui/components/tool-panel.d.ts.map +1 -0
- package/dist/ui/components/tool-panel.js +59 -0
- package/dist/ui/components/tool-panel.js.map +1 -0
- package/dist/ui/components/transcript-cells.d.ts +49 -0
- package/dist/ui/components/transcript-cells.d.ts.map +1 -0
- package/dist/ui/components/transcript-cells.js +110 -0
- package/dist/ui/components/transcript-cells.js.map +1 -0
- package/dist/ui/format.d.ts +29 -0
- package/dist/ui/format.d.ts.map +1 -0
- package/dist/ui/format.js +105 -0
- package/dist/ui/format.js.map +1 -0
- package/dist/ui/theme.d.ts +25 -0
- package/dist/ui/theme.d.ts.map +1 -0
- package/dist/ui/theme.js +62 -0
- package/dist/ui/theme.js.map +1 -0
- package/dist/ui/turn-presenter.d.ts +72 -0
- package/dist/ui/turn-presenter.d.ts.map +1 -0
- package/dist/ui/turn-presenter.js +334 -0
- package/dist/ui/turn-presenter.js.map +1 -0
- package/dist/ui/views/chat.d.ts +128 -0
- package/dist/ui/views/chat.d.ts.map +1 -0
- package/dist/ui/views/chat.js +313 -0
- package/dist/ui/views/chat.js.map +1 -0
- package/dist/ui/views/config.d.ts +23 -0
- package/dist/ui/views/config.d.ts.map +1 -0
- package/dist/ui/views/config.js +87 -0
- package/dist/ui/views/config.js.map +1 -0
- package/dist/ui/views/picker.d.ts +17 -0
- package/dist/ui/views/picker.d.ts.map +1 -0
- package/dist/ui/views/picker.js +57 -0
- package/dist/ui/views/picker.js.map +1 -0
- package/dist/ui/views/replay-detail.d.ts +60 -0
- package/dist/ui/views/replay-detail.d.ts.map +1 -0
- package/dist/ui/views/replay-detail.js +328 -0
- package/dist/ui/views/replay-detail.js.map +1 -0
- package/dist/ui/views/replay.d.ts +74 -0
- package/dist/ui/views/replay.d.ts.map +1 -0
- package/dist/ui/views/replay.js +460 -0
- package/dist/ui/views/replay.js.map +1 -0
- package/package.json +9 -12
- package/dist/agent/message-stream.d.ts +0 -52
- package/dist/agent/message-stream.d.ts.map +0 -1
- package/dist/agent/message-stream.js +0 -110
- package/dist/agent/message-stream.js.map +0 -1
- package/dist/components/ChatPane.d.ts +0 -20
- package/dist/components/ChatPane.d.ts.map +0 -1
- package/dist/components/ChatPane.js +0 -142
- package/dist/components/ChatPane.js.map +0 -1
- package/dist/components/ConfigPane.d.ts +0 -12
- package/dist/components/ConfigPane.d.ts.map +0 -1
- package/dist/components/ConfigPane.js +0 -70
- package/dist/components/ConfigPane.js.map +0 -1
- package/dist/components/HelpOverlay.d.ts +0 -6
- package/dist/components/HelpOverlay.d.ts.map +0 -1
- package/dist/components/HelpOverlay.js +0 -18
- package/dist/components/HelpOverlay.js.map +0 -1
- package/dist/components/HistoryPane.d.ts +0 -9
- package/dist/components/HistoryPane.d.ts.map +0 -1
- package/dist/components/HistoryPane.js +0 -125
- package/dist/components/HistoryPane.js.map +0 -1
- package/dist/components/StatusBar.d.ts +0 -10
- package/dist/components/StatusBar.d.ts.map +0 -1
- package/dist/components/StatusBar.js +0 -15
- package/dist/components/StatusBar.js.map +0 -1
- package/dist/components/TuiApp.d.ts +0 -29
- package/dist/components/TuiApp.d.ts.map +0 -1
- package/dist/components/TuiApp.js +0 -81
- package/dist/components/TuiApp.js.map +0 -1
- package/dist/components/primitives/Badge.d.ts +0 -8
- package/dist/components/primitives/Badge.d.ts.map +0 -1
- package/dist/components/primitives/Badge.js +0 -14
- package/dist/components/primitives/Badge.js.map +0 -1
- package/dist/components/primitives/Spinner.d.ts +0 -6
- package/dist/components/primitives/Spinner.d.ts.map +0 -1
- package/dist/components/primitives/Spinner.js +0 -8
- package/dist/components/primitives/Spinner.js.map +0 -1
- package/dist/components/primitives/TranscriptLine.d.ts +0 -10
- package/dist/components/primitives/TranscriptLine.d.ts.map +0 -1
- package/dist/components/primitives/TranscriptLine.js +0 -15
- package/dist/components/primitives/TranscriptLine.js.map +0 -1
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
import { Container, matchesKey, SelectList, Text } from "@earendil-works/pi-tui";
|
|
2
|
+
import { listReplayRuns, readReplayRun, } from "../../data/replay.js";
|
|
3
|
+
import { extractUsage, formatDateClock, formatDurationMs, formatTokens, formatUsd, previewValue } from "../format.js";
|
|
4
|
+
import { selectListTheme, styles } from "../theme.js";
|
|
5
|
+
import { EventTimelineList } from "../components/event-list.js";
|
|
6
|
+
import { buildDetailCell, buildHeadline, buildPayloadHeader, buildRawPayloadBody, buildStatusLine, CATEGORY_KEYS, } from "./replay-detail.js";
|
|
7
|
+
/** `all` means "no source filter" -- see the `s` key cycle in `handleInput`. */
|
|
8
|
+
const ALL_SOURCE_FILTER = "all";
|
|
9
|
+
const SOURCE_FILTER_CYCLE = [
|
|
10
|
+
ALL_SOURCE_FILTER,
|
|
11
|
+
"tui",
|
|
12
|
+
"telegram",
|
|
13
|
+
"slack",
|
|
14
|
+
"cron",
|
|
15
|
+
"webhook",
|
|
16
|
+
"memory",
|
|
17
|
+
"other",
|
|
18
|
+
];
|
|
19
|
+
const STATUS_FILTER_CYCLE = ["all", "failed", "succeeded"];
|
|
20
|
+
const LIST_HINT = "enter open · r refresh · s source · x status · esc back";
|
|
21
|
+
/** Preview length for a compacted `userInput` label (see {@link runLabelText}). */
|
|
22
|
+
const USER_INPUT_PREVIEW_MAX_CHARS = 40;
|
|
23
|
+
// Content-first labels (source-detail/userInput previews) run longer than the
|
|
24
|
+
// old `<conversationId>`-only label this column was originally tuned for (a
|
|
25
|
+
// fixed 46). Give SelectList a floor/ceiling instead of a fixed width so it
|
|
26
|
+
// shrinks to fit short labels (leaving the description room) and only grows
|
|
27
|
+
// toward the ceiling for genuinely long ones.
|
|
28
|
+
const LIST_PRIMARY_COLUMN_MIN_WIDTH = 20;
|
|
29
|
+
const LIST_PRIMARY_COLUMN_MAX_WIDTH = 72;
|
|
30
|
+
function nextInCycle(cycle, current) {
|
|
31
|
+
const index = cycle.indexOf(current);
|
|
32
|
+
return cycle[(index + 1) % cycle.length] ?? cycle[0];
|
|
33
|
+
}
|
|
34
|
+
function statusGlyph(status) {
|
|
35
|
+
if (status === "succeeded") {
|
|
36
|
+
return styles.success("✓");
|
|
37
|
+
}
|
|
38
|
+
if (status === "cancelled" || status === "running") {
|
|
39
|
+
return styles.warning("◌");
|
|
40
|
+
}
|
|
41
|
+
return styles.error("✗");
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Content-first label text (precedence: `sourceDetail` -- cron job id /
|
|
45
|
+
* webhook endpoint name -- then a compacted `userInput` preview, then
|
|
46
|
+
* `conversationId` as a last resort for old, pre-`source` artifacts).
|
|
47
|
+
*/
|
|
48
|
+
function runLabelText(run) {
|
|
49
|
+
if (run.sourceDetail !== undefined && run.sourceDetail.trim().length > 0) {
|
|
50
|
+
return run.sourceDetail;
|
|
51
|
+
}
|
|
52
|
+
if (run.userInput !== undefined && run.userInput.trim().length > 0) {
|
|
53
|
+
const compacted = previewValue(run.userInput.replace(/\s+/gu, " ").trim(), USER_INPUT_PREVIEW_MAX_CHARS);
|
|
54
|
+
return `"${compacted}"`;
|
|
55
|
+
}
|
|
56
|
+
return run.conversationId;
|
|
57
|
+
}
|
|
58
|
+
/** Model shortened to its last path/colon segment, e.g. `pi:openai:gpt-5.5` -> `gpt-5.5`. */
|
|
59
|
+
function shortenModel(model) {
|
|
60
|
+
const segments = model.split(/[/:]/u).filter((segment) => segment.length > 0);
|
|
61
|
+
return segments.at(-1) ?? model;
|
|
62
|
+
}
|
|
63
|
+
function modelEffortSegment(run) {
|
|
64
|
+
const model = run.model === undefined ? undefined : shortenModel(run.model);
|
|
65
|
+
if (model === undefined) {
|
|
66
|
+
return run.effort === undefined ? undefined : `@${run.effort}`;
|
|
67
|
+
}
|
|
68
|
+
return run.effort === undefined ? model : `${model}@${run.effort}`;
|
|
69
|
+
}
|
|
70
|
+
function buildRunDescription(run) {
|
|
71
|
+
const segments = [formatDurationMs(run.durationMs), `${run.eventCount} ev`];
|
|
72
|
+
const modelEffort = modelEffortSegment(run);
|
|
73
|
+
if (modelEffort !== undefined) {
|
|
74
|
+
segments.push(modelEffort);
|
|
75
|
+
}
|
|
76
|
+
const usage = extractUsage(run.usage, run.cost);
|
|
77
|
+
if (usage !== undefined) {
|
|
78
|
+
segments.push(`↑${formatTokens(usage.input ?? 0)} ↓${formatTokens(usage.output ?? 0)}`);
|
|
79
|
+
if (usage.usd !== undefined) {
|
|
80
|
+
segments.push(formatUsd(usage.usd));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (run.failureKind !== undefined) {
|
|
84
|
+
segments.push(run.failureKind);
|
|
85
|
+
}
|
|
86
|
+
return segments.join(" · ");
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Recorded-run replay straight from the agent's artifact dir: run list →
|
|
90
|
+
* debugger-style step-through of any past turn's full event timeline
|
|
91
|
+
* (thinking, tools, telemetry, failover) from ANY channel — richer than the
|
|
92
|
+
* live stream since nothing is dropped.
|
|
93
|
+
*/
|
|
94
|
+
export class ReplayView extends Container {
|
|
95
|
+
list;
|
|
96
|
+
options;
|
|
97
|
+
header = new Text("", 1, 0);
|
|
98
|
+
detail = new Container();
|
|
99
|
+
detailHeadline = new Text("", 1, 0);
|
|
100
|
+
detailStatus = new Text("", 1, 0);
|
|
101
|
+
eventList = new EventTimelineList({ maxVisible: 16 });
|
|
102
|
+
/** Selected-event pane: header + chat-style cell (+ raw JSON strip when expanded), rebuilt by {@link rebuildDetailPane}. */
|
|
103
|
+
detailPane = new Container();
|
|
104
|
+
mode = "list";
|
|
105
|
+
artifactDir;
|
|
106
|
+
runs = [];
|
|
107
|
+
totalRuns = 0;
|
|
108
|
+
warnings = [];
|
|
109
|
+
sourceFilter = ALL_SOURCE_FILTER;
|
|
110
|
+
statusFilter = "all";
|
|
111
|
+
// Detail-mode state. `categoryFilter` empty means "no filter" (all visible)
|
|
112
|
+
// -- see setCategoryFilter/toggleCategory below for how that maps onto the
|
|
113
|
+
// component's undefined-means-unfiltered convention.
|
|
114
|
+
currentReplay;
|
|
115
|
+
categoryFilter = new Set();
|
|
116
|
+
committedSearch;
|
|
117
|
+
searchInputOpen = false;
|
|
118
|
+
searchInputBuffer = "";
|
|
119
|
+
payloadExpanded = false;
|
|
120
|
+
selectedItem;
|
|
121
|
+
constructor(options) {
|
|
122
|
+
super();
|
|
123
|
+
this.options = options;
|
|
124
|
+
this.list = new SelectList([], 14, selectListTheme, {
|
|
125
|
+
minPrimaryColumnWidth: LIST_PRIMARY_COLUMN_MIN_WIDTH,
|
|
126
|
+
maxPrimaryColumnWidth: LIST_PRIMARY_COLUMN_MAX_WIDTH,
|
|
127
|
+
});
|
|
128
|
+
this.list.onSelect = (item) => {
|
|
129
|
+
void this.openRun(item.value);
|
|
130
|
+
};
|
|
131
|
+
this.detail.addChild(this.detailHeadline);
|
|
132
|
+
this.detail.addChild(this.detailStatus);
|
|
133
|
+
this.detail.addChild(this.eventList);
|
|
134
|
+
this.detail.addChild(this.detailPane);
|
|
135
|
+
this.eventList.onSelectionChange = (item) => {
|
|
136
|
+
this.selectedItem = item;
|
|
137
|
+
this.refreshPanes();
|
|
138
|
+
};
|
|
139
|
+
this.showList();
|
|
140
|
+
// Self-initialize the empty-state header (no artifact dir until an
|
|
141
|
+
// instance is selected).
|
|
142
|
+
void this.refresh();
|
|
143
|
+
}
|
|
144
|
+
isInDetail() {
|
|
145
|
+
return this.mode === "detail";
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Esc layering in detail mode: an open search input closes+clears first;
|
|
149
|
+
* else a committed search clears; else an expanded payload pane collapses;
|
|
150
|
+
* else return to the run list. Returns false only when already at the list
|
|
151
|
+
* (so app-level esc fallthrough, e.g. switching views, still works).
|
|
152
|
+
*/
|
|
153
|
+
back() {
|
|
154
|
+
if (this.mode !== "detail") {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
if (this.searchInputOpen) {
|
|
158
|
+
this.searchInputOpen = false;
|
|
159
|
+
this.searchInputBuffer = "";
|
|
160
|
+
}
|
|
161
|
+
else if (this.committedSearch !== undefined) {
|
|
162
|
+
this.committedSearch = undefined;
|
|
163
|
+
this.eventList.setSearch(undefined);
|
|
164
|
+
}
|
|
165
|
+
else if (this.payloadExpanded) {
|
|
166
|
+
this.payloadExpanded = false;
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
this.showList();
|
|
170
|
+
this.options.tui.requestRender();
|
|
171
|
+
return true;
|
|
172
|
+
}
|
|
173
|
+
this.refreshPanes();
|
|
174
|
+
this.options.tui.requestRender();
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
handleInput(data) {
|
|
178
|
+
if (this.mode === "list") {
|
|
179
|
+
if (data === "r" || data === "R") {
|
|
180
|
+
void this.refresh();
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
if (data === "s") {
|
|
184
|
+
this.cycleSourceFilter();
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
if (data === "x") {
|
|
188
|
+
this.cycleStatusFilter();
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
this.list.handleInput(data);
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
this.handleDetailInput(data);
|
|
195
|
+
}
|
|
196
|
+
setArtifactDir(artifactDir) {
|
|
197
|
+
this.artifactDir = artifactDir;
|
|
198
|
+
void this.refresh();
|
|
199
|
+
}
|
|
200
|
+
async refresh() {
|
|
201
|
+
// Snapshot: a rapid agent switch mid-read must not paint the previous
|
|
202
|
+
// agent's runs into the new agent's list.
|
|
203
|
+
const requestedDir = this.artifactDir;
|
|
204
|
+
if (requestedDir === undefined) {
|
|
205
|
+
this.runs = [];
|
|
206
|
+
this.totalRuns = 0;
|
|
207
|
+
this.warnings = [];
|
|
208
|
+
this.header.setText(`${styles.bold("Run replay unavailable")}\n${styles.muted("The selected agent's manifest has no artifact dir.")}`);
|
|
209
|
+
this.syncListItems();
|
|
210
|
+
this.showList();
|
|
211
|
+
this.options.tui.requestRender();
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
try {
|
|
215
|
+
const { runs, warnings, totalRuns } = await listReplayRuns(requestedDir, {
|
|
216
|
+
...(this.sourceFilter === ALL_SOURCE_FILTER ? {} : { sourceFilter: this.sourceFilter }),
|
|
217
|
+
});
|
|
218
|
+
if (this.artifactDir !== requestedDir) {
|
|
219
|
+
return; // Superseded by a newer agent selection.
|
|
220
|
+
}
|
|
221
|
+
this.runs = runs;
|
|
222
|
+
this.totalRuns = totalRuns;
|
|
223
|
+
this.warnings = warnings;
|
|
224
|
+
this.updateHeader();
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
if (this.artifactDir !== requestedDir) {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
this.runs = [];
|
|
231
|
+
this.totalRuns = 0;
|
|
232
|
+
this.warnings = [];
|
|
233
|
+
this.header.setText(styles.error(`Failed to read runs: ${error instanceof Error ? error.message : String(error)}`));
|
|
234
|
+
}
|
|
235
|
+
this.syncListItems();
|
|
236
|
+
if (this.mode === "list") {
|
|
237
|
+
this.showList();
|
|
238
|
+
}
|
|
239
|
+
this.options.tui.requestRender();
|
|
240
|
+
}
|
|
241
|
+
/** Runs after the client-side status filter (source filtering already happened server-side, see `refresh`). */
|
|
242
|
+
filteredRuns() {
|
|
243
|
+
if (this.statusFilter === "all") {
|
|
244
|
+
return this.runs;
|
|
245
|
+
}
|
|
246
|
+
// Strict match on the bucket's own status -- NOT "everything that isn't
|
|
247
|
+
// succeeded" -- so a `running`/`cancelled` run lands in neither bucket
|
|
248
|
+
// rather than being swept into "failed".
|
|
249
|
+
return this.runs.filter((run) => run.status === this.statusFilter);
|
|
250
|
+
}
|
|
251
|
+
updateHeader() {
|
|
252
|
+
const shown = this.filteredRuns().length;
|
|
253
|
+
const filterParts = [];
|
|
254
|
+
if (this.sourceFilter !== ALL_SOURCE_FILTER) {
|
|
255
|
+
filterParts.push(`source: ${this.sourceFilter}`);
|
|
256
|
+
}
|
|
257
|
+
if (this.statusFilter !== "all") {
|
|
258
|
+
filterParts.push(`status: ${this.statusFilter}`);
|
|
259
|
+
}
|
|
260
|
+
const filterText = filterParts.length > 0 ? ` ${styles.dim(`· ${filterParts.join(" · ")}`)}` : "";
|
|
261
|
+
const warningText = this.warnings.length > 0 ? `\n${styles.warning(this.warnings[0] ?? "")}` : "";
|
|
262
|
+
this.header.setText(`${styles.bold(`Recorded runs (${shown}/${this.totalRuns})`)}${filterText} ${styles.dim(LIST_HINT)}${warningText}`);
|
|
263
|
+
}
|
|
264
|
+
cycleSourceFilter() {
|
|
265
|
+
this.sourceFilter = nextInCycle(SOURCE_FILTER_CYCLE, this.sourceFilter);
|
|
266
|
+
void this.refresh();
|
|
267
|
+
}
|
|
268
|
+
cycleStatusFilter() {
|
|
269
|
+
this.statusFilter = nextInCycle(STATUS_FILTER_CYCLE, this.statusFilter);
|
|
270
|
+
this.updateHeader();
|
|
271
|
+
this.syncListItems();
|
|
272
|
+
this.options.tui.requestRender();
|
|
273
|
+
}
|
|
274
|
+
syncListItems() {
|
|
275
|
+
const items = this.filteredRuns().map((run) => {
|
|
276
|
+
const labelParts = [statusGlyph(run.status), formatDateClock(run.startedAt), `[${run.resolvedSource}]`, runLabelText(run)];
|
|
277
|
+
return {
|
|
278
|
+
value: run.runId,
|
|
279
|
+
label: labelParts.filter((part) => part.length > 0).join(" "),
|
|
280
|
+
description: buildRunDescription(run),
|
|
281
|
+
};
|
|
282
|
+
});
|
|
283
|
+
this.list.items = items;
|
|
284
|
+
this.list.setFilter("");
|
|
285
|
+
this.list.setSelectedIndex(0);
|
|
286
|
+
this.list.invalidate();
|
|
287
|
+
}
|
|
288
|
+
showList() {
|
|
289
|
+
this.mode = "list";
|
|
290
|
+
this.clear();
|
|
291
|
+
this.addChild(this.header);
|
|
292
|
+
this.addChild(this.list);
|
|
293
|
+
}
|
|
294
|
+
async openRun(runId) {
|
|
295
|
+
const requestedDir = this.artifactDir;
|
|
296
|
+
if (requestedDir === undefined) {
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
const replay = await readReplayRun(requestedDir, runId, {
|
|
300
|
+
...(this.sourceFilter === "memory" ? { scope: "memory" } : {}),
|
|
301
|
+
});
|
|
302
|
+
if (this.artifactDir !== requestedDir) {
|
|
303
|
+
return; // Superseded by a newer agent selection.
|
|
304
|
+
}
|
|
305
|
+
if (replay === undefined) {
|
|
306
|
+
this.header.setText(styles.error(`Run ${runId} not found.`));
|
|
307
|
+
this.options.tui.requestRender();
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
this.mode = "detail";
|
|
311
|
+
this.clear();
|
|
312
|
+
this.openDetail(replay);
|
|
313
|
+
this.addChild(this.detail);
|
|
314
|
+
this.options.tui.requestRender();
|
|
315
|
+
}
|
|
316
|
+
/** Reset all detail-mode state for a freshly opened run and populate the panes. */
|
|
317
|
+
openDetail(replay) {
|
|
318
|
+
this.currentReplay = replay;
|
|
319
|
+
this.categoryFilter.clear();
|
|
320
|
+
this.committedSearch = undefined;
|
|
321
|
+
this.searchInputOpen = false;
|
|
322
|
+
this.searchInputBuffer = "";
|
|
323
|
+
this.payloadExpanded = false;
|
|
324
|
+
this.detailHeadline.setText(buildHeadline(replay));
|
|
325
|
+
this.eventList.setCategoryFilter(undefined);
|
|
326
|
+
this.eventList.setSearch(undefined);
|
|
327
|
+
// Triggers onSelectionChange synchronously, which calls refreshPanes().
|
|
328
|
+
this.eventList.setItems(replay.timeline, replay.turns);
|
|
329
|
+
}
|
|
330
|
+
handleDetailInput(data) {
|
|
331
|
+
if (this.searchInputOpen) {
|
|
332
|
+
this.handleSearchInputKey(data);
|
|
333
|
+
this.refreshPanes();
|
|
334
|
+
this.options.tui.requestRender();
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
if (matchesKey(data, "up") || matchesKey(data, "down") || matchesKey(data, "pageUp") || matchesKey(data, "pageDown")) {
|
|
338
|
+
this.eventList.handleInput(data);
|
|
339
|
+
}
|
|
340
|
+
else if (data === "g") {
|
|
341
|
+
this.eventList.moveToFirst();
|
|
342
|
+
}
|
|
343
|
+
else if (data === "G") {
|
|
344
|
+
this.eventList.moveToLast();
|
|
345
|
+
}
|
|
346
|
+
else if (data === "[") {
|
|
347
|
+
this.eventList.moveToTurn(-1);
|
|
348
|
+
}
|
|
349
|
+
else if (data === "]") {
|
|
350
|
+
this.eventList.moveToTurn(1);
|
|
351
|
+
}
|
|
352
|
+
else if (data === "a") {
|
|
353
|
+
this.categoryFilter.clear();
|
|
354
|
+
this.eventList.setCategoryFilter(undefined);
|
|
355
|
+
}
|
|
356
|
+
else if (CATEGORY_KEYS[data] !== undefined) {
|
|
357
|
+
this.toggleCategory(CATEGORY_KEYS[data]);
|
|
358
|
+
}
|
|
359
|
+
else if (matchesKey(data, "enter") || matchesKey(data, "space")) {
|
|
360
|
+
this.payloadExpanded = !this.payloadExpanded;
|
|
361
|
+
}
|
|
362
|
+
else if (data === "/") {
|
|
363
|
+
this.searchInputOpen = true;
|
|
364
|
+
this.searchInputBuffer = "";
|
|
365
|
+
}
|
|
366
|
+
else if (data === "n") {
|
|
367
|
+
this.eventList.moveToMatch(1);
|
|
368
|
+
}
|
|
369
|
+
else if (data === "N") {
|
|
370
|
+
this.eventList.moveToMatch(-1);
|
|
371
|
+
}
|
|
372
|
+
else {
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
this.refreshPanes();
|
|
376
|
+
this.options.tui.requestRender();
|
|
377
|
+
}
|
|
378
|
+
toggleCategory(category) {
|
|
379
|
+
if (this.categoryFilter.has(category)) {
|
|
380
|
+
this.categoryFilter.delete(category);
|
|
381
|
+
}
|
|
382
|
+
else {
|
|
383
|
+
this.categoryFilter.add(category);
|
|
384
|
+
}
|
|
385
|
+
this.eventList.setCategoryFilter(this.categoryFilter.size === 0 ? undefined : new Set(this.categoryFilter));
|
|
386
|
+
}
|
|
387
|
+
handleSearchInputKey(data) {
|
|
388
|
+
if (matchesKey(data, "enter")) {
|
|
389
|
+
this.commitSearch(this.searchInputBuffer);
|
|
390
|
+
}
|
|
391
|
+
else if (matchesKey(data, "backspace")) {
|
|
392
|
+
this.searchInputBuffer = this.searchInputBuffer.slice(0, -1);
|
|
393
|
+
}
|
|
394
|
+
else {
|
|
395
|
+
// Esc never reaches here: app.ts's global input listener intercepts it
|
|
396
|
+
// first and calls back() (which closes the search input as its first
|
|
397
|
+
// layer) before the key would otherwise be forwarded to this view.
|
|
398
|
+
const printable = data.length === 1 && data.charCodeAt(0) >= 32 ? data : undefined;
|
|
399
|
+
if (printable !== undefined) {
|
|
400
|
+
this.searchInputBuffer += printable;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
commitSearch(query) {
|
|
405
|
+
this.searchInputOpen = false;
|
|
406
|
+
const trimmed = query.trim();
|
|
407
|
+
this.committedSearch = trimmed.length > 0 ? trimmed : undefined;
|
|
408
|
+
this.eventList.setSearch(this.committedSearch);
|
|
409
|
+
if (this.committedSearch !== undefined) {
|
|
410
|
+
this.eventList.moveToMatch(1);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
/** Recompute the status line + selected-event payload pane from current state. */
|
|
414
|
+
refreshPanes() {
|
|
415
|
+
const turns = this.currentReplay?.turns ?? [];
|
|
416
|
+
this.detailStatus.setText(buildStatusLine({
|
|
417
|
+
ordinal: this.eventList.selectedVisibleOrdinal(),
|
|
418
|
+
visibleCount: this.eventList.visibleCount(),
|
|
419
|
+
turnIndex: this.eventList.turnOfSelection(),
|
|
420
|
+
turnCount: turns.length,
|
|
421
|
+
categoryFilter: this.categoryFilter,
|
|
422
|
+
searchInputOpen: this.searchInputOpen,
|
|
423
|
+
searchInputBuffer: this.searchInputBuffer,
|
|
424
|
+
committedSearch: this.committedSearch,
|
|
425
|
+
matchCount: this.eventList.matchCount(),
|
|
426
|
+
}));
|
|
427
|
+
// A category filter can leave zero rows visible while `this.selectedItem`
|
|
428
|
+
// still holds the last (now hidden) selection -- eventList remembers that
|
|
429
|
+
// index so widening the filter again snaps back to it, but the payload
|
|
430
|
+
// pane must not show a stale item's content while nothing is visible.
|
|
431
|
+
const visibleSelection = this.eventList.visibleCount() === 0 ? undefined : this.selectedItem;
|
|
432
|
+
this.rebuildDetailPane(visibleSelection);
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Rebuild the selected-event pane from scratch: header, then EITHER a
|
|
436
|
+
* chat-style cell (thinking/tool/message/error/notice -- reusing live
|
|
437
|
+
* chat's own components, see buildDetailCell) OR, for runtime/telemetry
|
|
438
|
+
* items and tool-shaped-but-blockless items, the unchanged raw-JSON body.
|
|
439
|
+
* Expanding (`enter`) appends the raw JSON below a chat-style cell too, so
|
|
440
|
+
* the underlying event is always one keystroke away.
|
|
441
|
+
*/
|
|
442
|
+
rebuildDetailPane(item) {
|
|
443
|
+
this.detailPane.clear();
|
|
444
|
+
if (item === undefined) {
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
447
|
+
this.detailPane.addChild(new Text(buildPayloadHeader(item), 1, 0));
|
|
448
|
+
this.detailPane.addChild(new Text("", 1, 0));
|
|
449
|
+
const cell = buildDetailCell(item, this.currentReplay?.timeline ?? [], this.currentReplay?.detail.events ?? []);
|
|
450
|
+
if (cell === undefined) {
|
|
451
|
+
this.detailPane.addChild(new Text(buildRawPayloadBody(item, this.payloadExpanded), 1, 0));
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
this.detailPane.addChild(cell);
|
|
455
|
+
if (this.payloadExpanded) {
|
|
456
|
+
this.detailPane.addChild(new Text(buildRawPayloadBody(item, true), 1, 0));
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
//# sourceMappingURL=replay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../../../src/ui/views/replay.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mono-agent/tui",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.5.0",
|
|
4
|
+
"description": "pi-tui operator console for mono-agent: live chat with full stream-event insight, recorded-run replay, and read-only config view for running agents.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "UNLICENSED",
|
|
7
7
|
"private": false,
|
|
@@ -21,20 +21,17 @@
|
|
|
21
21
|
"README.md"
|
|
22
22
|
],
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@
|
|
25
|
-
"@mono-agent/
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"ink-text-input": "^6.0.0",
|
|
29
|
-
"react": "^19.2.0"
|
|
30
|
-
},
|
|
31
|
-
"devDependencies": {
|
|
32
|
-
"@types/react": "^19.2.2",
|
|
33
|
-
"ink-testing-library": "^4.0.0"
|
|
24
|
+
"@earendil-works/pi-tui": "^0.79.1",
|
|
25
|
+
"@mono-agent/agent-contracts": "0.5.0",
|
|
26
|
+
"@mono-agent/config": "0.5.0",
|
|
27
|
+
"@mono-agent/observability": "0.5.0"
|
|
34
28
|
},
|
|
35
29
|
"publishConfig": {
|
|
36
30
|
"access": "public"
|
|
37
31
|
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@mono-agent/operator-adapter": "0.5.0"
|
|
34
|
+
},
|
|
38
35
|
"scripts": {
|
|
39
36
|
"build": "tsc -p tsconfig.build.json",
|
|
40
37
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import type { AgentMessageStreamLike } from "./responder.js";
|
|
2
|
-
/**
|
|
3
|
-
* State snapshot produced by TuiInkMessageStream after every flush.
|
|
4
|
-
* The Chat pane re-renders the in-flight assistant block from this.
|
|
5
|
-
*/
|
|
6
|
-
export interface TuiStreamState {
|
|
7
|
-
readonly statusText: string;
|
|
8
|
-
readonly text: string;
|
|
9
|
-
readonly finished: boolean;
|
|
10
|
-
readonly hasOutput: boolean;
|
|
11
|
-
}
|
|
12
|
-
export interface TuiInkMessageStreamOptions {
|
|
13
|
-
readonly initialStatusText?: string;
|
|
14
|
-
readonly streamDebounceMs?: number;
|
|
15
|
-
readonly onState: (state: TuiStreamState) => void;
|
|
16
|
-
readonly now?: () => number;
|
|
17
|
-
readonly setTimer?: (handler: () => void, ms: number) => unknown;
|
|
18
|
-
readonly clearTimer?: (handle: unknown) => void;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* AgentMessageStreamLike implementation that buffers incoming deltas and
|
|
22
|
-
* emits a single state snapshot per debounce window. This keeps the React
|
|
23
|
-
* reconciler from churning when a responder calls `append` in a tight
|
|
24
|
-
* loop (typical of token-by-token streaming).
|
|
25
|
-
*/
|
|
26
|
-
export declare class TuiInkMessageStream implements AgentMessageStreamLike {
|
|
27
|
-
private readonly emit;
|
|
28
|
-
private readonly debounceMs;
|
|
29
|
-
private readonly setTimerImpl;
|
|
30
|
-
private readonly clearTimerImpl;
|
|
31
|
-
private statusText;
|
|
32
|
-
private currentText;
|
|
33
|
-
private finished;
|
|
34
|
-
private hasOutput;
|
|
35
|
-
private pendingTimer;
|
|
36
|
-
private dirty;
|
|
37
|
-
constructor(options: TuiInkMessageStreamOptions);
|
|
38
|
-
status(text: string): Promise<void>;
|
|
39
|
-
append(delta: string): Promise<void>;
|
|
40
|
-
replace(text: string): Promise<void>;
|
|
41
|
-
finish(finalText?: string): Promise<void>;
|
|
42
|
-
/**
|
|
43
|
-
* Flushes any pending state immediately. Useful when the host wants to
|
|
44
|
-
* cancel mid-stream and render the partial result before unmounting.
|
|
45
|
-
*/
|
|
46
|
-
flushPending(): void;
|
|
47
|
-
snapshot(): TuiStreamState;
|
|
48
|
-
private scheduleEmit;
|
|
49
|
-
private flushNow;
|
|
50
|
-
private assertOpen;
|
|
51
|
-
}
|
|
52
|
-
//# sourceMappingURL=message-stream.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"message-stream.d.ts","sourceRoot":"","sources":["../../src/agent/message-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAE7D;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAClD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IACjE,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CACjD;AAKD;;;;;GAKG;AACH,qBAAa,mBAAoB,YAAW,sBAAsB;IAChE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkC;IACvD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA+C;IAC5E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4B;IAE3D,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,KAAK,CAAS;gBAEV,OAAO,EAAE,0BAA0B;IAiBzC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOpC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/C;;;OAGG;IACH,YAAY,IAAI,IAAI;IAMpB,QAAQ,IAAI,cAAc;IAS1B,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,UAAU;CAKnB"}
|