@mono-agent/tui 0.3.0 → 0.4.1

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 (124) hide show
  1. package/README.md +60 -10
  2. package/dist/bin/cli.d.ts +4 -1
  3. package/dist/bin/cli.d.ts.map +1 -1
  4. package/dist/bin/cli.js +36 -53
  5. package/dist/bin/cli.js.map +1 -1
  6. package/dist/bin/mono-agent-tui.js +21 -10
  7. package/dist/bin/mono-agent-tui.js.map +1 -1
  8. package/dist/config/pane.d.ts +10 -11
  9. package/dist/config/pane.d.ts.map +1 -1
  10. package/dist/config/pane.js +16 -198
  11. package/dist/config/pane.js.map +1 -1
  12. package/dist/data/instances.d.ts +48 -0
  13. package/dist/data/instances.d.ts.map +1 -0
  14. package/dist/data/instances.js +101 -0
  15. package/dist/data/instances.js.map +1 -0
  16. package/dist/data/replay.d.ts +68 -0
  17. package/dist/data/replay.d.ts.map +1 -0
  18. package/dist/data/replay.js +149 -0
  19. package/dist/data/replay.js.map +1 -0
  20. package/dist/index.d.ts +10 -10
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +5 -5
  23. package/dist/index.js.map +1 -1
  24. package/dist/remote/client.d.ts +44 -0
  25. package/dist/remote/client.d.ts.map +1 -0
  26. package/dist/remote/client.js +173 -0
  27. package/dist/remote/client.js.map +1 -0
  28. package/dist/runtime/start.d.ts +11 -18
  29. package/dist/runtime/start.d.ts.map +1 -1
  30. package/dist/runtime/start.js +19 -33
  31. package/dist/runtime/start.js.map +1 -1
  32. package/dist/ui/app.d.ts +142 -0
  33. package/dist/ui/app.d.ts.map +1 -0
  34. package/dist/ui/app.js +586 -0
  35. package/dist/ui/app.js.map +1 -0
  36. package/dist/ui/components/event-list.d.ts +60 -0
  37. package/dist/ui/components/event-list.d.ts.map +1 -0
  38. package/dist/ui/components/event-list.js +369 -0
  39. package/dist/ui/components/event-list.js.map +1 -0
  40. package/dist/ui/components/status-bar.d.ts +65 -0
  41. package/dist/ui/components/status-bar.d.ts.map +1 -0
  42. package/dist/ui/components/status-bar.js +126 -0
  43. package/dist/ui/components/status-bar.js.map +1 -0
  44. package/dist/ui/components/tool-panel.d.ts +30 -0
  45. package/dist/ui/components/tool-panel.d.ts.map +1 -0
  46. package/dist/ui/components/tool-panel.js +59 -0
  47. package/dist/ui/components/tool-panel.js.map +1 -0
  48. package/dist/ui/components/transcript-cells.d.ts +49 -0
  49. package/dist/ui/components/transcript-cells.d.ts.map +1 -0
  50. package/dist/ui/components/transcript-cells.js +110 -0
  51. package/dist/ui/components/transcript-cells.js.map +1 -0
  52. package/dist/ui/format.d.ts +29 -0
  53. package/dist/ui/format.d.ts.map +1 -0
  54. package/dist/ui/format.js +105 -0
  55. package/dist/ui/format.js.map +1 -0
  56. package/dist/ui/theme.d.ts +25 -0
  57. package/dist/ui/theme.d.ts.map +1 -0
  58. package/dist/ui/theme.js +62 -0
  59. package/dist/ui/theme.js.map +1 -0
  60. package/dist/ui/turn-presenter.d.ts +72 -0
  61. package/dist/ui/turn-presenter.d.ts.map +1 -0
  62. package/dist/ui/turn-presenter.js +334 -0
  63. package/dist/ui/turn-presenter.js.map +1 -0
  64. package/dist/ui/views/chat.d.ts +128 -0
  65. package/dist/ui/views/chat.d.ts.map +1 -0
  66. package/dist/ui/views/chat.js +313 -0
  67. package/dist/ui/views/chat.js.map +1 -0
  68. package/dist/ui/views/config.d.ts +23 -0
  69. package/dist/ui/views/config.d.ts.map +1 -0
  70. package/dist/ui/views/config.js +87 -0
  71. package/dist/ui/views/config.js.map +1 -0
  72. package/dist/ui/views/picker.d.ts +17 -0
  73. package/dist/ui/views/picker.d.ts.map +1 -0
  74. package/dist/ui/views/picker.js +57 -0
  75. package/dist/ui/views/picker.js.map +1 -0
  76. package/dist/ui/views/replay-detail.d.ts +60 -0
  77. package/dist/ui/views/replay-detail.d.ts.map +1 -0
  78. package/dist/ui/views/replay-detail.js +328 -0
  79. package/dist/ui/views/replay-detail.js.map +1 -0
  80. package/dist/ui/views/replay.d.ts +74 -0
  81. package/dist/ui/views/replay.d.ts.map +1 -0
  82. package/dist/ui/views/replay.js +460 -0
  83. package/dist/ui/views/replay.js.map +1 -0
  84. package/package.json +9 -12
  85. package/dist/agent/message-stream.d.ts +0 -52
  86. package/dist/agent/message-stream.d.ts.map +0 -1
  87. package/dist/agent/message-stream.js +0 -110
  88. package/dist/agent/message-stream.js.map +0 -1
  89. package/dist/components/ChatPane.d.ts +0 -20
  90. package/dist/components/ChatPane.d.ts.map +0 -1
  91. package/dist/components/ChatPane.js +0 -142
  92. package/dist/components/ChatPane.js.map +0 -1
  93. package/dist/components/ConfigPane.d.ts +0 -12
  94. package/dist/components/ConfigPane.d.ts.map +0 -1
  95. package/dist/components/ConfigPane.js +0 -70
  96. package/dist/components/ConfigPane.js.map +0 -1
  97. package/dist/components/HelpOverlay.d.ts +0 -6
  98. package/dist/components/HelpOverlay.d.ts.map +0 -1
  99. package/dist/components/HelpOverlay.js +0 -18
  100. package/dist/components/HelpOverlay.js.map +0 -1
  101. package/dist/components/HistoryPane.d.ts +0 -9
  102. package/dist/components/HistoryPane.d.ts.map +0 -1
  103. package/dist/components/HistoryPane.js +0 -125
  104. package/dist/components/HistoryPane.js.map +0 -1
  105. package/dist/components/StatusBar.d.ts +0 -10
  106. package/dist/components/StatusBar.d.ts.map +0 -1
  107. package/dist/components/StatusBar.js +0 -15
  108. package/dist/components/StatusBar.js.map +0 -1
  109. package/dist/components/TuiApp.d.ts +0 -29
  110. package/dist/components/TuiApp.d.ts.map +0 -1
  111. package/dist/components/TuiApp.js +0 -81
  112. package/dist/components/TuiApp.js.map +0 -1
  113. package/dist/components/primitives/Badge.d.ts +0 -8
  114. package/dist/components/primitives/Badge.d.ts.map +0 -1
  115. package/dist/components/primitives/Badge.js +0 -14
  116. package/dist/components/primitives/Badge.js.map +0 -1
  117. package/dist/components/primitives/Spinner.d.ts +0 -6
  118. package/dist/components/primitives/Spinner.d.ts.map +0 -1
  119. package/dist/components/primitives/Spinner.js +0 -8
  120. package/dist/components/primitives/Spinner.js.map +0 -1
  121. package/dist/components/primitives/TranscriptLine.d.ts +0 -10
  122. package/dist/components/primitives/TranscriptLine.d.ts.map +0 -1
  123. package/dist/components/primitives/TranscriptLine.js +0 -15
  124. package/dist/components/primitives/TranscriptLine.js.map +0 -1
