@aiwayds/dsh-tui-pi 0.1.0 → 0.3.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 +205 -68
- package/lib/agent-manager.d.ts +125 -0
- package/lib/agent-manager.js +298 -0
- package/lib/agent-manager.js.map +1 -0
- package/lib/agents.d.ts +30 -0
- package/lib/agents.js +468 -0
- package/lib/agents.js.map +1 -0
- package/lib/append-system.d.ts +2 -0
- package/lib/append-system.js +1 -1
- package/lib/append-system.js.map +1 -1
- package/lib/dsh-events.d.ts +12 -0
- package/lib/editor.d.ts +58 -0
- package/lib/editor.js +92 -0
- package/lib/editor.js.map +1 -1
- package/lib/footer.d.ts +8 -0
- package/lib/footer.js +8 -0
- package/lib/footer.js.map +1 -1
- package/lib/hotkeys.d.ts +93 -0
- package/lib/hotkeys.js +305 -0
- package/lib/hotkeys.js.map +1 -0
- package/lib/index.js +342 -38
- package/lib/index.js.map +1 -1
- package/lib/keymap.d.ts +177 -0
- package/lib/keymap.js +189 -0
- package/lib/keymap.js.map +1 -0
- package/lib/live-widgets.d.ts +82 -29
- package/lib/live-widgets.js +222 -92
- package/lib/live-widgets.js.map +1 -1
- package/lib/messages.d.ts +4 -2
- package/lib/messages.js +8 -3
- package/lib/messages.js.map +1 -1
- package/lib/panels.d.ts +177 -0
- package/lib/panels.js +331 -0
- package/lib/panels.js.map +1 -0
- package/lib/provider-catalog.d.ts +31 -8
- package/lib/provider-catalog.js +63 -8
- package/lib/provider-catalog.js.map +1 -1
- package/lib/selectors.d.ts +12 -1
- package/lib/selectors.js +5 -2
- package/lib/selectors.js.map +1 -1
- package/lib/session.d.ts +36 -0
- package/lib/session.js +171 -10
- package/lib/session.js.map +1 -1
- package/lib/settings.d.ts +1 -2
- package/lib/settings.js +29 -2
- package/lib/settings.js.map +1 -1
- package/lib/subagent-policy.d.ts +58 -0
- package/lib/subagent-policy.js +137 -0
- package/lib/subagent-policy.js.map +1 -0
- package/lib/subagent-viewer.d.ts +49 -0
- package/lib/subagent-viewer.js +523 -0
- package/lib/subagent-viewer.js.map +1 -0
- package/lib/theme/index.js +4 -0
- package/lib/theme/index.js.map +1 -1
- package/lib/theme/palette.d.ts +21 -3
- package/lib/theme/palette.js +27 -6
- package/lib/theme/palette.js.map +1 -1
- package/lib/theme-settings.d.ts +39 -4
- package/lib/theme-settings.js +69 -12
- package/lib/theme-settings.js.map +1 -1
- package/lib/tui.d.ts +32 -12
- package/lib/tui.js +109 -36
- package/lib/tui.js.map +1 -1
- package/package.json +3 -4
- package/patches/@earendil-works__pi-tui.patch +206 -2
- package/scripts/dev-install.mjs +87 -0
- package/scripts/link-dsh-closure.mjs +85 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The subagent viewer — the Ctrl+G surface. Two levels, both on the shared
|
|
3
|
+
* PanelHost overlay (80%): a SelectList picker over the bridge's child views,
|
|
4
|
+
* then a live transcript panel for one child's buffered event log.
|
|
5
|
+
*
|
|
6
|
+
* Picker rows (running first, then the five most recent settled) carry the
|
|
7
|
+
* full picture of a delegation: status icon, label, delegation mode, rounds
|
|
8
|
+
* against the policy cap (`maxRounds` from `readSubagentLimits`, only shown
|
|
9
|
+
* when > 0), token spend (k) and elapsed time. Settled rows read as faded
|
|
10
|
+
* because their status icon and the muted description column mark the outcome.
|
|
11
|
+
*
|
|
12
|
+
* Transcript panel: one human-readable line per buffered SessionEvent
|
|
13
|
+
* (user/assistant messages, tool calls + truncated results, turns, descriptor,
|
|
14
|
+
* todos). The log is a capped per-child ring buffer (2000 events); a dropped
|
|
15
|
+
* head is reported at the top. While the panel is open a ~300ms timer rebuilds
|
|
16
|
+
* the lines from the bridge and re-renders, and the view follows the tail like
|
|
17
|
+
* a ScrollView follow:'end' (an explicit scroll-up detaches; reaching the
|
|
18
|
+
* bottom re-attaches). Esc closes, or a deliberate double-`x` within
|
|
19
|
+
* `DOUBLE_PRESS_MS`.
|
|
20
|
+
*/
|
|
21
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
22
|
+
import { type SelectItem, type TUI } from '@earendil-works/pi-tui';
|
|
23
|
+
import type { AgentView } from './dsh-events.ts';
|
|
24
|
+
import type { DshSessionBridge } from './session.ts';
|
|
25
|
+
import { type TuiTheme } from './theme/index.ts';
|
|
26
|
+
/**
|
|
27
|
+
* The picker rows: running children first (the live items the key is for),
|
|
28
|
+
* then the five most recent settled ones (newest settle first). Each row
|
|
29
|
+
* reads `⠋ label [mode] · rounds N[/max]` with the token spend and elapsed
|
|
30
|
+
* seconds in the muted description column.
|
|
31
|
+
*/
|
|
32
|
+
export declare function pickerItems(views: readonly AgentView[], getTurnCount: (childId: string) => number, maxRounds: number): SelectItem[];
|
|
33
|
+
/**
|
|
34
|
+
* The next selected index after a picker items swap, preserving the selection
|
|
35
|
+
* by item value. `previous === undefined` (no selection yet) starts at 0; a
|
|
36
|
+
* value that dropped off the new list (e.g. a settled child fell out of the
|
|
37
|
+
* recent-settled cap) clamps to the last row rather than resetting the user
|
|
38
|
+
* to the top. Pure and exported for the regression test.
|
|
39
|
+
*/
|
|
40
|
+
export declare function nextSelectedIndex(items: readonly SelectItem[], previous: string | undefined): number;
|
|
41
|
+
/**
|
|
42
|
+
* Open the subagent picker / viewer. A SelectList of the bridge's child views
|
|
43
|
+
* (running first, then the five recent settled) opens; Enter opens a
|
|
44
|
+
* live-refreshing transcript panel for that child. An empty list (no running,
|
|
45
|
+
* no settled) closes immediately. Focus returns to `restoreFocus` on close;
|
|
46
|
+
* the promise settles when the viewer closes (value is meaningless — index.ts
|
|
47
|
+
* never branches on it).
|
|
48
|
+
*/
|
|
49
|
+
export declare function openSubagentViewer(ctx: Context, tui: TUI, theme: TuiTheme, bridge: DshSessionBridge, restoreFocus: () => void): Promise<void>;
|
|
@@ -0,0 +1,523 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The subagent viewer — the Ctrl+G surface. Two levels, both on the shared
|
|
3
|
+
* PanelHost overlay (80%): a SelectList picker over the bridge's child views,
|
|
4
|
+
* then a live transcript panel for one child's buffered event log.
|
|
5
|
+
*
|
|
6
|
+
* Picker rows (running first, then the five most recent settled) carry the
|
|
7
|
+
* full picture of a delegation: status icon, label, delegation mode, rounds
|
|
8
|
+
* against the policy cap (`maxRounds` from `readSubagentLimits`, only shown
|
|
9
|
+
* when > 0), token spend (k) and elapsed time. Settled rows read as faded
|
|
10
|
+
* because their status icon and the muted description column mark the outcome.
|
|
11
|
+
*
|
|
12
|
+
* Transcript panel: one human-readable line per buffered SessionEvent
|
|
13
|
+
* (user/assistant messages, tool calls + truncated results, turns, descriptor,
|
|
14
|
+
* todos). The log is a capped per-child ring buffer (2000 events); a dropped
|
|
15
|
+
* head is reported at the top. While the panel is open a ~300ms timer rebuilds
|
|
16
|
+
* the lines from the bridge and re-renders, and the view follows the tail like
|
|
17
|
+
* a ScrollView follow:'end' (an explicit scroll-up detaches; reaching the
|
|
18
|
+
* bottom re-attaches). Esc closes, or a deliberate double-`x` within
|
|
19
|
+
* `DOUBLE_PRESS_MS`.
|
|
20
|
+
*/
|
|
21
|
+
import { getKeybindings, SelectList, } from '@earendil-works/pi-tui';
|
|
22
|
+
import { DOUBLE_PRESS_MS, MIN_DOUBLE_PRESS_GAP_MS } from "./keymap.js";
|
|
23
|
+
import { readSubagentLimits } from "./theme-settings.js";
|
|
24
|
+
import { PanelHost, panelThemeFns } from "./panels.js";
|
|
25
|
+
import { normalizePreview } from "./sessions.js";
|
|
26
|
+
import { toolSubject } from "./messages.js";
|
|
27
|
+
import { ansiFg, BOLD, RESET } from "./theme/index.js";
|
|
28
|
+
import { clipToWidth } from "./text.js";
|
|
29
|
+
/** Live-refresh interval of the transcript panel while it is open. */
|
|
30
|
+
const VIEWER_TICK_MS = 300;
|
|
31
|
+
/** How many recent settled children appear after the running ones. */
|
|
32
|
+
const SETTLED_CAP = 5;
|
|
33
|
+
/** Rows of the picker SelectList visible without scrolling (single source). */
|
|
34
|
+
const PICKER_MAX_VISIBLE = 12;
|
|
35
|
+
/** Running-agent spinner glyph (first frame of the live widget's cycle). */
|
|
36
|
+
const RUNNING_GLYPH = '⠋';
|
|
37
|
+
/** The per-child log cap the bridge applies (mirrors the truncation hint). */
|
|
38
|
+
const CHILD_LOG_CAP = 2000;
|
|
39
|
+
// ---------------------------------------------------------------- helpers --
|
|
40
|
+
/** Join an unknown message content into one trimmed text string. */
|
|
41
|
+
function textOfContent(content) {
|
|
42
|
+
if (typeof content === 'string')
|
|
43
|
+
return content.trim();
|
|
44
|
+
if (!Array.isArray(content))
|
|
45
|
+
return '';
|
|
46
|
+
let text = '';
|
|
47
|
+
for (const block of content) {
|
|
48
|
+
if (block && typeof block === 'object' && block.type === 'text') {
|
|
49
|
+
const blockText = block.text;
|
|
50
|
+
if (typeof blockText === 'string')
|
|
51
|
+
text += blockText + ' ';
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return text.trim();
|
|
55
|
+
}
|
|
56
|
+
/** First text block of a tool result body, collapsed to one line. */
|
|
57
|
+
function resultPreview(content) {
|
|
58
|
+
if (!Array.isArray(content))
|
|
59
|
+
return '';
|
|
60
|
+
for (const block of content) {
|
|
61
|
+
if (block && typeof block === 'object') {
|
|
62
|
+
const typed = block;
|
|
63
|
+
if (typed.type === 'text' && typeof typed.text === 'string' && typed.text.trim() !== '') {
|
|
64
|
+
return normalizePreview(typed.text);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return '';
|
|
69
|
+
}
|
|
70
|
+
/** Human token display: thousands read as `1.2k tok`. */
|
|
71
|
+
function formatTokens(tokens) {
|
|
72
|
+
return tokens >= 1000 ? `${(tokens / 1000).toFixed(1)}k tok` : `${tokens} tok`;
|
|
73
|
+
}
|
|
74
|
+
/** Status glyph for one child view: running / completed / failed / cancelled. */
|
|
75
|
+
function statusGlyph(view) {
|
|
76
|
+
if (view.outcome === undefined)
|
|
77
|
+
return RUNNING_GLYPH;
|
|
78
|
+
if (view.outcome === 'completed')
|
|
79
|
+
return '✓';
|
|
80
|
+
if (view.outcome === 'failed')
|
|
81
|
+
return '✗';
|
|
82
|
+
return '—';
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* The one human-readable line per buffered event. `callNames` pairs
|
|
86
|
+
* `tool/result` rows back to their `tool/call` name (call ids are opaque).
|
|
87
|
+
* Returns undefined to skip events that carry no readable surface (raw
|
|
88
|
+
* `assistant/chunk` deltas fold into the assembled message, command nodes
|
|
89
|
+
* render in the parent's transcript only).
|
|
90
|
+
*/
|
|
91
|
+
function eventLine(event, callNames) {
|
|
92
|
+
switch (event.type) {
|
|
93
|
+
case 'turn/start':
|
|
94
|
+
return `– turn ${event.data.turn} start`;
|
|
95
|
+
case 'turn/end': {
|
|
96
|
+
const reason = event.data.reason;
|
|
97
|
+
const detail = reason.kind === 'error'
|
|
98
|
+
? `error${reason.error !== undefined ? `: ${reason.error.message ?? ''}` : ''}`
|
|
99
|
+
: reason.kind;
|
|
100
|
+
return `– turn ${event.data.turn} end · ${detail}`;
|
|
101
|
+
}
|
|
102
|
+
case 'user/message': {
|
|
103
|
+
const message = event.data;
|
|
104
|
+
const text = normalizePreview(textOfContent(message.content));
|
|
105
|
+
if (text === '')
|
|
106
|
+
return undefined;
|
|
107
|
+
return message.source?.kind === 'user' ? `▎ ${text}` : `ⓘ ${text}`;
|
|
108
|
+
}
|
|
109
|
+
case 'assistant/message': {
|
|
110
|
+
const blocks = event.data.message?.content;
|
|
111
|
+
const parts = [];
|
|
112
|
+
if (Array.isArray(blocks)) {
|
|
113
|
+
for (const raw of blocks) {
|
|
114
|
+
if (!raw || typeof raw !== 'object')
|
|
115
|
+
continue;
|
|
116
|
+
const block = raw;
|
|
117
|
+
if (block.type === 'text' && typeof block.text === 'string' && block.text.trim() !== '') {
|
|
118
|
+
parts.push(normalizePreview(block.text));
|
|
119
|
+
}
|
|
120
|
+
else if (block.type === 'tool-call') {
|
|
121
|
+
const name = block.name ?? 'tool';
|
|
122
|
+
const subject = block.arguments !== undefined && block.arguments !== ''
|
|
123
|
+
? ` ${toolSubject(block.arguments)}`
|
|
124
|
+
: '';
|
|
125
|
+
parts.push(`⚙ ${name}${subject}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const line = parts.length > 0 ? `🐳 ${parts.join(' ')}` : '🐳 …';
|
|
130
|
+
return line;
|
|
131
|
+
}
|
|
132
|
+
case 'tool/call':
|
|
133
|
+
callNames.set(event.data.callId, event.data.name);
|
|
134
|
+
return `⚙ ${event.data.name}${event.data.arguments !== '' ? ` ${toolSubject(event.data.arguments)}` : ''}`;
|
|
135
|
+
case 'tool/result': {
|
|
136
|
+
const block = event.data.message.content[0];
|
|
137
|
+
const toolCallId = block?.toolCallId ?? '';
|
|
138
|
+
const name = callNames.get(toolCallId) ?? `tool:${toolCallId.slice(0, 8)}`;
|
|
139
|
+
const isError = event.data.error !== undefined || (block?.isError ?? false);
|
|
140
|
+
const text = resultPreview(block?.content);
|
|
141
|
+
return `${isError ? '✘' : '✔'} ${name}${text !== '' ? `: ${text}` : ''}`;
|
|
142
|
+
}
|
|
143
|
+
case 'subagent/descriptor': {
|
|
144
|
+
const descriptor = event.data;
|
|
145
|
+
const parts = ['⭘ subagent'];
|
|
146
|
+
if (descriptor.provider !== undefined && descriptor.provider !== '')
|
|
147
|
+
parts.push(descriptor.provider);
|
|
148
|
+
if (descriptor.mode !== undefined)
|
|
149
|
+
parts.push(`[${descriptor.mode}]`);
|
|
150
|
+
return parts.join(' ');
|
|
151
|
+
}
|
|
152
|
+
case 'todo/write': {
|
|
153
|
+
const todos = event.data.todos;
|
|
154
|
+
const done = todos.filter(todo => todo.status === 'completed').length;
|
|
155
|
+
const summary = todos
|
|
156
|
+
.map(todo => `${todo.status === 'in_progress' ? '◐' : '☐'} ${todo.content}`)
|
|
157
|
+
.join(' ');
|
|
158
|
+
return `☑ todos ${done}/${todos.length}: ${normalizePreview(summary)}`;
|
|
159
|
+
}
|
|
160
|
+
default:
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/** All readable lines of one child's buffered log, in log order. */
|
|
165
|
+
function eventLines(events) {
|
|
166
|
+
const lines = [];
|
|
167
|
+
const callNames = new Map();
|
|
168
|
+
for (const event of events) {
|
|
169
|
+
const line = eventLine(event, callNames);
|
|
170
|
+
if (line !== undefined)
|
|
171
|
+
lines.push(line);
|
|
172
|
+
}
|
|
173
|
+
return lines;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* The picker rows: running children first (the live items the key is for),
|
|
177
|
+
* then the five most recent settled ones (newest settle first). Each row
|
|
178
|
+
* reads `⠋ label [mode] · rounds N[/max]` with the token spend and elapsed
|
|
179
|
+
* seconds in the muted description column.
|
|
180
|
+
*/
|
|
181
|
+
export function pickerItems(views, getTurnCount, maxRounds) {
|
|
182
|
+
const running = views.filter(view => view.outcome === undefined);
|
|
183
|
+
const settled = views
|
|
184
|
+
.filter((view) => view.outcome !== undefined && view.endedAt !== undefined)
|
|
185
|
+
.sort((a, b) => b.endedAt - a.endedAt)
|
|
186
|
+
.slice(0, SETTLED_CAP);
|
|
187
|
+
return [...running, ...settled].map(view => {
|
|
188
|
+
const rounds = getTurnCount(view.childId);
|
|
189
|
+
const roundsText = maxRounds > 0 ? `rounds ${rounds}/${maxRounds}` : `rounds ${rounds}`;
|
|
190
|
+
const mode = view.mode === undefined ? '' : ` [${view.mode}]`;
|
|
191
|
+
const elapsedMs = (view.outcome === undefined ? Date.now() : view.endedAt ?? Date.now()) - view.startedAt;
|
|
192
|
+
const description = [
|
|
193
|
+
...(view.tokens > 0 ? [formatTokens(view.tokens)] : []),
|
|
194
|
+
`${(elapsedMs / 1000).toFixed(1)}s`,
|
|
195
|
+
].join(' · ');
|
|
196
|
+
return {
|
|
197
|
+
value: view.childId,
|
|
198
|
+
label: `${statusGlyph(view)} ${view.label}${mode}: ${roundsText}`,
|
|
199
|
+
...(description !== '' ? { description } : {}),
|
|
200
|
+
};
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* The next selected index after a picker items swap, preserving the selection
|
|
205
|
+
* by item value. `previous === undefined` (no selection yet) starts at 0; a
|
|
206
|
+
* value that dropped off the new list (e.g. a settled child fell out of the
|
|
207
|
+
* recent-settled cap) clamps to the last row rather than resetting the user
|
|
208
|
+
* to the top. Pure and exported for the regression test.
|
|
209
|
+
*/
|
|
210
|
+
export function nextSelectedIndex(items, previous) {
|
|
211
|
+
if (previous === undefined)
|
|
212
|
+
return 0;
|
|
213
|
+
const index = items.findIndex(item => item.value === previous);
|
|
214
|
+
return index < 0 ? Math.max(0, items.length - 1) : index;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* A SelectList with a footer hint line — the SelectList component has no
|
|
218
|
+
* footer slot, so the hint rides below its rows inside the framed overlay.
|
|
219
|
+
*
|
|
220
|
+
* The picker rows are live: a ~300ms timer re-runs `buildItems` (re-reading
|
|
221
|
+
* the bridge's turn counts, token spend and elapsed time) and swaps in a
|
|
222
|
+
* fresh SelectList — pi-tui's SelectList takes items only at construction
|
|
223
|
+
* and exposes no setItems, so it would otherwise hold a frozen snapshot for
|
|
224
|
+
* the whole open duration. The selection follows the highlighted child
|
|
225
|
+
* across the swap via its public `getSelectedItem`/`setSelectedIndex`; the
|
|
226
|
+
* tick only starts once the overlay actually mounted (mirroring the
|
|
227
|
+
* transcript panel).
|
|
228
|
+
*/
|
|
229
|
+
class SelectListWithFooter {
|
|
230
|
+
theme;
|
|
231
|
+
list;
|
|
232
|
+
footer;
|
|
233
|
+
buildItems;
|
|
234
|
+
requestRender;
|
|
235
|
+
/** Close flow for the live-tick empty case (mirrors the open-time one). */
|
|
236
|
+
onEmpty;
|
|
237
|
+
timer;
|
|
238
|
+
constructor(theme, list, footer, buildItems, requestRender, onEmpty) {
|
|
239
|
+
this.theme = theme;
|
|
240
|
+
this.list = list;
|
|
241
|
+
this.footer = footer;
|
|
242
|
+
this.buildItems = buildItems;
|
|
243
|
+
this.requestRender = requestRender;
|
|
244
|
+
this.onEmpty = onEmpty;
|
|
245
|
+
}
|
|
246
|
+
invalidate() {
|
|
247
|
+
this.list.invalidate();
|
|
248
|
+
}
|
|
249
|
+
startTicking() {
|
|
250
|
+
if (this.timer !== undefined)
|
|
251
|
+
return;
|
|
252
|
+
this.timer = setInterval(() => {
|
|
253
|
+
try {
|
|
254
|
+
this.refresh();
|
|
255
|
+
}
|
|
256
|
+
catch {
|
|
257
|
+
// A throwing tick must never take the process down — skip the frame
|
|
258
|
+
// and let the next tick retry.
|
|
259
|
+
}
|
|
260
|
+
}, VIEWER_TICK_MS);
|
|
261
|
+
this.timer.unref?.();
|
|
262
|
+
}
|
|
263
|
+
dispose() {
|
|
264
|
+
if (this.timer !== undefined) {
|
|
265
|
+
clearInterval(this.timer);
|
|
266
|
+
this.timer = undefined;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Rebuild the rows from the bridge and swap in a fresh list, keeping focus.
|
|
271
|
+
* An empty rebuild (the tracker cleared, or the last settled fell out of
|
|
272
|
+
* the recent cap) closes exactly like the open-time empty path — it must
|
|
273
|
+
* not park a stale "No matching commands" SelectList over a dead tracker.
|
|
274
|
+
*/
|
|
275
|
+
refresh() {
|
|
276
|
+
const items = this.buildItems();
|
|
277
|
+
if (items.length === 0) {
|
|
278
|
+
this.dispose();
|
|
279
|
+
this.onEmpty();
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
const previous = this.list.getSelectedItem()?.value;
|
|
283
|
+
const next = new SelectList(items, PICKER_MAX_VISIBLE, this.theme.selectList);
|
|
284
|
+
next.onSelect = this.list.onSelect;
|
|
285
|
+
next.onCancel = this.list.onCancel;
|
|
286
|
+
next.onSelectionChange = this.list.onSelectionChange;
|
|
287
|
+
next.setSelectedIndex(nextSelectedIndex(items, previous));
|
|
288
|
+
this.list = next;
|
|
289
|
+
this.requestRender();
|
|
290
|
+
}
|
|
291
|
+
render(width) {
|
|
292
|
+
return [
|
|
293
|
+
...this.list.render(width),
|
|
294
|
+
'',
|
|
295
|
+
ansiFg(this.theme.palette.fgSubtle) + clipToWidth(this.footer, width) + RESET,
|
|
296
|
+
];
|
|
297
|
+
}
|
|
298
|
+
handleInput(data) {
|
|
299
|
+
this.list.handleInput(data);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* The live transcript panel: header (label · provider · mode · status ·
|
|
304
|
+
* rounds · tokens) over a scrollable window of the child's event lines. A
|
|
305
|
+
* ~300ms timer re-reads the bridge log and re-renders; the view follows the
|
|
306
|
+
* tail until the user scrolls up (re-detached on reaching the bottom again).
|
|
307
|
+
* Esc closes; a double-`x` within `DOUBLE_PRESS_MS` closes too (single `x`
|
|
308
|
+
* only arms the window).
|
|
309
|
+
*/
|
|
310
|
+
class SubagentViewerPanel {
|
|
311
|
+
theme;
|
|
312
|
+
bridge;
|
|
313
|
+
childId;
|
|
314
|
+
/** Live reader of the round cap — re-read on every render (hot maxRounds). */
|
|
315
|
+
readMaxRounds;
|
|
316
|
+
onClose;
|
|
317
|
+
requestRender;
|
|
318
|
+
timer;
|
|
319
|
+
/** Timestamp of the last handled `x` press; 0 = none (the double-press arm). */
|
|
320
|
+
lastXPress = 0;
|
|
321
|
+
/** Current scroll offset into the transcript lines. */
|
|
322
|
+
scrollTop = 0;
|
|
323
|
+
/** Whether the view is pinned to the log tail (default, re-set on the bottom). */
|
|
324
|
+
followEnd = true;
|
|
325
|
+
/** Line count of the last render (the scroll range), for input handling. */
|
|
326
|
+
lineCount = 0;
|
|
327
|
+
/** Body-window rows of the last render, for input handling. */
|
|
328
|
+
bodyRows = 0;
|
|
329
|
+
constructor(theme, bridge, childId, readMaxRounds, onClose, requestRender) {
|
|
330
|
+
this.theme = theme;
|
|
331
|
+
this.bridge = bridge;
|
|
332
|
+
this.childId = childId;
|
|
333
|
+
this.readMaxRounds = readMaxRounds;
|
|
334
|
+
this.onClose = onClose;
|
|
335
|
+
this.requestRender = requestRender;
|
|
336
|
+
}
|
|
337
|
+
startTicking() {
|
|
338
|
+
if (this.timer !== undefined)
|
|
339
|
+
return;
|
|
340
|
+
this.timer = setInterval(() => {
|
|
341
|
+
try {
|
|
342
|
+
this.requestRender();
|
|
343
|
+
}
|
|
344
|
+
catch {
|
|
345
|
+
// A throwing tick must never take the process down — skip the frame.
|
|
346
|
+
}
|
|
347
|
+
}, VIEWER_TICK_MS);
|
|
348
|
+
this.timer.unref?.();
|
|
349
|
+
}
|
|
350
|
+
dispose() {
|
|
351
|
+
if (this.timer !== undefined) {
|
|
352
|
+
clearInterval(this.timer);
|
|
353
|
+
this.timer = undefined;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
invalidate() { }
|
|
357
|
+
render(width) {
|
|
358
|
+
const fns = panelThemeFns(this.theme);
|
|
359
|
+
const view = this.bridge.getAgentViews().find(agent => agent.childId === this.childId);
|
|
360
|
+
const lines = eventLines(this.bridge.getChildLog(this.childId));
|
|
361
|
+
const truncated = this.bridge.isChildLogTruncated(this.childId);
|
|
362
|
+
this.lineCount = lines.length;
|
|
363
|
+
this.bodyRows = bodyRowsFor(truncated);
|
|
364
|
+
const maxScroll = Math.max(0, this.lineCount - this.bodyRows);
|
|
365
|
+
this.scrollTop = this.followEnd ? maxScroll : Math.max(0, Math.min(this.scrollTop, maxScroll));
|
|
366
|
+
const wrap = Math.max(2, width - 2);
|
|
367
|
+
const out = [this.headerLine(view)];
|
|
368
|
+
if (truncated)
|
|
369
|
+
out.push(fns.subtle(`…history truncated (${CHILD_LOG_CAP} event cap)`));
|
|
370
|
+
const slice = lines.slice(this.scrollTop, this.scrollTop + this.bodyRows);
|
|
371
|
+
if (slice.length === 0) {
|
|
372
|
+
out.push(fns.subtle(' — no events yet —'));
|
|
373
|
+
}
|
|
374
|
+
else {
|
|
375
|
+
for (const line of slice)
|
|
376
|
+
out.push(fns.muted(clipToWidth(line === '' ? ' ' : line, wrap)));
|
|
377
|
+
}
|
|
378
|
+
out.push('');
|
|
379
|
+
out.push(fns.subtle('↑↓ scroll · Esc close · x ×2 close'));
|
|
380
|
+
return out;
|
|
381
|
+
}
|
|
382
|
+
handleInput(data) {
|
|
383
|
+
const kb = getKeybindings();
|
|
384
|
+
if (kb.matches(data, 'tui.select.cancel')) {
|
|
385
|
+
this.onClose();
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
if (data.toLowerCase() === 'x') {
|
|
389
|
+
const now = Date.now();
|
|
390
|
+
// Auto-repeat of a held x (~30-50ms gaps) never completes the double
|
|
391
|
+
// press — only a deliberate second press within the window closes.
|
|
392
|
+
if (this.lastXPress !== 0 && now - this.lastXPress < MIN_DOUBLE_PRESS_GAP_MS)
|
|
393
|
+
return;
|
|
394
|
+
if (this.lastXPress !== 0 && now - this.lastXPress <= DOUBLE_PRESS_MS) {
|
|
395
|
+
this.onClose();
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
this.lastXPress = now;
|
|
399
|
+
}
|
|
400
|
+
return;
|
|
401
|
+
}
|
|
402
|
+
if (kb.matches(data, 'tui.select.up'))
|
|
403
|
+
this.scrollBy(-1);
|
|
404
|
+
else if (kb.matches(data, 'tui.select.down'))
|
|
405
|
+
this.scrollBy(1);
|
|
406
|
+
}
|
|
407
|
+
/** Scroll the window; re-attach to the tail when it reaches the bottom. */
|
|
408
|
+
scrollBy(lines) {
|
|
409
|
+
const maxScroll = Math.max(0, this.lineCount - this.bodyRows);
|
|
410
|
+
const start = this.followEnd ? maxScroll : this.scrollTop;
|
|
411
|
+
const next = Math.max(0, Math.min(maxScroll, start + lines));
|
|
412
|
+
this.scrollTop = next;
|
|
413
|
+
this.followEnd = next === maxScroll;
|
|
414
|
+
this.requestRender();
|
|
415
|
+
}
|
|
416
|
+
/** One-line child summary: colored status, the rest in the accent bold. */
|
|
417
|
+
headerLine(view) {
|
|
418
|
+
const p = this.theme.palette;
|
|
419
|
+
if (view === undefined) {
|
|
420
|
+
return ansiFg(p.accent) + BOLD + `ⓘ subagent ${clipToWidth(this.childId, 8)}` + RESET;
|
|
421
|
+
}
|
|
422
|
+
const status = view.outcome === undefined ? 'running'
|
|
423
|
+
: view.outcome === 'completed' ? 'completed'
|
|
424
|
+
: view.outcome === 'failed' ? 'failed'
|
|
425
|
+
: 'cancelled';
|
|
426
|
+
const statusColor = view.outcome === undefined ? p.accent
|
|
427
|
+
: view.outcome === 'completed' ? p.success
|
|
428
|
+
: view.outcome === 'failed' ? p.danger
|
|
429
|
+
: p.fgMuted;
|
|
430
|
+
const tail = [view.label];
|
|
431
|
+
if (view.provider !== undefined)
|
|
432
|
+
tail.push(view.provider);
|
|
433
|
+
if (view.mode !== undefined)
|
|
434
|
+
tail.push(view.mode);
|
|
435
|
+
const maxRounds = this.readMaxRounds();
|
|
436
|
+
tail.push(`rounds ${this.bridge.getTurnCount(this.childId)}${maxRounds > 0 ? `/${maxRounds}` : ''}`);
|
|
437
|
+
if (view.tokens > 0)
|
|
438
|
+
tail.push(formatTokens(view.tokens));
|
|
439
|
+
// Budget the plain text so the status suffix (its own color) still fits.
|
|
440
|
+
const budget = Math.max(20, 140 - status.length - 3);
|
|
441
|
+
const base = clipToWidth(tail.join(' · '), budget);
|
|
442
|
+
return ansiFg(p.accent) + BOLD + base + RESET + ' · ' + ansiFg(statusColor) + status + RESET;
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* Body-window rows for the transcript panel: the framed overlay adds 4 rows
|
|
447
|
+
* of chrome and slices anything taller, so the rendered child budget is 80%
|
|
448
|
+
* of the terminal minus the frame; the header, footer and the optional
|
|
449
|
+
* truncation hint take theirs, everything else is the transcript window.
|
|
450
|
+
*/
|
|
451
|
+
function bodyRowsFor(truncated) {
|
|
452
|
+
const childBudget = Math.max(1, Math.floor((process.stdout.rows ?? 24) * 0.8) - 4);
|
|
453
|
+
return Math.max(1, childBudget - 3 - (truncated ? 1 : 0));
|
|
454
|
+
}
|
|
455
|
+
// --------------------------------------------------------------- the flow --
|
|
456
|
+
/**
|
|
457
|
+
* Open the subagent picker / viewer. A SelectList of the bridge's child views
|
|
458
|
+
* (running first, then the five recent settled) opens; Enter opens a
|
|
459
|
+
* live-refreshing transcript panel for that child. An empty list (no running,
|
|
460
|
+
* no settled) closes immediately. Focus returns to `restoreFocus` on close;
|
|
461
|
+
* the promise settles when the viewer closes (value is meaningless — index.ts
|
|
462
|
+
* never branches on it).
|
|
463
|
+
*/
|
|
464
|
+
export async function openSubagentViewer(ctx, tui, theme, bridge, restoreFocus) {
|
|
465
|
+
let settle;
|
|
466
|
+
const host = new PanelHost(tui, theme, () => {
|
|
467
|
+
// A half-mounted overlay must not strand the keyboard.
|
|
468
|
+
restoreFocus();
|
|
469
|
+
settle?.();
|
|
470
|
+
});
|
|
471
|
+
const finish = () => {
|
|
472
|
+
host.close();
|
|
473
|
+
restoreFocus();
|
|
474
|
+
settle?.();
|
|
475
|
+
};
|
|
476
|
+
const showPicker = () => {
|
|
477
|
+
// `bridge.getTurnCount` reads instance state — wrap instead of passing the
|
|
478
|
+
// unbound method through to the pure item builder. `buildItems` re-reads
|
|
479
|
+
// the limits live on every tick, so a maxRounds change hot-applies while
|
|
480
|
+
// the picker stays open (no more open-time snapshot).
|
|
481
|
+
const buildItems = () => pickerItems(bridge.getAgentViews(), childId => bridge.getTurnCount(childId), readSubagentLimits(ctx).maxRounds);
|
|
482
|
+
const items = buildItems();
|
|
483
|
+
if (items.length === 0) {
|
|
484
|
+
finish();
|
|
485
|
+
return;
|
|
486
|
+
}
|
|
487
|
+
const list = new SelectList(items, PICKER_MAX_VISIBLE, theme.selectList);
|
|
488
|
+
list.setSelectedIndex(0);
|
|
489
|
+
const panel = new SelectListWithFooter(theme, list, '↑↓ navigate · Enter open · Esc close', buildItems, () => tui.requestRender(), () => finish());
|
|
490
|
+
list.onSelect = item => {
|
|
491
|
+
// Opening a viewer leaves the picker behind — stop its live refresh.
|
|
492
|
+
panel.dispose();
|
|
493
|
+
showViewer(item.value);
|
|
494
|
+
};
|
|
495
|
+
list.onCancel = () => {
|
|
496
|
+
panel.dispose();
|
|
497
|
+
finish();
|
|
498
|
+
};
|
|
499
|
+
// Tick only when the overlay mounted: a failed showOverlay already fired
|
|
500
|
+
// the host's onError (restoreFocus + settle) — an orphaned interval would
|
|
501
|
+
// re-render forever against nothing.
|
|
502
|
+
const handle = host.open(panel);
|
|
503
|
+
if (handle !== undefined)
|
|
504
|
+
panel.startTicking();
|
|
505
|
+
};
|
|
506
|
+
const showViewer = (childId) => {
|
|
507
|
+
const panel = new SubagentViewerPanel(theme, bridge, childId, () => readSubagentLimits(ctx).maxRounds, () => {
|
|
508
|
+
panel.dispose();
|
|
509
|
+
finish();
|
|
510
|
+
}, () => tui.requestRender());
|
|
511
|
+
// Tick only when the overlay mounted: a failed showOverlay already fired
|
|
512
|
+
// the host's onError (restoreFocus + settle) — an orphaned interval would
|
|
513
|
+
// re-render forever against nothing.
|
|
514
|
+
const handle = host.open(panel);
|
|
515
|
+
if (handle !== undefined)
|
|
516
|
+
panel.startTicking();
|
|
517
|
+
};
|
|
518
|
+
return new Promise(resolve => {
|
|
519
|
+
settle = resolve;
|
|
520
|
+
showPicker();
|
|
521
|
+
});
|
|
522
|
+
}
|
|
523
|
+
//# sourceMappingURL=subagent-viewer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-viewer.js","sourceRoot":"","sources":["../src/subagent-viewer.ts"],"names":[],"mappings":"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"}
|
package/lib/theme/index.js
CHANGED
|
@@ -64,6 +64,10 @@ export function buildTheme(palette) {
|
|
|
64
64
|
};
|
|
65
65
|
const editor = {
|
|
66
66
|
borderColor: fg(palette.borderDefault),
|
|
67
|
+
// The editor's input rows are otherwise unstyled (terminal default
|
|
68
|
+
// foreground), which is invisible on the app-painted dark canvas — theme
|
|
69
|
+
// the typed text with the palette's body color (light text on dark).
|
|
70
|
+
textColor: fg(palette.fgDefault),
|
|
67
71
|
selectList,
|
|
68
72
|
};
|
|
69
73
|
const markdown = {
|
package/lib/theme/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/theme/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/theme/index.ts"],"names":[],"mappings":"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"}
|