@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.
package/lib/messages.js CHANGED
@@ -2,40 +2,27 @@
2
2
  * Transcript rendering: turns dsh session events into pi-tui components.
3
3
  *
4
4
  * Incremental by design (pi-turbo lesson): every event does O(event) work —
5
- * streaming deltas update one Text in place, tool cards are keyed by callId,
6
- * and nothing ever re-scans the session log.
5
+ * streaming deltas update one Text in place, and nothing ever re-scans the
6
+ * session log.
7
7
  *
8
8
  * Streaming strategy: during `assistant/chunk` the raw text grows in a plain
9
9
  * Text component; on the assembled `assistant/message` the streaming component
10
10
  * is replaced by proper Markdown rendering. This keeps per-token cost at
11
11
  * O(accumulated text) instead of re-parsing markdown on every delta.
12
12
  *
13
- * Panels: think blocks and tool cards render as boxed rows — a full box
14
- * border (top border + header row + body rows + bottom border). The
15
- * configured height counts the DISPLAYED rows — the header line plus the
16
- * content rows ('5' shows five rows; the two box borders add two more
17
- * physical rows, so a '5' box is seven terminal rows tall). The height is
18
- * configurable through the `dsh-tui` settings namespace ('5'/'7'/'10'
19
- * displayed rows, or 'all' to print the full body without a row cap). The
20
- * transcript doc is a plain Container
21
- * inside the outer ScrollView, so pi-tui 0.84.2 never lays out nested
22
- * components (a Container without a layout node renders by simple
23
- * concatenation — verified in dist/layout.js) and an inner ScrollView can
24
- * never obtain a viewport. The body is therefore a padded tail of the last
25
- * body-row budget (or every row, in 'all' mode) rather than an internal
26
- * scroll; every row (borders included) carries the panel background. In
27
- * 'all' mode the unbounded content stays bounded on screen: a streaming
28
- * reasoning panel boxes only a STREAMING_TAIL_LINES live tail while chunks
29
- * are in flight (the assembled message renders the full body), and a settled
30
- * tool card keeps at most ALL_TOOL_RESULT_LINES rows with a drop marker.
13
+ * Chat-clean transcript: think blocks and tool calls do NOT render here —
14
+ * they live in the fixed ThinkPanel/ToolPanel above the chat input
15
+ * (src/activity.ts, mounted by live-widgets.ts). The transcript carries the
16
+ * conversation only: user bubbles, streamed/final assistant text, turn-end
17
+ * notices, echoes. Todos likewise render in the live widget.
31
18
  *
32
19
  * Theme hot-switch: every applied operation is appended to `replay` (O(1)
33
20
  * per event — never a render-path scan). `setTheme` is an explicit user
34
21
  * action, so it may do a one-off full rebuild: clear the doc and re-apply
35
- * the buffered operations against the new theme. Streaming and tool cards
36
- * rebuild exactly as they were applied, so an in-flight stream simply
37
- * continues `setText` on its rebuilt component. (The live Todos/Agents
38
- * widgets live outside the transcript — see live-widgets.ts.)
22
+ * the buffered operations against the new theme. Streaming rebuilds exactly
23
+ * as it was applied, so an in-flight stream simply continues `setText` on
24
+ * its rebuilt component. (The live widgets live outside the transcript —
25
+ * see live-widgets.ts.)
39
26
  *
