codebase-cli 2.0.0-pre.4 → 2.0.0-pre.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/dist/agent/agent.js +43 -15
  2. package/dist/agent/agent.js.map +1 -1
  3. package/dist/agent/config.js +61 -20
  4. package/dist/agent/config.js.map +1 -1
  5. package/dist/agent/events.bench.js +84 -0
  6. package/dist/agent/events.bench.js.map +1 -0
  7. package/dist/agent/prompt-suggestion.js +141 -0
  8. package/dist/agent/prompt-suggestion.js.map +1 -0
  9. package/dist/agent/system-prompt.js +15 -0
  10. package/dist/agent/system-prompt.js.map +1 -1
  11. package/dist/app-server/protocol.js +7 -0
  12. package/dist/app-server/protocol.js.map +1 -0
  13. package/dist/app-server/server.js +241 -0
  14. package/dist/app-server/server.js.map +1 -0
  15. package/dist/auth/cli.js +1 -1
  16. package/dist/auth/cli.js.map +1 -1
  17. package/dist/auth/credentials.js +33 -2
  18. package/dist/auth/credentials.js.map +1 -1
  19. package/dist/auth/flow.js +145 -24
  20. package/dist/auth/flow.js.map +1 -1
  21. package/dist/auth/token-manager.js +73 -0
  22. package/dist/auth/token-manager.js.map +1 -0
  23. package/dist/cli.js +56 -1
  24. package/dist/cli.js.map +1 -1
  25. package/dist/commands/builtins.js +160 -14
  26. package/dist/commands/builtins.js.map +1 -1
  27. package/dist/commands/registry.js +46 -1
  28. package/dist/commands/registry.js.map +1 -1
  29. package/dist/compaction/monitor.js +38 -0
  30. package/dist/compaction/monitor.js.map +1 -0
  31. package/dist/config/types.js.map +1 -1
  32. package/dist/glue/client.js +12 -2
  33. package/dist/glue/client.js.map +1 -1
  34. package/dist/hooks/manager.js +8 -2
  35. package/dist/hooks/manager.js.map +1 -1
  36. package/dist/memory/store.js +2 -3
  37. package/dist/memory/store.js.map +1 -1
  38. package/dist/plan/run-flow.js +89 -0
  39. package/dist/plan/run-flow.js.map +1 -0
  40. package/dist/projects/cli.js +92 -0
  41. package/dist/projects/cli.js.map +1 -0
  42. package/dist/projects/client.js +120 -0
  43. package/dist/projects/client.js.map +1 -0
  44. package/dist/projects/types.js +2 -0
  45. package/dist/projects/types.js.map +1 -0
  46. package/dist/skills/platform-loader.js +133 -38
  47. package/dist/skills/platform-loader.js.map +1 -1
  48. package/dist/tools/__test__/mock-tool-context.js +31 -0
  49. package/dist/tools/__test__/mock-tool-context.js.map +1 -0
  50. package/dist/tools/file-state-cache.js.map +1 -1
  51. package/dist/tools/read-file.js +7 -2
  52. package/dist/tools/read-file.js.map +1 -1
  53. package/dist/ui/App.js +109 -110
  54. package/dist/ui/App.js.map +1 -1
  55. package/dist/ui/CompactionBanner.js +23 -0
  56. package/dist/ui/CompactionBanner.js.map +1 -0
  57. package/dist/ui/FirstRunSetup.js +66 -14
  58. package/dist/ui/FirstRunSetup.js.map +1 -1
  59. package/dist/ui/Input.js +370 -20
  60. package/dist/ui/Input.js.map +1 -1
  61. package/dist/ui/Markdown.js +286 -0
  62. package/dist/ui/Markdown.js.map +1 -0
  63. package/dist/ui/Message.js +110 -48
  64. package/dist/ui/Message.js.map +1 -1
  65. package/dist/ui/MessageList.js +100 -3
  66. package/dist/ui/MessageList.js.map +1 -1
  67. package/dist/ui/Permission.js +43 -20
  68. package/dist/ui/Permission.js.map +1 -1
  69. package/dist/ui/PixelC.js +25 -0
  70. package/dist/ui/PixelC.js.map +1 -0
  71. package/dist/ui/Status.js +267 -7
  72. package/dist/ui/Status.js.map +1 -1
  73. package/dist/ui/Throbber.js +11 -7
  74. package/dist/ui/Throbber.js.map +1 -1
  75. package/dist/ui/Welcome.js +59 -0
  76. package/dist/ui/Welcome.js.map +1 -0
  77. package/dist/ui/attachments.js +68 -0
  78. package/dist/ui/attachments.js.map +1 -0
  79. package/dist/ui/debug-input.js +44 -0
  80. package/dist/ui/debug-input.js.map +1 -0
  81. package/dist/ui/diff-summary.js +171 -0
  82. package/dist/ui/diff-summary.js.map +1 -0
  83. package/dist/ui/highlight.js +324 -0
  84. package/dist/ui/highlight.js.map +1 -0
  85. package/dist/ui/history-store.js +60 -0
  86. package/dist/ui/history-store.js.map +1 -0
  87. package/dist/ui/input-state.js +125 -1
  88. package/dist/ui/input-state.js.map +1 -1
  89. package/dist/ui/path-complete.js +102 -0
  90. package/dist/ui/path-complete.js.map +1 -0
  91. package/dist/ui/paths.js +41 -0
  92. package/dist/ui/paths.js.map +1 -0
  93. package/dist/ui/shell-escape.js +42 -0
  94. package/dist/ui/shell-escape.js.map +1 -0
  95. package/dist/ui/terminal-restore.js +83 -0
  96. package/dist/ui/terminal-restore.js.map +1 -0
  97. package/dist/ui/terminal-title.js +21 -0
  98. package/dist/ui/terminal-title.js.map +1 -0
  99. package/dist/ui/tool-call-line.js +83 -0
  100. package/dist/ui/tool-call-line.js.map +1 -0
  101. package/dist/ui/tool-labels.js +194 -0
  102. package/dist/ui/tool-labels.js.map +1 -0
  103. package/dist/ui/truncated-output.js +42 -0
  104. package/dist/ui/truncated-output.js.map +1 -0
  105. package/dist/ui/use-coalesced-agent-events.js +70 -0
  106. package/dist/ui/use-coalesced-agent-events.js.map +1 -0
  107. package/dist/ui/use-prompt-suggestion.js +52 -0
  108. package/dist/ui/use-prompt-suggestion.js.map +1 -0
  109. package/dist/ui/wrapped-lines.js +18 -0
  110. package/dist/ui/wrapped-lines.js.map +1 -0
  111. package/package.json +4 -1
