mindweave 3.2.7 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/dist/cli/App.js +536 -36
  2. package/dist/cli/App.js.map +1 -1
  3. package/dist/cli/altScreen.js +6 -0
  4. package/dist/cli/altScreen.js.map +1 -1
  5. package/dist/cli/blockBoxes.js +57 -0
  6. package/dist/cli/blockBoxes.js.map +1 -0
  7. package/dist/cli/blockHeights.js +3 -0
  8. package/dist/cli/blockHeights.js.map +1 -1
  9. package/dist/cli/chatAnchor.js +51 -0
  10. package/dist/cli/chatAnchor.js.map +1 -1
  11. package/dist/cli/commandBackground.js +16 -0
  12. package/dist/cli/commandBackground.js.map +1 -0
  13. package/dist/cli/components/BlockView.js +10 -1
  14. package/dist/cli/components/BlockView.js.map +1 -1
  15. package/dist/cli/components/KeyManager.js +63 -7
  16. package/dist/cli/components/KeyManager.js.map +1 -1
  17. package/dist/cli/components/Picker.js +31 -5
  18. package/dist/cli/components/Picker.js.map +1 -1
  19. package/dist/cli/components/PromptInput.js +57 -12
  20. package/dist/cli/components/PromptInput.js.map +1 -1
  21. package/dist/cli/components/ToolLine.js +6 -0
  22. package/dist/cli/components/ToolLine.js.map +1 -1
  23. package/dist/cli/components/WorkGroup.js +90 -19
  24. package/dist/cli/components/WorkGroup.js.map +1 -1
  25. package/dist/cli/expandHits.js +18 -0
  26. package/dist/cli/expandHits.js.map +1 -1
  27. package/dist/cli/framebuffer/frameHold.js +58 -0
  28. package/dist/cli/framebuffer/frameHold.js.map +1 -0
  29. package/dist/cli/framebuffer/writer.js +47 -6
  30. package/dist/cli/framebuffer/writer.js.map +1 -1
  31. package/dist/cli/help.js +9 -1
  32. package/dist/cli/help.js.map +1 -1
  33. package/dist/cli/messageQueue.js +7 -2
  34. package/dist/cli/messageQueue.js.map +1 -1
  35. package/dist/cli/pickerSearch.js +59 -0
  36. package/dist/cli/pickerSearch.js.map +1 -0
  37. package/dist/cli/selectionGrow.js +327 -0
  38. package/dist/cli/selectionGrow.js.map +1 -0
  39. package/dist/cli/toolDisplay.js +40 -7
  40. package/dist/cli/toolDisplay.js.map +1 -1
  41. package/dist/cli/transcript.js +24 -7
  42. package/dist/cli/transcript.js.map +1 -1
  43. package/dist/cli/wheelStep.js +2 -2
  44. package/dist/cli/workLines.js +107 -6
  45. package/dist/cli/workLines.js.map +1 -1
  46. package/dist/core/turnRunner.js +7 -1
  47. package/dist/core/turnRunner.js.map +1 -1
  48. package/dist/dynamo/engine.js +21 -7
  49. package/dist/dynamo/engine.js.map +1 -1
  50. package/dist/dynamo/prompt.js +9 -0
  51. package/dist/dynamo/prompt.js.map +1 -1
  52. package/dist/dynamo/verify.js +21 -1
  53. package/dist/dynamo/verify.js.map +1 -1
  54. package/dist/mcp/connection.js +52 -9
  55. package/dist/mcp/connection.js.map +1 -1
  56. package/dist/mcp/manager.js +61 -42
  57. package/dist/mcp/manager.js.map +1 -1
  58. package/dist/mcp/resultView.js +116 -0
  59. package/dist/mcp/resultView.js.map +1 -0
  60. package/dist/mcp/transport/http.js +12 -4
  61. package/dist/mcp/transport/http.js.map +1 -1
  62. package/dist/mcp/transport/stdio.js +30 -5
  63. package/dist/mcp/transport/stdio.js.map +1 -1
  64. package/dist/mcp/transport/types.js +14 -0
  65. package/dist/mcp/transport/types.js.map +1 -1
  66. package/dist/memory/compaction.js +15 -3
  67. package/dist/memory/compaction.js.map +1 -1
  68. package/dist/memory/localCommand.js +138 -0
  69. package/dist/memory/localCommand.js.map +1 -0
  70. package/dist/memory/session.js +2 -0
  71. package/dist/memory/session.js.map +1 -1
  72. package/dist/memory/store.js +4 -1
  73. package/dist/memory/store.js.map +1 -1
  74. package/dist/memory/types.js.map +1 -1
  75. package/dist/tools/detail.js +2 -0
  76. package/dist/tools/detail.js.map +1 -1
  77. package/dist/tools/foregroundCommands.js +67 -0
  78. package/dist/tools/foregroundCommands.js.map +1 -0
  79. package/dist/tools/mcpAdd.js +124 -16
  80. package/dist/tools/mcpAdd.js.map +1 -1
  81. package/dist/tools/mindweaveStatus.js +1 -1
  82. package/dist/tools/mindweaveStatus.js.map +1 -1
  83. package/dist/tools/rebuildDetail.js +49 -1
  84. package/dist/tools/rebuildDetail.js.map +1 -1
  85. package/dist/tools/runCommand.js +69 -28
  86. package/dist/tools/runCommand.js.map +1 -1
  87. package/dist/tools/untrusted.js +7 -0
  88. package/dist/tools/untrusted.js.map +1 -1
  89. package/dist/tools/userCommand.js +52 -0
  90. package/dist/tools/userCommand.js.map +1 -0
  91. package/dist/tools/viewImage.js +14 -2
  92. package/dist/tools/viewImage.js.map +1 -1
  93. package/dist/tools/webSearch.js +42 -20
  94. package/dist/tools/webSearch.js.map +1 -1
  95. package/package.json +3 -3
