@aiwayds/dsh-tui-pi 0.3.0 → 0.4.2

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.
@@ -1,44 +1,46 @@
1
1
  /**
2
- * Live widgets: the Todos boxed panel pinned ABOVE the chat input, and the
3
- * running-subagent activity merged into the last-request area BELOW the
4
- * editor. Two separate plain containers keep the two live surfaces apart:
2
+ * Live widgets — every fixed live surface around the chat window:
5
3
  *
6
- * - `todosDoc` — the dock slot above the input (`ui.widgets`): a single
7
- * bordered Todos panel (top border + header row + tree body rows + bottom
8
- * border, same chrome as the thinking/tool panels). Auto height — it
9
- * renders zero rows while empty and grows to its content while the model
10
- * has todos.
11
- * - `activityDoc` — the lastRequest container below the editor
12
- * (`ui.lastRequest`): the ` ● <last request>` line (persisting across
13
- * agent churn) followed by one compact line PER RUNNING agent. NO box
14
- * chrome, NO `● Agents` header, NO provider — just
15
- * `├─ ⠋ <name> · ↻N≤M · 21k/1m · 13.6s · <latest output>`, the `├─ ` /
16
- * `└─ ` prefix in the same column as the todo rows and the request ` ● `
17
- * (the last running agent closes the list with `└─ `). Auto height — it
18
- * collapses to zero rows when both the last-request line is cleared and no
19
- * agent runs.
4
+ * - `todosDoc` (the widgets slot ABOVE the chat input) hosts THREE pinned
5
+ * panels: the bordered Todos table, the ThinkPanel and the ToolPanel
6
+ * (src/activity.ts). Think/tool activity NEVER creates transcript blocks
7
+ * — one panel of each kind exists for the whole run, every event
8
+ * refreshes it in place, and a panel with no content renders zero rows.
9
+ * - `activityDoc` (the lastRequest container BELOW the editor): the
10
+ * ` ● <last request>` line (persisting across agent churn) followed by one
11
+ * compact line PER RUNNING agent — `├─ ⠋ <name> · ↻N≤M · 21k/1m · 13.6s ·
12
+ * <content tail>`. The tail is the child's latest CONTENT line (assistant
13
+ * text/reasoning, live-refreshed — never a tool name) and takes whatever
14
+ * the row has left, truncated at the right edge: one row, no wrap.
20
15
  *
21
- * Show-when-content, clear-when-done: the Todos panel appears only while it
22
- * has content and disappears when it empties (an all-completed snapshot or
23
- * `/new`); an agent line renders only while its child RUNS (a settled child
24
- * drops off immediately). `clear()` (/new) drops the Todos panel and the
25
- * agent lines but preserves the last-request echo.
16
+ * Event flow: index.ts routes every parent-session event through
17
+ * `applyEvent` (think/tool phase machine) and todo/write snapshots through
18
+ * `renderTodos`; the bridge's onLive fold feeds `renderAgents`. Phase rules
19
+ * for the panels: a reasoning delta shows the think panel; a tool call
20
+ * refreshes the tool panel (pending); a matching result settles it (status
21
+ * icon, frozen time, result tail); a text delta / assembled message / user
22
+ * message / turn end hides the finished phases. `clear()` (/new, resume)
23
+ * hides both panels.
26
24
  *
27
- * Live refresh: `tickLive` (the AGENT_TICK_MS timer in index.ts) advances the
28
- * spinner and re-reads the elapsed clock; it is a no-op while nothing runs.
29
- * `setTheme` recolors in place on a theme hot-switch (no replay buffer — the
30
- * widget is live state, not transcript history).
25
+ * Live refresh: `tickLive` (the AGENT_TICK_MS timer in index.ts) advances
26
+ * the spinner and repaints while any agent runs OR either panel is visible
27
+ * (the elapsed columns re-read the clock each frame); no-op otherwise.
28
+ * `setTheme` recolors in place on a theme hot-switch (the panels re-render
29
+ * each frame through their theme getters — no replay buffer, they are live
30
+ * state, not transcript history).
31
31
  */
32
32
  import { Container, Text } from '@earendil-works/pi-tui';
33
- import { panelBodyText, panelBoxWidth, clipPanelLine } from "./messages.js";
33
+ import { DEFAULT_PANEL_HEIGHT, ThinkPanel, ToolPanel, borderedRow, clipPanelLine, panelBottomBorder, panelBoxWidth, panelTopBorder, } from "./activity.js";
34
+ import { columnWidths, padCell, TABLE_SEP } from "./panels.js";
35
+ import { SPAWN_TOOLS } from "./subagent-policy.js";
34
36
  import { ansiFg, RESET } from "./theme/index.js";
35
37
  import { clipToWidth, visibleWidth } from "./text.js";
36
- /** Refresh interval of the live running-agent lines (spinner + elapsed). */
38
+ /** Refresh interval of the live surfaces (spinner + elapsed columns). */
37
39
  export const AGENT_TICK_MS = 100;
38
40
  /** Braille spinner cycle; the frame index advances once per tick. */
39
41
  export const AGENT_SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
