mindweave 3.2.1 → 3.2.3
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/cli/App.js +2 -2
- package/dist/cli/App.js.map +1 -1
- package/dist/cli/agentLines.js +196 -0
- package/dist/cli/agentLines.js.map +1 -0
- package/dist/cli/components/BlockView.js +1 -1
- package/dist/cli/components/BlockView.js.map +1 -1
- package/dist/cli/components/SubagentView.js +43 -74
- package/dist/cli/components/SubagentView.js.map +1 -1
- package/dist/cli/components/WorkGroup.js +55 -11
- package/dist/cli/components/WorkGroup.js.map +1 -1
- package/dist/cli/help.js +6 -3
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/toolDisplay.js +8 -2
- package/dist/cli/toolDisplay.js.map +1 -1
- package/dist/cli/transcript.js +15 -5
- package/dist/cli/transcript.js.map +1 -1
- package/dist/cli/workLines.js +63 -8
- package/dist/cli/workLines.js.map +1 -1
- package/dist/cli/zz_show.js +24 -0
- package/dist/cli/zz_show.js.map +1 -0
- package/dist/core/turnRunner.js +22 -4
- package/dist/core/turnRunner.js.map +1 -1
- package/dist/dynamo/engine.js +6 -3
- package/dist/dynamo/engine.js.map +1 -1
- package/dist/dynamo/guard.js +6 -0
- package/dist/dynamo/guard.js.map +1 -1
- package/dist/dynamo/marathon.js +17 -4
- package/dist/dynamo/marathon.js.map +1 -1
- package/dist/memory/compaction.js +60 -6
- package/dist/memory/compaction.js.map +1 -1
- package/dist/memory/session.js +2 -0
- package/dist/memory/session.js.map +1 -1
- package/dist/tools/guard.js +13 -0
- package/dist/tools/guard.js.map +1 -1
- package/dist/tools/rebuildDetail.js +2 -3
- package/dist/tools/rebuildDetail.js.map +1 -1
- package/dist/tools/registry.js +1 -1
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/runCommand.js +9 -0
- package/dist/tools/runCommand.js.map +1 -1
- package/dist/tools/screenshot.js +28 -9
- package/dist/tools/screenshot.js.map +1 -1
- package/dist/tools/screenshotWin.js +258 -175
- package/dist/tools/screenshotWin.js.map +1 -1
- package/dist/tools/subagent.js +55 -27
- package/dist/tools/subagent.js.map +1 -1
- package/dist/tools/subagentOutcome.js +24 -0
- package/dist/tools/subagentOutcome.js.map +1 -0
- package/dist/tools/treeGuard.js +164 -0
- package/dist/tools/treeGuard.js.map +1 -0
- package/dist/tools/ui.js +34 -7
- package/dist/tools/ui.js.map +1 -1
- package/dist/tools/uiHide.js +19 -6
- package/dist/tools/uiHide.js.map +1 -1
- package/dist/tools/verifierCommands.js +188 -0
- package/dist/tools/verifierCommands.js.map +1 -0
- package/dist/tools/verifierRun.js +88 -0
- package/dist/tools/verifierRun.js.map +1 -0
- package/dist/tools/verifierTools.js +19 -0
- package/dist/tools/verifierTools.js.map +1 -0
- package/dist/tools/verifyReport.js +79 -9
- package/dist/tools/verifyReport.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agentLines.ts — what a sub-agent says about itself on screen (pure).
|
|
3
|
+
*
|
|
4
|
+
* A sub-agent used to be its task prompt pasted onto one line, then every call it made, then a
|
|
5
|
+
* summary built for the lead agent. This turns that into what a person wants to know, in the order
|
|
6
|
+
* they want it: a short title, how it ended, and, opened, the task, the result and what it did.
|
|
7
|
+
* The list of calls is folded the way the commands row folds them: counts first, repeats merged.
|
|
8
|
+
*/
|
|
9
|
+
import { itemLabel } from "./toolItems.js";
|
|
10
|
+
import { visibleWidth, wrapAnsi } from "./wrap.js";
|
|
11
|
+
/**
|
|
12
|
+
* A short title from the task the agent was given (pure). The task is a prompt written for a model
|
|
13
|
+
* ("You are re-verifying a FIXED bug in Notes App, an Electron app at C:\\Projects\\...") and is
|
|
14
|
+
* never a title, so this keeps the first idea in it: the opening words dropped, the first sentence
|
|
15
|
+
* or clause kept, a path left off, and the cut made at a word, never in the middle of one.
|
|
16
|
+
*/
|
|
17
|
+
export function agentTitle(task, max) {
|
|
18
|
+
let t = task.replace(/\s+/g, " ").trim();
|
|
19
|
+
t = t.replace(/^(?:you are|you're|your task is to|your job is to|task:|please)\s+/i, "");
|
|
20
|
+
const end = t.search(/[.!?](?:\s|$)|:\s| — | - /);
|
|
21
|
+
if (end >= 12)
|
|
22
|
+
t = t.slice(0, end);
|
|
23
|
+
const comma = t.indexOf(", ");
|
|
24
|
+
if (comma >= 20)
|
|
25
|
+
t = t.slice(0, comma);
|
|
26
|
+
t = t.replace(/\s+(?:at|in|under|inside)\s+(?:[A-Za-z]:\\|\/|~)\S*.*$/i, "");
|
|
27
|
+
t = t.replace(/[\s,;:.-]+$/, "");
|
|
28
|
+
if (t === "")
|
|
29
|
+
return "";
|
|
30
|
+
t = t.charAt(0).toUpperCase() + t.slice(1);
|
|
31
|
+
if (t.length <= max)
|
|
32
|
+
return t;
|
|
33
|
+
const room = Math.max(1, max - 1);
|
|
34
|
+
const space = t.lastIndexOf(" ", room);
|
|
35
|
+
return `${t.slice(0, space >= Math.floor(room / 2) ? space : room).replace(/[\s,;:.-]+$/, "")}…`;
|
|
36
|
+
}
|
|
37
|
+
/** A span of time, whole seconds under a minute and `2m 10s` past it (pure). */
|
|
38
|
+
export function humanSpan(ms) {
|
|
39
|
+
const seconds = Math.max(0, Math.round(ms / 1000));
|
|
40
|
+
if (seconds < 60)
|
|
41
|
+
return `${seconds}s`;
|
|
42
|
+
const m = Math.floor(seconds / 60);
|
|
43
|
+
const s = seconds % 60;
|
|
44
|
+
return s === 0 ? `${m}m` : `${m}m ${s}s`;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Everything a worker did as lines, repeats merged wherever they happen (pure).
|
|
48
|
+
* A poll that came back six times, with other calls between, is `Shell #4 (running) ×6`, not six
|
|
49
|
+
* lines. First appearance sets the order, so the list still reads as what happened.
|
|
50
|
+
*/
|
|
51
|
+
export function didRows(items) {
|
|
52
|
+
const rows = [];
|
|
53
|
+
const byLabel = new Map();
|
|
54
|
+
for (const it of items) {
|
|
55
|
+
// A look at the shell list ("1 running, 4 total") is bookkeeping, not something it did to the project.
|
|
56
|
+
const label = it.name === "Shell" && !it.arg ? "Checked the shells" : itemLabel(it);
|
|
57
|
+
const at = byLabel.get(label);
|
|
58
|
+
if (at) {
|
|
59
|
+
at.count += 1;
|
|
60
|
+
if (it.status === "error")
|
|
61
|
+
at.error = true;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
const row = { label, count: 1, error: it.status === "error" };
|
|
65
|
+
byLabel.set(label, row);
|
|
66
|
+
rows.push(row);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return rows;
|
|
70
|
+
}
|
|
71
|
+
function kindOf(it) {
|
|
72
|
+
switch (it.kind) {
|
|
73
|
+
case "read":
|
|
74
|
+
return "read";
|
|
75
|
+
case "search":
|
|
76
|
+
return "search";
|
|
77
|
+
case "run":
|
|
78
|
+
return "run";
|
|
79
|
+
case "edit":
|
|
80
|
+
case "write":
|
|
81
|
+
return "change";
|
|
82
|
+
default:
|
|
83
|
+
return "other";
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* What it did, counted: "Read 6 files, ran 4 commands" (pure). Each kind has its own tense and its
|
|
88
|
+
* own noun, in the order they began, and a call that failed or was refused is said at the end.
|
|
89
|
+
*/
|
|
90
|
+
export function didText(items, live) {
|
|
91
|
+
if (items.length === 0)
|
|
92
|
+
return live ? "Starting" : "Nothing";
|
|
93
|
+
const order = [];
|
|
94
|
+
for (const it of items) {
|
|
95
|
+
const k = kindOf(it);
|
|
96
|
+
if (!order.includes(k))
|
|
97
|
+
order.push(k);
|
|
98
|
+
}
|
|
99
|
+
const parts = order.map((k, i) => {
|
|
100
|
+
const mine = items.filter((it) => kindOf(it) === k);
|
|
101
|
+
const going = live && mine.some((it) => it.status === "running");
|
|
102
|
+
const n = k === "read" ? mine.reduce((sum, it) => sum + Math.max(1, it.covers ?? 1), 0) : mine.length;
|
|
103
|
+
let text;
|
|
104
|
+
switch (k) {
|
|
105
|
+
case "read":
|
|
106
|
+
text = `${going ? "Reading" : "Read"} ${n} file${n === 1 ? "" : "s"}`;
|
|
107
|
+
break;
|
|
108
|
+
case "search":
|
|
109
|
+
text = `${going ? "Searching" : "Searched"} ${n === 1 ? "once" : `${n} times`}`;
|
|
110
|
+
break;
|
|
111
|
+
case "run":
|
|
112
|
+
text = `${going ? "Running" : "Ran"} ${n} command${n === 1 ? "" : "s"}`;
|
|
113
|
+
break;
|
|
114
|
+
case "change":
|
|
115
|
+
text = `${going ? "Changing" : "Changed"} ${n} file${n === 1 ? "" : "s"}`;
|
|
116
|
+
break;
|
|
117
|
+
default:
|
|
118
|
+
text = `${n} other call${n === 1 ? "" : "s"}`;
|
|
119
|
+
}
|
|
120
|
+
return i === 0 ? text : text.charAt(0).toLowerCase() + text.slice(1);
|
|
121
|
+
});
|
|
122
|
+
const failed = items.filter((it) => it.status === "error").length;
|
|
123
|
+
return failed > 0 ? `${parts.join(", ")}, ${failed} failed` : parts.join(", ");
|
|
124
|
+
}
|
|
125
|
+
/** What it is doing right now, in the present tense: "reading use-debounced.ts" (pure). */
|
|
126
|
+
export function nowText(items) {
|
|
127
|
+
const going = [...items].reverse().find((it) => it.status === "running");
|
|
128
|
+
if (!going)
|
|
129
|
+
return "";
|
|
130
|
+
const text = itemLabel(going);
|
|
131
|
+
return text.charAt(0).toLowerCase() + text.slice(1);
|
|
132
|
+
}
|
|
133
|
+
export function toneOf(agent) {
|
|
134
|
+
if (agent.verdict === "pass")
|
|
135
|
+
return "good";
|
|
136
|
+
if (agent.verdict === "fail" || agent.status === "error")
|
|
137
|
+
return "bad";
|
|
138
|
+
if (agent.verdict === "partial" || agent.verdict === "unknown")
|
|
139
|
+
return "warn";
|
|
140
|
+
return undefined;
|
|
141
|
+
}
|
|
142
|
+
/** The mark before the outcome: a tick, a cross, or a bang for "not sure". */
|
|
143
|
+
export function markOf(tone) {
|
|
144
|
+
return tone === "good" ? "✓" : tone === "bad" ? "✗" : tone === "warn" ? "!" : "·";
|
|
145
|
+
}
|
|
146
|
+
/** How many lines of what it did are shown opened before the rest is counted. */
|
|
147
|
+
export const MAX_DID_ROWS = 12;
|
|
148
|
+
/**
|
|
149
|
+
* The opened view (pure): the task, how it ended, what it did in a count, then each thing it did.
|
|
150
|
+
* The task is cut to three lines of `width` and ends in an ellipsis when there is more.
|
|
151
|
+
*/
|
|
152
|
+
export function bodyRows(agent, live, width) {
|
|
153
|
+
const rows = [];
|
|
154
|
+
const task = (agent.full ?? agent.task).replace(/\s+/g, " ").trim();
|
|
155
|
+
if (task)
|
|
156
|
+
rows.push({ label: "Task", text: cutLines(task, width, 3) });
|
|
157
|
+
if (!live && agent.headline)
|
|
158
|
+
rows.push({ label: "Result", text: `${markOf(toneOf(agent))} ${agent.headline}`, tone: toneOf(agent) });
|
|
159
|
+
else if (!live && agent.summary)
|
|
160
|
+
rows.push({ label: "Result", text: agent.summary, tone: toneOf(agent) });
|
|
161
|
+
rows.push({ label: "Did", text: didText(agent.items, live) });
|
|
162
|
+
const list = didRows(agent.items);
|
|
163
|
+
const shown = list.slice(0, MAX_DID_ROWS);
|
|
164
|
+
for (const r of shown)
|
|
165
|
+
rows.push({ label: "", text: r.count > 1 ? `${r.label} ×${r.count}` : r.label, tone: r.error ? "bad" : undefined });
|
|
166
|
+
if (list.length > shown.length)
|
|
167
|
+
rows.push({ label: "", text: `… and ${list.length - shown.length} more` });
|
|
168
|
+
return rows;
|
|
169
|
+
}
|
|
170
|
+
/** A text kept to `lines` rows of `width` columns, with an ellipsis where it was cut (pure). */
|
|
171
|
+
function cutLines(text, width, lines) {
|
|
172
|
+
const room = Math.max(8, width) * lines;
|
|
173
|
+
if (text.length <= room)
|
|
174
|
+
return text;
|
|
175
|
+
const cut = text.lastIndexOf(" ", room - 1);
|
|
176
|
+
return `${text.slice(0, cut > room / 2 ? cut : room - 1).replace(/[\s,;:.-]+$/, "")}…`;
|
|
177
|
+
}
|
|
178
|
+
/** The width of the label column ("Result") and what is left of a line for the words. */
|
|
179
|
+
export const LABEL_WIDTH = 8;
|
|
180
|
+
export function bandText(columns) {
|
|
181
|
+
return Math.max(8, columns - 14);
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* The opened rows as lines of exact width (pure): every line wraps to the room beside the label
|
|
185
|
+
* column, a wrapped line hangs under its words, and each is padded so the band is a clean block.
|
|
186
|
+
*/
|
|
187
|
+
export function bandRows(rows, columns) {
|
|
188
|
+
const room = bandText(columns);
|
|
189
|
+
const out = [];
|
|
190
|
+
for (const r of rows) {
|
|
191
|
+
const parts = wrapAnsi(r.text === "" ? " " : r.text, room);
|
|
192
|
+
parts.forEach((part, i) => out.push({ label: i === 0 ? r.label : "", text: part, tone: r.tone, pad: Math.max(0, room - visibleWidth(part)) }));
|
|
193
|
+
}
|
|
194
|
+
return out;
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=agentLines.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentLines.js","sourceRoot":"","sources":["../../src/cli/agentLines.ts"],"names":[],"mappings":"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"}
|
|
@@ -79,7 +79,7 @@ function BlockViewInner({ block, columns, tightTop, hovered, hoveredItem }) {
|
|
|
79
79
|
case "work":
|
|
80
80
|
return (_jsx(WorkGroup, { id: block.id, items: block.items, open: block.open, live: block.live, columns: columns, tightTop: tightTop, hovered: hovered, hoveredItem: hoveredItem }));
|
|
81
81
|
case "subagent":
|
|
82
|
-
return (_jsx(SubagentView, { agents: block.agents, done: block.done, columns: columns, tightTop: tightTop }));
|
|
82
|
+
return (_jsx(SubagentView, { id: block.id, agents: block.agents, done: block.done, columns: columns, tightTop: tightTop, hoveredItem: hoveredItem }));
|
|
83
83
|
case "error":
|
|
84
84
|
return (_jsxs(Box, { marginTop: 1, flexDirection: "row", children: [_jsx(Box, { minWidth: 2, children: _jsx(Text, { color: BAD, children: "●" }) }), _jsx(WrappedText, { text: block.text, width: textWidth, color: BAD })] }));
|
|
85
85
|
case "completion":
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockView.js","sourceRoot":"","sources":["../../../src/cli/components/BlockView.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"BlockView.js","sourceRoot":"","sources":["../../../src/cli/components/BlockView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,89 +1,58 @@
|
|
|
1
|
-
import { jsx as _jsx,
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
/**
|
|
3
|
-
* SubagentView — delegated work, as a
|
|
3
|
+
* SubagentView — delegated work, as a title and an answer, with the working a click away.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
5
|
+
* ● Sub-agent Re-verifying a FIXED bug in Notes App · read-only
|
|
6
|
+
* ! Could not fully verify · 8 checks · 20 steps · 2m 10s ▸
|
|
6
7
|
*
|
|
7
|
-
*
|
|
8
|
-
* │ Searching authFetch
|
|
9
|
-
* │ Read login.ts
|
|
10
|
-
* ⎿ 3 steps · read-only ← collapses here once it reports back
|
|
8
|
+
* While it works, the dot pulses and the second line says where it is:
|
|
11
9
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
10
|
+
* ● Sub-agent Re-verifying a FIXED bug in Notes App · read-only
|
|
11
|
+
* step 12 · reading use-debounced.ts 1m 5s ▸
|
|
14
12
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
13
|
+
* What you want from a worker is the answer, so that is what shows: how it ended (a tick, a cross,
|
|
14
|
+
* or a bang when it could only half do it), the steps it took and the time. Its task is a prompt
|
|
15
|
+
* written for a model, so the line holds a short title taken from it, not the prompt itself. A
|
|
16
|
+
* click opens a shaded band: the task, the result, a count of what it did, then each thing it
|
|
17
|
+
* did, with repeats merged (a poll that came back six times is one line, ×6).
|
|
20
18
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* actually reports (its task, whether it may write, its progress). The reference
|
|
25
|
-
* design also labels each with a model and an "isolated 8k window"; a sub-agent
|
|
26
|
-
* carries neither, so inventing them would be decoration that reads as fact.
|
|
27
|
-
*
|
|
28
|
-
* A violet ◆ marker sets the whole family apart from the blue tool rows — these are
|
|
29
|
-
* separate minds working inside the transcript, not more tools. A child's prose is
|
|
30
|
-
* never shown; only its final distilled report crosses back, as the spawn's result.
|
|
19
|
+
* Several at once are one group, each with its own two lines, so the shape of the delegation is
|
|
20
|
+
* visible: who is doing what and how far along. A child's own prose is never shown; only its
|
|
21
|
+
* report crosses back. The same look as the folded commands row, so there is one thing to learn.
|
|
31
22
|
*/
|
|
32
23
|
import { Box, Text } from "ink";
|
|
33
|
-
import { ERROR_COLOR } from "../toolDisplay.js";
|
|
34
|
-
import { collapseAdjacent } from "../toolItems.js";
|
|
35
24
|
import { PulseDot } from "./PulseDot.js";
|
|
36
|
-
import {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
const RAIL_INDENT = 3;
|
|
45
|
-
/** A sub-agent is not given a colour of its own: plain, and red when one failed. */
|
|
46
|
-
const AGENT_COLOR = undefined;
|
|
47
|
-
export function SubagentView({ agents, done, columns, tightTop, }) {
|
|
25
|
+
import { Elapsed } from "./ToolLine.js";
|
|
26
|
+
import { agentTitle, bandRows, bodyRows, humanSpan, markOf, nowText, toneOf } from "../agentLines.js";
|
|
27
|
+
import { registerExpandable, itemHit } from "../expandHits.js";
|
|
28
|
+
import { BAD, GOOD, USER_BG, USER_FG, WARN } from "../theme.js";
|
|
29
|
+
const DOT = "●";
|
|
30
|
+
const COLOUR = { good: GOOD, bad: BAD, warn: WARN };
|
|
31
|
+
const colourOf = (tone) => (tone ? COLOUR[tone] : undefined);
|
|
32
|
+
export function SubagentView({ id, agents, done, columns, tightTop, hoveredItem, }) {
|
|
48
33
|
if (agents.length === 0)
|
|
49
34
|
return null;
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
return (_jsxs(Box, { marginTop: tightTop ? 0 : 1, flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", children: [_jsx(Box, { minWidth: 2, children: done ? _jsx(Text, { children: DIAMOND }) : _jsx(PulseDot, { glyph: DIAMOND }) }), agents.length === 1 ? (_jsx(SoloHeader, { agent: agents[0], columns: columns, color: dotColor })) : (_jsxs(_Fragment, { children: [_jsx(Text, { bold: true, color: dotColor, children: "Subagents" }), _jsx(Text, { dimColor: true, children: ` · ${agents.length} delegated` })] }))] }), agents.length === 1 ? (_jsx(SoloBody, { agent: agents[0], columns: columns, done: done })) : (_jsx(Topology, { agents: agents, columns: columns }))] }));
|
|
53
|
-
}
|
|
54
|
-
/** One worker's header: its identity and the task it was given. */
|
|
55
|
-
function SoloHeader({ agent, columns, color }) {
|
|
56
|
-
const taskLabel = clip(agent.task, Math.max(16, columns - 22));
|
|
57
|
-
return (_jsxs(_Fragment, { children: [_jsx(Text, { bold: true, color: color, children: "Subagent" }), agent.readOnly ? _jsx(Text, { dimColor: true, children: " \u00B7 read-only" }) : null, taskLabel ? _jsxs(Text, { dimColor: true, children: [" ", taskLabel] }) : null] }));
|
|
58
|
-
}
|
|
59
|
-
/** One worker's live rail: every call it makes, then its closing line. */
|
|
60
|
-
function SoloBody({ agent, columns, done }) {
|
|
61
|
-
const content = Math.max(8, columns - RAIL_INDENT - 1);
|
|
62
|
-
const errored = agent.status === "error";
|
|
63
|
-
return (_jsxs(Box, { flexDirection: "column", children: [collapseAdjacent(agent.items).map((row) => (_jsxs(Box, { flexDirection: "row", width: columns, children: [_jsx(Text, { color: AGENT_COLOR, dimColor: true, children: ` ${RAIL} ` }), _jsx(Box, { width: content, children: _jsxs(Text, { color: row.anyError ? BAD : undefined, dimColor: !row.anyError, wrap: "truncate-end", children: [row.label, row.count > 1 ? ` ×${row.count}` : ""] }) })] }, row.item.toolId))), done && agent.summary ? (_jsxs(Box, { flexDirection: "row", width: columns, children: [_jsx(Text, { dimColor: true, children: ` ${BRANCH} ` }), _jsx(Box, { width: content, children: _jsx(Text, { color: errored ? BAD : undefined, dimColor: !errored, wrap: "truncate-end", children: agent.summary }) })] })) : null] }));
|
|
35
|
+
const solo = agents.length === 1;
|
|
36
|
+
return (_jsxs(Box, { marginTop: tightTop ? 0 : 1, flexDirection: "column", children: [solo ? null : (_jsxs(Box, { flexDirection: "row", children: [_jsx(Box, { minWidth: 2, children: done ? _jsx(Text, { children: DOT }) : _jsx(PulseDot, { glyph: DOT }) }), _jsx(Text, { bold: true, children: "Sub-agents" }), _jsx(Text, { dimColor: true, children: ` · ${agents.length} delegated` })] })), agents.map((agent, i) => (_jsx(AgentBlock, { id: id, index: i, agent: agent, lead: solo, done: done, columns: columns, hot: hoveredItem === i }, agent.agentId)))] }));
|
|
64
37
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}) }));
|
|
38
|
+
function AgentBlock({ id, index, agent, lead, done, columns, hot, }) {
|
|
39
|
+
const running = agent.status === "running";
|
|
40
|
+
const tone = toneOf(agent);
|
|
41
|
+
const name = lead ? "Sub-agent" : `#${index + 1}`;
|
|
42
|
+
const tag = agent.readOnly ? " · read-only" : "";
|
|
43
|
+
// Everything on the title line has a fixed place, so a long title is cut at a word and never squeezes
|
|
44
|
+
// the name, as it once did ("Subagen").
|
|
45
|
+
const room = Math.max(10, columns - 2 - name.length - 2 - tag.length - 1);
|
|
46
|
+
const title = agentTitle(agent.task, room);
|
|
47
|
+
const steps = agent.steps ?? agent.items.length;
|
|
48
|
+
const took = agent.endedAt !== undefined && agent.startedAt !== undefined ? humanSpan(agent.endedAt - agent.startedAt) : "";
|
|
49
|
+
const arrow = agent.open ? " ▾" : " ▸";
|
|
50
|
+
const registered = (node) => registerExpandable(itemHit(id, index), node);
|
|
51
|
+
const band = agent.open ? bandRows(bodyRows(agent, running, bandWidth(columns)), columns) : [];
|
|
52
|
+
return (_jsxs(Box, { flexDirection: "column", ref: registered, children: [_jsxs(Box, { flexDirection: "row", width: columns, children: [_jsx(Box, { minWidth: 2, flexShrink: 0, children: lead ? running ? _jsx(PulseDot, { glyph: DOT }) : _jsx(Text, { children: DOT }) : _jsx(Text, { children: " " }) }), _jsx(Box, { flexShrink: 0, children: _jsx(Text, { bold: true, children: name }) }), title ? (_jsx(Box, { flexShrink: 0, children: _jsxs(Text, { bold: hot, children: [" ", title] }) })) : null, tag ? (_jsx(Box, { flexShrink: 0, children: _jsx(Text, { dimColor: true, children: tag }) })) : null] }), _jsxs(Box, { flexDirection: "row", width: columns, children: [_jsx(Text, { children: " " }), running ? (_jsxs(_Fragment, { children: [_jsx(Box, { flexShrink: 0, children: _jsx(Text, { dimColor: true, children: `step ${agent.items.length}${nowText(agent.items) ? ` · ${nowText(agent.items)}` : ""}`.slice(0, Math.max(12, columns - 16)) }) }), agent.startedAt !== undefined ? _jsx(Elapsed, { since: agent.startedAt }) : null] })) : (_jsxs(_Fragment, { children: [_jsx(Box, { flexShrink: 0, children: _jsx(Text, { color: colourOf(tone), bold: tone === "bad", children: `${markOf(tone)} ${agent.headline ?? agent.summary ?? "Finished"}` }) }), _jsx(Box, { flexShrink: 0, children: _jsx(Text, { dimColor: true, children: ` · ${steps} step${steps === 1 ? "" : "s"}${took ? ` · ${took}` : ""}` }) })] })), _jsx(Box, { flexShrink: 0, children: _jsx(Text, { dimColor: !hot, bold: hot, children: arrow }) })] }), agent.open ? (_jsx(Box, { flexDirection: "column", width: columns, children: band.map((r, j) => (_jsxs(Box, { flexDirection: "row", width: columns, children: [_jsx(Text, { children: " " }), _jsxs(Text, { backgroundColor: USER_BG, color: USER_FG, children: [" ", _jsx(Text, { dimColor: true, children: r.label.padEnd(8) }), _jsx(Text, { color: colourOf(r.tone), children: r.text }), " ".repeat(r.pad), " "] })] }, j))) })) : null] }));
|
|
81
53
|
}
|
|
82
|
-
/**
|
|
83
|
-
function
|
|
84
|
-
|
|
85
|
-
if (max <= 1)
|
|
86
|
-
return "";
|
|
87
|
-
return flat.length <= max ? flat : flat.slice(0, max - 1) + "…";
|
|
54
|
+
/** The width its task and the rest are wrapped to inside the band. */
|
|
55
|
+
function bandWidth(columns) {
|
|
56
|
+
return Math.max(8, columns - 14);
|
|
88
57
|
}
|
|
89
58
|
//# sourceMappingURL=SubagentView.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubagentView.js","sourceRoot":"","sources":["../../../src/cli/components/SubagentView.tsx"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"SubagentView.js","sourceRoot":"","sources":["../../../src/cli/components/SubagentView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -25,8 +25,9 @@ import { PulseDot } from "./PulseDot.js";
|
|
|
25
25
|
import { Elapsed, MORE_MARKER, OUTCOME, lastOutcome } from "./ToolLine.js";
|
|
26
26
|
import { commandLabel } from "../commandLabel.js";
|
|
27
27
|
import { registerExpandable, itemHit } from "../expandHits.js";
|
|
28
|
-
import { BAD, GOOD } from "../theme.js";
|
|
29
|
-
import {
|
|
28
|
+
import { BAD, GOOD, USER_BG, USER_FG } from "../theme.js";
|
|
29
|
+
import { visibleWidth, wrapAnsi } from "../wrap.js";
|
|
30
|
+
import { FOLD_SEP, foldControls, plainLine, isRead, isStep, readRows, stepLabel, stepReason, workHeader } from "../workLines.js";
|
|
30
31
|
const DOT = "●";
|
|
31
32
|
/** Marks beyond this many are counted instead, so the header never wraps. */
|
|
32
33
|
export const MAX_MARKS = 10;
|
|
@@ -53,7 +54,12 @@ export function verdictLine(it) {
|
|
|
53
54
|
/** What a command left to read once opened (pure): its command line, its output, no verdict. */
|
|
54
55
|
export function openedLines(it) {
|
|
55
56
|
const source = it.full ?? it.detail;
|
|
56
|
-
|
|
57
|
+
// A test step opens on everything it said: what it did, and the whole list of the page.
|
|
58
|
+
if (isStep(it)) {
|
|
59
|
+
const lines = source ? source.split(String.fromCharCode(10)).map(plainLine).filter((l) => !MORE_MARKER.test(l)) : [];
|
|
60
|
+
return lines.length > 0 ? foldControls(lines).map((l) => (l.includes("\t") ? l : l.trim())) : [it.summary?.trim() || "(nothing more to show)"];
|
|
61
|
+
}
|
|
62
|
+
const lines = source ? source.split("\n").map(plainLine) : [];
|
|
57
63
|
const verdict = it.detailKind === "shell" ? lastOutcome(lines) : -1;
|
|
58
64
|
const body = lines
|
|
59
65
|
.filter((_, i) => i !== verdict)
|
|
@@ -75,32 +81,64 @@ export function commandName(it, room) {
|
|
|
75
81
|
function listRows(items, room) {
|
|
76
82
|
return items.flatMap((it, index) => isRead(it)
|
|
77
83
|
? readRows(it).map((r, j) => ({ key: `${it.toolId}.${j}`, index, item: it, label: r.label, range: r.range }))
|
|
78
|
-
: [{ key: it.toolId, index, item: it, label: commandName(it, room) }]);
|
|
84
|
+
: [{ key: it.toolId, index, item: it, label: isStep(it) ? stepLabel(it) : commandName(it, room) }]);
|
|
79
85
|
}
|
|
80
86
|
export function WorkGroup({ id, items, open, live, columns, tightTop, hovered, hoveredItem, }) {
|
|
81
87
|
const head = commandHeader(items, live);
|
|
82
88
|
const running = items.filter((it) => it.status === "running" && it.startedAt !== undefined);
|
|
83
89
|
const since = running.length > 0 ? Math.min(...running.map((it) => it.startedAt)) : undefined;
|
|
84
|
-
|
|
90
|
+
// A test that is working says which step it is on, so a long one does not look stuck behind a fold.
|
|
91
|
+
const onStep = head.working && !open ? items.filter((it) => isStep(it) && it.status === "running").pop() : undefined;
|
|
92
|
+
return (_jsxs(Box, { marginTop: tightTop ? 0 : 1, flexDirection: "column", children: [_jsxs(Box, { ref: (node) => registerExpandable(id, node), flexDirection: "row", width: columns, children: [_jsx(Box, { minWidth: 2, flexShrink: 0, children: head.working ? _jsx(PulseDot, { glyph: DOT }) : _jsx(Text, { children: DOT }) }), _jsx(Box, { flexShrink: 0, children: _jsx(Text, { bold: true, dimColor: !hovered, children: head.text }) }), head.marks.length > 0 ? (_jsxs(Box, { flexShrink: 0, children: [_jsx(Text, { children: " " }), head.more > 0 ? _jsx(Text, { dimColor: true, children: `+${head.more} ` }) : null, head.marks.map((m, i) => (_jsxs(Text, { color: m === "ok" ? GOOD : m === "error" ? BAD : undefined, dimColor: m === "running", children: [m === "ok" ? "✓" : m === "error" ? "✗" : "·", i < head.marks.length - 1 ? " " : ""] }, i)))] })) : null, onStep ? (_jsx(Box, { flexShrink: 0, children: _jsx(Text, { dimColor: true, children: " " + stepLabel(onStep).slice(0, Math.max(12, columns - head.text.length - 24)) }) })) : null, head.working && since !== undefined ? (_jsx(Box, { flexShrink: 0, children: _jsx(Elapsed, { since: since }) })) : null, _jsx(Box, { flexShrink: 0, children: _jsx(Text, { dimColor: !hovered, bold: hovered, children: open ? " ▾" : " ▸" }) })] }), open ? _jsx(WorkList, { id: id, items: items, columns: columns, live: live, hoveredItem: hoveredItem ?? -1 }) : null] }));
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* The opened text as rows of exact width (pure). A line is wrapped to fit; a `kind<SEP>names` line
|
|
96
|
+
* keeps its kind in a column of its own, and what wraps lines up under the names.
|
|
97
|
+
*/
|
|
98
|
+
export function shadeRows(body, width) {
|
|
99
|
+
const inner = Math.max(6, width - 2);
|
|
100
|
+
const kindWidth = Math.min(14, Math.max(0, ...body.filter((l) => l.includes(FOLD_SEP)).map((l) => l.split(FOLD_SEP)[0].length)) + 2);
|
|
101
|
+
const rows = [];
|
|
102
|
+
for (const line of body) {
|
|
103
|
+
if (line.includes(FOLD_SEP)) {
|
|
104
|
+
const [kind, names] = line.split(FOLD_SEP);
|
|
105
|
+
wrapAnsi(names, Math.max(4, inner - kindWidth)).forEach((part, i) => {
|
|
106
|
+
const text = (i === 0 ? "" : " ".repeat(kindWidth)) + part;
|
|
107
|
+
rows.push({ ...(i === 0 ? { kind: kind.padEnd(kindWidth) } : {}), text: i === 0 ? part : text, pad: Math.max(0, inner - (i === 0 ? kindWidth : kindWidth) - visibleWidth(part)) });
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
for (const part of wrapAnsi(line === "" ? " " : line, inner))
|
|
112
|
+
rows.push({ text: part, pad: Math.max(0, inner - visibleWidth(part)) });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return rows;
|
|
85
116
|
}
|
|
86
117
|
function WorkList({ id, items, columns, live, hoveredItem }) {
|
|
87
118
|
// The verdict column sits at the right of what the longest name needs, so on a wide
|
|
88
119
|
// terminal the verdicts stay beside their commands instead of drifting to the far edge.
|
|
89
120
|
const room = Math.max(8, columns - 4 - VERDICT_WIDTH - 4);
|
|
121
|
+
// A row of ONE call opens straight onto what that call did: nothing is behind a second click.
|
|
122
|
+
const single = items.length === 1;
|
|
90
123
|
const rows = listRows(items, room);
|
|
91
124
|
const labelWidth = Math.min(room, Math.max(...rows.map((r) => r.label.length)) + 2);
|
|
92
125
|
return (_jsx(Box, { flexDirection: "column", children: rows.map((row, i) => {
|
|
93
126
|
const it = row.item;
|
|
94
127
|
const last = i === rows.length - 1;
|
|
95
128
|
const reading = isRead(it);
|
|
129
|
+
const step = isStep(it);
|
|
96
130
|
const hot = !reading && hoveredItem === row.index;
|
|
97
131
|
const running = it.status === "running";
|
|
98
|
-
const verdict = reading ? undefined : verdictLine(it);
|
|
132
|
+
const verdict = reading || step ? undefined : verdictLine(it);
|
|
99
133
|
const shown = reading
|
|
100
134
|
? row.range ?? ""
|
|
101
135
|
: running
|
|
102
136
|
? ""
|
|
103
|
-
:
|
|
137
|
+
: step
|
|
138
|
+
? it.status === "error" ? "✗" : "✓"
|
|
139
|
+
: verdict ?? (it.status === "error" ? "✗" : it.summary ? it.summary : "✓");
|
|
140
|
+
// Why a step failed, under it, in red: the one thing a folded failure must still say.
|
|
141
|
+
const reason = step && it.status === "error" ? stepReason(it) : "";
|
|
104
142
|
// Words that do not fit beside a long command go on a line of their own under it. Squeezed
|
|
105
143
|
// into what is left of the line they broke across rows ("Running as shell" / "#1") and ran
|
|
106
144
|
// into the end of the command.
|
|
@@ -110,12 +148,18 @@ function WorkList({ id, items, columns, live, hoveredItem }) {
|
|
|
110
148
|
const outcomeOnly = !reading && (OUTCOME.test(shown) || shown === "");
|
|
111
149
|
const beside = below ? "" : shown;
|
|
112
150
|
const failedRead = reading && it.status === "error";
|
|
113
|
-
const body = !reading && it.open ? openedLines(it) : [];
|
|
114
|
-
|
|
151
|
+
const body = !reading && (it.open || single) ? openedLines(it) : [];
|
|
152
|
+
// The one being read stands out: bright, with its text on a shaded band under it. The ones
|
|
153
|
+
// that are folded stay dim, so it is plain which is open.
|
|
154
|
+
const isOpen = body.length > 0;
|
|
155
|
+
const bodyWidth = Math.max(8, columns - 4);
|
|
156
|
+
const shade = isOpen ? shadeRows(body, columns - 4) : [];
|
|
115
157
|
const verdictBox = outcomeOnly || below ? VERDICT_WIDTH : Math.max(VERDICT_WIDTH, room2);
|
|
116
158
|
// Only a command opens; a read has nothing behind its line to show.
|
|
117
|
-
const registered = reading ? undefined : (node) => registerExpandable(itemHit(id, row.index), node);
|
|
118
|
-
return (_jsxs(Box, { flexDirection: "column", ref: registered, children: [_jsxs(Box, { flexDirection: "row", width: columns, children: [_jsx(Text, {
|
|
159
|
+
const registered = reading || single ? undefined : (node) => registerExpandable(itemHit(id, row.index), node);
|
|
160
|
+
return (_jsxs(Box, { flexDirection: "column", ref: registered, children: [_jsxs(Box, { flexDirection: "row", width: columns, children: [_jsx(Text, { children: " " }), _jsx(Box, { width: labelWidth, paddingRight: 2, flexShrink: 0, children: _jsx(Text, { bold: hot || isOpen, dimColor: !hot && !isOpen, wrap: "truncate-end", children: row.label }) }), _jsx(Box, { width: verdictBox, flexShrink: 0, children: running ? (_jsxs(_Fragment, { children: [_jsx(PulseDot, { glyph: "\u25CF" }), live && it.startedAt !== undefined ? _jsx(Elapsed, { since: it.startedAt }) : null] })) : (_jsx(Text, { color: outcomeOnly ? verdictColor : failedRead ? BAD : undefined, dimColor: !outcomeOnly && !failedRead, wrap: outcomeOnly ? "truncate-end" : "wrap", children: beside })) }), reading || single ? null : _jsx(Text, { dimColor: !hot && !isOpen, bold: hot || isOpen, children: it.open ? " ▾" : " ▸" })] }), below ? (_jsxs(Box, { flexDirection: "row", width: columns, children: [_jsx(Text, { children: " " }), _jsx(Box, { width: bodyWidth, children: _jsx(Text, { dimColor: true, wrap: "wrap", children: below }) })] })) : null, reason ? (_jsxs(Box, { flexDirection: "row", width: columns, children: [_jsx(Text, { children: " " }), _jsx(Box, { width: bodyWidth, children: _jsx(Text, { color: BAD, wrap: "wrap", children: reason }) })] })) : null, isOpen ? (
|
|
161
|
+
// What it printed sits on a shaded band, the way a message the user wrote does.
|
|
162
|
+
_jsx(Box, { flexDirection: "column", width: columns, children: shade.map((r, j) => (_jsxs(Box, { flexDirection: "row", width: columns, children: [_jsx(Text, { children: " " }), _jsxs(Text, { backgroundColor: USER_BG, color: USER_FG, children: [" ", r.kind !== undefined ? _jsx(Text, { dimColor: true, children: r.kind }) : null, r.text, " ".repeat(r.pad), " "] })] }, j))) })) : null] }, row.key));
|
|
119
163
|
}) }));
|
|
120
164
|
}
|
|
121
165
|
//# sourceMappingURL=WorkGroup.js.map
|