40
27
  * Welcome banner: the first replay op, pushed at construction (the doc is
41
28
  * cleared first, replacing tui.ts's startup placeholder). It stays at the
@@ -44,187 +31,17 @@
44
31
  */
45
32
  import { Container, Markdown, Spacer, Text } from '@earendil-works/pi-tui';
46
33
  import { ansiFg, RESET } from "./theme/index.js";
47
- import { clipToWidth, visibleWidth } from "./text.js";
34
+ import { clipToWidth } from "./text.js";
48
35
  import { buildWelcomeBanner } from "./welcome.js";
49
36
  import { formatDailyQuote, pickDailyQuote } from "./quotes.js";
50
- /**
51
- * Default displayed height of a think/tool panel: the header line plus the
52
- * content rows. The single default for every '5' fallback (the renderer
53
- * constructor, the settings schema default/entry/narrowing) — other heights
54
- * are set through the `panelHeight` setting.
55
- */
56
- export const DEFAULT_PANEL_HEIGHT = '5';
57
- /** Content rows inside the default panel (DEFAULT_PANEL_HEIGHT displayed rows − the header row). */
58
- const PANEL_BODY_LINES = Number(DEFAULT_PANEL_HEIGHT) - 1;
59
- /**
60
- * 'all' streaming cap: while a reasoning stream is in flight, the panel boxes
61
- * only this many trailing rows. Without the cap every chunk would re-box the
62
- * whole accumulated body — O(accumulated) per chunk, O(n²) over the stream
63
- * (3000 lines ≈ 22s vs 155ms at a fixed height). The live tail is transient:
64
- * the assembled `assistant/message` reasoning block (and the replay rebuilds)
65
- * render the full body.
66
- */
67
- export const STREAMING_TAIL_LINES = 200;
68
- /**
69
- * 'all' settle cap: a settled tool card keeps at most this many body rows,
70
- * with a `… (+N lines)` marker for the drop. The unlimited body would
71
- * otherwise hitch the frame and balloon memory on a 50k-line tool result.
72
- */
73
- export const ALL_TOOL_RESULT_LINES = 2000;
74
- /** Thinking panel header row content (icon + label), 11 visible columns. */
75
- const THINKING_HEADER = '💭 thinking';
76
- /**
77
- * Fallback terminal columns when the real width is unknown (non-TTY
78
- * contexts, e.g. tests): conservative so no sane terminal wraps.
79
- */
80
- const PANEL_LINE_CAP_FALLBACK = 200;
81
- /**
82
- * Terminal columns a panel body row's CONTENT may occupy so the whole
83
- * bordered row renders on exactly one physical line: the body Text wraps at
84
- * `width - paddingX*2` (paddingX = 1), every row carries 4 columns of box
85
- * chrome (`│ ` … ` │`), and tool rows add a 2-column indent — hence the -6
86
- * (think) and -8 (tool, indent = 2) headroom.
87
- */
88
- export function panelLineCap(columns, indent = 0) {
89
- return Math.max(1, (columns === undefined ? PANEL_LINE_CAP_FALLBACK : columns) - 6 - indent);
90
- }
91
- /** Full visible width of one bordered panel row, box chrome included. */
92
- export function panelBoxWidth(columns) {
93
- return panelLineCap(columns) + 4;
94
- }
95
- /**
96
- * One bordered panel row of exactly `boxWidth` visible columns: side borders
97
- * in `borderFg`, `inner` (already styled, already clipped) left-aligned and
98
- * padded with spaces to the full box width. No trailing RESET — the panel bg
99
- * function terminates the row and paints the whole width.
100
- */
101
- function borderedRow(boxWidth, borderFg, inner) {
102
- const pad = Math.max(0, boxWidth - 4 - visibleWidth(inner));
103
- return `${borderFg}│ ${inner}${' '.repeat(pad)}${borderFg} │`;
104
- }
105
- /** Top border line (`┌─…─┐`), `boxWidth` columns wide, in `borderFg`. */
106
- function panelTopBorder(boxWidth, borderFg) {
107
- return `${borderFg}┌${'─'.repeat(Math.max(0, boxWidth - 2))}┐`;
108
- }
109
- /** Bottom border line (`└─…─┘`), `boxWidth` columns wide, in `borderFg`. */
110
- function panelBottomBorder(boxWidth, borderFg) {
111
- return `${borderFg}└${'─'.repeat(Math.max(0, boxWidth - 2))}┘`;
112
- }
113
- /**
114
- * Clip an unstyled line to one physical panel row. Must run BEFORE styling:
115
- * clipToWidth counts per grapheme, so the ASCII fragments of an SGR code
116
- * would count as visible columns (verified against pi-tui 0.84.2) — clipping
117
- * plain text first, then applying ANSI, keeps the accounting exact.
118
- * `indent` is the leading content indent the row carries (2 for tool rows).
119
- * Carriage returns are stripped first: pi-tui's wrapTextWithAnsi splits on
120
- * `/\r\n|\r|\n/`, so a bare \r (progress bars, CRLF tool output) would break
121
- * the fixed panel rows just like a wrap would — the panel line is one row,
122
- * not a line record.
123
- */
124
- export function clipPanelLine(text, indent = 0) {
125
- return clipToWidth(text.replace(/\r/g, ''), panelLineCap(process.stdout.columns, indent));
126
- }
127
- /**
128
- * Compose the bordered body Text content (boxed rows plus the bottom border)
129
- * from already-styled, already-clipped lines: keep the tail — newest rows
130
- * win — pad short content with empty boxed rows, then append the bottom
131
- * border. `bodyRows` is the panel's body-row budget (default PANEL_BODY_LINES)
132
- * or 'all': with 'all' every line is kept verbatim, nothing is padded, and
133
- * only the bottom border is appended (the box stays closed). Every row is
134
- * one `boxWidth`-wide boxed line (`│ ` … ` │`, see borderedRow);
135
- * `borderFg` is the panelBorder SGR prefix (no trailing RESET — the panel
136
- * bg function terminates the row). Pad rows carry the box characters, so
137
- * they survive Text's `text.trim() === ''` fast path, which would otherwise
138
- * drop a body of only empty rows; the border SGR does not touch the
139
- * background, so the panel bg function still paints the full row width.
140
- * Callers clip each line with `clipPanelLine` BEFORE styling — otherwise a
141
- * styled line that outgrows `width - paddingX*2` wraps and the panel
142
- * exceeds its configured rows.
143
- */
144
- export function panelBodyText(lines, boxWidth, borderFg, bodyRows = PANEL_BODY_LINES) {
145
- const visible = bodyRows === 'all'
146
- ? [...lines]
147
- : lines.length > bodyRows ? lines.slice(-bodyRows) : [...lines];
148
- if (bodyRows !== 'all') {
149
- while (visible.length < bodyRows)
150
- visible.push('');
151
- }
152
- return [...visible.map(line => borderedRow(boxWidth, borderFg, line)), panelBottomBorder(boxWidth, borderFg)].join('\n');
153
- }
154
- /** First text content of a tool result, raw lines. */
155
- function resultTextLines(content) {
156
- for (const block of content) {
157
- if (block.type === 'text' && block.text !== undefined) {
158
- return block.text.replace(/\s+$/u, '').split('\n');
159
- }
160
- }
161
- return [];
162
- }
163
- /**
164
- * The tool header's subject word: the file path for read/write-style tools,
165
- * the command's first word for cli-style tools ('git', 'python') — the first
166
- * whitespace token of the highest-priority string argument (same key
167
- * priority as callDetail's summary). '' when the arguments carry no usable
168
- * string (the header then shows the bare tool name).
169
- */
170
- export function toolSubject(rawArguments) {
171
- const firstWord = (value) => value.trim().split(/\s+/u)[0] ?? '';
172
- try {
173
- const parsed = JSON.parse(rawArguments);
174
- for (const key of ['command', 'file_path', 'path', 'query', 'url', 'pattern', 'description']) {
175
- const value = parsed[key];
176
- if (typeof value === 'string' && value.trim() !== '')
177
- return firstWord(value);
178
- }
179
- for (const value of Object.values(parsed)) {
180
- if (typeof value === 'string' && value.trim() !== '')
181
- return firstWord(value);
182
- }
183
- }
184
- catch {
185
- // Model-controlled rawArguments; non-JSON yields no subject.
186
- }
187
- return '';
188
- }
189
- /** One-line summary of the call arguments, per common tool shape. */
190
- function callDetail(rawArguments, limit = 120) {
191
- try {
192
- const parsed = JSON.parse(rawArguments);
193
- const parts = [];
194
- if (typeof parsed.command === 'string')
195
- parts.push(`$ ${parsed.command}`);
196
- if (typeof parsed.file_path === 'string')
197
- parts.push(parsed.file_path);
198
- if (typeof parsed.path === 'string' && parts.length === 0)
199
- parts.push(parsed.path);
200
- if (typeof parsed.pattern === 'string')
201
- parts.push(`pattern: ${parsed.pattern}`);
202
- if (typeof parsed.query === 'string')
203
- parts.push(`query: ${parsed.query}`);
204
- if (typeof parsed.url === 'string')
205
- parts.push(parsed.url);
206
- if (typeof parsed.description === 'string' && parts.length === 0)
207
- parts.push(parsed.description);
208
- if (parts.length === 0) {
209
- const flat = rawArguments.replace(/\s+/g, ' ');
210
- parts.push(flat);
211
- }
212
- const joined = parts.join(' ').replace(/\n/g, ' ⏎ ');
213
- return clipToWidth(joined, limit);
214
- }
215
- catch {
216
- return '';
217
- }
218
- }
219
37
  export class TranscriptRenderer {
220
38
  doc;
221
39
  theme;
222
40
  requestRender;
223
- /** Configured panel height ('5'/'7'/'10' total rows, or 'all' = uncapped). */
224
- panelHeight;
225
41
  streaming;
226
- toolCards = new Map();
227
- /** Text of the prompt echoed locally on submit; the matching session event is deduped. */
42
+ /**
43
+ * Text of the prompt echoed locally on submit; the matching session event is deduped.
44
+ */
228
45
  lastEcho;
229
46
  /**
230
47
  * Append-only buffer of every applied operation (O(1) per event). The
@@ -238,11 +55,10 @@ export class TranscriptRenderer {
238
55
  * session rolls a new one (see quotes.ts).
239
56
  */
240
57
  dailyQuote = pickDailyQuote();
241
- constructor(doc, theme, requestRender, panelHeight = DEFAULT_PANEL_HEIGHT) {
58
+ constructor(doc, theme, requestRender) {
242
59
  this.doc = doc;
243
60
  this.theme = theme;
244
61
  this.requestRender = requestRender;
245
- this.panelHeight = panelHeight;
246
62
  // The welcome banner is the first operation: render it now (replacing the
247
63
  // startup placeholder line startTui added — the banner is the new startup
248
64
  // screen) and buffer it as the first replay op, so relayout/setTheme
@@ -251,26 +67,6 @@ export class TranscriptRenderer {
251
67
  this.doc.clear();
252
68
  this.renderWelcome();
253
69
  }
254
- /**
255
- * Content-row budget for the configured panel height: the displayed row
256
- * count minus the header row ('5' → 4 content rows), or 'all' when the
257
- * panel prints its full body. The box borders are not part of the budget.
258
- */
259
- panelBodyRows() {
260
- return this.panelHeight === 'all' ? 'all' : Number(this.panelHeight) - 1;
261
- }
262
- /**
263
- * Switch the configured panel height. Returns whether the height actually
264
- * changed — the settings watch sink relayouts only then; `relayout` is the
265
- * replay rebuild that repaints every panel (streaming, tool cards, settled
266
- * cards) at the new row budget.
267
- */
268
- setPanelHeight(panelHeight) {
269
- if (panelHeight === this.panelHeight)
270
- return false;
271
- this.panelHeight = panelHeight;
272
- return true;
273
- }
274
70
  applyEvent(event) {
275
71
  this.replay.push({ kind: 'event', event });
276
72
  switch (event.type) {
@@ -286,10 +82,9 @@ export class TranscriptRenderer {
286
82
  this.renderAssistantMessage(event);
287
83
  break;
288
84
  case 'tool/call':
289
- this.addToolCard(event.data.callId, event.data.name, event.data.arguments);
290
- break;
291
85
  case 'tool/result':
292
- this.settleToolCard(event);
86
+ // Tool activity renders in the fixed ToolPanel above the chat input
87
+ // (live-widgets.ts routes these); the transcript never grows blocks.
293
88
  break;
294
89
  case 'todo/write':
295
90
  // Todos render in the fixed live widget (LiveWidgets), not the
@@ -364,15 +159,13 @@ export class TranscriptRenderer {
364
159
  /**
365
160
  * Repaint the whole transcript at the current terminal width — the resize
366
161
  * counterpart of `setTheme`. On stdout `resize` pi-tui re-renders every
367
- * component with the new columns, but bordered panel rows were padded to
368
- * the OLD box width, so a narrowing terminal wraps every row and shatters
369
- * the fixed-height panels. Clear and re-apply the buffered operations
370
- * exactly like a theme switch: an in-flight stream keeps its accumulated
371
- * text (the replay rebuilds its Text and later chunks continue setText on
372
- * it), tool cards keep their settle state, todos reappear. No-op when the
373
- * replay is empty — that guards the doc emptied by /new (clear()), which
374
- * must stay empty until the next prompt: the welcome banner is the startup
375
- * screen of a TUI run and must not resurrect here.
162
+ * component with the new columns, but the welcome banner degrades by
163
+ * width, so clear and re-apply the buffered operations exactly like a
164
+ * theme switch: an in-flight stream keeps its accumulated text, todos
165
+ * reappear. No-op when the replay is empty — that guards the doc emptied
166
+ * by /new (clear()), which must stay empty until the next prompt: the
167
+ * welcome banner is the startup screen of a TUI run and must not
168
+ * resurrect here.
376
169
  */
377
170
  relayout() {
378
171
  if (this.replay.length === 0)
@@ -390,7 +183,6 @@ export class TranscriptRenderer {
390
183
  */
391
184
  clear() {
392
185
  this.streaming = undefined;
393
- this.toolCards.clear();
394
186
  this.lastEcho = undefined;
395
187
  this.replay.length = 0;
396
188
  this.doc.clear();
@@ -401,7 +193,7 @@ export class TranscriptRenderer {
401
193
  case 'welcome':
402
194
  // Mirror applyEvent's self-push: relayout/setTheme replay would
403
195
  // otherwise consume the welcome op on the first rebuild and freeze
404
- // the banner at that width (it is width-dependent since the pixel
196
+ // the banner at this width (it is width-dependent since the pixel
405
197
  // letters — a narrowing resize would degrade, a widening one never
406
198
  // restore, and later theme switches could not repaint it either).
407
199
  this.replay.push({ kind: 'welcome' });
@@ -489,36 +281,22 @@ export class TranscriptRenderer {
489
281
  }
490
282
  // ------------------------------------------------------------- streaming --
491
283
  applyChunk(turn, step, chunk) {
492
- if (chunk.type !== 'text-delta' && chunk.type !== 'reasoning-delta')
284
+ if (chunk.type !== 'text-delta')
493
285
  return;
494
286
  const delta = chunk.text ?? '';
495
287
  if (delta === '')
496
288
  return;
497
289
  if (this.streaming === undefined || this.streaming.turn !== turn || this.streaming.step !== step) {
498
290
  this.finalizeStreaming();
499
- this.streaming = { turn, step, text: '', reasoning: '' };
291
+ this.streaming = { turn, step, text: '' };
500
292
  }
501
293
  const state = this.streaming;
502
- if (chunk.type === 'text-delta') {
503
- if (state.textComponent === undefined) {
504
- state.textComponent = new Text('', 1, 0);
505
- this.doc.addChild(state.textComponent);
506
- }
507
- state.text += delta;
508
- state.textComponent.setText(ansiFg(this.theme.palette.fgDefault) + state.text + RESET);
509
- }
510
- else {
511
- if (state.reasoningPanel === undefined) {
512
- state.reasoningPanel = this.createThinkingPanel();
513
- this.doc.addChild(state.reasoningPanel.container);
514
- }
515
- state.reasoning += delta;
516
- // Live tail: replace only the body text of the existing panel — O(1),
517
- // never rebuild the block. In 'all' mode the body is the bounded
518
- // streaming tail (see STREAMING_TAIL_LINES), so per-chunk cost stays
519
- // O(tail), not O(accumulated).
520
- state.reasoningPanel.setBody(this.thinkingBody(state.reasoning, true));
294
+ if (state.textComponent === undefined) {
295
+ state.textComponent = new Text('', 1, 0);
296
+ this.doc.addChild(state.textComponent);
521
297
  }
298
+ state.text += delta;
299
+ state.textComponent.setText(ansiFg(this.theme.palette.fgDefault) + state.text + RESET);
522
300
  this.requestRender();
523
301
  }
524
302
  finalizeStreaming() {
@@ -528,87 +306,19 @@ export class TranscriptRenderer {
528
306
  this.streaming = undefined;
529
307
  if (state.textComponent !== undefined)
530
308
  this.doc.removeChild(state.textComponent);
531
- if (state.reasoningPanel !== undefined)
532
- this.doc.removeChild(state.reasoningPanel.container);
533
309
  }
534
310
  /** Keep streaming components as-is but detach state (user message arrived). */
535
311
  dropStreaming() {
536
312
  this.streaming = undefined;
537
313
  }
538
- // --------------------------------------------------------------- panels --
539
- /** Full box width and panelBorder SGR prefix for one panel, per current theme. */
540
- panelBox() {
541
- return {
542
- boxWidth: panelBoxWidth(process.stdout.columns),
543
- borderFg: ansiFg(this.theme.palette.panelBorder),
544
- };
545
- }
546
- /** Top border line plus bordered header row — the header Text's two lines. */
547
- panelTop(boxWidth, borderFg, headerInner) {
548
- return `${panelTopBorder(boxWidth, borderFg)}\n${borderedRow(boxWidth, borderFg, headerInner)}`;
549
- }
550
- /**
551
- * Thinking color style, italic-on. The style terminates with a targeted
552
- * italic-off (`\x1b[23m`) — NOT a full RESET: the panel bg function paints
553
- * the whole row width, and a `\x1b[0m` here would clear the background and
554
- * leave the row's right side unpainted. Without the italic-off the leak is
555
- * visible in the box chrome: wrapTextWithAnsi carries ANSI state across
556
- * lines within one Text, so the row's right border, the following body
557
- * rows and the bottom border would all render italic.
558
- */
559
- thinkStyle(text) {
560
- return `\x1b[3m${ansiFg(this.theme.palette.thinking)}${text}\x1b[23m`;
561
- }
562
- /**
563
- * Styled, boxed tail of a reasoning text at the configured height (bottom
564
- * border included). `streaming` marks the in-flight live path (per-chunk
565
- * setBody): 'all' then boxes only the bounded STREAMING_TAIL_LINES tail so
566
- * every chunk stays O(tail) — the full body renders once the assembled
567
- * `assistant/message` (and the replay rebuilds) call without the flag.
568
- * Fixed heights are already tail-bounded and behave identically either way.
569
- */
570
- thinkingBody(reasoning, streaming = false) {
571
- const { boxWidth, borderFg } = this.panelBox();
572
- const bodyRows = this.panelBodyRows();
573
- const lines = reasoning.trim().split('\n');
574
- // Tail slice before styling: lines dropped by the panel are never styled
575
- // (or clipped). 'all' keeps every line — except the transient streaming
576
- // tail. Clip BEFORE styling — see clipPanelLine's contract.
577
- let tail = bodyRows === 'all' ? lines : lines.slice(-bodyRows);
578
- if (bodyRows === 'all' && streaming && lines.length > STREAMING_TAIL_LINES) {
579
- tail = tail.slice(-STREAMING_TAIL_LINES);
580
- }
581
- return panelBodyText(tail.map(line => this.thinkStyle(clipPanelLine(line))), boxWidth, borderFg, bodyRows);
582
- }
583
- /**
584
- * Build the thinking panel (default 5 rows, configurable height): top
585
- * border + header row + body rows + bottom border, all on the thinking
586
- * panel background.
587
- * Header icon: '⟡' (U+27E1) renders as a tofu box on the user's terminal;
588
- * emoji render fine there (footer ⚙✔✘⏹ all verified), so '💭' is used.
589
- * The fixed header text is clipped at the plain-text stage like every
590
- * other panel line — below 17 terminal columns it would otherwise outgrow
591
- * the header row's budget and wrap, breaking the panel shape.
592
- */
593
- createThinkingPanel() {
594
- const { boxWidth, borderFg } = this.panelBox();
595
- const header = new Text(this.panelTop(boxWidth, borderFg, this.thinkStyle(clipPanelLine(THINKING_HEADER))), 1, 0, this.theme.chat.thinkingPanelBg);
596
- const body = new Text('', 1, 0, this.theme.chat.thinkingPanelBg);
597
- const container = new Container();
598
- container.addChild(header);
599
- container.addChild(body);
600
- return {
601
- container,
602
- setBody: (text) => { body.setText(text); },
603
- };
604
- }
605
314
  // ------------------------------------------------------------- assistant --
606
315
  renderAssistantMessage(event) {
607
316
  const message = event.data.message;
608
317
  let rendered = false;
609
318
  // The whale speaks: the first text block is prefixed inline (`🐳: text`)
610
- // instead of taking its own avatar line — thinking panels and tool cards
611
- // do not carry it, and later text blocks render plain.
319
+ // instead of taking its own avatar line — later text blocks render plain.
320
+ // Reasoning blocks render nothing here: the fixed ThinkPanel already
321
+ // showed the burst live (activity.ts).
612
322
  let whaleShown = false;
613
323
  for (const block of message.content) {
614
324
  if (block.type === 'text' && block.text.trim() !== '') {
@@ -622,102 +332,12 @@ export class TranscriptRenderer {
622
332
  this.doc.addChild(md);
623
333
  rendered = true;
624
334
  }
625
- else if (block.type === 'reasoning' && block.text.trim() !== '') {
626
- // Final thinking: full reasoning through the same height-configurable
627
- // panel (fixed heights show the body-row tail, padded rows keep the
628
- // panel shape; 'all' prints every line).
629
- const panel = this.createThinkingPanel();
630
- panel.setBody(this.thinkingBody(block.text));
631
- this.doc.addChild(panel.container);
632
- rendered = true;
633
- }
634
- // tool-call blocks render through tool/call events — never duplicated here.
335
+ // tool-call blocks render through the fixed ToolPanel — never here.
635
336
  }
636
337
  if (rendered)
637
338
  this.doc.addChild(new Spacer(1));
638
339
  this.requestRender();
639
340
  }
640
- // ----------------------------------------------------------------- tools --
641
- /**
642
- * Styled tool header content (icon + name + subject, no box chrome, no
643
- * trailing RESET). The subject is the argument's first word — the file
644
- * path for read/write, the command for cli (see toolSubject) — so the
645
- * first line reads like "⚙ read src/welcome.ts" / "⚙ cli python".
646
- */
647
- toolHeader(status, name, subject) {
648
- const icon = status === 'pending' ? '⚙' : status === 'success' ? '✔' : '✘';
649
- const color = status === 'pending'
650
- ? this.theme.palette.fgMuted
651
- : status === 'success'
652
- ? this.theme.palette.success
653
- : this.theme.palette.danger;
654
- // Clip the model-controlled name+subject at the plain-text stage before
655
- // styling (indent 2 = the icon + space): an unbounded line would outgrow
656
- // the header row's budget and wrap, breaking the fixed-height panel.
657
- const clipped = clipPanelLine(subject === '' ? name : `${name} ${subject}`, 2);
658
- // No trailing RESET: the card bg function terminates the row so the
659
- // background covers the full header width.
660
- return ansiFg(color) + `${icon} ${clipped}`;
661
- }
662
- addToolCard(callId, name, rawArguments) {
663
- const { boxWidth, borderFg } = this.panelBox();
664
- const subject = toolSubject(rawArguments);
665
- const header = new Text(this.panelTop(boxWidth, borderFg, this.toolHeader('pending', name, subject)), 1, 0, this.theme.chat.toolPendingBg);
666
- const body = new Text('', 1, 0, this.theme.chat.toolBodyBg);
667
- const container = new Container();
668
- container.addChild(header);
669
- container.addChild(body);
670
- const detail = callDetail(rawArguments);
671
- // callDetail already clipped to 120; clip again to the panel cap so the
672
- // row never wraps on a narrow terminal.
673
- const detailLines = detail === '' ? [] : [ansiFg(this.theme.palette.fgMuted) + ` ${clipPanelLine(detail, 2)}`];
674
- body.setText(panelBodyText(detailLines, boxWidth, borderFg, this.panelBodyRows()));
675
- this.doc.addChild(container);
676
- this.toolCards.set(callId, { header, body, name, subject, detailLines });
677
- this.requestRender();
678
- }
679
- settleToolCard(event) {
680
- const block = event.data.message.content[0];
681
- const callId = block?.toolCallId ?? '';
682
- const card = this.toolCards.get(callId);
683
- if (card === undefined)
684
- return;
685
- this.toolCards.delete(callId);
686
- const { boxWidth, borderFg } = this.panelBox();
687
- const isError = event.data.error !== undefined || (block?.isError ?? false);
688
- // Rebuild both header Text lines: the top border (unchanged chrome) and
689
- // the swapped-status header row; the status bg fn repaints the border
690
- // row too, so the whole box top takes the success/error tint.
691
- card.header.setText(this.panelTop(boxWidth, borderFg, this.toolHeader(isError ? 'error' : 'success', card.name, card.subject)));
692
- card.header.setCustomBgFn(isError ? this.theme.chat.toolErrorBg : this.theme.chat.toolSuccessBg);
693
- const bodyLines = [...card.detailLines];
694
- if (event.data.error !== undefined) {
695
- bodyLines.push(ansiFg(this.theme.palette.danger)
696
- + ` ${clipPanelLine(`${event.data.error.name}: ${event.data.error.code}`, 2)}`);
697
- }
698
- if (block !== undefined) {
699
- for (const line of resultTextLines(block.content)) {
700
- bodyLines.push(ansiFg(this.theme.palette.fgMuted) + ` ${clipPanelLine(line, 2)}`);
701
- }
702
- }
703
- // Body keeps the tail at the configured row budget; when lines are
704
- // dropped, the first visible row reports the count so the newest result
705
- // lines stay on screen. 'all' keeps every line up to the ALL_TOOL_RESULT_LINES
706
- // cap (an unlimited body would hitch the frame and balloon memory on a
707
- // huge result) and shows the marker beyond it; under the cap there is no
708
- // marker. The marker is clipped at the plain-text stage (indent 2, like
709
- // every tool row): on a narrow terminal a 3-digit dropped count exceeds
710
- // the row's budget and would wrap, breaking the fixed-height panel.
711
- const bodyRows = this.panelBodyRows();
712
- const cap = bodyRows === 'all' ? ALL_TOOL_RESULT_LINES : bodyRows;
713
- if (bodyLines.length > cap) {
714
- const dropped = bodyLines.length - cap;
715
- bodyLines.splice(0, dropped);
716
- bodyLines[0] = ansiFg(this.theme.palette.fgSubtle) + clipPanelLine(` … (+${dropped} lines)`, 2);
717
- }
718
- card.body.setText(panelBodyText(bodyLines, boxWidth, borderFg, bodyRows));
719
- this.requestRender();
720
- }
721
341
  // -------------------------------------------------------------- turn end --
722
342
  renderTurnEnd(reason) {
723
343
  if (reason.kind === 'error') {
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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"}