codebase-cli 2.0.0-pre.2 → 2.0.0-pre.20
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/dist/agent/agent.js +2 -0
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/config.js +76 -9
- package/dist/agent/config.js.map +1 -1
- package/dist/app-server/protocol.js +7 -0
- package/dist/app-server/protocol.js.map +1 -0
- package/dist/app-server/server.js +241 -0
- package/dist/app-server/server.js.map +1 -0
- package/dist/auth/flow.js +174 -41
- package/dist/auth/flow.js.map +1 -1
- package/dist/cli.js +47 -6
- package/dist/cli.js.map +1 -1
- package/dist/commands/builtins.js +88 -5
- package/dist/commands/builtins.js.map +1 -1
- package/dist/commands/registry.js +46 -1
- package/dist/commands/registry.js.map +1 -1
- package/dist/headless/run.js +1 -1
- package/dist/headless/run.js.map +1 -1
- package/dist/permissions/store.js +4 -0
- package/dist/permissions/store.js.map +1 -1
- package/dist/projects/cli.js +92 -0
- package/dist/projects/cli.js.map +1 -0
- package/dist/projects/client.js +120 -0
- package/dist/projects/client.js.map +1 -0
- package/dist/projects/types.js +2 -0
- package/dist/projects/types.js.map +1 -0
- package/dist/skills/platform-loader.js +133 -38
- package/dist/skills/platform-loader.js.map +1 -1
- package/dist/ui/App.js +122 -12
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/FirstRunSetup.js +90 -15
- package/dist/ui/FirstRunSetup.js.map +1 -1
- package/dist/ui/Input.js +245 -13
- package/dist/ui/Input.js.map +1 -1
- package/dist/ui/Markdown.js +286 -0
- package/dist/ui/Markdown.js.map +1 -0
- package/dist/ui/Message.js +449 -25
- package/dist/ui/Message.js.map +1 -1
- package/dist/ui/MessageList.js +7 -2
- package/dist/ui/MessageList.js.map +1 -1
- package/dist/ui/Permission.js +43 -20
- package/dist/ui/Permission.js.map +1 -1
- package/dist/ui/PixelC.js +25 -0
- package/dist/ui/PixelC.js.map +1 -0
- package/dist/ui/Status.js +213 -7
- package/dist/ui/Status.js.map +1 -1
- package/dist/ui/Throbber.js +11 -7
- package/dist/ui/Throbber.js.map +1 -1
- package/dist/ui/Welcome.js +59 -0
- package/dist/ui/Welcome.js.map +1 -0
- package/dist/ui/attachments.js +68 -0
- package/dist/ui/attachments.js.map +1 -0
- package/dist/ui/debug-input.js +44 -0
- package/dist/ui/debug-input.js.map +1 -0
- package/dist/ui/highlight.js +324 -0
- package/dist/ui/highlight.js.map +1 -0
- package/dist/ui/history-store.js +60 -0
- package/dist/ui/history-store.js.map +1 -0
- package/dist/ui/path-complete.js +102 -0
- package/dist/ui/path-complete.js.map +1 -0
- package/dist/ui/terminal-restore.js +83 -0
- package/dist/ui/terminal-restore.js.map +1 -0
- package/package.json +3 -1
package/dist/ui/Message.js
CHANGED
|
@@ -1,12 +1,26 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { sep as pathSep, relative as relativePath } from "node:path";
|
|
2
3
|
import { Box, Text } from "ink";
|
|
4
|
+
import { useEffect, useState } from "react";
|
|
5
|
+
import { Markdown } from "./Markdown.js";
|
|
3
6
|
import { wrapText } from "./wrap.js";
|
|
7
|
+
const SPINNER_FRAMES = ["⣾", "⣽", "⣻", "⢿", "⡿", "⣟", "⣯", "⣷"];
|
|
8
|
+
function useSpinner(active, intervalMs = 90) {
|
|
9
|
+
const [frame, setFrame] = useState(0);
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
if (!active)
|
|
12
|
+
return;
|
|
13
|
+
const id = setInterval(() => setFrame((f) => (f + 1) % SPINNER_FRAMES.length), intervalMs);
|
|
14
|
+
return () => clearInterval(id);
|
|
15
|
+
}, [active, intervalMs]);
|
|
16
|
+
return SPINNER_FRAMES[frame];
|
|
17
|
+
}
|
|
4
18
|
const ROLE_STYLE = {
|
|
5
19
|
user: { accent: "yellow", label: "you" },
|
|
6
20
|
assistant: { accent: "cyan", label: "codebase" },
|
|
7
21
|
toolResult: { accent: "magenta", label: "tool" },
|
|
8
22
|
};
|
|
9
|
-
export function Message({ message, streaming, width = 80 }) {
|
|
23
|
+
export function Message({ message, streaming, width = 80, tools }) {
|
|
10
24
|
const role = message.role;
|
|
11
25
|
const style = ROLE_STYLE[role];
|
|
12
26
|
if (!style)
|
|
@@ -15,36 +29,253 @@ export function Message({ message, streaming, width = 80 }) {
|
|
|
15
29
|
// gap, plus the parent App's paddingX of 1 each side. Reserve 4 cols so
|
|
16
30
|
// the wrapped text never tries to occupy the accent gutter.
|
|
17
31
|
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 })] })] }));
|
|
32
|
+
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, tools: tools })] })] }));
|
|
19
33
|
}
|
|
20
|
-
function MessageBody({ message, width }) {
|
|
34
|
+
function MessageBody({ message, width, tools, }) {
|
|
21
35
|
if (message.role === "user") {
|
|
22
|
-
|
|
23
|
-
|
|
36
|
+
if (typeof message.content === "string") {
|
|
37
|
+
return _jsx(WrappedLines, { text: message.content, width: width, keyPrefix: "user" });
|
|
38
|
+
}
|
|
39
|
+
return _jsx(UserBlocks, { blocks: message.content, width: width });
|
|
24
40
|
}
|
|
25
41
|
if (message.role === "assistant") {
|
|
26
|
-
|
|
27
|
-
|
|
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] }));
|
|
42
|
+
const rendered = renderAssistantBlocks(message.content, width, tools);
|
|
43
|
+
return (_jsxs(_Fragment, { children: [rendered, message.errorMessage ? (_jsx(WrappedLines, { text: `! ${message.errorMessage}`, width: width, keyPrefix: "err", color: "red" })) : null] }));
|
|
39
44
|
}
|
|
40
45
|
if (message.role === "toolResult") {
|
|
41
46
|
const text = message.content
|
|
42
47
|
.map((block) => (block.type === "text" ? block.text : `[image:${block.mimeType}]`))
|
|
43
48
|
.join("");
|
|
44
|
-
return _jsx(
|
|
49
|
+
return _jsx(TruncatedOutput, { text: text, width: width, keyPrefix: "tool", color: message.isError ? "red" : undefined });
|
|
45
50
|
}
|
|
46
51
|
return null;
|
|
47
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* One tool-call row that morphs through three states:
|
|
55
|
+
* running → spinner + present tense ("⣾ Reading src/index.ts")
|
|
56
|
+
* done → ✓ + past tense ("✓ Read src/index.ts")
|
|
57
|
+
* error → ✗ + past tense + red ("✗ Read src/index.ts")
|
|
58
|
+
*
|
|
59
|
+
* State source: the per-session `tools` Map on ChatState. If no entry
|
|
60
|
+
* exists for this id (e.g. an old session being replayed without
|
|
61
|
+
* inflight tracking), we render the past-tense "done" form — safe
|
|
62
|
+
* fallback that never strands the UI on a fake spinner.
|
|
63
|
+
*/
|
|
64
|
+
function ToolCallLine({ id, name, args, width, keyPrefix, tools, }) {
|
|
65
|
+
const exec = tools?.get(id);
|
|
66
|
+
const status = exec?.status ?? "done";
|
|
67
|
+
const isRunning = status === "running";
|
|
68
|
+
const spinner = useSpinner(isRunning);
|
|
69
|
+
if (isRunning) {
|
|
70
|
+
return (_jsx(WrappedLines, { text: `${spinner} ${toolActionLabel(name, args)}…`, width: width, keyPrefix: keyPrefix, color: "magenta" }));
|
|
71
|
+
}
|
|
72
|
+
const isError = status === "error";
|
|
73
|
+
const glyph = isError ? "✗" : "✓";
|
|
74
|
+
const past = toolActionPast(name, args);
|
|
75
|
+
const diff = !isError ? diffSummary(name, args) : null;
|
|
76
|
+
return (_jsxs(_Fragment, { children: [_jsx(WrappedLines, { text: `${glyph} ${past}`, width: width, keyPrefix: keyPrefix, color: isError ? "red" : "magenta" }), diff ? _jsx(DiffSummary, { diff: diff, width: width, keyPrefix: `${keyPrefix}-diff` }) : null] }));
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Tool calls that are pure reads — runs of these collapse into a single
|
|
80
|
+
* "Read N files" / "Searched 3 patterns" line, the Claude Code pattern.
|
|
81
|
+
* Keep the set tight: anything that mutates state, runs shell, or has a
|
|
82
|
+
* meaningful argument shape (grep query, fetch URL) reads weird when
|
|
83
|
+
* collapsed and stays per-row.
|
|
84
|
+
*/
|
|
85
|
+
const COLLAPSIBLE_READ_TOOLS = new Set(["read_file"]);
|
|
86
|
+
/**
|
|
87
|
+
* Walk an assistant message's content blocks, collapsing runs of
|
|
88
|
+
* consecutive `read_file` (and other safe read-only) tool calls into a
|
|
89
|
+
* single summary row. A run only collapses when every call in it is
|
|
90
|
+
* completed (done or errored) — if any is still running we render the
|
|
91
|
+
* group expanded so the spinner stays visible on the active row.
|
|
92
|
+
*/
|
|
93
|
+
function renderAssistantBlocks(content, width, tools) {
|
|
94
|
+
const out = [];
|
|
95
|
+
let i = 0;
|
|
96
|
+
while (i < content.length) {
|
|
97
|
+
const block = content[i];
|
|
98
|
+
const key = blockKey(block, i);
|
|
99
|
+
if (block.type === "text") {
|
|
100
|
+
out.push(_jsx(Markdown, { text: block.text, width: width, keyPrefix: key }, key));
|
|
101
|
+
i++;
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
if (block.type === "thinking") {
|
|
105
|
+
out.push(_jsx(WrappedLines, { text: `(thinking) ${block.thinking}`, width: width, keyPrefix: key, dimColor: true, italic: true }, key));
|
|
106
|
+
i++;
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
if (block.type === "toolCall") {
|
|
110
|
+
if (COLLAPSIBLE_READ_TOOLS.has(block.name)) {
|
|
111
|
+
let runEnd = i + 1;
|
|
112
|
+
while (runEnd < content.length) {
|
|
113
|
+
const next = content[runEnd];
|
|
114
|
+
if (next.type !== "toolCall" || next.name !== block.name)
|
|
115
|
+
break;
|
|
116
|
+
runEnd++;
|
|
117
|
+
}
|
|
118
|
+
const run = [];
|
|
119
|
+
for (let j = i; j < runEnd; j++) {
|
|
120
|
+
const b = content[j];
|
|
121
|
+
if (b.type === "toolCall")
|
|
122
|
+
run.push(b);
|
|
123
|
+
}
|
|
124
|
+
if (run.length >= 2) {
|
|
125
|
+
out.push(_jsx(CollapsedReadGroup, { calls: run, width: width, keyPrefix: `run-${run[0].id}`, tools: tools }, `run-${run[0].id}`));
|
|
126
|
+
i = runEnd;
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
out.push(_jsx(ToolCallLine, { id: block.id, name: block.name, args: block.arguments, width: width, keyPrefix: key, tools: tools }, key));
|
|
131
|
+
i++;
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
i++;
|
|
135
|
+
}
|
|
136
|
+
return out;
|
|
137
|
+
}
|
|
138
|
+
function CollapsedReadGroup({ calls, width, keyPrefix, tools, }) {
|
|
139
|
+
const statuses = calls.map((c) => tools?.get(c.id)?.status);
|
|
140
|
+
const anyRunning = statuses.some((s) => s === "running");
|
|
141
|
+
const anyError = statuses.some((s) => s === "error");
|
|
142
|
+
const doneCount = statuses.filter((s) => s !== "running").length;
|
|
143
|
+
const spinner = useSpinner(anyRunning);
|
|
144
|
+
const glyph = anyRunning ? spinner : anyError ? "✗" : "✓";
|
|
145
|
+
const color = anyError ? "red" : "magenta";
|
|
146
|
+
const verb = anyRunning ? presentVerbForReadTool(calls[0].name) : pastVerbForReadTool(calls[0].name);
|
|
147
|
+
const noun = nounForReadTool(calls[0].name, calls.length);
|
|
148
|
+
const header = anyRunning
|
|
149
|
+
? `${glyph} ${verb} ${doneCount} of ${calls.length} ${noun}…`
|
|
150
|
+
: `${glyph} ${verb} ${calls.length} ${noun}`;
|
|
151
|
+
return (_jsxs(_Fragment, { children: [_jsx(WrappedLines, { text: header, width: width, keyPrefix: keyPrefix, color: color }), _jsx(Box, { flexDirection: "column", marginLeft: 2, children: calls.map((c) => {
|
|
152
|
+
const a = (c.arguments ?? {});
|
|
153
|
+
const rawPath = typeof a.path === "string" ? a.path : typeof a.file_path === "string" ? a.file_path : "";
|
|
154
|
+
const path = displayPath(rawPath);
|
|
155
|
+
const status = tools?.get(c.id)?.status;
|
|
156
|
+
const failed = status === "error";
|
|
157
|
+
const running = status === "running";
|
|
158
|
+
const marker = failed ? " ✗ " : running ? " → " : " · ";
|
|
159
|
+
return (_jsxs(Text, { color: failed ? "red" : running ? "magenta" : undefined, dimColor: !failed && !running, children: [marker, truncate(path, Math.max(20, width - 6))] }, `${keyPrefix}-f-${c.id}`));
|
|
160
|
+
}) })] }));
|
|
161
|
+
}
|
|
162
|
+
function presentVerbForReadTool(name) {
|
|
163
|
+
if (name === "read_file")
|
|
164
|
+
return "Reading";
|
|
165
|
+
if (name === "list_files")
|
|
166
|
+
return "Listing";
|
|
167
|
+
if (name === "glob")
|
|
168
|
+
return "Searching";
|
|
169
|
+
if (name === "grep")
|
|
170
|
+
return "Grepping";
|
|
171
|
+
return "Running";
|
|
172
|
+
}
|
|
173
|
+
function pastVerbForReadTool(name) {
|
|
174
|
+
if (name === "read_file")
|
|
175
|
+
return "Read";
|
|
176
|
+
if (name === "list_files")
|
|
177
|
+
return "Listed";
|
|
178
|
+
if (name === "glob")
|
|
179
|
+
return "Searched";
|
|
180
|
+
if (name === "grep")
|
|
181
|
+
return "Grepped";
|
|
182
|
+
return "Ran";
|
|
183
|
+
}
|
|
184
|
+
function nounForReadTool(name, count) {
|
|
185
|
+
if (name === "read_file")
|
|
186
|
+
return count === 1 ? "file" : "files";
|
|
187
|
+
if (name === "list_files")
|
|
188
|
+
return count === 1 ? "directory" : "directories";
|
|
189
|
+
return count === 1 ? "call" : "calls";
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Build a diff summary for a completed file-edit tool call from the
|
|
193
|
+
* tool's args. We have old_string + new_string right there, so no
|
|
194
|
+
* filesystem round-trip needed. Limits the hunk preview to 6 lines
|
|
195
|
+
* total (the small-diff sweet spot) so noisy refactors collapse to
|
|
196
|
+
* just the +/- counts.
|
|
197
|
+
*/
|
|
198
|
+
function diffSummary(name, args) {
|
|
199
|
+
const a = (args ?? {});
|
|
200
|
+
if (name === "edit_file") {
|
|
201
|
+
const oldStr = typeof a.old_string === "string" ? a.old_string : "";
|
|
202
|
+
const newStr = typeof a.new_string === "string" ? a.new_string : "";
|
|
203
|
+
if (!oldStr && !newStr)
|
|
204
|
+
return null;
|
|
205
|
+
return countDiff(oldStr, newStr);
|
|
206
|
+
}
|
|
207
|
+
if (name === "multi_edit") {
|
|
208
|
+
const edits = Array.isArray(a.edits) ? a.edits : [];
|
|
209
|
+
let added = 0;
|
|
210
|
+
let removed = 0;
|
|
211
|
+
const hunks = [];
|
|
212
|
+
for (const e of edits) {
|
|
213
|
+
if (!e || typeof e !== "object")
|
|
214
|
+
continue;
|
|
215
|
+
const ed = e;
|
|
216
|
+
const oldStr = typeof ed.old_string === "string" ? ed.old_string : "";
|
|
217
|
+
const newStr = typeof ed.new_string === "string" ? ed.new_string : "";
|
|
218
|
+
const sub = countDiff(oldStr, newStr);
|
|
219
|
+
added += sub.added;
|
|
220
|
+
removed += sub.removed;
|
|
221
|
+
hunks.push(...sub.hunks);
|
|
222
|
+
}
|
|
223
|
+
if (added === 0 && removed === 0)
|
|
224
|
+
return null;
|
|
225
|
+
return { added, removed, hunks: hunks.slice(0, 6) };
|
|
226
|
+
}
|
|
227
|
+
if (name === "write_file") {
|
|
228
|
+
const content = typeof a.content === "string" ? a.content : "";
|
|
229
|
+
if (!content)
|
|
230
|
+
return null;
|
|
231
|
+
const lines = content.split("\n").length;
|
|
232
|
+
return { added: lines, removed: 0, hunks: [] };
|
|
233
|
+
}
|
|
234
|
+
return null;
|
|
235
|
+
}
|
|
236
|
+
function countDiff(oldStr, newStr) {
|
|
237
|
+
const oldLines = oldStr ? oldStr.split("\n") : [];
|
|
238
|
+
const newLines = newStr ? newStr.split("\n") : [];
|
|
239
|
+
const hunks = [];
|
|
240
|
+
const maxRows = Math.max(oldLines.length, newLines.length);
|
|
241
|
+
for (let i = 0; i < maxRows; i++) {
|
|
242
|
+
const minus = oldLines[i] ?? "";
|
|
243
|
+
const plus = newLines[i] ?? "";
|
|
244
|
+
if (minus === plus)
|
|
245
|
+
continue;
|
|
246
|
+
hunks.push({ minus, plus });
|
|
247
|
+
}
|
|
248
|
+
return { added: newLines.length, removed: oldLines.length, hunks: hunks.slice(0, 6) };
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Render the +N -M summary line, then up to 6 alternating - / + lines
|
|
252
|
+
* for the actual diff. Beyond 6 lines, just shows the counts — keeps
|
|
253
|
+
* the transcript from drowning in a 200-line refactor.
|
|
254
|
+
*/
|
|
255
|
+
function DiffSummary({ diff, width, keyPrefix }) {
|
|
256
|
+
const counts = ` +${diff.added} -${diff.removed}`;
|
|
257
|
+
return (_jsxs(Box, { flexDirection: "column", marginLeft: 2, children: [_jsx(Text, { dimColor: true, children: counts }), diff.hunks.map((h) => (_jsxs(Box, { flexDirection: "column", children: [h.minus ? (_jsxs(Text, { color: "red", children: [" - ", truncate(h.minus, Math.max(20, width - 8))] })) : null, h.plus ? (_jsxs(Text, { color: "green", children: [" + ", truncate(h.plus, Math.max(20, width - 8))] })) : null] }, `${keyPrefix}-h-${h.minus.slice(0, 16)}-${h.plus.slice(0, 16)}`)))] }));
|
|
258
|
+
}
|
|
259
|
+
const MAX_TOOL_OUTPUT_LINES = 12;
|
|
260
|
+
const HEAD_TOOL_OUTPUT_LINES = 8;
|
|
261
|
+
const TAIL_TOOL_OUTPUT_LINES = 3;
|
|
262
|
+
/**
|
|
263
|
+
* Truncate tool output past MAX_TOOL_OUTPUT_LINES into "head + (N hidden)
|
|
264
|
+
* + tail" — long shell or grep output otherwise dominates the
|
|
265
|
+
* transcript and pushes context off-screen. The agent still gets the
|
|
266
|
+
* full output; this is purely a display trim. Errors are NEVER
|
|
267
|
+
* truncated since the user needs to see exactly what blew up.
|
|
268
|
+
*/
|
|
269
|
+
function TruncatedOutput({ text, width, keyPrefix, color, }) {
|
|
270
|
+
const lines = text.split("\n");
|
|
271
|
+
if (color === "red" || lines.length <= MAX_TOOL_OUTPUT_LINES) {
|
|
272
|
+
return _jsx(WrappedLines, { text: text, width: width, keyPrefix: keyPrefix, color: color });
|
|
273
|
+
}
|
|
274
|
+
const head = lines.slice(0, HEAD_TOOL_OUTPUT_LINES).join("\n");
|
|
275
|
+
const tail = lines.slice(lines.length - TAIL_TOOL_OUTPUT_LINES).join("\n");
|
|
276
|
+
const hidden = lines.length - HEAD_TOOL_OUTPUT_LINES - TAIL_TOOL_OUTPUT_LINES;
|
|
277
|
+
return (_jsxs(_Fragment, { children: [_jsx(WrappedLines, { text: head, width: width, keyPrefix: `${keyPrefix}-h`, color: color }), _jsx(Text, { dimColor: true, children: `… ${hidden} line${hidden === 1 ? "" : "s"} hidden …` }), _jsx(WrappedLines, { text: tail, width: width, keyPrefix: `${keyPrefix}-t`, color: color })] }));
|
|
278
|
+
}
|
|
48
279
|
/**
|
|
49
280
|
* Render text as N <Text> elements, one per pre-wrapped line. Stacks
|
|
50
281
|
* vertically inside the parent column-flex Box. Pre-wrap means the
|
|
@@ -59,12 +290,36 @@ function WrappedLines({ text, width, keyPrefix, color, dimColor, italic }) {
|
|
|
59
290
|
// biome-ignore lint/suspicious/noArrayIndexKey: stateless leaf, reuse is safe
|
|
60
291
|
_jsx(Text, { color: color, dimColor: dimColor, italic: italic, children: line.length === 0 ? " " : line }, `${keyPrefix}:${i}`))) }));
|
|
61
292
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
293
|
+
/**
|
|
294
|
+
* Render an array-content user message — typically text + one or more
|
|
295
|
+
* image attachments. Text blocks pass through `WrappedLines`; image
|
|
296
|
+
* blocks render as a dim "image (PNG, 142 KB)" line so the user can
|
|
297
|
+
* see at a glance that an image was sent.
|
|
298
|
+
*/
|
|
299
|
+
function UserBlocks({ blocks, width }) {
|
|
300
|
+
if (!Array.isArray(blocks))
|
|
301
|
+
return null;
|
|
302
|
+
const rows = [];
|
|
303
|
+
for (let i = 0; i < blocks.length; i++) {
|
|
304
|
+
const b = blocks[i];
|
|
305
|
+
if (b.type === "text" && b.text) {
|
|
306
|
+
rows.push(_jsx(WrappedLines, { text: b.text, width: width, keyPrefix: `u-t-${i}` }, `u-t-${i}`));
|
|
307
|
+
continue;
|
|
308
|
+
}
|
|
309
|
+
if (b.type === "image") {
|
|
310
|
+
const subtype = (b.mimeType ?? "image/?").split("/")[1]?.toUpperCase() ?? "?";
|
|
311
|
+
const size = b.data ? formatBytes(Math.floor((b.data.length * 3) / 4)) : "";
|
|
312
|
+
rows.push(_jsxs(Text, { dimColor: true, children: ["\uD83D\uDCF7 image (", subtype, size ? `, ${size}` : "", ")"] }, `u-i-${i}`));
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
return _jsx(_Fragment, { children: rows });
|
|
316
|
+
}
|
|
317
|
+
function formatBytes(n) {
|
|
318
|
+
if (n < 1024)
|
|
319
|
+
return `${n} B`;
|
|
320
|
+
if (n < 1024 * 1024)
|
|
321
|
+
return `${(n / 1024).toFixed(1)} KB`;
|
|
322
|
+
return `${(n / 1024 / 1024).toFixed(1)} MB`;
|
|
68
323
|
}
|
|
69
324
|
/**
|
|
70
325
|
* Stable key per assistant content block. Tool calls have an id; text and
|
|
@@ -86,4 +341,173 @@ function summarizeArgs(args) {
|
|
|
86
341
|
})
|
|
87
342
|
.join(", ");
|
|
88
343
|
}
|
|
344
|
+
/**
|
|
345
|
+
* Render a tool call as a human-friendly action label, the way Claude
|
|
346
|
+
* Code formats them: present-tense verb + the salient argument
|
|
347
|
+
* (file path, command, URL, search query, etc.) instead of the raw
|
|
348
|
+
* `toolName(k1=v1, k2=v2)` shape. Falls back to the verbose form for
|
|
349
|
+
* tools we don't have a special case for.
|
|
350
|
+
*/
|
|
351
|
+
function toolActionLabel(name, args) {
|
|
352
|
+
const a = (args ?? {});
|
|
353
|
+
const str = (k) => (typeof a[k] === "string" ? a[k] : "");
|
|
354
|
+
const path = displayPath(str("path") || str("file_path"));
|
|
355
|
+
switch (name) {
|
|
356
|
+
case "read_file":
|
|
357
|
+
return `Reading ${path}`;
|
|
358
|
+
case "write_file":
|
|
359
|
+
return `Writing ${path}`;
|
|
360
|
+
case "edit_file":
|
|
361
|
+
return `Editing ${path}`;
|
|
362
|
+
case "multi_edit":
|
|
363
|
+
return `Editing ${path}`;
|
|
364
|
+
case "notebook_edit":
|
|
365
|
+
return `Editing notebook ${path}`;
|
|
366
|
+
case "list_files":
|
|
367
|
+
return `Listing ${path || "."}`;
|
|
368
|
+
case "glob":
|
|
369
|
+
return `Searching ${str("pattern")}`;
|
|
370
|
+
case "grep":
|
|
371
|
+
return `Searching for "${str("pattern")}"`;
|
|
372
|
+
case "shell":
|
|
373
|
+
return `Running: ${truncate(str("command") || str("cmd"), 60)}`;
|
|
374
|
+
case "web_fetch":
|
|
375
|
+
return `Fetching ${str("url")}`;
|
|
376
|
+
case "web_search":
|
|
377
|
+
return `Searching: ${truncate(str("query"), 60)}`;
|
|
378
|
+
case "git_status":
|
|
379
|
+
return "git status";
|
|
380
|
+
case "git_diff":
|
|
381
|
+
return `git diff${str("target") ? ` ${str("target")}` : ""}`;
|
|
382
|
+
case "git_log":
|
|
383
|
+
return "git log";
|
|
384
|
+
case "git_commit":
|
|
385
|
+
return `git commit: ${truncate(str("message"), 50)}`;
|
|
386
|
+
case "git_branch":
|
|
387
|
+
return str("name") ? `git branch ${str("name")}` : "git branches";
|
|
388
|
+
case "enter_worktree":
|
|
389
|
+
return `Entering worktree ${str("branch") || str("name")}`;
|
|
390
|
+
case "exit_worktree":
|
|
391
|
+
return "Leaving worktree";
|
|
392
|
+
case "enter_plan_mode":
|
|
393
|
+
return "Entering plan mode";
|
|
394
|
+
case "exit_plan_mode":
|
|
395
|
+
return "Exiting plan mode";
|
|
396
|
+
case "dispatch_agent":
|
|
397
|
+
return `Dispatching subagent: ${truncate(str("task"), 60)}`;
|
|
398
|
+
case "ask_user":
|
|
399
|
+
return `Asking: ${truncate(str("question"), 60)}`;
|
|
400
|
+
case "create_task":
|
|
401
|
+
return `Task: ${truncate(str("subject"), 60)}`;
|
|
402
|
+
case "update_task":
|
|
403
|
+
return `Updating task ${str("taskId")}`;
|
|
404
|
+
case "list_tasks":
|
|
405
|
+
return "Listing tasks";
|
|
406
|
+
case "get_task":
|
|
407
|
+
return `Reading task ${str("taskId")}`;
|
|
408
|
+
case "save_memory":
|
|
409
|
+
return `Saving memory: ${str("name") || str("type")}`;
|
|
410
|
+
case "read_memory":
|
|
411
|
+
return str("filename") ? `Reading memory ${str("filename")}` : "Reading MEMORY.md";
|
|
412
|
+
case "config":
|
|
413
|
+
return str("path") ? `config(${str("path")})` : "Reading config";
|
|
414
|
+
default:
|
|
415
|
+
return `${name}(${summarizeArgs(args)})`;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
function truncate(s, n) {
|
|
419
|
+
if (s.length <= n)
|
|
420
|
+
return s;
|
|
421
|
+
return `${s.slice(0, n - 1)}…`;
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* Show a path relative to the working directory when it's inside (so
|
|
425
|
+
* "src/ui/Message.tsx" instead of "/home/half/.../src/ui/Message.tsx"),
|
|
426
|
+
* but keep it absolute when it points outside the project — that's
|
|
427
|
+
* useful information the user should see at full fidelity. Empty
|
|
428
|
+
* strings pass through unchanged.
|
|
429
|
+
*/
|
|
430
|
+
function displayPath(p) {
|
|
431
|
+
if (!p)
|
|
432
|
+
return p;
|
|
433
|
+
if (!p.startsWith(pathSep))
|
|
434
|
+
return p; // already relative
|
|
435
|
+
const cwd = process.cwd();
|
|
436
|
+
const rel = relativePath(cwd, p);
|
|
437
|
+
if (!rel || rel.startsWith(".."))
|
|
438
|
+
return p; // outside cwd — keep absolute
|
|
439
|
+
return rel;
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* Past-tense action label, used when a tool has finished. Same shape
|
|
443
|
+
* as `toolActionLabel` but with the verbs swapped to past tense:
|
|
444
|
+
* "Reading X" → "Read X", "Editing Y" → "Edited Y", etc.
|
|
445
|
+
*/
|
|
446
|
+
function toolActionPast(name, args) {
|
|
447
|
+
const a = (args ?? {});
|
|
448
|
+
const str = (k) => (typeof a[k] === "string" ? a[k] : "");
|
|
449
|
+
const path = displayPath(str("path") || str("file_path"));
|
|
450
|
+
switch (name) {
|
|
451
|
+
case "read_file":
|
|
452
|
+
return `Read ${path}`;
|
|
453
|
+
case "write_file":
|
|
454
|
+
return `Wrote ${path}`;
|
|
455
|
+
case "edit_file":
|
|
456
|
+
return `Edited ${path}`;
|
|
457
|
+
case "multi_edit":
|
|
458
|
+
return `Edited ${path}`;
|
|
459
|
+
case "notebook_edit":
|
|
460
|
+
return `Edited notebook ${path}`;
|
|
461
|
+
case "list_files":
|
|
462
|
+
return `Listed ${path || "."}`;
|
|
463
|
+
case "glob":
|
|
464
|
+
return `Searched ${str("pattern")}`;
|
|
465
|
+
case "grep":
|
|
466
|
+
return `Searched for "${str("pattern")}"`;
|
|
467
|
+
case "shell":
|
|
468
|
+
return `Ran: ${truncate(str("command") || str("cmd"), 60)}`;
|
|
469
|
+
case "web_fetch":
|
|
470
|
+
return `Fetched ${str("url")}`;
|
|
471
|
+
case "web_search":
|
|
472
|
+
return `Searched: ${truncate(str("query"), 60)}`;
|
|
473
|
+
case "git_status":
|
|
474
|
+
return "git status";
|
|
475
|
+
case "git_diff":
|
|
476
|
+
return `git diff${str("target") ? ` ${str("target")}` : ""}`;
|
|
477
|
+
case "git_log":
|
|
478
|
+
return "git log";
|
|
479
|
+
case "git_commit":
|
|
480
|
+
return `git commit: ${truncate(str("message"), 50)}`;
|
|
481
|
+
case "git_branch":
|
|
482
|
+
return str("name") ? `git branch ${str("name")}` : "git branches";
|
|
483
|
+
case "enter_worktree":
|
|
484
|
+
return `Entered worktree ${str("branch") || str("name")}`;
|
|
485
|
+
case "exit_worktree":
|
|
486
|
+
return "Left worktree";
|
|
487
|
+
case "enter_plan_mode":
|
|
488
|
+
return "Entered plan mode";
|
|
489
|
+
case "exit_plan_mode":
|
|
490
|
+
return "Exited plan mode";
|
|
491
|
+
case "dispatch_agent":
|
|
492
|
+
return `Subagent: ${truncate(str("task"), 60)}`;
|
|
493
|
+
case "ask_user":
|
|
494
|
+
return `Asked: ${truncate(str("question"), 60)}`;
|
|
495
|
+
case "create_task":
|
|
496
|
+
return `Created task: ${truncate(str("subject"), 60)}`;
|
|
497
|
+
case "update_task":
|
|
498
|
+
return `Updated task ${str("taskId")}`;
|
|
499
|
+
case "list_tasks":
|
|
500
|
+
return "Listed tasks";
|
|
501
|
+
case "get_task":
|
|
502
|
+
return `Read task ${str("taskId")}`;
|
|
503
|
+
case "save_memory":
|
|
504
|
+
return `Saved memory: ${str("name") || str("type")}`;
|
|
505
|
+
case "read_memory":
|
|
506
|
+
return str("filename") ? `Read memory ${str("filename")}` : "Read MEMORY.md";
|
|
507
|
+
case "config":
|
|
508
|
+
return str("path") ? `config(${str("path")})` : "Read config";
|
|
509
|
+
default:
|
|
510
|
+
return `${name}(${summarizeArgs(args)})`;
|
|
511
|
+
}
|
|
512
|
+
}
|
|
89
513
|
//# sourceMappingURL=Message.js.map
|
package/dist/ui/Message.js.map
CHANGED
|
@@ -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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"}
|
package/dist/ui/MessageList.js
CHANGED
|
@@ -9,10 +9,15 @@ import { Message } from "./Message.js";
|
|
|
9
9
|
*
|
|
10
10
|
* Threads the live terminal width down to Message so its body pre-wraps
|
|
11
11
|
* at word boundaries — see ui/wrap.ts for why we want manual wrap.
|
|
12
|
+
*
|
|
13
|
+
* Note: the static-rendered finalized messages don't see live `tools`
|
|
14
|
+
* updates after they're committed — that's fine because by the time a
|
|
15
|
+
* message is finalized its tool calls have completed. The streaming
|
|
16
|
+
* pane (which DOES update) is where the live spinner lives.
|
|
12
17
|
*/
|
|
13
|
-
export function MessageList({ messages, streaming }) {
|
|
18
|
+
export function MessageList({ messages, streaming, tools }) {
|
|
14
19
|
const width = useTerminalWidth();
|
|
15
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Static, { items: messages.map((message, index) => ({ message, key: indexKey(message, index) })), children: ({ message, key }) => (_jsx(Box, { marginBottom: 1, children: _jsx(Message, { message: message, width: width }) }, key)) }), streaming ? (_jsx(Box, { marginBottom: 1, children: _jsx(Message, { message: streaming, streaming: true, width: width }) })) : null] }));
|
|
20
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Static, { items: messages.map((message, index) => ({ message, key: indexKey(message, index) })), children: ({ message, key }) => (_jsx(Box, { marginBottom: 1, children: _jsx(Message, { message: message, width: width, tools: tools }) }, key)) }), streaming ? (_jsx(Box, { marginBottom: 1, children: _jsx(Message, { message: streaming, streaming: true, width: width, tools: tools }) })) : null] }));
|
|
16
21
|
}
|
|
17
22
|
function useTerminalWidth(fallback = 80) {
|
|
18
23
|
const { stdout } = useStdout();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageList.js","sourceRoot":"","sources":["../../src/ui/MessageList.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"MessageList.js","sourceRoot":"","sources":["../../src/ui/MessageList.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AASvC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,WAAW,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAoB;IAC3E,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;IACjC,OAAO,CACN,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aAC1B,KAAC,MAAM,IAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,YAC3F,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CACtB,KAAC,GAAG,IAAW,YAAY,EAAE,CAAC,YAC7B,KAAC,OAAO,IAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAI,IADhD,GAAG,CAEP,CACN,GACO,EACR,SAAS,CAAC,CAAC,CAAC,CACZ,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YACnB,KAAC,OAAO,IAAC,OAAO,EAAE,SAAS,EAAE,SAAS,QAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAI,GAChE,CACN,CAAC,CAAC,CAAC,IAAI,IACH,CACN,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAQ,GAAG,EAAE;IACtC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IAC/B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,OAAO,IAAI,QAAQ,CAAC,CAAC;IAChE,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC;QAC5D,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC9B,OAAO,GAAG,EAAE;YACX,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IACvB,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,OAAqB,EAAE,KAAa;IACrD,MAAM,EAAE,GAAG,WAAW,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACnG,OAAO,GAAG,KAAK,IAAI,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;AACzC,CAAC"}
|