@@ -0,0 +1,327 @@
1
+ /**
2
+ * selectionGrow.ts — a selection that keeps growing while the view scrolls.
3
+ *
4
+ * `selection.ts` selects cells of the SCREEN and copies what is on the screen. That is
5
+ * simple and safe, and it has two limits a reader meets at once: scrolling moves the text
6
+ * out from under the highlight (so it was dropped), and a screen is all that can be copied
7
+ * (a long output, or a reply taller than the terminal, took several separate selections).
8
+ *
9
+ * Here the two ends of a selection are positions in the CONVERSATION, not on the screen:
10
+ *
11
+ * block id + a row inside that block + a column
12
+ *
13
+ * A block's id never changes, and a row counted from the top of its own block does not move
14
+ * when something ABOVE it grows, shrinks or re-measures (a row opened, a height estimate
15
+ * corrected as old text is scrolled into view) nor when something is appended below. A row
16
+ * counted from the top of the whole transcript has neither property, and an earlier version
17
+ * of this idea that used one could shift the join between two scrolls by a few rows.
18
+ *
19
+ * What gets copied cannot be read back from anything but the screen, because the text of a
20
+ * row only exists once it has been laid out and wrapped. So while a selection is alive,
21
+ * every frame hands the rows it shows to a `RowStore`, keyed the same way. Scrolling past a
22
+ * row is what puts it in the store; copying is assembling the rows between the two ends.
23
+ * A row that was never on screen cannot be copied, and the store knows which those are
24
+ * (`complete`), so the caller can say so rather than hand over a quiet hole.
25
+ *
26
+ * Pure apart from the store and the cell writes of `applyGrowSelection`; nothing here knows
27
+ * about React, Ink or the pointer, which is what lets the rules be tested without a terminal.
28
+ */
29
+ import { ATTR, DEFAULT_COLOR, WIDE_CONTINUATION } from "./framebuffer/screen.js";
30
+ /** Order two rows of the conversation. Block ids rise along the transcript. */
31
+ export function compareKeys(a, b) {
32
+ return a.id !== b.id ? a.id - b.id : a.off - b.off;
33
+ }
34
+ /** The block boxes on screen, ordered by where they start (pure). */
35
+ export function sortSpans(spans) {
36
+ return [...spans].sort((a, b) => a.top - b.top);
37
+ }
38
+ /** The conversation row shown on screen row `y`, or null where no block is (pure). */
39
+ export function keyAtRow(spans, y) {
40
+ for (const s of spans) {
41
+ if (y >= s.top && y < s.top + s.height)
42
+ return { id: s.id, off: y - s.top };
43
+ }
44
+ return null;
45
+ }
46
+ /** The screen row currently showing a conversation row, or null when it is not on screen (pure). */
47
+ export function rowOfKey(spans, key) {
48
+ const s = spans.find((b) => b.id === key.id);
49
+ if (!s || key.off < 0 || key.off >= s.height)
50
+ return null;
51
+ return s.top + key.off;
52
+ }
53
+ /** True when the drag never left the cell it began on, so nothing is selected. */
54
+ export function isEmptyGrow(sel) {
55
+ return compareKeys(sel.anchor, sel.focus) === 0 && sel.anchor.x === sel.focus.x;
56
+ }
57
+ /** The two ends in reading order, whichever way the drag went. */
58
+ export function normalizeGrow(sel) {
59
+ const { anchor, focus } = sel;
60
+ const c = compareKeys(anchor, focus);
61
+ const anchorFirst = c < 0 || (c === 0 && anchor.x <= focus.x);
62
+ return anchorFirst ? { start: anchor, end: focus } : { start: focus, end: anchor };
63
+ }
64
+ /** The columns the selection covers on one row, or null when the row is outside it (pure). */
65
+ export function coverage(sel, key, width) {
66
+ const { start, end } = normalizeGrow(sel);
67
+ if (compareKeys(key, start) < 0 || compareKeys(key, end) > 0)
68
+ return null;
69
+ const from = compareKeys(key, start) === 0 ? start.x : 0;
70
+ const to = compareKeys(key, end) === 0 ? end.x + 1 : width;
71
+ return { from: Math.max(0, Math.min(from, width)), to: Math.max(0, Math.min(to, width)) };
72
+ }
73
+ /**
74
+ * Where the pointer is, as a place in the conversation (pure).
75
+ *
76
+ * Above the view is the start of its first row and below it is the end of its last: a
77
+ * pointer pulled out past an edge to make the view scroll keeps selecting whole lines, the
78
+ * way it does in a document. Null when there is no block there to select (blank space
79
+ * above a conversation that does not fill the screen).
80
+ */
81
+ export function focusFromPointer(spans, view, x, y, width) {
82
+ let row = y;
83
+ let col = x;
84
+ if (y < view.top) {
85
+ row = view.top;
86
+ col = 0;
87
+ }
88
+ else if (y >= view.bottom) {
89
+ row = view.bottom - 1;
90
+ col = width - 1;
91
+ }
92
+ const key = keyAtRow(spans, row);
93
+ if (!key)
94
+ return null;
95
+ return { ...key, x: Math.max(0, Math.min(col, width - 1)) };
96
+ }
97
+ /**
98
+ * How far to scroll for a pointer held at `y` while dragging (pure). Positive scrolls back
99
+ * (up), negative forward (down), zero not at all.
100
+ *
101
+ * Past the edge of the view the pointer asks for it, and the further past, the faster. When
102
+ * the view reaches the top or bottom of the whole screen there is nothing beyond it for the
103
+ * pointer to go to, so the edge row itself asks, gently: otherwise a conversation that fills
104
+ * the screen could never be selected past its first or last row.
105
+ */
106
+ export function edgeLines(y, view, screenRows) {
107
+ const speed = (d) => (d <= 1 ? 2 : d <= 3 ? 3 : 6);
108
+ if (y < view.top || (y === view.top && view.top === 0))
109
+ return speed(view.top - y);
110
+ if (y >= view.bottom || (y === view.bottom - 1 && view.bottom >= screenRows))
111
+ return -speed(y - (view.bottom - 1));
112
+ return 0;
113
+ }
114
+ /** Write one row's worth of the highlight: the same flat inverse block `selection.ts` draws. */
115
+ function tint(screen, y, from, to) {
116
+ for (let x = from; x < to; x++) {
117
+ const i = screen.index(x, y);
118
+ screen.fg[i] = DEFAULT_COLOR;
119
+ screen.bg[i] = DEFAULT_COLOR;
120
+ screen.attrs[i] = (screen.attrs[i] | ATTR.inverse) & ~ATTR.dim;
121
+ }
122
+ }
123
+ /** Highlight the part of the selection that is on screen, in place, on the frame about to be drawn. */
124
+ export function applyGrowSelection(screen, sel, spans, view) {
125
+ if (!sel || isEmptyGrow(sel))
126
+ return;
127
+ const top = Math.max(0, view.top);
128
+ const bottom = Math.min(screen.height, view.bottom);
129
+ // The two-column strip on the left holds the dot or the ">" and nothing else, so it is never
130
+ // highlighted: not the marker, not the blank cells beside it, and not the same strip on the rows
131
+ // under it or on the empty rows between messages. Only a strip that really is that (a marker and a
132
+ // space, or two blanks) is left out, so text that starts at column 0 stays selectable.
133
+ for (let y = top; y < bottom; y++) {
134
+ const key = keyAtRow(spans, y);
135
+ if (!key)
136
+ continue;
137
+ const cov = coverage(sel, key, screen.width);
138
+ if (!cov)
139
+ continue;
140
+ let from = cov.from;
141
+ if (from < 2) {
142
+ const c0 = screen.chars[screen.index(0, y)];
143
+ const c1 = screen.chars[screen.index(1, y)];
144
+ if (((c0 === 0x25cf || c0 === 0x3e) && c1 === 32) || (blankCell(c0) && blankCell(c1)))
145
+ from = 2;
146
+ }
147
+ // A stretch with nothing written in it is not highlighted: empty space has nothing to select.
148
+ let written = false;
149
+ for (let x = from; x < cov.to && !written; x++)
150
+ written = !blankCell(screen.chars[screen.index(x, y)]);
151
+ if (written)
152
+ tint(screen, y, from, cov.to);
153
+ }
154
+ }
155
+ /**
156
+ * Which click in a row this one is (pure).
157
+ *
158
+ * A click counts as the next one only when it comes soon enough after the last and lands on the
159
+ * same place (the same row, within a couple of columns). Too late, or somewhere else, and it is a
160
+ * first click again, so a stray second click never selects anything by accident. A fourth click
161
+ * starts over rather than counting on.
162
+ */
163
+ export function nextClick(prev, now, x, y, windowMs) {
164
+ const again = !!prev && now - prev.at <= windowMs && prev.y === y && Math.abs(prev.x - x) <= 2 && prev.count < 3;
165
+ return { at: now, x, y, count: again ? prev.count + 1 : 1 };
166
+ }
167
+ /** Whether a cell holds nothing to select: a space, or a cell that was never written. */
168
+ function blankCell(ch) {
169
+ return ch === 32 || ch === 0;
170
+ }
171
+ /**
172
+ * The word under a click, as the columns it covers, both ends included (pure): the unbroken
173
+ * run of characters on the row around column `x`. Null when `x` is on a blank, where there is
174
+ * nothing to select.
175
+ */
176
+ export function wordBounds(cells, x) {
177
+ if (x < 0 || x >= cells.length || blankCell(cells[x]))
178
+ return null;
179
+ let from = x;
180
+ while (from > 0 && !blankCell(cells[from - 1]))
181
+ from--;
182
+ let to = x;
183
+ while (to < cells.length - 1 && !blankCell(cells[to + 1]))
184
+ to++;
185
+ return { from, to };
186
+ }
187
+ /**
188
+ * The whole line, as the columns from its first character to its last (pure). Null when the
189
+ * row is blank.
190
+ */
191
+ export function lineBounds(cells) {
192
+ let from = 0;
193
+ while (from < cells.length && blankCell(cells[from]))
194
+ from++;
195
+ if (from >= cells.length)
196
+ return null;
197
+ let to = cells.length - 1;
198
+ while (to > from && blankCell(cells[to]))
199
+ to--;
200
+ return { from, to };
201
+ }
202
+ /** The marker a block starts with in the gutter: the agent's dot, or the ">" of your own message, and its space. */
203
+ const GUTTER_MARK = /^[●>] /;
204
+ /** The two columns of gutter the rest of a block's rows are indented by. */
205
+ const GUTTER_INDENT = /^ {1,2}/;
206
+ /**
207
+ * The rows seen on screen while a selection was alive.
208
+ *
209
+ * Keyed by block and row-in-block, so what is stored stays right however the transcript
210
+ * moves around it. A row is stored again every frame it is visible, so text that is still
211
+ * being written (a streaming reply, a running command) is the latest version of it.
212
+ */
213
+ export class RowStore {
214
+ rows = new Map();
215
+ /** The last height each block was seen at, to know which rows of it should exist. */
216
+ heights = new Map();
217
+ width = 0;
218
+ clear() {
219
+ this.rows.clear();
220
+ this.heights.clear();
221
+ this.width = 0;
222
+ }
223
+ /**
224
+ * Take what the frame shows.
225
+ *
226
+ * `mask` is a stretch of one row that is not conversation: the "catch up" chip drawn over
227
+ * the view's last row. A row already stored is left alone then (it was captured clean
228
+ * when it was somewhere else); one that was not is stored with those cells blanked, so
229
+ * the chip's words can never end up in what is copied.
230
+ */
231
+ capture(screen, spans, view, mask) {
232
+ this.width = screen.width;
233
+ for (const s of spans)
234
+ this.heights.set(s.id, s.height);
235
+ const top = Math.max(0, view.top);
236
+ const bottom = Math.min(screen.height, view.bottom);
237
+ for (let y = top; y < bottom; y++) {
238
+ const key = keyAtRow(spans, y);
239
+ if (!key)
240
+ continue;
241
+ let inner = this.rows.get(key.id);
242
+ if (!inner)
243
+ this.rows.set(key.id, (inner = new Map()));
244
+ const masked = mask && mask.y === y;
245
+ if (masked && inner.has(key.off))
246
+ continue;
247
+ const cells = new Uint32Array(screen.width);
248
+ for (let x = 0; x < screen.width; x++)
249
+ cells[x] = screen.chars[screen.index(x, y)];
250
+ if (masked)
251
+ for (let x = Math.max(0, mask.x0); x < Math.min(screen.width, mask.x1); x++)
252
+ cells[x] = 32;
253
+ inner.set(key.off, cells);
254
+ }
255
+ }
256
+ /** Whether a conversation row has been seen. */
257
+ has(key) {
258
+ return this.rows.get(key.id)?.has(key.off) ?? false;
259
+ }
260
+ /**
261
+ * The text between the two ends, as it would be pasted.
262
+ *
263
+ * `orderedIds` is every block in transcript order, and `knownHeight` what is known of a
264
+ * block that was measured without being drawn. Together they say which rows SHOULD exist
265
+ * between the ends, so a row that never reached the screen is reported (`complete`)
266
+ * instead of leaving the join quietly wrong.
267
+ */
268
+ text(sel, orderedIds, knownHeight) {
269
+ const { start, end } = normalizeGrow(sel);
270
+ const out = [];
271
+ let complete = true;
272
+ for (const id of orderedIds) {
273
+ if (id < start.id || id > end.id)
274
+ continue;
275
+ const inner = this.rows.get(id);
276
+ const height = this.heights.get(id) ?? knownHeight?.(id);
277
+ if (height === undefined) {
278
+ // Never drawn and never measured: nothing about it is known.
279
+ complete = false;
280
+ continue;
281
+ }
282
+ const first = id === start.id ? start.off : 0;
283
+ const last = id === end.id ? Math.min(end.off, height - 1) : height - 1;
284
+ // Whether this block's marker (the dot or the ">") was taken off its first row, so the rows
285
+ // that carry on under it lose the gutter they were indented by.
286
+ let markerGone = false;
287
+ for (let off = first; off <= last; off++) {
288
+ const cells = inner?.get(off);
289
+ if (!cells) {
290
+ complete = false;
291
+ continue;
292
+ }
293
+ const cov = coverage(sel, { id, off }, cells.length);
294
+ if (!cov)
295
+ continue;
296
+ let line = cellsText(cells, cov.from, cov.to);
297
+ // The marker in the gutter belongs to the screen, not to the text. It goes only when the
298
+ // selection takes in the start of the row: a word picked from the middle has no marker.
299
+ if (cov.from === 0) {
300
+ if (off === 0 && GUTTER_MARK.test(line)) {
301
+ line = line.replace(GUTTER_MARK, "");
302
+ markerGone = true;
303
+ }
304
+ else if (markerGone) {
305
+ line = line.replace(GUTTER_INDENT, "");
306
+ }
307
+ }
308
+ out.push(line);
309
+ }
310
+ }
311
+ return { text: out.join("\n"), complete };
312
+ }
313
+ }
314
+ /** A stretch of a row as text: no right halves of wide characters, no padding at the end. */
315
+ function cellsText(cells, from, to) {
316
+ let line = "";
317
+ for (let x = from; x < to; x++) {
318
+ const ch = cells[x];
319
+ // The right half of a wide character carries no codepoint of its own, and the renderer's
320
+ // "unknown cell" sentinel is not a character; neither may reach fromCodePoint, which throws.
321
+ if (ch === WIDE_CONTINUATION || ch > 0x10ffff)
322
+ continue;
323
+ line += String.fromCodePoint(ch);
324
+ }
325
+ return line.replace(/\s+$/, "");
326
+ }
327
+ //# sourceMappingURL=selectionGrow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectionGrow.js","sourceRoot":"","sources":["../../src/cli/selectionGrow.ts"],"names":[],"mappings":"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"}
@@ -6,9 +6,12 @@
6
6
  * test)`. Pure, display-only (never sent to a model), and deterministic from the
7
7
  * tool name + parsed args.
8
8
  */
9
+ import { isAbsolute, resolve } from "node:path";
9
10
  import { toPathList } from "../tools/pathList.js";
10
11
  import { formatDuration } from "../tools/detail.js";
11
12
  import { BAD, GOOD } from "./theme.js";
13
+ /** What a picture the agent looked at is called on its line. */
14
+ export const VIEWED_NAME = "Viewed";
12
15
  /** Raw tool name → the bold display name shown in the row. */
13
16
  const DISPLAY_NAME = {
14
17
  read_file: "Read",
@@ -25,7 +28,7 @@ const DISPLAY_NAME = {
25
28
  web_search: "WebSearch",
26
29
  screenshot: "WindowCapture",
27
30
  ui: "App",
28
- view_image: "Viewed",
31
+ view_image: VIEWED_NAME,
29
32
  use_skill: "Skill",
30
33
  skill: "Skill",
31
34
  todo_write: "Todo",
@@ -85,6 +88,16 @@ const COMMANDS = new Set(["run_command", "shells", "kill_shell"]);
85
88
  * row with the commands and reads, as steps of one test.
86
89
  */
87
90
  const TEST_STEPS = new Set(["ui"]);
91
+ /**
92
+ * A call to a tool an MCP server offers (`mcp__rea__open_binary`). They fold into the work
93
+ * row with commands and reads, as "Called 3 MCP tools", for the same reason those do: most
94
+ * answer something nobody needs to read, and a burst of them was a wall of rows.
95
+ */
96
+ export function isMcpCall(name) {
97
+ return name.startsWith("mcp__");
98
+ }
99
+ /** What a folded MCP call is named on its line. The tool is the point, the server says whose. */
100
+ export const MCP_CALL_NAME = "MCP tool";
88
101
  /** Whether a call is the agent working in the shell. */
89
102
  export function isCommandTool(name) {
90
103
  return COMMANDS.has(name);
@@ -149,7 +162,7 @@ export function neverShown(name) {
149
162
  }
150
163
  /** Whether a tool call should fold into the discovery group rather than its own row. */
151
164
  export function isGroupable(name) {
152
- return GROUPABLE.has(name) || COMMANDS.has(name) || TEST_STEPS.has(name);
165
+ return GROUPABLE.has(name) || COMMANDS.has(name) || TEST_STEPS.has(name) || isMcpCall(name) || name === "mcp_server" || name === "view_image";
153
166
  }
154
167
  const TOOL_KIND = {
155
168
  read_file: "read",
@@ -209,14 +222,22 @@ export function dotColorFor(kind, status) {
209
222
  return undefined;
210
223
  }
211
224
  /** Build the `Name(arg)` display parts for a tool call. */
212
- export function toolDisplay(name, args) {
225
+ export function toolDisplay(name, args, cwd) {
213
226
  const kind = toolKind(name);
214
227
  // mcp__<server>__<tool> has no static DISPLAY_NAME entry (the name is generated
215
228
  // per-server, see src/mcp/manager.ts) — parse it back into "MCPServer(server)"
216
229
  // the way the tool header for everything else reads.
217
230
  if (name.startsWith("mcp__")) {
218
- const [, server] = name.split("__");
219
- return { name: "MCPServer", arg: server || undefined, kind };
231
+ const [, server, ...rest] = name.split("__");
232
+ const tool = rest.join("__");
233
+ return { name: MCP_CALL_NAME, arg: server && tool ? `${server} · ${tool}` : server || undefined, kind };
234
+ }
235
+ // Changing a server's setup: the ACTION leads the argument ("MCP(add rea)", "MCP(reconnect
236
+ // rea)"), so the row says what was done before it says whether it worked.
237
+ if (name === "mcp_server") {
238
+ const action = typeof args.action === "string" && args.action.trim() ? args.action.trim() : "add";
239
+ const server = typeof args.name === "string" ? args.name.trim() : "";
240
+ return { name: "MCP", arg: server ? `${action} ${server}` : action, kind };
220
241
  }
221
242
  // Every REGISTERED tool has an entry above (enforced by test), so reaching the
222
243
  // fallback means the model named a tool that does not exist.
@@ -318,9 +339,9 @@ export function toolDisplay(name, args) {
318
339
  const many = toPathList(args);
319
340
  const path = many.length === 1 ? (many[0] ?? "") : "";
320
341
  const detail = many.length > 1
321
- ? many.map(base).join(", ")
342
+ ? many.map((p) => fullPath(p, cwd)).join(", ")
322
343
  : path
323
- ? base(path)
344
+ ? fullPath(path, cwd)
324
345
  : str(args.symbol) || str(args.name) || str(args.query) || str(args.label);
325
346
  return {
326
347
  name: display,
@@ -338,6 +359,18 @@ function base(p) {
338
359
  const parts = p.split(/[\\/]/).filter(Boolean);
339
360
  return parts.length > 0 ? parts[parts.length - 1] : p;
340
361
  }
362
+ /**
363
+ * A path as the row names it. The terminal passes the project folder and gets the whole path,
364
+ * forward slashes, so it can be found and copied (`C:/Projects/Cutio/src/app.ts`); a relative
365
+ * path is resolved against that folder. A caller without one (the desktop app draws its own
366
+ * rows) keeps the short form, the file's name.
367
+ */
368
+ function fullPath(p, cwd) {
369
+ if (!cwd)
370
+ return base(p);
371
+ const abs = isAbsolute(p) ? p : resolve(cwd, p);
372
+ return abs.replace(/\\/g, "/");
373
+ }
341
374
  function clip(s, max) {
342
375
  const flat = s.replace(/\s+/g, " ").trim();
343
376
  return flat.length <= max ? flat : flat.slice(0, max - 1) + "…";
@@ -1 +1 @@
1
- {"version":3,"file":"toolDisplay.js","sourceRoot":"","sources":["../../src/cli/toolDisplay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"toolDisplay.js","sourceRoot":"","sources":["../../src/cli/toolDisplay.ts"],"names":[],"mappings":"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"}
@@ -73,7 +73,7 @@ export function lastExpandable(s) {
73
73
  for (const list of [s.tail, s.committed]) {
74
74
  for (let i = list.length - 1; i >= 0; i--) {
75
75
  const b = list[i];
76
- if ((b.kind === "tool" && b.full) || b.kind === "work" || b.kind === "subagent")
76
+ if ((b.kind === "tool" && b.full) || b.kind === "work" || b.kind === "subagent" || b.kind === "help")
77
77
  return b.id;
78
78
  }
79
79
  }
@@ -282,21 +282,27 @@ export function reduce(s, a) {
282
282
  status: "running",
283
283
  startedAt: a.at ?? Date.now(),
284
284
  ...(a.covers ? { covers: a.covers } : {}),
285
+ ...(a.byUser ? { byUser: true } : {}),
285
286
  };
286
- const open = sealed.tail.find((b) => b.kind === "work" && !b.closed);
287
+ // A command the person ran and a call the agent made are never in one row: "You ran" would
288
+ // be a claim about calls that are not theirs. Whichever is open when the other kind arrives
289
+ // is closed first.
290
+ const found = sealed.tail.find((b) => b.kind === "work" && !b.closed);
291
+ const open = found && found.kind === "work" && found.items.every((it) => !!it.byUser === !!a.byUser) ? found : undefined;
292
+ const base = found && !open ? closeToolGroup(sealed) : sealed;
287
293
  if (open && open.kind === "work") {
288
294
  return {
289
295
  ...sealed,
290
296
  toolMap: { ...sealed.toolMap, [a.toolId]: open.id },
291
- tail: sealed.tail.map((b) => (b.id === open.id && b.kind === "work" ? { ...b, items: [...b.items, item], done: false } : b)),
297
+ tail: sealed.tail.map((b) => (b.id === open.id && b.kind === "work" ? { ...b, items: [...b.items, item], done: false, live: true } : b)),
292
298
  };
293
299
  }
294
- const gid = sealed.seq + 1;
300
+ const gid = base.seq + 1;
295
301
  return {
296
- ...sealed,
302
+ ...base,
297
303
  seq: gid,
298
- toolMap: { ...sealed.toolMap, [a.toolId]: gid },
299
- tail: sealed.tail.concat({ kind: "work", id: gid, done: false, live: true, items: [item] }),
304
+ toolMap: { ...base.toolMap, [a.toolId]: gid },
305
+ tail: base.tail.concat({ kind: "work", id: gid, done: false, live: true, items: [item] }),
300
306
  };
301
307
  }
302
308
  // A mutating/standalone tool: close any open group, then show it on its own row.
@@ -392,6 +398,12 @@ export function reduce(s, a) {
392
398
  return drain({ ...sealed, seq: id, tail: sealed.tail.concat({ kind: "error", id, done: true, text: a.text }) });
393
399
  }
394
400
  case "toggleExpand": {
401
+ // The command list is not opened or folded: a click takes it away, and the conversation
402
+ // is as it was before it was asked for.
403
+ const isHelp = (b) => b.kind === "help" && b.id === a.id;
404
+ if (s.committed.some(isHelp) || s.tail.some(isHelp)) {
405
+ return { ...s, committed: s.committed.filter((b) => !isHelp(b)), tail: s.tail.filter((b) => !isHelp(b)) };
406
+ }
395
407
  // Committed rows too: every block is re-rendered each frame, and the row being
396
408
  // clicked is nearly always one that finished a while ago.
397
409
  const flip = (b) => b.kind === "tool" && b.id === a.id && b.full
@@ -459,6 +471,11 @@ export function reduce(s, a) {
459
471
  const id = c.seq + 1;
460
472
  return drain({ ...c, seq: id, tail: c.tail.concat({ kind: "notice", id, done: true, title: a.title, body: a.body }) });
461
473
  }
474
+ case "help": {
475
+ const c = closeToolGroup(s);
476
+ const id = c.seq + 1;
477
+ return drain({ ...c, seq: id, tail: c.tail.concat({ kind: "help", id, done: true, text: a.text }) });
478
+ }
462
479
  case "compaction": {
463
480
  const c = closeToolGroup(s);
464
481
  const id = c.seq + 1;