@@ -0,0 +1,328 @@
1
+ import { deriveRunSource } from "@mono-agent/observability";
2
+ import { categoryStyle } from "../components/event-list.js";
3
+ import { AssistantCell, NoticeCell, ThinkingCell, UserCell } from "../components/transcript-cells.js";
4
+ import { ToolPanel } from "../components/tool-panel.js";
5
+ import { extractUsage, formatClock, formatDurationMs, formatTokens, formatUsd } from "../format.js";
6
+ import { styles } from "../theme.js";
7
+ /** Canonical (not alphabetical) filter-category order matching the t/o/m/y/e keymap. */
8
+ export const CATEGORY_ORDER = ["thinking", "tool", "message", "runtime", "error"];
9
+ /** Single-key toggles for the detail-mode category filter (see task brief's keybinding map). */
10
+ export const CATEGORY_KEYS = {
11
+ t: "thinking",
12
+ o: "tool",
13
+ m: "message",
14
+ y: "runtime",
15
+ e: "error",
16
+ };
17
+ export const KEY_HINT = "↑↓/pgup/pgdn/g/G step · [ ] turn · t/o/m/y/e/a filter · / search · n/N match · enter raw json · esc back";
18
+ const PAYLOAD_MAX_LINES_COLLAPSED = 12;
19
+ const PAYLOAD_MAX_LINES_EXPANDED = 40;
20
+ /** Headline text (multi-line): run id/source, conversation/status, clock/model/effort, usage, errors, turn stats. */
21
+ export function buildHeadline(replay) {
22
+ const summary = replay.detail.summary;
23
+ const resolvedSource = summary.source ?? deriveRunSource(summary.conversationId);
24
+ const badge = `[${resolvedSource}]${summary.sourceDetail === undefined ? "" : ` · ${summary.sourceDetail}`}`;
25
+ const lines = [
26
+ `${styles.bold(styles.accent(`run ${summary.runId}`))} ${styles.muted(badge)}`,
27
+ styles.muted(`${summary.conversationId} · ${summary.status}`),
28
+ ];
29
+ const model = summary.model ?? replay.runConfig?.model;
30
+ const effort = replay.effort;
31
+ // Gate the "(override)" marker on the run_config's own `overridden` flag
32
+ // alone -- NOT on whether the displayed model/effort happened to come from
33
+ // the run_config fallback. A newer artifact carries model/effort directly
34
+ // on `summary` (no fallback needed) but can still be an overridden run, and
35
+ // should still show the marker.
36
+ const overridden = replay.runConfig?.overridden === true;
37
+ const line3 = [];
38
+ const clock = formatClock(summary.startedAt);
39
+ if (clock.length > 0) {
40
+ line3.push(clock);
41
+ }
42
+ line3.push(formatDurationMs(summary.durationMs), `${summary.eventCount} events`);
43
+ if (model !== undefined) {
44
+ line3.push(`${model}${overridden ? " (override)" : ""}`);
45
+ }
46
+ if (effort !== undefined) {
47
+ line3.push(`effort:${effort}${overridden ? " (override)" : ""}`);
48
+ }
49
+ lines.push(styles.muted(line3.join(" · ")));
50
+ const usage = usageLine(summary.usage, summary.cost);
51
+ if (usage !== undefined) {
52
+ lines.push(styles.muted(usage));
53
+ }
54
+ if (summary.error !== undefined) {
55
+ lines.push(styles.error(`error: ${summary.error}`));
56
+ }
57
+ for (const attempt of summary.failoverHistory ?? []) {
58
+ lines.push(styles.warning(`failover: ${attempt.model} → ${attempt.failureKind ?? "?"}`));
59
+ }
60
+ if (replay.turns.length > 0) {
61
+ const totalThinkingChars = replay.turns.reduce((sum, turn) => sum + turn.thinkingChars, 0);
62
+ lines.push(styles.muted(`turns: ${replay.turns.length} · thinking: ${formatTokens(totalThinkingChars)}`));
63
+ }
64
+ return lines.join("\n");
65
+ }
66
+ /** Filter/status line + a dim key-hint line underneath it. */
67
+ export function buildStatusLine(state) {
68
+ const segments = [];
69
+ if (state.ordinal !== undefined) {
70
+ segments.push(`event ${state.ordinal}/${state.visibleCount}`);
71
+ }
72
+ if (state.turnIndex !== undefined && state.turnCount > 0) {
73
+ segments.push(`turn ${state.turnIndex + 1}/${state.turnCount}`);
74
+ }
75
+ if (state.categoryFilter.size > 0) {
76
+ const active = CATEGORY_ORDER.filter((category) => state.categoryFilter.has(category));
77
+ const colored = active.map((category) => categoryStyle(category)(category));
78
+ segments.push(`filters: ${colored.join(",")}`);
79
+ }
80
+ if (state.searchInputOpen) {
81
+ segments.push(`search: "${state.searchInputBuffer}█"`);
82
+ }
83
+ else if (state.committedSearch !== undefined) {
84
+ segments.push(`search: "${state.committedSearch}" (${state.matchCount} matches)`);
85
+ }
86
+ return `${styles.muted(segments.join(" · "))}\n${styles.dim(KEY_HINT)}`;
87
+ }
88
+ /**
89
+ * Header line for the selected-event pane (index/label/timing/group span,
90
+ * plus a thinking item's own char/duration stats). Unchanged by the Part B
91
+ * cell redesign below -- only the BODY under it now varies by category.
92
+ */
93
+ export function buildPayloadHeader(item) {
94
+ let header = `#${item.index} ${item.label}`;
95
+ const timing = [];
96
+ if (item.timestamp !== undefined) {
97
+ timing.push(item.timestamp);
98
+ }
99
+ if (item.deltaMs !== undefined) {
100
+ timing.push(`+${formatDurationMs(item.deltaMs)}`);
101
+ }
102
+ if (timing.length > 0) {
103
+ header += ` · ${timing.join(" · ")}`;
104
+ }
105
+ if (item.sourceEventCount > 1) {
106
+ header += ` · events #${item.sourceEventStartIndex}–#${item.sourceEventEndIndex}`;
107
+ }
108
+ if (item.category === "thinking" && item.contentChars !== undefined) {
109
+ header += ` ${thinkingStatsSuffix(item.contentChars, item.timestamp, item.endTimestamp)}`;
110
+ }
111
+ return header;
112
+ }
113
+ /**
114
+ * Pretty-printed raw JSON body for the selected event, capped at today's
115
+ * established line counts (12 collapsed / 40 expanded) with a
116
+ * `… (+N more lines)` trailer when truncated. Used both as the WHOLE body for
117
+ * runtime/telemetry items (no chat-style cell exists for those) and as the
118
+ * optional strip appended below a chat-style cell once the pane is expanded.
119
+ */
120
+ export function buildRawPayloadBody(item, expanded) {
121
+ const maxLines = expanded ? PAYLOAD_MAX_LINES_EXPANDED : PAYLOAD_MAX_LINES_COLLAPSED;
122
+ const allLines = formatPayloadRaw(item.payload).split("\n");
123
+ const shown = allLines.slice(0, maxLines);
124
+ const remaining = allLines.length - shown.length;
125
+ return (remaining > 0 ? [...shown, styles.dim(`… (+${remaining} more lines)`)] : shown).join("\n");
126
+ }
127
+ /**
128
+ * The chat-style transcript cell for the selected event, reusing live chat's
129
+ * OWN components (ThinkingCell/AssistantCell/UserCell/NoticeCell/ToolPanel) so
130
+ * replay and live chat read as one interface. Returns `undefined` for
131
+ * runtime/telemetry items (provider_request_*, run_config, cost,
132
+ * capabilities…) and for a "tool" category item that -- despite the category
133
+ * -- carries neither a `tool_use` nor a `tool_result` content block (e.g. a
134
+ * `tool_update`/`tool_timing` progress event, classified "tool" purely by its
135
+ * `type` string containing "tool"): callers fall back to
136
+ * {@link buildRawPayloadBody} for both cases, exactly as before Part B.
137
+ *
138
+ * `timeline` (the run's full coalesced item list) is used to look AHEAD from
139
+ * a `tool_use` item for its matching `tool_result` (by `tool_use_id`) so a
140
+ * call+result pair renders as ONE unified panel, like a live tool call
141
+ * settling. `rawEvents` (the run's raw, uncoalesced events) is used to
142
+ * reconstruct a coalesced thinking/text group's FULL joined text -- the
143
+ * combiner's own synthetic payload for a multi-event group carries only the
144
+ * compacted (220-char) `summary`, not the full text (see
145
+ * `combinedEventItem` in event-timeline.ts).
146
+ */
147
+ export function buildDetailCell(item, timeline, rawEvents) {
148
+ if (item.category === "thinking") {
149
+ const cell = new ThinkingCell();
150
+ cell.append(extractFullText(item, rawEvents, "thinking"));
151
+ cell.setExpanded(true);
152
+ cell.active = false;
153
+ const durationMs = parseSpanMs(item.timestamp, item.endTimestamp);
154
+ if (durationMs !== undefined) {
155
+ cell.setDurationMs(durationMs);
156
+ }
157
+ return cell;
158
+ }
159
+ if (item.category === "error") {
160
+ return new NoticeCell(item.summary, "error");
161
+ }
162
+ if (item.category === "runtime") {
163
+ return item.type === "runtime_warning" ? new NoticeCell(item.summary, "warning") : undefined;
164
+ }
165
+ if (item.category === "tool") {
166
+ return buildToolCell(item, timeline);
167
+ }
168
+ if (item.category === "message") {
169
+ if (item.type === "user") {
170
+ return new UserCell(extractFullText(item, rawEvents, "text"));
171
+ }
172
+ const cell = new AssistantCell();
173
+ cell.setText(extractFullText(item, rawEvents, "text"));
174
+ return cell;
175
+ }
176
+ return undefined;
177
+ }
178
+ /** `tool_use` -> a fresh ToolPanel, completed with its matching `tool_result` when one is found later in the timeline (header-only otherwise). `tool_result` (selected directly, without its call) -> a standalone ToolPanel labeled "tool result" when the name isn't known. Neither block present -> undefined (raw JSON fallback). */
179
+ function buildToolCell(item, timeline) {
180
+ const toolUse = firstBlock(item.payload, "tool_use");
181
+ if (toolUse !== undefined) {
182
+ const id = stringOrUndefined(toolUse.id) ?? `item-${item.index}`;
183
+ const name = stringOrUndefined(toolUse.name) ?? "tool";
184
+ const panel = new ToolPanel(id, name, toolUse.input);
185
+ const result = findToolResult(timeline, id, item.index);
186
+ panel.complete(result === undefined
187
+ ? { content: undefined }
188
+ : { isError: result.is_error === true, content: result.content });
189
+ return panel;
190
+ }
191
+ const toolResult = firstBlock(item.payload, "tool_result");
192
+ if (toolResult !== undefined) {
193
+ const id = stringOrUndefined(toolResult.tool_use_id) ?? `item-${item.index}`;
194
+ const name = stringOrUndefined(toolResult.name) ?? "tool result";
195
+ const panel = new ToolPanel(id, name);
196
+ panel.complete({ isError: toolResult.is_error === true, content: toolResult.content });
197
+ return panel;
198
+ }
199
+ return undefined;
200
+ }
201
+ /**
202
+ * First `tool_result` content block at or after `afterIndex` (exclusive)
203
+ * whose `tool_use_id` matches, or undefined. Scans EVERY `tool_result` block
204
+ * in a candidate item, not just the first -- a real pi-runtime parallel tool
205
+ * batch can deliver several results on one `user` event (see
206
+ * `countToolResultBlocks`'s doc comment in event-classify.ts), and the call
207
+ * we're matching may not be the first one.
208
+ */
209
+ function findToolResult(timeline, toolUseId, afterIndex) {
210
+ for (const candidate of timeline) {
211
+ if (candidate.index <= afterIndex || candidate.category !== "tool") {
212
+ continue;
213
+ }
214
+ const match = blocksOfType(candidate.payload, "tool_result").find((block) => stringOrUndefined(block.tool_use_id) === toolUseId);
215
+ if (match !== undefined) {
216
+ return match;
217
+ }
218
+ }
219
+ return undefined;
220
+ }
221
+ /** First content block of `blockType` on a redacted raw event's `message.content` array, if any. */
222
+ function firstBlock(payload, blockType) {
223
+ return blocksOfType(payload, blockType)[0];
224
+ }
225
+ /** Every content block of `blockType` on a redacted raw event's `message.content` array. */
226
+ function blocksOfType(payload, blockType) {
227
+ if (!isRecord(payload)) {
228
+ return [];
229
+ }
230
+ const message = payload.message;
231
+ if (!isRecord(message) || !Array.isArray(message.content)) {
232
+ return [];
233
+ }
234
+ return message.content.filter((block) => isRecord(block) && block.type === blockType);
235
+ }
236
+ /**
237
+ * Full (untruncated) joined thinking/text block content for a timeline item.
238
+ * A single-event item's `payload` IS the raw redacted event (walk it
239
+ * directly); a coalesced group's synthetic payload carries only the
240
+ * compacted `summary`, so walk the group's own raw events (via
241
+ * `sourceEventStartIndex`/`sourceEventEndIndex`, which index into
242
+ * `rawEvents` 1:1 -- see `toRecordedEvent`'s `index` in recorded-runs.ts)
243
+ * instead. Falls back to `item.summary` when no block of `kind` is found
244
+ * anywhere (defensive -- shouldn't happen for a well-formed thinking/message
245
+ * item).
246
+ */
247
+ function extractFullText(item, rawEvents, kind) {
248
+ if (item.sourceEventCount <= 1) {
249
+ return extractEventText(item.payload, kind) ?? item.summary;
250
+ }
251
+ const texts = [];
252
+ for (let index = item.sourceEventStartIndex; index <= item.sourceEventEndIndex; index += 1) {
253
+ const text = extractEventText(rawEvents[index]?.payload, kind);
254
+ if (text !== undefined) {
255
+ texts.push(text);
256
+ }
257
+ }
258
+ return texts.length > 0 ? texts.join("") : item.summary;
259
+ }
260
+ /** Joined `kind`-typed block text from a single raw event's payload, or undefined when the shape doesn't match. */
261
+ function extractEventText(payload, kind) {
262
+ if (!isRecord(payload)) {
263
+ return undefined;
264
+ }
265
+ const message = payload.message;
266
+ if (typeof message === "string") {
267
+ return kind === "text" ? message : undefined;
268
+ }
269
+ if (!isRecord(message) || !Array.isArray(message.content)) {
270
+ return undefined;
271
+ }
272
+ const texts = [];
273
+ for (const block of message.content) {
274
+ if (!isRecord(block) || block.type !== kind) {
275
+ continue;
276
+ }
277
+ const text = kind === "thinking"
278
+ ? (stringOrUndefined(block.thinking) ?? stringOrUndefined(block.text) ?? stringOrUndefined(block.content))
279
+ : (stringOrUndefined(block.text) ?? stringOrUndefined(block.content));
280
+ if (text !== undefined) {
281
+ texts.push(text);
282
+ }
283
+ }
284
+ return texts.length > 0 ? texts.join("") : undefined;
285
+ }
286
+ function stringOrUndefined(value) {
287
+ return typeof value === "string" ? value : undefined;
288
+ }
289
+ function isRecord(value) {
290
+ return typeof value === "object" && value !== null && !Array.isArray(value);
291
+ }
292
+ /** `endTimestamp - timestamp` in ms when both parse as dates, else undefined. Clamped to >= 0 (clock skew). */
293
+ function parseSpanMs(timestamp, endTimestamp) {
294
+ if (timestamp === undefined || endTimestamp === undefined) {
295
+ return undefined;
296
+ }
297
+ const start = Date.parse(timestamp);
298
+ const end = Date.parse(endTimestamp);
299
+ if (!Number.isFinite(start) || !Number.isFinite(end)) {
300
+ return undefined;
301
+ }
302
+ return Math.max(0, end - start);
303
+ }
304
+ function thinkingStatsSuffix(contentChars, timestamp, endTimestamp) {
305
+ const chars = formatTokens(contentChars);
306
+ const span = parseSpanMs(timestamp, endTimestamp);
307
+ return span === undefined ? `(${chars})` : `(${chars} · ${formatDurationMs(span)})`;
308
+ }
309
+ function formatPayloadRaw(payload) {
310
+ if (typeof payload === "string") {
311
+ return payload;
312
+ }
313
+ try {
314
+ const json = JSON.stringify(payload, null, 2);
315
+ return json ?? String(payload);
316
+ }
317
+ catch {
318
+ return String(payload);
319
+ }
320
+ }
321
+ function usageLine(usage, cost) {
322
+ const extracted = extractUsage(usage, cost);
323
+ if (extracted === undefined) {
324
+ return undefined;
325
+ }
326
+ return `tokens ↑${formatTokens(extracted.input ?? 0)} ↓${formatTokens(extracted.output ?? 0)}${extracted.usd === undefined ? "" : ` · ${formatUsd(extracted.usd)}`}`;
327
+ }
328
+ //# sourceMappingURL=replay-detail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay-detail.js","sourceRoot":"","sources":["../../../src/ui/views/replay-detail.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import { Container, SelectList } from "@earendil-works/pi-tui";
2
+ import type { TUI } from "@earendil-works/pi-tui";
3
+ export interface ReplayViewOptions {
4
+ readonly tui: TUI;
5
+ }
6
+ /**
7
+ * Recorded-run replay straight from the agent's artifact dir: run list →
8
+ * debugger-style step-through of any past turn's full event timeline
9
+ * (thinking, tools, telemetry, failover) from ANY channel — richer than the
10
+ * live stream since nothing is dropped.
11
+ */
12
+ export declare class ReplayView extends Container {
13
+ readonly list: SelectList;
14
+ private readonly options;
15
+ private readonly header;
16
+ private readonly detail;
17
+ private readonly detailHeadline;
18
+ private readonly detailStatus;
19
+ private readonly eventList;
20
+ /** Selected-event pane: header + chat-style cell (+ raw JSON strip when expanded), rebuilt by {@link rebuildDetailPane}. */
21
+ private readonly detailPane;
22
+ private mode;
23
+ private artifactDir;
24
+ private runs;
25
+ private totalRuns;
26
+ private warnings;
27
+ private sourceFilter;
28
+ private statusFilter;
29
+ private currentReplay;
30
+ private readonly categoryFilter;
31
+ private committedSearch;
32
+ private searchInputOpen;
33
+ private searchInputBuffer;
34
+ private payloadExpanded;
35
+ private selectedItem;
36
+ constructor(options: ReplayViewOptions);
37
+ isInDetail(): boolean;
38
+ /**
39
+ * Esc layering in detail mode: an open search input closes+clears first;
40
+ * else a committed search clears; else an expanded payload pane collapses;
41
+ * else return to the run list. Returns false only when already at the list
42
+ * (so app-level esc fallthrough, e.g. switching views, still works).
43
+ */
44
+ back(): boolean;
45
+ handleInput(data: string): void;
46
+ setArtifactDir(artifactDir: string | undefined): void;
47
+ refresh(): Promise<void>;
48
+ /** Runs after the client-side status filter (source filtering already happened server-side, see `refresh`). */
49
+ private filteredRuns;
50
+ private updateHeader;
51
+ private cycleSourceFilter;
52
+ private cycleStatusFilter;
53
+ private syncListItems;
54
+ private showList;
55
+ private openRun;
56
+ /** Reset all detail-mode state for a freshly opened run and populate the panes. */
57
+ private openDetail;
58
+ private handleDetailInput;
59
+ private toggleCategory;
60
+ private handleSearchInputKey;
61
+ private commitSearch;
62
+ /** Recompute the status line + selected-event payload pane from current state. */
63
+ private refreshPanes;
64
+ /**
65
+ * Rebuild the selected-event pane from scratch: header, then EITHER a
66
+ * chat-style cell (thinking/tool/message/error/notice -- reusing live
67
+ * chat's own components, see buildDetailCell) OR, for runtime/telemetry
68
+ * items and tool-shaped-but-blockless items, the unchanged raw-JSON body.
69
+ * Expanding (`enter`) appends the raw JSON below a chat-style cell too, so
70
+ * the underlying event is always one keystroke away.
71
+ */
72
+ private rebuildDetailPane;
73
+ }
74
+ //# sourceMappingURL=replay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../../src/ui/views/replay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAc,UAAU,EAAQ,MAAM,wBAAwB,CAAC;AACjF,OAAO,KAAK,EAAc,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAqB9D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;CACnB;AA+FD;;;;;GAKG;AACH,qBAAa,UAAW,SAAQ,SAAS;IACvC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsB;IACrD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6C;IACvE,4HAA4H;IAC5H,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmB;IAC9C,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,IAAI,CAAoC;IAChD,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,YAAY,CAAuB;IAK3C,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;IACpD,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,iBAAiB,CAAM;IAC/B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAAiC;gBAEzC,OAAO,EAAE,iBAAiB;IAwBtC,UAAU,IAAI,OAAO;IAIrB;;;;;OAKG;IACH,IAAI,IAAI,OAAO;IAsBf,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAoB/B,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAK/C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA2C9B,+GAA+G;IAC/G,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,QAAQ;YAOF,OAAO;IAuBrB,mFAAmF;IACnF,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,iBAAiB;IAsCzB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,oBAAoB;IAgB5B,OAAO,CAAC,YAAY;IAUpB,kFAAkF;IAClF,OAAO,CAAC,YAAY;IAuBpB;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB;CAiB1B"}