40
42
  /**
41
- * Compact human-readable size: 1_500_000 → `1.5m`, 20_965 → `20k`, 999 → `999`.
43
+ * Compact human-readable size: 1_500_000 -> `1.5m`, 20_965 -> `20k`, 999 -> `999`.
42
44
  * Millions keep one decimal (a trailing `.0` dropped), thousands floor to `k`.
43
45
  */
44
46
  export function fmtCompact(n) {
@@ -50,26 +52,91 @@ export function fmtCompact(n) {
50
52
  return `${Math.floor(n / 1_000)}k`;
51
53
  return String(n);
52
54
  }
53
- /** One bordered row of the Todos panel: `│ ` + inner + ` │` (no trailing RESET). */
54
- function borderedRow(boxWidth, borderFg, inner) {
55
- const pad = Math.max(0, boxWidth - 4 - visibleWidth(inner));
56
- return `${borderFg}│ ${inner}${' '.repeat(pad)}${borderFg} │`;
55
+ /** The todos table columns: right-aligned row number, status icon, flex content. */
56
+ const TODO_COLUMNS = [
57
+ { key: 'idx', title: '#', width: 3, align: 'right' },
58
+ { key: 'status', title: '✓', width: 2 },
59
+ { key: 'content', title: 'Task', flex: true },
60
+ ];
61
+ /** Status icon of one todo: pending / in-progress / completed. */
62
+ function todoIcon(status) {
63
+ if (status === 'completed')
64
+ return '☑';
65
+ if (status === 'in_progress')
66
+ return '◐';
67
+ return '☐';
57
68
  }
58
- /** Top border line (`┌─…─┐`), `boxWidth` columns wide. */
59
- function panelTopBorder(boxWidth, borderFg) {
60
- return `${borderFg}┌${'─'.repeat(Math.max(0, boxWidth - 2))}┐`;
69
+ /**
70
+ * The live Todos panel - a self-drawing table on the panel framework
71
+ * (padCell/columnWidths from panels.ts), rendered at the CURRENT width on
72
+ * every frame. pi-tui's Container calls `render(width)` per frame with no
73
+ * caching, so a terminal resize re-lays the table out (clip + column widths)
74
+ * automatically - no stale baked rows, no word-wrap. Renders zero rows while
75
+ * the list is empty or every todo is completed (clear-when-done).
76
+ */
77
+ export class TodosPanel {
78
+ todos = [];
79
+ getTheme;
80
+ constructor(getTheme) {
81
+ this.getTheme = getTheme;
82
+ }
83
+ invalidate() { }
84
+ /** Replace the todos snapshot (`todo/write` events, replay, /new). */
85
+ setTodos(todos) {
86
+ this.todos = todos;
87
+ }
88
+ render(width) {
89
+ if (this.todos.length === 0 || this.todos.every(todo => todo.status === 'completed'))
90
+ return [];
91
+ const theme = this.getTheme();
92
+ const p = theme.palette;
93
+ const boxWidth = panelBoxWidth(width);
94
+ const borderFg = ansiFg(p.borderDefault);
95
+ const innerWidth = boxWidth - 4;
96
+ const colWidths = columnWidths(innerWidth, TODO_COLUMNS);
97
+ const subtle = (text) => ansiFg(p.fgSubtle) + text + RESET;
98
+ // Header row of the panel: `● Todos (done/total)` in the accent/subtle pair.
99
+ const done = this.todos.filter(todo => todo.status === 'completed').length;
100
+ const headerInner = ansiFg(p.accent) + '● Todos ' + RESET
101
+ + subtle(`(${done}/${this.todos.length})`);
102
+ const out = [panelTopBorder(boxWidth, borderFg), borderedRow(boxWidth, borderFg, headerInner)];
103
+ // Table header: every cell padded to its column so the rows align.
104
+ out.push(borderedRow(boxWidth, borderFg, TODO_COLUMNS.map((column, i) => padCell(column.title, colWidths[i], column.align)).join(TABLE_SEP)));
105
+ for (let i = 0; i < this.todos.length; i++) {
106
+ const todo = this.todos[i];
107
+ // Plain (clipped+padded) cells FIRST, ANSI after - the panel-line rule.
108
+ const idxCell = padCell(String(i + 1), colWidths[0], 'right');
109
+ const iconCell = padCell(todoIcon(todo.status), colWidths[1]);
110
+ const contentCell = padClip(todo.content, colWidths[2]);
111
+ // One color per status across the icon and content cells (the icon has
112
+ // its own column here - no baked-in prefix from theme.chat.todo*).
113
+ const color = todo.status === 'completed'
114
+ ? p.success
115
+ : todo.status === 'in_progress' ? p.attention : p.fgSubtle;
116
+ const statusStyle = (text) => ansiFg(color) + text + RESET;
117
+ out.push(borderedRow(boxWidth, borderFg, subtle(idxCell) + TABLE_SEP + statusStyle(iconCell) + TABLE_SEP + statusStyle(contentCell)));
118
+ }
119
+ out.push(panelBottomBorder(boxWidth, borderFg));
120
+ return out;
121
+ }
122
+ }
123
+ /** Clip one todo's content (a possibly multiline model string) to one row. */
124
+ function padClip(content, width) {
125
+ const flat = content.replace(/\r/g, '').replace(/\n/g, ' ').trim();
126
+ return padCell(flat, width);
61
127
  }
62
128
  export class LiveWidgets {
63
129
  todosDoc;
64
130
  activityDoc;
65
131
  theme;
66
132
  requestRender;
67
- /** Latest todo list from `todo/write`, rendered while non-empty. */
68
- liveTodos = [];
133
+ /** The self-drawing Todos table, mounted once in `todosDoc`. */
134
+ todosPanel;
135
+ /** The fixed think/tool status panels, mounted once in `todosDoc`. */
136
+ thinkPanel;
137
+ toolPanel;
69
138
  /** Latest subagent views from the bridge's onLive fold. */
70
139
  liveAgents = [];
71
- /** The Todos panel Text in `todosDoc`, replaced on rebuild. */
72
- todosText;
73
140
  /** The merged running-agent Text in `activityDoc`, replaced on rebuild. */
74
141
  agentsText;
75
142
  /** The ` ● <last request>` Text in `activityDoc` (persists across churn). */
@@ -79,16 +146,30 @@ export class LiveWidgets {
79
146
  /** Spinner frame counter, advanced by tickLive while any agent runs. */
80
147
  spinnerFrame = 0;
81
148
  /**
82
- * @param todosDoc The dock slot ABOVE the chat input — the Todos boxed
83
- * panel lives here.
84
- * @param activityDoc The lastRequest container BELOW the editor — the ` ● `
149
+ * @param todosDoc The dock slot ABOVE the chat input - the Todos table and
150
+ * the think/tool status panels live here.
151
+ * @param activityDoc The lastRequest container BELOW the editor - the ` ● `
85
152
  * last-request line plus the compact running-agent lines live here.
153
+ * @param panelHeight Configured think/tool panel height ('1' one row, or a
154
+ * boxed budget - see activity.ts).
86
155
  */
87
- constructor(todosDoc, activityDoc, theme, requestRender) {
156
+ constructor(todosDoc, activityDoc, theme, requestRender, panelHeight = DEFAULT_PANEL_HEIGHT) {
88
157
  this.todosDoc = todosDoc;
89
158
  this.activityDoc = activityDoc;
90
159
  this.theme = theme;
91
160
  this.requestRender = requestRender;
161
+ // Mounted once, in display order: Todos (persistent plan) above the
162
+ // transient think/tool activity. The panels re-render at the live width
163
+ // every frame and read the theme through their getters, so theme swaps
164
+ // and terminal resizes need no rebuild wiring here.
165
+ this.todosPanel = new TodosPanel(() => this.theme);
166
+ this.thinkPanel = new ThinkPanel(() => this.theme);
167
+ this.toolPanel = new ToolPanel(() => this.theme);
168
+ this.thinkPanel.setHeight(panelHeight);
169
+ this.toolPanel.setHeight(panelHeight);
170
+ todosDoc.addChild(this.todosPanel);
171
+ todosDoc.addChild(this.thinkPanel);
172
+ todosDoc.addChild(this.toolPanel);
92
173
  }
93
174
  /**
94
175
  * Render the ` ● <text>` last-request line in `activityDoc`, UNDER which the
@@ -129,8 +210,74 @@ export class LiveWidgets {
129
210
  }
130
211
  /** Replace the todos snapshot (`todo/write` events and replay). */
131
212
  renderTodos(todos) {
132
- this.liveTodos = todos;
133
- this.rebuild();
213
+ this.todosPanel.setTodos(todos);
214
+ this.requestRender();
215
+ }
216
+ /**
217
+ * One parent-session session event, driving the think/tool phase machine:
218
+ * a reasoning delta opens/feeds the think panel; a tool call refreshes the
219
+ * tool panel (pending, replacing any tracked tool) — except delegation
220
+ * spawn tools (`use_agent`/`subagent`/`workflow`/`ralph`), whose children
221
+ * already render in the running-agent lines below the editor and never
222
+ * open a tool block; a matching result settles the tracked tool; a text
223
+ * delta, an assembled assistant message, a user message or a turn end
224
+ * hides the finished phases. Called for every event AND for replayed
225
+ * history (a resumed session replays its tool calls; its final turn/end
226
+ * leaves the panels hidden).
227
+ */
228
+ applyEvent(event) {
229
+ switch (event.type) {
230
+ case 'assistant/chunk': {
231
+ const chunk = event.data.chunk;
232
+ if (chunk.type === 'reasoning-delta') {
233
+ if ((chunk.text ?? '') !== '') {
234
+ this.thinkPanel.feed(chunk.text);
235
+ this.toolPanel.hide();
236
+ }
237
+ }
238
+ else if (chunk.type === 'text-delta' && (chunk.text ?? '') !== '') {
239
+ // The answer streams into the transcript — the panels are done.
240
+ this.thinkPanel.hide();
241
+ this.toolPanel.hide();
242
+ }
243
+ break;
244
+ }
245
+ case 'assistant/message':
246
+ this.thinkPanel.hide();
247
+ break;
248
+ case 'tool/call':
249
+ // Delegation spawn tools (`use_agent`, `subagent`, `workflow`, …)
250
+ // surface their children in the running-agent lines BELOW the editor
251
+ // — showing them again as a tool block above it would duplicate the
252
+ // display. They never open the tool panel, and a stale settled tool
253
+ // is cleared when the delegation starts.
254
+ if (SPAWN_TOOLS.includes(event.data.name)) {
255
+ this.toolPanel.hide();
256
+ }
257
+ else {
258
+ this.toolPanel.begin(event.data.callId, event.data.name, event.data.arguments);
259
+ }
260
+ this.thinkPanel.hide();
261
+ break;
262
+ case 'tool/result': {
263
+ const block = event.data.message.content[0];
264
+ this.toolPanel.settle(block?.toolCallId ?? '', {
265
+ error: event.data.error === undefined
266
+ ? undefined
267
+ : { name: event.data.error.name, code: event.data.error.code },
268
+ block: block === undefined ? undefined : { isError: block.isError, content: block.content },
269
+ });
270
+ break;
271
+ }
272
+ case 'user/message':
273
+ case 'turn/end':
274
+ this.thinkPanel.hide();
275
+ this.toolPanel.hide();
276
+ break;
277
+ default:
278
+ break;
279
+ }
280
+ this.requestRender();
134
281
  }
135
282
  /** Replace the subagent views (the bridge's onLive fold). */
136
283
  renderAgents(agents) {
@@ -138,18 +285,33 @@ export class LiveWidgets {
138
285
  this.rebuild();
139
286
  }
140
287
  /**
141
- * Live refresh ~10x/sec while any subagent runs: advance the spinner and
142
- * repaint (the elapsed column re-reads Date.now()). No-op when nothing runs
143
- * — the activity area then holds its final (empty) state.
288
+ * Live refresh ~10x/sec while any subagent runs or either status panel is
289
+ * visible: advance the spinner and repaint (the elapsed columns re-read
290
+ * Date.now() each frame). No-op otherwise — the activity area then holds
291
+ * its final (empty) state.
144
292
  */
145
293
  tickLive() {
146
- if (!this.liveAgents.some(view => view.outcome === undefined))
294
+ const agentsLive = this.liveAgents.some(view => view.outcome === undefined);
295
+ const panelsLive = this.thinkPanel.isVisible() || this.toolPanel.isVisible();
296
+ if (!agentsLive && !panelsLive)
147
297
  return;
148
- this.spinnerFrame += 1;
298
+ if (agentsLive)
299
+ this.spinnerFrame += 1;
149
300
  this.rebuild();
150
301
  }
151
- /** Recolor the widget (Todos panel, ● line and agent lines) under a theme
152
- * hot-switch (no-op on the same bundle). */
302
+ /**
303
+ * Switch the configured think/tool panel height (the settings watch sink).
304
+ * The panels re-render at the new budget on the next frame — no rebuild
305
+ * wiring, they are self-drawing.
306
+ */
307
+ setPanelHeight(panelHeight) {
308
+ this.thinkPanel.setHeight(panelHeight);
309
+ this.toolPanel.setHeight(panelHeight);
310
+ this.requestRender();
311
+ }
312
+ /** Recolor the widget (Todos panel, think/tool panels, ● line and agent
313
+ * lines) under a theme hot-switch (no-op on the same bundle). The panels
314
+ * read the theme through their getters, so the swap needs only a repaint. */
153
315
  setTheme(theme) {
154
316
  if (theme === this.theme)
155
317
  return;
@@ -163,17 +325,15 @@ export class LiveWidgets {
163
325
  }
164
326
  /**
165
327
  * Drop everything except the last-request echo (`/new`): clears the Todos
166
- * panel and the running-agent lines, keeps the ` ● ` line. The bridge also
167
- * fires `renderAgents([])`.
328
+ * panel, hides the think/tool panels and drops the running-agent lines,
329
+ * keeps the ` ● ` line. The bridge also fires `renderAgents([])`.
168
330
  */
169
331
  clear() {
170
- this.liveTodos = [];
171
332
  this.liveAgents = [];
172
333
  this.spinnerFrame = 0;
173
- if (this.todosText !== undefined) {
174
- this.todosDoc.removeChild(this.todosText);
175
- this.todosText = undefined;
176
- }
334
+ this.todosPanel.setTodos([]);
335
+ this.thinkPanel.hide();
336
+ this.toolPanel.hide();
177
337
  if (this.agentsText !== undefined) {
178
338
  this.activityDoc.removeChild(this.agentsText);
179
339
  this.agentsText = undefined;
@@ -181,28 +341,14 @@ export class LiveWidgets {
181
341
  this.requestRender();
182
342
  }
183
343
  /**
184
- * Rebuild the two live surfaces:
185
- * - `todosDoc`: one bordered Todos panel (or nothing when all completed).
186
- * - `activityDoc`: the ` ● ` line (managed separately, persists) followed
187
- * by ONE Text holding the compact running-agent lines joined by '\n'
188
- * (or nothing when no agent runs — the slot collapses to the ● line).
189
- * Clear-when-done: the Todos panel hides once every todo is completed (the
190
- * model writes the whole-list snapshot and rarely clears it — an
191
- * all-completed list is the end-of-work signal); the agent lines hide once
192
- * no child is running.
344
+ * Rebuild the running-agent surface of `activityDoc`: the ` ● ` line
345
+ * (managed separately, persists) followed by ONE Text holding the compact
346
+ * running-agent lines joined by '\n' (or nothing when no agent runs - the
347
+ * slot collapses to the ● line). The pinned panels are NOT rebuilt here -
348
+ * they are self-drawing components that re-render each frame.
349
+ * Clear-when-done: the agent lines hide once no child is running.
193
350
  */
194
351
  rebuild() {
195
- if (this.liveTodos.some(todo => todo.status !== 'completed')) {
196
- const panel = this.boxedPanel(this.todosHeader(), this.todoLines());
197
- if (this.todosText !== undefined)
198
- this.todosDoc.removeChild(this.todosText);
199
- this.todosText = new Text(panel, 1, 0);
200
- this.todosDoc.addChild(this.todosText);
201
- }
202
- else if (this.todosText !== undefined) {
203
- this.todosDoc.removeChild(this.todosText);
204
- this.todosText = undefined;
205
- }
206
352
  const running = this.liveAgents.filter(view => view.outcome === undefined);
207
353
  if (running.length > 0) {
208
354
  const lines = running.map((view, i) => this.compactAgentLine(view, i === running.length - 1));
@@ -222,59 +368,18 @@ export class LiveWidgets {
222
368
  }
223
369
  this.requestRender();
224
370
  }
225
- /** One bordered panel: top border + header row + body rows + bottom border. */
226
- boxedPanel(headerInner, bodyLines) {
227
- const boxWidth = panelBoxWidth(process.stdout.columns);
228
- const borderFg = ansiFg(this.theme.palette.borderDefault);
229
- const top = panelTopBorder(boxWidth, borderFg);
230
- const header = borderedRow(boxWidth, borderFg, clipPanelLine(headerInner));
231
- // 'all' body: every line kept verbatim (each already clipped to one
232
- // physical row), bottom border appended.
233
- const body = panelBodyText(bodyLines, boxWidth, borderFg, 'all');
234
- return `${top}\n${header}\n${body}`;
235
- }
236
- /** `● Todos (done/total)`, styled for the panel header row. */
237
- todosHeader() {
238
- const done = this.liveTodos.filter(todo => todo.status === 'completed').length;
239
- return ansiFg(this.theme.palette.accent) + '● Todos ' + RESET
240
- + ansiFg(this.theme.palette.fgSubtle) + `(${done}/${this.liveTodos.length})` + RESET;
241
- }
242
- /**
243
- * Tree-style todo body lines: `├─`/`└─` connectors with `☐`/`◐`/`☑` status
244
- * icons. Content is model-controlled: clipped BEFORE styling to the boxed
245
- * row's inner budget minus the tree chrome (connector 3 cols + icon+space
246
- * 2 cols) — see clipPanelLine's contract.
247
- */
248
- todoLines() {
249
- const innerCap = panelBoxWidth(process.stdout.columns) - 4;
250
- const lines = [];
251
- const total = this.liveTodos.length;
252
- for (let i = 0; i < total; i++) {
253
- const todo = this.liveTodos[i];
254
- const content = clipToWidth(todo.content, Math.max(10, innerCap - 5));
255
- const connector = ansiFg(this.theme.palette.fgSubtle) + (i === total - 1 ? '└─ ' : '├─ ') + RESET;
256
- const statusStyled = todo.status === 'completed'
257
- ? this.theme.chat.todoDone(content)
258
- : todo.status === 'in_progress'
259
- ? ansiFg(this.theme.palette.attention) + `◐ ${content}` + RESET
260
- : this.theme.chat.todoOpen(content);
261
- lines.push(connector + statusStyled);
262
- }
263
- return lines;
264
- }
265
371
  /**
266
372
  * One compact running-agent line for the last-request area, todo-style:
267
373
  * `├─ `/`└─ ` connector (same column as the todo rows and the request
268
- * ` ● `) + spinner + the agent NAME (`view.label`, matching the boxed
269
- * panel's main line) + the exact meta that main line showed (`↻retries≤max`,
270
- * compact `tokens[/contextWindow]`, elapsed) + the child's latest output
271
- * line when one exists (` · <tail>`, so the user sees it is alive). NO box
272
- * chrome, NO provider — the name is the prominent element; the last running
273
- * agent closes the list with `└─ `. The label is the only unbounded field;
274
- * it is clipped against a budget measured from the terminal width so the
275
- * whole plain line (prefix included) fits, then the assembled plain line is
276
- * clipped to the terminal width BEFORE any ANSI is applied (clipToWidth
277
- * counts SGR fragments as visible columns — style last).
374
+ * ` ● `) + spinner + the agent NAME (`view.label`) + the exact meta the
375
+ * boxed board showed (`↻retries≤max`, compact `tokens[/contextWindow]`,
376
+ * elapsed) + the child's latest CONTENT line — live-refreshed assistant
377
+ * text/reasoning, NEVER a tool name — as the ` · <tail>` suffix. NO box
378
+ * chrome, NO provider. Layout against the terminal width: the name caps at
379
+ * 40% of the space the meta leaves; the tail takes EVERYTHING else and is
380
+ * truncated at the right edge (single row, never wrapped). The assembled
381
+ * plain line is clipped to the terminal width BEFORE any ANSI is applied
382
+ * (clipToWidth counts SGR fragments as visible columns — style last).
278
383
  */
279
384
  compactAgentLine(view, isLast) {
280
385
  // Todo-style tree connector: `├─ ` for non-final rows, `└─ ` for the last
@@ -295,46 +400,37 @@ export class LiveWidgets {
295
400
  }
296
401
  const elapsed = (Date.now() - view.startedAt) / 1000;
297
402
  metaParts.push(`${elapsed.toFixed(1)}s`);
298
- let metaPlain = ' · ' + metaParts.join(' · ');
299
- // Tail: the child's latest visible output line, appended after the elapsed
300
- // column so the user knows it is alive. Budget ≤30% of the terminal width
301
- // (clamped 20..60 cols); when the folded line is wider, clip to
302
- // tailBudget-2 and end with `..` (clipToWidth's own `…` is stripped).
303
- const lastLine = view.lastLine;
304
- if (lastLine !== undefined && lastLine !== '') {
305
- const folded = lastLine.replace(/\s+/g, ' ').trim();
306
- if (folded !== '') {
307
- const tailBudget = Math.min(60, Math.max(20, Math.floor(width * 0.3)));
308
- if (visibleWidth(folded) > tailBudget) {
309
- const clipped = clipToWidth(folded, tailBudget - 2).replace(/…$/, '');
310
- metaPlain += ` · ${clipped}..`;
311
- }
312
- else {
313
- metaPlain += ` · ${folded}`;
314
- }
315
- }
316
- }
403
+ const metaPlain = ' · ' + metaParts.join(' · ');
317
404
  // Defensive: never render an empty name — fall back to `subagent`.
318
405
  const rawLabel = clipPanelLine(view.label, 0).replace(/\r/g, '').trim();
319
406
  const namePlain = rawLabel === ''
320
407
  ? 'subagent'
321
408
  : rawLabel;
322
409
  // Fixed chrome: prefix (3) + spinner (1) + following space (1) + a safety
323
- // column. The label takes the remainder of the width budget after meta.
410
+ // column. The name caps at 40% of what the meta leaves; the tail gets the
411
+ // remainder of the width budget.
324
412
  const fixed = visibleWidth(PREFIX) + 1 + 1 + 1;
325
- const nameBudget = width - fixed - visibleWidth(metaPlain);
326
- const nameClipped = clipToWidth(namePlain, Math.max(0, nameBudget));
413
+ const avail = width - fixed - visibleWidth(metaPlain);
414
+ const nameCap = Math.max(10, Math.floor(avail * 0.4));
415
+ const nameClipped = clipToWidth(namePlain, Math.max(0, nameCap));
416
+ const tailBudget = avail - visibleWidth(nameClipped) - 3;
417
+ let tailText = '';
418
+ const folded = view.lastLine === undefined ? '' : view.lastLine.replace(/\s+/g, ' ').trim();
419
+ if (folded !== '' && tailBudget >= 4) {
420
+ tailText = ` · ${clipToWidth(folded, tailBudget - 3)}`;
421
+ }
327
422
  // The full PLAIN line, clipped to the terminal width BEFORE styling.
328
- const plain = PREFIX + glyph + ' ' + nameClipped + metaPlain;
423
+ const plain = PREFIX + glyph + ' ' + nameClipped + metaPlain + tailText;
329
424
  const clipped = clipToWidth(plain, width);
330
425
  // Style segments from the (clipped, guaranteed-identical-when-it-fits)
331
426
  // plain pieces: connector subtle, spinner muted, NAME default (prominent),
332
- // meta (incl. the tail) subtle.
427
+ // meta subtle, content tail muted (the live signal the user watches).
333
428
  const connector = ansiFg(this.theme.palette.fgSubtle) + PREFIX + RESET;
334
429
  const spinner = ansiFg(this.theme.palette.fgMuted) + glyph + RESET;
335
430
  const metaStyled = ansiFg(this.theme.palette.fgSubtle) + metaPlain + RESET;
431
+ const tailStyled = ansiFg(this.theme.palette.fgMuted) + tailText + RESET;
336
432
  const nameStyled = ansiFg(this.theme.palette.fgDefault) + nameClipped + RESET;
337
- const base = connector + spinner + ' ' + nameStyled + metaStyled;
433
+ const base = connector + spinner + ' ' + nameStyled + metaStyled + tailStyled;
338
434
  // If clipping truncated the plain line (pathological meta), re-clip the
339
435
  // assembled styled line's visible width too; otherwise base is exact.
340
436
  if (visibleWidth(clipped) < visibleWidth(plain)) {
@@ -1 +1 @@
1
- {"version":3,"file":"live-widgets.js","sourceRoot":"","sources":["../src/live-widgets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"live-widgets.js","sourceRoot":"","sources":["../src/live-widgets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,SAAS,EAAE,IAAI,EAAkB,MAAM,wBAAwB,CAAA;AAExE,OAAO,EACL,oBAAoB,EACpB,UAAU,EACV,SAAS,EACT,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,cAAc,GACf,MAAM,eAAe,CAAA;AAGtB,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAoB,MAAM,aAAa,CAAA;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAiB,MAAM,kBAAkB,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAErD,yEAAyE;AACzE,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAA;AAChC,qEAAqE;AACrE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAA;AAE/F;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,CAAS;IAClC,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC;QACnB,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAA;QACvB,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAA;IACjF,CAAC;IACD,IAAI,CAAC,IAAI,KAAK;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAA;IAClD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;AAClB,CAAC;AAED,oFAAoF;AACpF,MAAM,YAAY,GAA2B;IAC3C,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE;IACpD,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;IACvC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE;CAC9C,CAAA;AAED,kEAAkE;AAClE,SAAS,QAAQ,CAAC,MAAc;IAC9B,IAAI,MAAM,KAAK,WAAW;QAAE,OAAO,GAAG,CAAA;IACtC,IAAI,MAAM,KAAK,aAAa;QAAE,OAAO,GAAG,CAAA;IACxC,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,UAAU;IACb,KAAK,GAAmD,EAAE,CAAA;IACjD,QAAQ,CAAgB;IAEzC,YAAY,QAAwB;QAClC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAED,UAAU,KAA0E,CAAC;IAErF,sEAAsE;IACtE,QAAQ,CAAC,KAAqD;QAC5D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAED,MAAM,CAAC,KAAa;QAClB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC;YAAE,OAAO,EAAE,CAAA;QAC/F,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;QAC7B,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAA;QACvB,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;QACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAA;QACxC,MAAM,UAAU,GAAG,QAAQ,GAAG,CAAC,CAAA;QAC/B,MAAM,SAAS,GAAG,YAAY,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;QACxD,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,KAAK,CAAA;QAElE,6EAA6E;QAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM,CAAA;QAC1E,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,UAAU,GAAG,KAAK;cACrD,MAAM,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;QAC5C,MAAM,GAAG,GAAG,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAA;QAE9F,mEAAmE;QACnE,GAAG,CAAC,IAAI,CAAC,WAAW,CAClB,QAAQ,EACR,QAAQ,EACR,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CACnG,CAAC,CAAA;QAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAC1B,wEAAwE;YACxE,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;YAC7D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;YAC7D,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;YACvD,uEAAuE;YACvE,mEAAmE;YACnE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,KAAK,WAAW;gBACvC,CAAC,CAAC,CAAC,CAAC,OAAO;gBACX,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;YAC5D,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,KAAK,CAAA;YAClE,GAAG,CAAC,IAAI,CAAC,WAAW,CAClB,QAAQ,EACR,QAAQ,EACR,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,SAAS,GAAG,WAAW,CAAC,WAAW,CAAC,CAC3F,CAAC,CAAA;QACJ,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;QAC/C,OAAO,GAAG,CAAA;IACZ,CAAC;CACF;AAED,8EAA8E;AAC9E,SAAS,OAAO,CAAC,OAAe,EAAE,KAAa;IAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;IAClE,OAAO,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AAC7B,CAAC;AAED,MAAM,OAAO,WAAW;IACL,QAAQ,CAAW;IACnB,WAAW,CAAW;IAC/B,KAAK,CAAU;IACN,aAAa,CAAY;IAC1C,gEAAgE;IAC/C,UAAU,CAAY;IACvC,sEAAsE;IACrD,UAAU,CAAY;IACtB,SAAS,CAAW;IACrC,2DAA2D;IACnD,UAAU,GAAyB,EAAE,CAAA;IAC7C,2EAA2E;IACnE,UAAU,CAAkB;IACpC,6EAA6E;IACrE,WAAW,CAAkB;IACrC,4EAA4E;IACpE,cAAc,CAAoB;IAC1C,wEAAwE;IAChE,YAAY,GAAG,CAAC,CAAA;IAExB;;;;;;;OAOG;IACH,YACE,QAAmB,EACnB,WAAsB,EACtB,KAAe,EACf,aAAyB,EACzB,cAA2B,oBAAoB;QAE/C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QAClC,oEAAoE;QACpE,wEAAwE;QACxE,uEAAuE;QACvE,oDAAoD;QACpD,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAClD,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAClD,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAChD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;QACtC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;QACrC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAClC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAClC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACnC,CAAC;IAED;;;;;;OAMG;IACH,cAAc,CAAC,IAAwB;QACrC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC7C,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;gBACnC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBAC9C,IAAI,CAAC,WAAW,GAAG,SAAS,CAAA;gBAC5B,IAAI,CAAC,cAAc,GAAG,SAAS,CAAA;gBAC/B,IAAI,CAAC,aAAa,EAAE,CAAA;YACtB,CAAC;YACD,OAAM;QACR,CAAC;QACD,yEAAyE;QACzE,uEAAuE;QACvE,kCAAkC;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QAC/D,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QACzC,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;YACrC,sEAAsE;YACtE,sEAAsE;YACtE,mCAAmC;YACnC,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;gBAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAChF,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YAC3C,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;gBAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC/E,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAA;QAC7B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,MAAM,OAAO,EAAE,GAAG,KAAK,CAAC,CAAA;QACtF,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC;IAED,mEAAmE;IACnE,WAAW,CAAC,KAAqD;QAC/D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC/B,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC;IAED;;;;;;;;;;;OAWG;IACH,UAAU,CAAC,KAAmB;QAC5B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAA;gBAC9B,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;oBACrC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;wBAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;wBAChC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;oBACvB,CAAC;gBACH,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;oBACpE,gEAAgE;oBAChE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAA;oBACtB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;gBACvB,CAAC;gBACD,MAAK;YACP,CAAC;YACD,KAAK,mBAAmB;gBACtB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAA;gBACtB,MAAK;YACP,KAAK,WAAW;gBACd,kEAAkE;gBAClE,qEAAqE;gBACrE,oEAAoE;gBACpE,oEAAoE;gBACpE,yCAAyC;gBACzC,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1C,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;gBACvB,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;gBAChF,CAAC;gBACD,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAA;gBACtB,MAAK;YACP,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;gBAC3C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,IAAI,EAAE,EAAE;oBAC7C,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS;wBACnC,CAAC,CAAC,SAAS;wBACX,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;oBAChE,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;iBAC5F,CAAC,CAAA;gBACF,MAAK;YACP,CAAC;YACD,KAAK,cAAc,CAAC;YACpB,KAAK,UAAU;gBACb,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAA;gBACtB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;gBACrB,MAAK;YACP;gBACE,MAAK;QACT,CAAC;QACD,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC;IAED,6DAA6D;IAC7D,YAAY,CAAC,MAA4B;QACvC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAA;QACxB,IAAI,CAAC,OAAO,EAAE,CAAA;IAChB,CAAC;IAED;;;;;OAKG;IACH,QAAQ;QACN,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAA;QAC3E,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAA;QAC5E,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU;YAAE,OAAM;QACtC,IAAI,UAAU;YAAE,IAAI,CAAC,YAAY,IAAI,CAAC,CAAA;QACtC,IAAI,CAAC,OAAO,EAAE,CAAA;IAChB,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,WAAwB;QACrC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;QACtC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;QACrC,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC;IAED;;iFAE6E;IAC7E,QAAQ,CAAC,KAAe;QACtB,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK;YAAE,OAAM;QAChC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,OAAO,EAAE,CAAA;QACd,4EAA4E;QAC5E,4DAA4D;QAC5D,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACxE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,GAAG,KAAK,CAAC,CAAA;QACpG,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK;QACH,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;QACpB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAA;QACrB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAA;QACtB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;QACrB,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAC7C,IAAI,CAAC,UAAU,GAAG,SAAS,CAAA;QAC7B,CAAC;QACD,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC;IAED;;;;;;;OAOG;IACK,OAAO;QACb,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAA;QAC1E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;YAC7F,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC7B,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBAClC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YAC/B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;gBACtC,wEAAwE;gBACxE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAC5C,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACzC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAC7C,IAAI,CAAC,UAAU,GAAG,SAAS,CAAA;QAC7B,CAAC;QACD,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC;IAED;;;;;;;;;;;;OAYG;IACK,gBAAgB,CAAC,IAAe,EAAE,MAAe;QACvD,0EAA0E;QAC1E,oEAAoE;QACpE,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;QACvD,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,YAAY,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAA;QACnF,MAAM,SAAS,GAAa,EAAE,CAAA;QAC9B,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC;YACtB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;QAC5G,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,qEAAqE;YACrE,MAAM,GAAG,GAAG,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC;gBAC1E,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;gBACtC,CAAC,CAAC,EAAE,CAAA;YACN,SAAS,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC,CAAA;QACpD,CAAC;QACD,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAA;QACpD,SAAS,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QACxC,MAAM,SAAS,GAAG,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC/C,mEAAmE;QACnE,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;QACvE,MAAM,SAAS,GAAG,QAAQ,KAAK,EAAE;YAC/B,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,QAAQ,CAAA;QACZ,0EAA0E;QAC1E,0EAA0E;QAC1E,iCAAiC;QACjC,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;QACrD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAA;QACrD,MAAM,WAAW,GAAG,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;QAChE,MAAM,UAAU,GAAG,KAAK,GAAG,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QACxD,IAAI,QAAQ,GAAG,EAAE,CAAA;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;QAC3F,IAAI,MAAM,KAAK,EAAE,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;YACrC,QAAQ,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,CAAC,CAAC,EAAE,CAAA;QACxD,CAAC;QACD,qEAAqE;QACrE,MAAM,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,GAAG,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAA;QACvE,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QACzC,uEAAuE;QACvE,2EAA2E;QAC3E,sEAAsE;QACtE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,GAAG,KAAK,CAAA;QACtE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,GAAG,KAAK,CAAA;QAClE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,SAAS,GAAG,KAAK,CAAA;QAC1E,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,QAAQ,GAAG,KAAK,CAAA;QACxE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,WAAW,GAAG,KAAK,CAAA;QAC7E,MAAM,IAAI,GAAG,SAAS,GAAG,OAAO,GAAG,GAAG,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,CAAA;QAC7E,wEAAwE;QACxE,sEAAsE;QACtE,IAAI,YAAY,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YAChD,wEAAwE;YACxE,sDAAsD;YACtD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,KAAK,CAAA;QAC7D,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}