@@ -0,0 +1,286 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ import { colorForKind, highlight, rulesFor } from "./highlight.js";
4
+ import { wrapText } from "./wrap.js";
5
+ export function Markdown({ text, width, keyPrefix }) {
6
+ const blocks = parseBlocks(text);
7
+ return (_jsx(Box, { flexDirection: "column", children: blocks.map((block, i) => (_jsx(MarkdownBlock, { block: block, width: width, keyPrefix: `${keyPrefix}-${i}` }, `${keyPrefix}-${i}-${block.kind}`))) }));
8
+ }
9
+ function MarkdownBlock({ block, width, keyPrefix }) {
10
+ if (block.kind === "blank") {
11
+ return _jsx(Text, { children: " " });
12
+ }
13
+ if (block.kind === "code-block") {
14
+ return _jsx(HighlightedCodeBlock, { text: block.text, lang: block.lang, keyPrefix: keyPrefix });
15
+ }
16
+ if (block.kind === "heading") {
17
+ return _jsx(SpanLine, { spans: block.spans, width: width, bold: true, color: "cyan", keyPrefix: keyPrefix });
18
+ }
19
+ if (block.kind === "list") {
20
+ return (_jsx(Box, { flexDirection: "column", children: block.items.map((item, i) => (_jsx(ListRow, { item: item, width: width, keyPrefix: `${keyPrefix}-li-${i}` }, `${keyPrefix}-li-${i}-${item.marker}`))) }));
21
+ }
22
+ if (block.kind === "quote") {
23
+ // Use SpanLine to preserve inline styling, but wrap in a left-bar gutter
24
+ // so block-quotes read like one in a terminal.
25
+ return (_jsxs(Box, { flexDirection: "row", children: [_jsx(Box, { marginRight: 1, children: _jsx(Text, { dimColor: true, children: "\u2502" }) }), _jsx(Box, { flexDirection: "column", flexGrow: 1, children: _jsx(SpanLine, { spans: block.spans, width: Math.max(20, width - 2), keyPrefix: keyPrefix, dim: true }) })] }));
26
+ }
27
+ return _jsx(SpanLine, { spans: block.spans, width: width, keyPrefix: keyPrefix });
28
+ }
29
+ /**
30
+ * Render a fenced code block with regex-based syntax highlighting if
31
+ * the language is recognized. Walks the token list and splits on \n so
32
+ * the per-line key invariant from the rest of the renderer holds.
33
+ * Unsupported languages render in the original cyan tone.
34
+ */
35
+ function HighlightedCodeBlock({ text, lang, keyPrefix, }) {
36
+ const rules = rulesFor(lang);
37
+ if (!rules) {
38
+ const lines = text.split("\n");
39
+ return (_jsx(Box, { flexDirection: "column", marginLeft: 2, children: lines.map((line, i) => (_jsx(Text, { color: "cyan", children: line.length === 0 ? " " : line }, `${keyPrefix}-cl-${i}-${line.slice(0, 12)}`))) }));
40
+ }
41
+ // Split the highlighted token stream into per-line rows so the
42
+ // columns stay aligned with the surrounding markdown and the keys
43
+ // stay stable.
44
+ const rows = [[]];
45
+ for (const tok of highlight(text, lang)) {
46
+ const color = colorForKind(tok.kind);
47
+ const parts = tok.text.split("\n");
48
+ for (let i = 0; i < parts.length; i++) {
49
+ if (i > 0)
50
+ rows.push([]);
51
+ if (parts[i].length > 0)
52
+ rows[rows.length - 1].push({ color, text: parts[i] });
53
+ }
54
+ }
55
+ return (_jsx(Box, { flexDirection: "column", marginLeft: 2, children: rows.map((row, i) => {
56
+ const previewKey = row
57
+ .map((c) => c.text)
58
+ .join("")
59
+ .slice(0, 12);
60
+ return (_jsx(Text, { children: row.length === 0
61
+ ? " "
62
+ : row.map((c, ci) => (
63
+ // biome-ignore lint/suspicious/noArrayIndexKey: pure presentational
64
+ _jsx(Text, { color: c.color, children: c.text }, `${keyPrefix}-hl-${i}-c${ci}`))) }, `${keyPrefix}-hl-${i}-${previewKey}`));
65
+ }) }));
66
+ }
67
+ /**
68
+ * One list-item row: marker in cyan (e.g. "•" / "1.") + the item body
69
+ * wrapped to the remaining width, with continuation lines indented
70
+ * under the body so wrapped lines hang neatly past the marker.
71
+ */
72
+ function ListRow({ item, width, keyPrefix }) {
73
+ const markerCol = item.marker.length + 1; // marker + the gap space
74
+ const indentCols = item.indent * 2;
75
+ const bodyWidth = Math.max(10, width - markerCol - indentCols);
76
+ const plain = item.spans.map((s) => s.text).join("");
77
+ const wrapped = bodyWidth > 0 ? wrapText(plain, bodyWidth) : [plain];
78
+ let consumed = 0;
79
+ return (_jsx(Box, { flexDirection: "column", children: wrapped.map((line, lineIdx) => {
80
+ const chunks = sliceSpans(item.spans, consumed, consumed + line.length);
81
+ consumed += line.length;
82
+ if (lineIdx < wrapped.length - 1 && plain[consumed] === " ")
83
+ consumed += 1;
84
+ const rowKey = `${keyPrefix}-row-${lineIdx}-${line.slice(0, 8)}`;
85
+ return (_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { children: " ".repeat(indentCols) }), lineIdx === 0 ? _jsxs(Text, { color: "cyan", children: [item.marker, " "] }) : _jsx(Text, { children: " ".repeat(markerCol) }), _jsx(Box, { flexGrow: 1, children: _jsx(Text, { children: chunks.map((c, ci) => (_jsx(Text
86
+ // biome-ignore lint/suspicious/noArrayIndexKey: ci is a stable position within a single wrapped row; reusing instances is harmless
87
+ , { bold: c.kind === "bold", italic: c.kind === "italic", color: c.kind === "code" ? "cyan" : undefined, children: c.text }, `${rowKey}-c${ci}`))) }) })] }, rowKey));
88
+ }) }));
89
+ }
90
+ /**
91
+ * Render a sequence of inline spans, wrapped to `width`. We wrap on
92
+ * the plain-text representation, then walk the spans in parallel to
93
+ * decide where to break and what styling each chunk gets. This keeps
94
+ * select-copy clean while preserving styled segments across line
95
+ * breaks.
96
+ */
97
+ function SpanLine({ spans, width, bold, color, dim, keyPrefix, }) {
98
+ // For the first cut: serialize spans into one rich-text line, wrap
99
+ // the plain projection, and emit one <Text> per row with all spans
100
+ // inlined. Wrap calculation uses the plain text so column counts
101
+ // stay accurate; the rendered output retains the styling.
102
+ const plain = spans.map((s) => s.text).join("");
103
+ const wrapped = wrapText(plain, width);
104
+ let consumed = 0;
105
+ return (_jsx(_Fragment, { children: wrapped.map((line, lineIdx) => {
106
+ const chunks = sliceSpans(spans, consumed, consumed + line.length);
107
+ consumed += line.length;
108
+ // Account for the line break (wrap-ansi drops the trailing space).
109
+ if (lineIdx < wrapped.length - 1 && plain[consumed] === " ")
110
+ consumed += 1;
111
+ const rowKey = `${keyPrefix}-r-${lineIdx}-${line.slice(0, 12)}`;
112
+ return (_jsx(Text, { children: chunks.map((c, ci) => (_jsx(Text
113
+ // biome-ignore lint/suspicious/noArrayIndexKey: ci is a stable position within a single wrapped row
114
+ , { bold: bold || c.kind === "bold", italic: c.kind === "italic", dimColor: dim, color: c.kind === "code" ? "cyan" : color, children: c.text }, `${rowKey}-c${ci}`))) }, rowKey));
115
+ }) }));
116
+ }
117
+ /** Slice the span sequence to the [start, end) range of the plain projection. */
118
+ function sliceSpans(spans, start, end) {
119
+ const out = [];
120
+ let cursor = 0;
121
+ for (const span of spans) {
122
+ const spanEnd = cursor + span.text.length;
123
+ if (spanEnd <= start) {
124
+ cursor = spanEnd;
125
+ continue;
126
+ }
127
+ if (cursor >= end)
128
+ break;
129
+ const sliceStart = Math.max(0, start - cursor);
130
+ const sliceEnd = Math.min(span.text.length, end - cursor);
131
+ out.push({ kind: span.kind, text: span.text.slice(sliceStart, sliceEnd) });
132
+ cursor = spanEnd;
133
+ }
134
+ return out;
135
+ }
136
+ // ── parsing ─────────────────────────────────────────────────────────
137
+ function parseBlocks(text) {
138
+ const blocks = [];
139
+ const lines = text.split("\n");
140
+ let i = 0;
141
+ while (i < lines.length) {
142
+ const line = lines[i];
143
+ // Fenced code block.
144
+ const fence = line.match(/^```(.*)$/);
145
+ if (fence) {
146
+ const lang = fence[1].trim() || undefined;
147
+ const body = [];
148
+ i++;
149
+ while (i < lines.length && !lines[i].match(/^```\s*$/)) {
150
+ body.push(lines[i]);
151
+ i++;
152
+ }
153
+ i++; // skip closing fence (or EOF)
154
+ blocks.push({ kind: "code-block", lang, text: body.join("\n") });
155
+ continue;
156
+ }
157
+ // Blank line.
158
+ if (line.trim() === "") {
159
+ blocks.push({ kind: "blank" });
160
+ i++;
161
+ continue;
162
+ }
163
+ // Heading.
164
+ const heading = line.match(/^(#{1,3})\s+(.+)$/);
165
+ if (heading) {
166
+ const level = heading[1].length;
167
+ blocks.push({ kind: "heading", level, spans: parseInline(heading[2]) });
168
+ i++;
169
+ continue;
170
+ }
171
+ // List (bulleted or ordered). Consumes consecutive list rows + any
172
+ // continuation lines that are deeper-indented than the list marker.
173
+ const listProbe = matchListLine(line);
174
+ if (listProbe) {
175
+ const items = [];
176
+ let ordered = listProbe.ordered;
177
+ while (i < lines.length) {
178
+ const row = matchListLine(lines[i]);
179
+ if (!row)
180
+ break;
181
+ ordered = ordered || row.ordered;
182
+ const itemLines = [row.body];
183
+ i++;
184
+ // Continuation lines: indented, non-empty, non-list rows.
185
+ while (i < lines.length) {
186
+ const peek = lines[i];
187
+ if (peek.trim() === "")
188
+ break;
189
+ if (matchListLine(peek))
190
+ break;
191
+ if (peek.match(/^#{1,3}\s+/))
192
+ break;
193
+ if (peek.match(/^```/))
194
+ break;
195
+ itemLines.push(peek.trim());
196
+ i++;
197
+ }
198
+ items.push({
199
+ marker: row.marker,
200
+ indent: row.indent,
201
+ spans: parseInline(itemLines.join(" ")),
202
+ });
203
+ }
204
+ blocks.push({ kind: "list", ordered, items });
205
+ continue;
206
+ }
207
+ // Block-quote (single-line for now; runs collapse on blank line).
208
+ if (line.match(/^>\s?/)) {
209
+ const quoteLines = [line.replace(/^>\s?/, "")];
210
+ i++;
211
+ while (i < lines.length && lines[i].match(/^>\s?/)) {
212
+ quoteLines.push(lines[i].replace(/^>\s?/, ""));
213
+ i++;
214
+ }
215
+ blocks.push({ kind: "quote", spans: parseInline(quoteLines.join(" ")) });
216
+ continue;
217
+ }
218
+ // Paragraph (consume until blank line, fence, list, quote, or heading).
219
+ const paraLines = [line];
220
+ i++;
221
+ while (i < lines.length) {
222
+ const peek = lines[i];
223
+ if (peek.trim() === "")
224
+ break;
225
+ if (peek.match(/^```/))
226
+ break;
227
+ if (peek.match(/^#{1,3}\s+/))
228
+ break;
229
+ if (matchListLine(peek))
230
+ break;
231
+ if (peek.match(/^>\s?/))
232
+ break;
233
+ paraLines.push(peek);
234
+ i++;
235
+ }
236
+ blocks.push({ kind: "paragraph", spans: parseInline(paraLines.join(" ")) });
237
+ }
238
+ return blocks;
239
+ }
240
+ /**
241
+ * Detect a list row and return its marker, body, indent depth, and
242
+ * kind. Matches `- foo`, `* foo`, `+ foo`, and ordered `12. foo`. The
243
+ * leading-whitespace count maps to a 2-space-per-level indent: 0 or 1
244
+ * leading spaces stay at level 0, 2-3 → 1, 4-5 → 2, etc.
245
+ */
246
+ function matchListLine(line) {
247
+ const m = line.match(/^(\s*)([-*+]|\d+\.)\s+(.*)$/);
248
+ if (!m)
249
+ return null;
250
+ const indent = Math.floor(m[1].length / 2);
251
+ const raw = m[2];
252
+ const ordered = /^\d+\./.test(raw);
253
+ const marker = ordered ? raw : "•";
254
+ return { marker, body: m[3], indent, ordered };
255
+ }
256
+ /**
257
+ * Split a single line of inline text into styled spans. Greedy, non-
258
+ * nested — `**bold _italic_**` doesn't render correctly, but plain
259
+ * `**bold**` and `*italic*` and `` `code` `` all work, which is what
260
+ * 95% of real responses look like.
261
+ */
262
+ function parseInline(text) {
263
+ const spans = [];
264
+ const pattern = /(\*\*(.+?)\*\*|`([^`]+?)`|\*([^*\s][^*]*?)\*)/g;
265
+ let lastIndex = 0;
266
+ for (const match of text.matchAll(pattern)) {
267
+ const matchStart = match.index ?? 0;
268
+ if (matchStart > lastIndex) {
269
+ spans.push({ kind: "text", text: text.slice(lastIndex, matchStart) });
270
+ }
271
+ if (match[2] !== undefined)
272
+ spans.push({ kind: "bold", text: match[2] });
273
+ else if (match[3] !== undefined)
274
+ spans.push({ kind: "code", text: match[3] });
275
+ else if (match[4] !== undefined)
276
+ spans.push({ kind: "italic", text: match[4] });
277
+ lastIndex = matchStart + match[0].length;
278
+ }
279
+ if (lastIndex < text.length) {
280
+ spans.push({ kind: "text", text: text.slice(lastIndex) });
281
+ }
282
+ if (spans.length === 0)
283
+ spans.push({ kind: "text", text });
284
+ return spans;
285
+ }
286
+ //# sourceMappingURL=Markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Markdown.js","sourceRoot":"","sources":["../../src/ui/Markdown.tsx"],"names":[],"mappings":"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"}
@@ -1,12 +1,25 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { Box, Text } from "ink";
3
- import { wrapText } from "./wrap.js";
3
+ import { Markdown } from "./Markdown.js";
4
+ import { COLLAPSIBLE_READ_TOOLS, CollapsedReadGroup, ToolCallLine } from "./tool-call-line.js";
5
+ import { TruncatedOutput } from "./truncated-output.js";
6
+ import { WrappedLines } from "./wrapped-lines.js";
4
7
  const ROLE_STYLE = {
5
8
  user: { accent: "yellow", label: "you" },
6
9
  assistant: { accent: "cyan", label: "codebase" },
7
10
  toolResult: { accent: "magenta", label: "tool" },
8
11
  };
9
- export function Message({ message, streaming, width = 80 }) {
12
+ /**
13
+ * Per-tool name overrides for the toolResult header label. Default falls
14
+ * back to the raw tool name (read_file, grep, shell, …) which is more
15
+ * useful than a generic "tool". A few tools get friendlier presentation
16
+ * labels because their raw name reads oddly in the gutter.
17
+ */
18
+ const TOOL_RESULT_LABEL = {
19
+ shell: "bash",
20
+ dispatch_agent: "subagent",
21
+ };
22
+ export function Message({ message, streaming, width = 80, tools }) {
10
23
  const role = message.role;
11
24
  const style = ROLE_STYLE[role];
12
25
  if (!style)
@@ -15,56 +28,116 @@ export function Message({ message, streaming, width = 80 }) {
15
28
  // gap, plus the parent App's paddingX of 1 each side. Reserve 4 cols so
16
29
  // the wrapped text never tries to occupy the accent gutter.
17
30
  const bodyWidth = Math.max(20, width - 4);
18
- return (_jsxs(Box, { flexDirection: "row", marginY: 0, children: [_jsx(Box, { marginRight: 1, children: _jsx(Text, { color: style.accent, children: "\u2502" }) }), _jsxs(Box, { flexDirection: "column", flexGrow: 1, children: [_jsxs(Text, { color: style.accent, bold: true, children: [style.label, streaming ? " …" : ""] }), _jsx(MessageBody, { message: message, width: bodyWidth })] })] }));
31
+ // Tool results carry the originating tool name on the message itself
32
+ // (set by pi-agent-core). Surface that instead of the generic "tool"
33
+ // label so users can see at a glance which tool produced this output.
34
+ const headerLabel = role === "toolResult" && "toolName" in message && typeof message.toolName === "string"
35
+ ? (TOOL_RESULT_LABEL[message.toolName] ?? message.toolName)
36
+ : style.label;
37
+ return (_jsxs(Box, { flexDirection: "row", marginY: 0, children: [_jsx(Box, { marginRight: 1, children: _jsx(Text, { color: style.accent, children: "\u2502" }) }), _jsxs(Box, { flexDirection: "column", flexGrow: 1, children: [_jsxs(Text, { color: style.accent, bold: true, children: [headerLabel, streaming ? " …" : ""] }), _jsx(MessageBody, { message: message, width: bodyWidth, tools: tools })] })] }));
19
38
  }
20
- function MessageBody({ message, width }) {
39
+ function MessageBody({ message, width, tools, }) {
21
40
  if (message.role === "user") {
22
- const text = typeof message.content === "string" ? message.content : renderUserContent(message.content);
23
- return _jsx(WrappedLines, { text: text, width: width, keyPrefix: "user" });
41
+ if (typeof message.content === "string") {
42
+ return _jsx(WrappedLines, { text: message.content, width: width, keyPrefix: "user" });
43
+ }
44
+ return _jsx(UserBlocks, { blocks: message.content, width: width });
24
45
  }
25
46
  if (message.role === "assistant") {
26
- return (_jsxs(_Fragment, { children: [message.content.map((block, idx) => {
27
- const key = blockKey(block, idx);
28
- if (block.type === "text") {
29
- return _jsx(WrappedLines, { text: block.text, width: width, keyPrefix: key }, key);
30
- }
31
- if (block.type === "thinking") {
32
- return (_jsx(WrappedLines, { text: `(thinking) ${block.thinking}`, width: width, keyPrefix: key, dimColor: true, italic: true }, key));
33
- }
34
- if (block.type === "toolCall") {
35
- return (_jsx(WrappedLines, { text: `→ ${block.name}(${summarizeArgs(block.arguments)})`, width: width, keyPrefix: key, color: "magenta" }, key));
36
- }
37
- return null;
38
- }), message.errorMessage ? (_jsx(WrappedLines, { text: `! ${message.errorMessage}`, width: width, keyPrefix: "err", color: "red" })) : null] }));
47
+ const rendered = renderAssistantBlocks(message.content, width, tools);
48
+ return (_jsxs(_Fragment, { children: [rendered, message.errorMessage ? (_jsx(WrappedLines, { text: `! ${message.errorMessage}`, width: width, keyPrefix: "err", color: "red" })) : null] }));
39
49
  }
40
50
  if (message.role === "toolResult") {
41
51
  const text = message.content
42
52
  .map((block) => (block.type === "text" ? block.text : `[image:${block.mimeType}]`))
43
53
  .join("");
44
- return _jsx(WrappedLines, { text: text, width: width, keyPrefix: "tool", color: message.isError ? "red" : undefined });
54
+ const toolName = "toolName" in message && typeof message.toolName === "string" ? message.toolName : undefined;
55
+ return (_jsx(TruncatedOutput, { text: text, width: width, keyPrefix: "tool", color: message.isError ? "red" : undefined, toolName: toolName }));
45
56
  }
46
57
  return null;
47
58
  }
48
59
  /**
49
- * Render text as N <Text> elements, one per pre-wrapped line. Stacks
50
- * vertically inside the parent column-flex Box. Pre-wrap means the
51
- * wraps happen at word boundaries, so when the user select-and-copies
52
- * they get clean line endings no mid-word breaks at column edges.
60
+ * Walk an assistant message's content blocks, collapsing runs of
61
+ * consecutive `read_file` (and other safe read-only) tool calls into a
62
+ * single summary row. A run only collapses when every call in it is
63
+ * completed (done or errored)if any is still running we render the
64
+ * group expanded so the spinner stays visible on the active row.
65
+ */
66
+ function renderAssistantBlocks(content, width, tools) {
67
+ const out = [];
68
+ let i = 0;
69
+ while (i < content.length) {
70
+ const block = content[i];
71
+ const key = blockKey(block, i);
72
+ if (block.type === "text") {
73
+ out.push(_jsx(Markdown, { text: block.text, width: width, keyPrefix: key }, key));
74
+ i++;
75
+ continue;
76
+ }
77
+ if (block.type === "thinking") {
78
+ out.push(_jsx(WrappedLines, { text: `(thinking) ${block.thinking}`, width: width, keyPrefix: key, dimColor: true, italic: true }, key));
79
+ i++;
80
+ continue;
81
+ }
82
+ if (block.type === "toolCall") {
83
+ if (COLLAPSIBLE_READ_TOOLS.has(block.name)) {
84
+ let runEnd = i + 1;
85
+ while (runEnd < content.length) {
86
+ const next = content[runEnd];
87
+ if (next.type !== "toolCall" || next.name !== block.name)
88
+ break;
89
+ runEnd++;
90
+ }
91
+ const run = [];
92
+ for (let j = i; j < runEnd; j++) {
93
+ const b = content[j];
94
+ if (b.type === "toolCall")
95
+ run.push(b);
96
+ }
97
+ if (run.length >= 2) {
98
+ out.push(_jsx(CollapsedReadGroup, { calls: run, width: width, keyPrefix: `run-${run[0].id}`, tools: tools }, `run-${run[0].id}`));
99
+ i = runEnd;
100
+ continue;
101
+ }
102
+ }
103
+ out.push(_jsx(ToolCallLine, { id: block.id, name: block.name, args: block.arguments, width: width, keyPrefix: key, tools: tools }, key));
104
+ i++;
105
+ continue;
106
+ }
107
+ i++;
108
+ }
109
+ return out;
110
+ }
111
+ /**
112
+ * Render an array-content user message — typically text + one or more
113
+ * image attachments. Text blocks pass through `WrappedLines`; image
114
+ * blocks render as a dim "image (PNG, 142 KB)" line so the user can
115
+ * see at a glance that an image was sent.
53
116
  */
54
- function WrappedLines({ text, width, keyPrefix, color, dimColor, italic }) {
55
- const lines = wrapText(text, width);
56
- return (_jsx(_Fragment, { children: lines.map((line, i) => (
57
- // Wrapped lines have no per-line state — <Text> is pure-presentational —
58
- // so reusing instances on re-wrap is harmless; index-as-key is fine here.
59
- // biome-ignore lint/suspicious/noArrayIndexKey: stateless leaf, reuse is safe
60
- _jsx(Text, { color: color, dimColor: dimColor, italic: italic, children: line.length === 0 ? " " : line }, `${keyPrefix}:${i}`))) }));
117
+ function UserBlocks({ blocks, width }) {
118
+ if (!Array.isArray(blocks))
119
+ return null;
120
+ const rows = [];
121
+ for (let i = 0; i < blocks.length; i++) {
122
+ const b = blocks[i];
123
+ if (b.type === "text" && b.text) {
124
+ rows.push(_jsx(WrappedLines, { text: b.text, width: width, keyPrefix: `u-t-${i}` }, `u-t-${i}`));
125
+ continue;
126
+ }
127
+ if (b.type === "image") {
128
+ const subtype = (b.mimeType ?? "image/?").split("/")[1]?.toUpperCase() ?? "?";
129
+ const size = b.data ? formatBytes(Math.floor((b.data.length * 3) / 4)) : "";
130
+ rows.push(_jsxs(Text, { dimColor: true, children: ["\uD83D\uDCF7 image (", subtype, size ? `, ${size}` : "", ")"] }, `u-i-${i}`));
131
+ }
132
+ }
133
+ return _jsx(_Fragment, { children: rows });
61
134
  }
62
- function renderUserContent(content) {
63
- if (!Array.isArray(content))
64
- return "";
65
- return content
66
- .map((block) => block.type === "text" ? (block.text ?? "") : `[image:${block.mimeType ?? "?"}]`)
67
- .join("");
135
+ function formatBytes(n) {
136
+ if (n < 1024)
137
+ return `${n} B`;
138
+ if (n < 1024 * 1024)
139
+ return `${(n / 1024).toFixed(1)} KB`;
140
+ return `${(n / 1024 / 1024).toFixed(1)} MB`;
68
141
  }
69
142
  /**
70
143
  * Stable key per assistant content block. Tool calls have an id; text and
@@ -75,15 +148,4 @@ function blockKey(block, idx) {
75
148
  return `tc-${block.id}`;
76
149
  return `${block.type}-${idx}`;
77
150
  }
78
- function summarizeArgs(args) {
79
- if (!args || typeof args !== "object")
80
- return "";
81
- const entries = Object.entries(args).slice(0, 3);
82
- return entries
83
- .map(([k, v]) => {
84
- const s = typeof v === "string" ? `"${v.slice(0, 30)}"` : String(v);
85
- return `${k}=${s}`;
86
- })
87
- .join(", ");
88
- }
89
151
  //# sourceMappingURL=Message.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Message.js","sourceRoot":"","sources":["../../src/ui/Message.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Message.js","sourceRoot":"","sources":["../../src/ui/Message.tsx"],"names":[],"mappings":"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"}