@quickchatai/pi-quickreview 1.2.0 → 1.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +79 -27
- package/assets/config.example.toml +25 -7
- package/assets/prompts/onboarding.md +8 -7
- package/assets/schemas/review-result.v1.json +60 -0
- package/dist/extensions/quickreview.d.ts +17 -5
- package/dist/extensions/quickreview.d.ts.map +1 -1
- package/dist/extensions/quickreview.js +79 -26
- package/dist/extensions/quickreview.js.map +1 -1
- package/dist/src/engine/auth.d.ts +4 -0
- package/dist/src/engine/auth.d.ts.map +1 -1
- package/dist/src/engine/auth.js +11 -2
- package/dist/src/engine/auth.js.map +1 -1
- package/dist/src/engine/lens/activity.d.ts +45 -0
- package/dist/src/engine/lens/activity.d.ts.map +1 -0
- package/dist/src/engine/lens/activity.js +118 -0
- package/dist/src/engine/lens/activity.js.map +1 -0
- package/dist/src/engine/lens/runlens.d.ts +7 -0
- package/dist/src/engine/lens/runlens.d.ts.map +1 -1
- package/dist/src/engine/lens/runlens.js +30 -1
- package/dist/src/engine/lens/runlens.js.map +1 -1
- package/dist/src/engine/lens/tool.d.ts +7 -0
- package/dist/src/engine/lens/tool.d.ts.map +1 -1
- package/dist/src/engine/lens/tool.js +101 -18
- package/dist/src/engine/lens/tool.js.map +1 -1
- package/dist/src/engine/lens/wave.d.ts +6 -0
- package/dist/src/engine/lens/wave.d.ts.map +1 -1
- package/dist/src/engine/lens/wave.js +16 -0
- package/dist/src/engine/lens/wave.js.map +1 -1
- package/dist/src/homes.js +1 -1
- package/dist/src/homes.js.map +1 -1
- package/dist/src/live/events.d.ts +3 -0
- package/dist/src/live/events.d.ts.map +1 -1
- package/dist/src/live/events.js.map +1 -1
- package/dist/src/live/lensline.d.ts +20 -0
- package/dist/src/live/lensline.d.ts.map +1 -0
- package/dist/src/live/lensline.js +70 -0
- package/dist/src/live/lensline.js.map +1 -0
- package/dist/src/live/projection.d.ts +55 -0
- package/dist/src/live/projection.d.ts.map +1 -0
- package/dist/src/live/projection.js +465 -0
- package/dist/src/live/projection.js.map +1 -0
- package/dist/src/live/read.d.ts +24 -0
- package/dist/src/live/read.d.ts.map +1 -0
- package/dist/src/live/read.js +60 -0
- package/dist/src/live/read.js.map +1 -0
- package/dist/src/live/writer.d.ts +3 -0
- package/dist/src/live/writer.d.ts.map +1 -1
- package/dist/src/live/writer.js +6 -1
- package/dist/src/live/writer.js.map +1 -1
- package/dist/src/localreview.d.ts +18 -8
- package/dist/src/localreview.d.ts.map +1 -1
- package/dist/src/localreview.js +103 -43
- package/dist/src/localreview.js.map +1 -1
- package/dist/src/modelroute.d.ts +4 -0
- package/dist/src/modelroute.d.ts.map +1 -1
- package/dist/src/modelroute.js +21 -0
- package/dist/src/modelroute.js.map +1 -1
- package/dist/src/plugin/args.d.ts +38 -7
- package/dist/src/plugin/args.d.ts.map +1 -1
- package/dist/src/plugin/args.js +134 -37
- package/dist/src/plugin/args.js.map +1 -1
- package/dist/src/plugin/index.d.ts.map +1 -1
- package/dist/src/plugin/index.js +5 -1
- package/dist/src/plugin/index.js.map +1 -1
- package/dist/src/plugin/login.d.ts +8 -4
- package/dist/src/plugin/login.d.ts.map +1 -1
- package/dist/src/plugin/login.js +25 -32
- package/dist/src/plugin/login.js.map +1 -1
- package/dist/src/plugin/messages.d.ts +7 -0
- package/dist/src/plugin/messages.d.ts.map +1 -0
- package/dist/src/plugin/messages.js +13 -0
- package/dist/src/plugin/messages.js.map +1 -0
- package/dist/src/plugin/peers.d.ts +17 -0
- package/dist/src/plugin/peers.d.ts.map +1 -0
- package/dist/src/plugin/peers.js +55 -0
- package/dist/src/plugin/peers.js.map +1 -0
- package/dist/src/plugin/review.d.ts +52 -6
- package/dist/src/plugin/review.d.ts.map +1 -1
- package/dist/src/plugin/review.js +261 -95
- package/dist/src/plugin/review.js.map +1 -1
- package/dist/src/plugin/scan.d.ts +80 -44
- package/dist/src/plugin/scan.d.ts.map +1 -1
- package/dist/src/plugin/scan.js +450 -233
- package/dist/src/plugin/scan.js.map +1 -1
- package/dist/src/plugin/scancases.d.ts +33 -0
- package/dist/src/plugin/scancases.d.ts.map +1 -0
- package/dist/src/plugin/scancases.js +153 -0
- package/dist/src/plugin/scancases.js.map +1 -0
- package/dist/src/plugin/settings.d.ts +18 -0
- package/dist/src/plugin/settings.d.ts.map +1 -0
- package/dist/src/plugin/settings.js +47 -0
- package/dist/src/plugin/settings.js.map +1 -0
- package/dist/src/plugin/setup.d.ts +35 -12
- package/dist/src/plugin/setup.d.ts.map +1 -1
- package/dist/src/plugin/setup.js +258 -118
- package/dist/src/plugin/setup.js.map +1 -1
- package/dist/src/plugin/versiongate.d.ts +3 -0
- package/dist/src/plugin/versiongate.d.ts.map +1 -1
- package/dist/src/plugin/versiongate.js +9 -4
- package/dist/src/plugin/versiongate.js.map +1 -1
- package/dist/src/profileoverrides.d.ts +3 -0
- package/dist/src/profileoverrides.d.ts.map +1 -1
- package/dist/src/profileoverrides.js +9 -2
- package/dist/src/profileoverrides.js.map +1 -1
- package/dist/src/reviewapi.d.ts +22 -31
- package/dist/src/reviewapi.d.ts.map +1 -1
- package/dist/src/reviewapi.js +90 -66
- package/dist/src/reviewapi.js.map +1 -1
- package/dist/src/reviewdest.d.ts +1 -1
- package/dist/src/reviewdest.d.ts.map +1 -1
- package/dist/src/reviewdest.js +4 -3
- package/dist/src/reviewdest.js.map +1 -1
- package/dist/src/reviewtarget.d.ts +36 -0
- package/dist/src/reviewtarget.d.ts.map +1 -0
- package/dist/src/reviewtarget.js +6 -0
- package/dist/src/reviewtarget.js.map +1 -0
- package/dist/src/round-progress.d.ts +5 -0
- package/dist/src/round-progress.d.ts.map +1 -1
- package/dist/src/round-progress.js.map +1 -1
- package/dist/src/round-stage-deadlines.d.ts +26 -1
- package/dist/src/round-stage-deadlines.d.ts.map +1 -1
- package/dist/src/round-stage-deadlines.js +45 -2
- package/dist/src/round-stage-deadlines.js.map +1 -1
- package/dist/src/savedpost.d.ts +65 -0
- package/dist/src/savedpost.d.ts.map +1 -0
- package/dist/src/savedpost.js +131 -0
- package/dist/src/savedpost.js.map +1 -0
- package/dist/src/scan/caseread.d.ts +84 -0
- package/dist/src/scan/caseread.d.ts.map +1 -0
- package/dist/src/scan/caseread.js +263 -0
- package/dist/src/scan/caseread.js.map +1 -0
- package/dist/src/scan/channelfs.d.ts +6 -0
- package/dist/src/scan/channelfs.d.ts.map +1 -0
- package/dist/src/scan/channelfs.js +27 -0
- package/dist/src/scan/channelfs.js.map +1 -0
- package/dist/src/scan/cutrender.d.ts +13 -0
- package/dist/src/scan/cutrender.d.ts.map +1 -0
- package/dist/src/scan/cutrender.js +51 -0
- package/dist/src/scan/cutrender.js.map +1 -0
- package/dist/src/scan/facts.d.ts +72 -0
- package/dist/src/scan/facts.d.ts.map +1 -0
- package/dist/src/scan/facts.js +593 -0
- package/dist/src/scan/facts.js.map +1 -0
- package/dist/src/scan/findings.d.ts +320 -0
- package/dist/src/scan/findings.d.ts.map +1 -0
- package/dist/src/scan/findings.js +948 -0
- package/dist/src/scan/findings.js.map +1 -0
- package/dist/src/scan/ledger.d.ts +116 -0
- package/dist/src/scan/ledger.d.ts.map +1 -0
- package/dist/src/scan/ledger.js +207 -0
- package/dist/src/scan/ledger.js.map +1 -0
- package/dist/src/scan/presentation.d.ts +19 -0
- package/dist/src/scan/presentation.d.ts.map +1 -0
- package/dist/src/scan/presentation.js +9 -0
- package/dist/src/scan/presentation.js.map +1 -0
- package/dist/src/scan/scan.d.ts +354 -0
- package/dist/src/scan/scan.d.ts.map +1 -0
- package/dist/src/scan/scan.js +725 -0
- package/dist/src/scan/scan.js.map +1 -0
- package/dist/src/scan/scanagents.d.ts +23 -0
- package/dist/src/scan/scanagents.d.ts.map +1 -0
- package/dist/src/scan/scanagents.js +99 -0
- package/dist/src/scan/scanagents.js.map +1 -0
- package/dist/src/scan/scanassemble.d.ts +65 -0
- package/dist/src/scan/scanassemble.d.ts.map +1 -0
- package/dist/src/scan/scanassemble.js +93 -0
- package/dist/src/scan/scanassemble.js.map +1 -0
- package/dist/src/scan/scanfs.d.ts +26 -0
- package/dist/src/scan/scanfs.d.ts.map +1 -0
- package/dist/src/scan/scanfs.js +229 -0
- package/dist/src/scan/scanfs.js.map +1 -0
- package/dist/src/scan/scanlease.d.ts +50 -0
- package/dist/src/scan/scanlease.d.ts.map +1 -0
- package/dist/src/scan/scanlease.js +251 -0
- package/dist/src/scan/scanlease.js.map +1 -0
- package/dist/src/scan/scanleaves.d.ts +55 -0
- package/dist/src/scan/scanleaves.d.ts.map +1 -0
- package/dist/src/scan/scanleaves.js +258 -0
- package/dist/src/scan/scanleaves.js.map +1 -0
- package/dist/src/scan/scanports.d.ts +79 -0
- package/dist/src/scan/scanports.d.ts.map +1 -0
- package/dist/src/scan/scanports.js +8 -0
- package/dist/src/scan/scanports.js.map +1 -0
- package/dist/src/scan/scanrender.d.ts +128 -0
- package/dist/src/scan/scanrender.d.ts.map +1 -0
- package/dist/src/scan/scanrender.js +527 -0
- package/dist/src/scan/scanrender.js.map +1 -0
- package/dist/src/scan/scanreport.d.ts +126 -0
- package/dist/src/scan/scanreport.d.ts.map +1 -0
- package/dist/src/scan/scanreport.js +289 -0
- package/dist/src/scan/scanreport.js.map +1 -0
- package/dist/src/scan/scanrun.d.ts +472 -0
- package/dist/src/scan/scanrun.d.ts.map +1 -0
- package/dist/src/scan/scanrun.js +1733 -0
- package/dist/src/scan/scanrun.js.map +1 -0
- package/dist/src/scan/scantree.d.ts +21 -0
- package/dist/src/scan/scantree.d.ts.map +1 -0
- package/dist/src/scan/scantree.js +297 -0
- package/dist/src/scan/scantree.js.map +1 -0
- package/dist/src/scan/scanverbs.d.ts +208 -0
- package/dist/src/scan/scanverbs.d.ts.map +1 -0
- package/dist/src/scan/scanverbs.js +689 -0
- package/dist/src/scan/scanverbs.js.map +1 -0
- package/dist/src/scan/stage2.d.ts +221 -0
- package/dist/src/scan/stage2.d.ts.map +1 -0
- package/dist/src/scan/stage2.js +617 -0
- package/dist/src/scan/stage2.js.map +1 -0
- package/dist/src/scan/stage2request.d.ts +125 -0
- package/dist/src/scan/stage2request.d.ts.map +1 -0
- package/dist/src/scan/stage2request.js +259 -0
- package/dist/src/scan/stage2request.js.map +1 -0
- package/dist/src/scan/textsniff.d.ts +14 -0
- package/dist/src/scan/textsniff.d.ts.map +1 -0
- package/dist/src/scan/textsniff.js +88 -0
- package/dist/src/scan/textsniff.js.map +1 -0
- package/dist/src/scan/unitcut.d.ts +135 -0
- package/dist/src/scan/unitcut.d.ts.map +1 -0
- package/dist/src/scan/unitcut.js +437 -0
- package/dist/src/scan/unitcut.js.map +1 -0
- package/dist/src/scan/unitcutstore.d.ts +155 -0
- package/dist/src/scan/unitcutstore.d.ts.map +1 -0
- package/dist/src/scan/unitcutstore.js +381 -0
- package/dist/src/scan/unitcutstore.js.map +1 -0
- package/dist/src/setupchecklist.d.ts +240 -0
- package/dist/src/setupchecklist.d.ts.map +1 -0
- package/dist/src/setupchecklist.js +407 -0
- package/dist/src/setupchecklist.js.map +1 -0
- package/package.json +7 -3
- package/skills/qcr-review/SKILL.md +24 -0
- package/skills/qcr-scan/SKILL.md +23 -0
- package/skills/qcr-setup/SKILL.md +18 -0
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
// The round-progress v2 projection of a LiveEvent log.
|
|
2
|
+
//
|
|
3
|
+
// extensions/round-progress.ts publishes `state/round-progress/pr-<n>.json`
|
|
4
|
+
// (and the append-only transition log beside it) from inside the tmux pi, by
|
|
5
|
+
// listening to pi's events. This module reproduces both from the LiveEvent log
|
|
6
|
+
// alone, so the engine routes - which have no such extension - and a viewer
|
|
7
|
+
// reading a finished or running round all get the same snapshot, with the
|
|
8
|
+
// contract in packages/pi-plugin/src/round-progress.ts unchanged: board.ts, requiredpasses.ts and
|
|
9
|
+
// the supervisor read it as they always have.
|
|
10
|
+
//
|
|
11
|
+
// The extension is the REFERENCE. Every rule here mirrors the handler it
|
|
12
|
+
// stands for, line by line, because the golden test
|
|
13
|
+
// (tests/live-projection-golden.test.ts) holds the two byte-equal on the same
|
|
14
|
+
// events. The one place the log is coarser than pi's stream is time: a held
|
|
15
|
+
// update is stamped at its window's flush (~250 ms), so a heartbeat or a
|
|
16
|
+
// `started_at` taken from an update can differ from the extension's by that
|
|
17
|
+
// much. Nothing the supervisor decides on (the milestones' order, statuses,
|
|
18
|
+
// command identity) depends on it.
|
|
19
|
+
//
|
|
20
|
+
// One field goes past the extension: `current_target`, the path a running
|
|
21
|
+
// lens's current tool works on, which only our lens tools report (their
|
|
22
|
+
// `progress.currentTarget`, engine/lens/activity.ts). A native round carries
|
|
23
|
+
// none, so its projection is the extension's to the byte.
|
|
24
|
+
//
|
|
25
|
+
// It lives in the core so the plugin can read a running review's lenses
|
|
26
|
+
// (its status line) the way `qcr review status` and the bot's publisher do.
|
|
27
|
+
import { parseSessionCommandMarker } from "../session-command.js";
|
|
28
|
+
import { isLiveAgentStatus, } from "../round-progress.js";
|
|
29
|
+
function text(value) {
|
|
30
|
+
return typeof value === "string" && value.trim().length > 0 ? value.trim() : undefined;
|
|
31
|
+
}
|
|
32
|
+
function number(value) {
|
|
33
|
+
return typeof value === "number" && Number.isFinite(value) ? Math.max(0, value) : 0;
|
|
34
|
+
}
|
|
35
|
+
function status(value, exitCode) {
|
|
36
|
+
if (isLiveAgentStatus(value))
|
|
37
|
+
return value;
|
|
38
|
+
return exitCode === 0 ? "completed" : exitCode === undefined ? "running" : "failed";
|
|
39
|
+
}
|
|
40
|
+
/** The round number rides the order's posting calls (`QCR_ROUND_NO=<k>`, with
|
|
41
|
+
* or without `export`); the head rides the Worktree line. */
|
|
42
|
+
function reviewIdentity(body) {
|
|
43
|
+
const round = /(?:^|\s)(?:export )?QCR_ROUND_NO=(\d+)(?=\s|$)/.exec(body);
|
|
44
|
+
const head = /\*\*Worktree\*\*:[^\n]* @ `([^`]+)`/.exec(body);
|
|
45
|
+
if (!round || !head)
|
|
46
|
+
return undefined;
|
|
47
|
+
const roundNo = Number(round[1]);
|
|
48
|
+
return Number.isInteger(roundNo) && roundNo > 0
|
|
49
|
+
? { round_no: roundNo, head_sha: head[1] }
|
|
50
|
+
: undefined;
|
|
51
|
+
}
|
|
52
|
+
function currentTool(progress) {
|
|
53
|
+
if (!Array.isArray(progress?.recent_tools))
|
|
54
|
+
return undefined;
|
|
55
|
+
const tools = progress.recent_tools;
|
|
56
|
+
const picked = [...tools].reverse().find((x) => x.status === "running") ?? tools.at(-1);
|
|
57
|
+
if (!picked)
|
|
58
|
+
return undefined;
|
|
59
|
+
const name = text(picked.tool) ?? "tool";
|
|
60
|
+
const args = text(picked.args);
|
|
61
|
+
return args ? `${name}: ${args.slice(0, 120)}` : name;
|
|
62
|
+
}
|
|
63
|
+
function asAgent(result, fallbackAgent, live = false) {
|
|
64
|
+
const agent = text(result.agent) ?? fallbackAgent;
|
|
65
|
+
if (!agent)
|
|
66
|
+
return undefined;
|
|
67
|
+
const progress = result.progress;
|
|
68
|
+
const native = result.native ?? { tool_count: 0 };
|
|
69
|
+
const error = text(progress?.error) ?? text(result.error_message);
|
|
70
|
+
const exit = result.exit_code;
|
|
71
|
+
const nativeFailed = (typeof exit === "number" && exit > 0) ||
|
|
72
|
+
result.stop_reason === "error" ||
|
|
73
|
+
result.stop_reason === "aborted";
|
|
74
|
+
const st = isLiveAgentStatus(progress?.status)
|
|
75
|
+
? progress.status
|
|
76
|
+
: nativeFailed
|
|
77
|
+
? "failed"
|
|
78
|
+
: live || exit === -1 || exit === undefined
|
|
79
|
+
? "running"
|
|
80
|
+
: status(undefined, exit);
|
|
81
|
+
const tool = currentTool(progress) ?? (live ? native.last_tool : undefined);
|
|
82
|
+
// Our lens tools name the path a running child is on; the native shape never
|
|
83
|
+
// did, so a recorded native round projects exactly as before.
|
|
84
|
+
const target = st === "running" ? text(progress?.current_target) : undefined;
|
|
85
|
+
const last = text(progress?.last_message) ?? native.last_text;
|
|
86
|
+
return {
|
|
87
|
+
agent,
|
|
88
|
+
status: st,
|
|
89
|
+
duration_ms: number(progress?.duration_ms),
|
|
90
|
+
tool_count: number(progress?.tool_count) || native.tool_count,
|
|
91
|
+
...(tool ? { current_tool: tool } : {}),
|
|
92
|
+
...(target ? { current_target: target } : {}),
|
|
93
|
+
...(last ? { last_message: last } : {}),
|
|
94
|
+
...(error ? { error } : {}),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
export class RoundProgressProjection {
|
|
98
|
+
who;
|
|
99
|
+
snapshotState;
|
|
100
|
+
written;
|
|
101
|
+
log = [];
|
|
102
|
+
lastHeartbeat = 0;
|
|
103
|
+
clock = "";
|
|
104
|
+
agents = new Map();
|
|
105
|
+
callAgents = new Map();
|
|
106
|
+
runKeys = new Map();
|
|
107
|
+
endLogged = new Set();
|
|
108
|
+
/** The children of each open lens call, rebuilt from the changed slots. */
|
|
109
|
+
calls = new Map();
|
|
110
|
+
constructor(who) {
|
|
111
|
+
this.who = who;
|
|
112
|
+
}
|
|
113
|
+
/** The snapshot as its file would hold it now (the last write). */
|
|
114
|
+
get snapshot() {
|
|
115
|
+
return this.written === undefined
|
|
116
|
+
? undefined
|
|
117
|
+
: JSON.parse(this.written);
|
|
118
|
+
}
|
|
119
|
+
/** The bytes of `pr-<n>.json`. */
|
|
120
|
+
get snapshotJson() {
|
|
121
|
+
return this.written;
|
|
122
|
+
}
|
|
123
|
+
/** The transition lines, in order. */
|
|
124
|
+
get transitions() {
|
|
125
|
+
return this.log;
|
|
126
|
+
}
|
|
127
|
+
/** The bytes of `pr-<n>.jsonl` (before its size-cap rotation). */
|
|
128
|
+
get transitionsJsonl() {
|
|
129
|
+
return this.log.map((l) => `${JSON.stringify(l)}\n`).join("");
|
|
130
|
+
}
|
|
131
|
+
apply(event) {
|
|
132
|
+
this.clock = event.at;
|
|
133
|
+
switch (event.type) {
|
|
134
|
+
case "agent_start":
|
|
135
|
+
return this.agentStart();
|
|
136
|
+
case "message_start":
|
|
137
|
+
return this.messageStart(event.role, event.text);
|
|
138
|
+
case "turn_start":
|
|
139
|
+
case "message_delta":
|
|
140
|
+
return this.heartbeat();
|
|
141
|
+
case "tool_start":
|
|
142
|
+
return this.toolStart(event);
|
|
143
|
+
case "tool_update":
|
|
144
|
+
return this.toolUpdate(event);
|
|
145
|
+
case "tool_end":
|
|
146
|
+
return this.toolEnd(event);
|
|
147
|
+
case "agent_settled":
|
|
148
|
+
return this.settled();
|
|
149
|
+
default:
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// ---- the extension's helpers --------------------------------------------------
|
|
154
|
+
nowIso() {
|
|
155
|
+
return this.clock;
|
|
156
|
+
}
|
|
157
|
+
bindRun(run, key) {
|
|
158
|
+
if (run === null)
|
|
159
|
+
return key;
|
|
160
|
+
const held = this.runKeys.get(run);
|
|
161
|
+
if (held !== undefined)
|
|
162
|
+
return held;
|
|
163
|
+
this.runKeys.set(run, key);
|
|
164
|
+
return key;
|
|
165
|
+
}
|
|
166
|
+
executionKeys(callId, names) {
|
|
167
|
+
const seen = new Map();
|
|
168
|
+
return names.map((agent) => {
|
|
169
|
+
const n = (seen.get(agent) ?? 0) + 1;
|
|
170
|
+
seen.set(agent, n);
|
|
171
|
+
return n === 1 ? `${callId}:${agent}` : `${callId}:${agent}#${n}`;
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
write() {
|
|
175
|
+
const snapshot = this.snapshotState;
|
|
176
|
+
if (!snapshot)
|
|
177
|
+
return;
|
|
178
|
+
snapshot.updated_at = this.nowIso();
|
|
179
|
+
snapshot.agents = [...this.agents.values()];
|
|
180
|
+
this.written = `${JSON.stringify(snapshot)}\n`;
|
|
181
|
+
}
|
|
182
|
+
transition(entry) {
|
|
183
|
+
const snapshot = this.snapshotState;
|
|
184
|
+
if (!snapshot)
|
|
185
|
+
return;
|
|
186
|
+
this.log.push({
|
|
187
|
+
at: this.nowIso(),
|
|
188
|
+
pr: this.who.pr,
|
|
189
|
+
session: this.who.session,
|
|
190
|
+
run_started_at: snapshot.run_started_at,
|
|
191
|
+
...(snapshot.command_id ? { command_id: snapshot.command_id } : {}),
|
|
192
|
+
...entry,
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
passEnded(agent) {
|
|
196
|
+
const key = agent.execution_id;
|
|
197
|
+
if (!key || agent.status === "running" || this.endLogged.has(key))
|
|
198
|
+
return;
|
|
199
|
+
this.endLogged.add(key);
|
|
200
|
+
this.transition({
|
|
201
|
+
event: "pass_end",
|
|
202
|
+
execution_id: key,
|
|
203
|
+
agent: agent.agent,
|
|
204
|
+
status: agent.status,
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
fanoutSeen() {
|
|
208
|
+
const snapshot = this.snapshotState;
|
|
209
|
+
if (!snapshot || this.agents.size === 0)
|
|
210
|
+
return;
|
|
211
|
+
snapshot.first_lens_started_at ??= this.nowIso();
|
|
212
|
+
snapshot.fanout_started_at ??= snapshot.first_lens_started_at;
|
|
213
|
+
}
|
|
214
|
+
activity(description) {
|
|
215
|
+
const snapshot = this.snapshotState;
|
|
216
|
+
if (!snapshot)
|
|
217
|
+
return;
|
|
218
|
+
snapshot.last_activity = description;
|
|
219
|
+
snapshot.last_activity_at = this.nowIso();
|
|
220
|
+
this.write();
|
|
221
|
+
}
|
|
222
|
+
heartbeat() {
|
|
223
|
+
if (!this.snapshotState)
|
|
224
|
+
return;
|
|
225
|
+
const now = Date.parse(this.clock);
|
|
226
|
+
if (now - this.lastHeartbeat < 1_000)
|
|
227
|
+
return;
|
|
228
|
+
this.lastHeartbeat = now;
|
|
229
|
+
this.write();
|
|
230
|
+
}
|
|
231
|
+
freshSnapshot(lastActivity) {
|
|
232
|
+
const at = this.nowIso();
|
|
233
|
+
this.agents.clear();
|
|
234
|
+
this.callAgents.clear();
|
|
235
|
+
this.runKeys.clear();
|
|
236
|
+
this.endLogged.clear();
|
|
237
|
+
return {
|
|
238
|
+
version: 2,
|
|
239
|
+
pr: this.who.pr,
|
|
240
|
+
session: this.who.session,
|
|
241
|
+
run_started_at: at,
|
|
242
|
+
updated_at: at,
|
|
243
|
+
parent_status: "active",
|
|
244
|
+
last_activity_at: at,
|
|
245
|
+
last_activity: lastActivity,
|
|
246
|
+
agents: [],
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
/** The children of a call after this line: the slots it carries laid over
|
|
250
|
+
* what the call's earlier lines left. */
|
|
251
|
+
merge(id, n, changed) {
|
|
252
|
+
const held = this.calls.get(id) ?? [];
|
|
253
|
+
for (const r of changed)
|
|
254
|
+
held[r.slot] = r;
|
|
255
|
+
const full = Array.from({ length: n }, (_, slot) => held[slot] ?? { slot });
|
|
256
|
+
this.calls.set(id, full);
|
|
257
|
+
return full;
|
|
258
|
+
}
|
|
259
|
+
// ---- the handlers ---------------------------------------------------------------
|
|
260
|
+
agentStart() {
|
|
261
|
+
// pi's automatic retry or queued continuation emits another agent_start
|
|
262
|
+
// inside the SAME outer run: an inner start keeps the run's command,
|
|
263
|
+
// milestones and passes.
|
|
264
|
+
if (this.snapshotState && this.snapshotState.parent_status === "active") {
|
|
265
|
+
this.activity("parent run continued");
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
this.snapshotState = this.freshSnapshot("parent run started");
|
|
269
|
+
this.write();
|
|
270
|
+
this.transition({ event: "parent_start" });
|
|
271
|
+
}
|
|
272
|
+
messageStart(role, body) {
|
|
273
|
+
const snapshot = this.snapshotState;
|
|
274
|
+
if (!snapshot || role !== "user" || !body)
|
|
275
|
+
return;
|
|
276
|
+
const marker = parseSessionCommandMarker(body);
|
|
277
|
+
if (!marker)
|
|
278
|
+
return;
|
|
279
|
+
// A different command in a run that has one already is a new execution.
|
|
280
|
+
let current = snapshot;
|
|
281
|
+
if (current.command_id !== undefined && current.command_id !== marker.id) {
|
|
282
|
+
current = this.freshSnapshot("parent run started");
|
|
283
|
+
this.snapshotState = current;
|
|
284
|
+
}
|
|
285
|
+
current.command_id = marker.id;
|
|
286
|
+
current.command_sha256 = marker.payloadSha256;
|
|
287
|
+
const identity = reviewIdentity(body);
|
|
288
|
+
if (identity) {
|
|
289
|
+
current.round_no = identity.round_no;
|
|
290
|
+
current.head_sha = identity.head_sha;
|
|
291
|
+
}
|
|
292
|
+
const firstAcceptance = current.command_accepted_at === undefined;
|
|
293
|
+
current.command_accepted_at ??= this.nowIso();
|
|
294
|
+
current.preparing_at ??= current.command_accepted_at;
|
|
295
|
+
if (firstAcceptance)
|
|
296
|
+
this.transition({
|
|
297
|
+
event: "command_accepted",
|
|
298
|
+
...(current.round_no !== undefined ? { round_no: current.round_no } : {}),
|
|
299
|
+
...(current.head_sha !== undefined ? { head_sha: current.head_sha } : {}),
|
|
300
|
+
});
|
|
301
|
+
this.activity(`command ${marker.id} accepted; parent preparing compact fanout context`);
|
|
302
|
+
}
|
|
303
|
+
toolStart(ev) {
|
|
304
|
+
const snapshot = this.snapshotState;
|
|
305
|
+
if (!snapshot)
|
|
306
|
+
return;
|
|
307
|
+
const executions = ev.executions ?? [];
|
|
308
|
+
if (executions.length > 0) {
|
|
309
|
+
const names = executions.map(({ agent }) => agent);
|
|
310
|
+
const at = this.nowIso();
|
|
311
|
+
this.callAgents.set(ev.id, names);
|
|
312
|
+
const keys = this.executionKeys(ev.id, names);
|
|
313
|
+
for (const [index, agent] of names.entries()) {
|
|
314
|
+
const key = keys[index];
|
|
315
|
+
const phase = executions[index]?.phase;
|
|
316
|
+
this.agents.set(key, {
|
|
317
|
+
execution_id: key,
|
|
318
|
+
agent,
|
|
319
|
+
...(phase ? { phase } : {}),
|
|
320
|
+
status: "running",
|
|
321
|
+
duration_ms: 0,
|
|
322
|
+
tool_count: 0,
|
|
323
|
+
started_at: at,
|
|
324
|
+
});
|
|
325
|
+
this.transition({ event: "pass_start", execution_id: key, agent });
|
|
326
|
+
}
|
|
327
|
+
snapshot.first_lens_started_at ??= at;
|
|
328
|
+
snapshot.fanout_started_at ??= snapshot.first_lens_started_at;
|
|
329
|
+
snapshot.active_tool = `subagent: ${names.join(", ")}`;
|
|
330
|
+
this.activity(`${names.join(", ")} started`);
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
snapshot.active_tool = ev.preview ? `${ev.tool}: ${ev.preview}` : ev.tool;
|
|
334
|
+
this.activity(snapshot.active_tool);
|
|
335
|
+
}
|
|
336
|
+
toolUpdate(ev) {
|
|
337
|
+
const snapshot = this.snapshotState;
|
|
338
|
+
if (!snapshot)
|
|
339
|
+
return;
|
|
340
|
+
const fallbacks = this.callAgents.get(ev.id) ?? [];
|
|
341
|
+
const reported = this.merge(ev.id, ev.n, ev.results);
|
|
342
|
+
// Native parallel mode marks a still-running slot with exitCode -1 and a
|
|
343
|
+
// finished one with its real exit code.
|
|
344
|
+
let changed = false;
|
|
345
|
+
const updated = reported.flatMap((result, index) => {
|
|
346
|
+
const agent = asAgent(result, fallbacks[index] ?? (fallbacks.length === 1 ? fallbacks[0] : undefined), ev.mode === "parallel" ? result.exit_code === -1 : true);
|
|
347
|
+
return agent ? [{ agent, run: result.id ?? null }] : [];
|
|
348
|
+
});
|
|
349
|
+
const updateKeys = this.executionKeys(ev.id, updated.map(({ agent }) => agent.agent));
|
|
350
|
+
for (const [index, { agent, run }] of updated.entries()) {
|
|
351
|
+
const key = this.bindRun(run, updateKeys[index]);
|
|
352
|
+
const previous = this.agents.get(key);
|
|
353
|
+
// A parallel slot can finish while its siblings still run: a terminal
|
|
354
|
+
// record carries its completion milestone from the first update that
|
|
355
|
+
// reports it, and a running one never carries one. The path a child is
|
|
356
|
+
// on is its latest line's alone: a tool with no path, or an end, has none.
|
|
357
|
+
const { finished_at: previousFinished, current_target, ...kept } = previous ?? {};
|
|
358
|
+
const next = {
|
|
359
|
+
...kept,
|
|
360
|
+
...agent,
|
|
361
|
+
execution_id: key,
|
|
362
|
+
started_at: previous?.started_at ?? this.nowIso(),
|
|
363
|
+
...(agent.status === "running" ? {} : { finished_at: previousFinished ?? this.nowIso() }),
|
|
364
|
+
};
|
|
365
|
+
this.agents.set(key, next);
|
|
366
|
+
this.passEnded(next);
|
|
367
|
+
snapshot.active_tool = `subagent: ${agent.agent}`;
|
|
368
|
+
changed = true;
|
|
369
|
+
}
|
|
370
|
+
this.fanoutSeen();
|
|
371
|
+
if (changed)
|
|
372
|
+
this.write();
|
|
373
|
+
else
|
|
374
|
+
this.heartbeat();
|
|
375
|
+
}
|
|
376
|
+
toolEnd(ev) {
|
|
377
|
+
const snapshot = this.snapshotState;
|
|
378
|
+
if (!snapshot)
|
|
379
|
+
return;
|
|
380
|
+
const id = ev.id;
|
|
381
|
+
const fallbacks = this.callAgents.get(id) ?? [];
|
|
382
|
+
const reported = this.merge(id, ev.n, ev.results);
|
|
383
|
+
this.calls.delete(id);
|
|
384
|
+
const finalAgents = [];
|
|
385
|
+
const ended = reported.flatMap((result, index) => {
|
|
386
|
+
const agent = asAgent(result, fallbacks[index] ?? (fallbacks.length === 1 ? fallbacks[0] : undefined));
|
|
387
|
+
return agent ? [{ agent, run: result.id ?? null }] : [];
|
|
388
|
+
});
|
|
389
|
+
const endKeys = this.executionKeys(id, ended.map(({ agent }) => agent.agent));
|
|
390
|
+
for (const [index, { agent, run }] of ended.entries()) {
|
|
391
|
+
const key = this.bindRun(run, endKeys[index]);
|
|
392
|
+
const previous = this.agents.get(key);
|
|
393
|
+
// A child the call returns still running (a placeholder) carries no
|
|
394
|
+
// finish time, as in toolUpdate: the parser refuses the pair.
|
|
395
|
+
const { finished_at: previousFinished, current_target, ...kept } = previous ?? {};
|
|
396
|
+
const finalAgent = {
|
|
397
|
+
...kept,
|
|
398
|
+
...agent,
|
|
399
|
+
execution_id: key,
|
|
400
|
+
started_at: previous?.started_at ?? this.nowIso(),
|
|
401
|
+
...(agent.status === "running" ? {} : { finished_at: previousFinished ?? this.nowIso() }),
|
|
402
|
+
};
|
|
403
|
+
this.agents.set(key, finalAgent);
|
|
404
|
+
finalAgents.push(finalAgent);
|
|
405
|
+
this.passEnded(finalAgent);
|
|
406
|
+
}
|
|
407
|
+
if (finalAgents.length === 0 && fallbacks.length > 0) {
|
|
408
|
+
const failed = ev.is_error;
|
|
409
|
+
const fallbackKeys = this.executionKeys(id, fallbacks);
|
|
410
|
+
for (const [index, fallback] of fallbacks.entries()) {
|
|
411
|
+
const key = fallbackKeys[index];
|
|
412
|
+
const previous = this.agents.get(key);
|
|
413
|
+
if (previous && previous.status !== "running") {
|
|
414
|
+
finalAgents.push(previous);
|
|
415
|
+
continue;
|
|
416
|
+
}
|
|
417
|
+
const finalAgent = {
|
|
418
|
+
...(previous ?? {
|
|
419
|
+
execution_id: key,
|
|
420
|
+
agent: fallback,
|
|
421
|
+
duration_ms: 0,
|
|
422
|
+
tool_count: 0,
|
|
423
|
+
started_at: this.nowIso(),
|
|
424
|
+
}),
|
|
425
|
+
status: failed ? "failed" : "completed",
|
|
426
|
+
finished_at: previous?.finished_at ?? this.nowIso(),
|
|
427
|
+
};
|
|
428
|
+
// An ended pass is on no file.
|
|
429
|
+
delete finalAgent.current_target;
|
|
430
|
+
this.agents.set(key, finalAgent);
|
|
431
|
+
finalAgents.push(finalAgent);
|
|
432
|
+
this.passEnded(finalAgent);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
this.fanoutSeen();
|
|
436
|
+
this.callAgents.delete(id);
|
|
437
|
+
snapshot.active_tool = undefined;
|
|
438
|
+
this.activity(finalAgents.length > 0
|
|
439
|
+
? `${finalAgents.map((agent) => `${agent.agent} ${agent.status}`).join(", ")}`
|
|
440
|
+
: `${ev.tool} ${ev.is_error ? "failed" : "completed"}`);
|
|
441
|
+
}
|
|
442
|
+
settled() {
|
|
443
|
+
const snapshot = this.snapshotState;
|
|
444
|
+
if (!snapshot)
|
|
445
|
+
return;
|
|
446
|
+
snapshot.parent_status = "settled";
|
|
447
|
+
snapshot.active_tool = undefined;
|
|
448
|
+
this.activity("parent session settled");
|
|
449
|
+
this.transition({ event: "parent_settle" });
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
/** Project a main log. The identity (PR, session) comes from its
|
|
453
|
+
* `session_start` line; a log with none, or for a round that has no PR number,
|
|
454
|
+
* projects to nothing - as the extension does nothing outside a numbered PR
|
|
455
|
+
* session. */
|
|
456
|
+
export function projectRoundProgress(events) {
|
|
457
|
+
const start = events.find((e) => e.type === "session_start");
|
|
458
|
+
if (start?.type !== "session_start" || start.stream !== "main" || start.pr === null)
|
|
459
|
+
return undefined;
|
|
460
|
+
const projection = new RoundProgressProjection({ pr: start.pr, session: start.session });
|
|
461
|
+
for (const e of events)
|
|
462
|
+
projection.apply(e);
|
|
463
|
+
return projection;
|
|
464
|
+
}
|
|
465
|
+
//# sourceMappingURL=projection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projection.js","sourceRoot":"","sources":["../../../src/live/projection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type LiveEvent } from "./events.js";
|
|
2
|
+
import type { RoundProgressSnapshot } from "../round-progress.js";
|
|
3
|
+
export interface LiveRoundRef {
|
|
4
|
+
/** `state/live/<key>/r<round>` */
|
|
5
|
+
dir: string;
|
|
6
|
+
key: string;
|
|
7
|
+
round: number;
|
|
8
|
+
}
|
|
9
|
+
/** Every round log directory under `<root>/state/live/`, oldest round first. */
|
|
10
|
+
export declare function listLiveRounds(root: string): LiveRoundRef[];
|
|
11
|
+
/** The round that was written last. */
|
|
12
|
+
export declare function latestLiveRound(root: string): LiveRoundRef | undefined;
|
|
13
|
+
/** The ids of the lens sessions a round logged, in file-name order. */
|
|
14
|
+
export declare function lensLogIds(dir: string): string[];
|
|
15
|
+
export interface RoundView {
|
|
16
|
+
ref: LiveRoundRef;
|
|
17
|
+
events: readonly LiveEvent[];
|
|
18
|
+
/** The round-progress v2 snapshot the main log projects to. */
|
|
19
|
+
snapshot: RoundProgressSnapshot | undefined;
|
|
20
|
+
lenses: string[];
|
|
21
|
+
}
|
|
22
|
+
/** Read one round's main log and project it. */
|
|
23
|
+
export declare function viewRound(ref: LiveRoundRef): RoundView;
|
|
24
|
+
//# sourceMappingURL=read.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../../src/live/read.ts"],"names":[],"mappings":"AAKA,OAAO,EAAkC,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAElE,MAAM,WAAW,YAAY;IAC3B,kCAAkC;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAUD,gFAAgF;AAChF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAU3D;AAUD,uCAAuC;AACvC,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAStE;AAED,uEAAuE;AACvE,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAIhD;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,YAAY,CAAC;IAClB,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IAC7B,+DAA+D;IAC/D,QAAQ,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC5C,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,gDAAgD;AAChD,wBAAgB,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,SAAS,CAQtD"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// Finding and reading a round's LiveEvent logs: what `qcr review status`,
|
|
2
|
+
// `qcr live` and the plugin's status line do with a run directory. No writer
|
|
3
|
+
// and no engine here, so a daemon-side or TUI reader can import it.
|
|
4
|
+
import { readdirSync, statSync } from "node:fs";
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
import { LIVE_MAIN_FILE, readLiveEvents } from "./events.js";
|
|
7
|
+
import { projectRoundProgress } from "./projection.js";
|
|
8
|
+
const names = (dir) => {
|
|
9
|
+
try {
|
|
10
|
+
return readdirSync(dir);
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return [];
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
/** Every round log directory under `<root>/state/live/`, oldest round first. */
|
|
17
|
+
export function listLiveRounds(root) {
|
|
18
|
+
const base = join(root, "state", "live");
|
|
19
|
+
const found = [];
|
|
20
|
+
for (const key of names(base)) {
|
|
21
|
+
for (const r of names(join(base, key))) {
|
|
22
|
+
const m = /^r(\d+)$/.exec(r);
|
|
23
|
+
if (m)
|
|
24
|
+
found.push({ dir: join(base, key, r), key, round: Number(m[1]) });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return found.sort((a, b) => a.key.localeCompare(b.key) || a.round - b.round);
|
|
28
|
+
}
|
|
29
|
+
function mtime(path) {
|
|
30
|
+
try {
|
|
31
|
+
return statSync(path).mtimeMs;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return 0;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** The round that was written last. */
|
|
38
|
+
export function latestLiveRound(root) {
|
|
39
|
+
return listLiveRounds(root).reduce((best, r) => best === undefined ||
|
|
40
|
+
mtime(join(r.dir, LIVE_MAIN_FILE)) >= mtime(join(best.dir, LIVE_MAIN_FILE))
|
|
41
|
+
? r
|
|
42
|
+
: best, undefined);
|
|
43
|
+
}
|
|
44
|
+
/** The ids of the lens sessions a round logged, in file-name order. */
|
|
45
|
+
export function lensLogIds(dir) {
|
|
46
|
+
return names(dir)
|
|
47
|
+
.flatMap((f) => /^lens-(.+)\.jsonl$/.exec(f)?.[1] ?? [])
|
|
48
|
+
.sort();
|
|
49
|
+
}
|
|
50
|
+
/** Read one round's main log and project it. */
|
|
51
|
+
export function viewRound(ref) {
|
|
52
|
+
const { events } = readLiveEvents(join(ref.dir, LIVE_MAIN_FILE));
|
|
53
|
+
return {
|
|
54
|
+
ref,
|
|
55
|
+
events,
|
|
56
|
+
snapshot: projectRoundProgress(events)?.snapshot,
|
|
57
|
+
lenses: lensLogIds(ref.dir),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/live/read.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,9 @@ import { type LiveExecution, type LiveResult } from "./events.js";
|
|
|
2
2
|
/** The delta window: how long text and updates are held before one line. */
|
|
3
3
|
export declare const LIVE_COALESCE_MS = 250;
|
|
4
4
|
type Bag = Record<string, unknown>;
|
|
5
|
+
/** A tool call's arguments as one line: the first of its command, path, query,
|
|
6
|
+
* pattern or url. */
|
|
7
|
+
export declare function argPreview(args: Bag): string | undefined;
|
|
5
8
|
/** The task slots of a `subagent` / `lens` call (one `{agent, task}` or
|
|
6
9
|
* `{tasks:[...]}`), with the phase its task-file pointer names. */
|
|
7
10
|
export declare function subagentExecutions(args: Bag): LiveExecution[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../../src/live/writer.ts"],"names":[],"mappings":"AAeA,OAAO,EAOL,KAAK,aAAa,EAClB,KAAK,UAAU,EAEhB,MAAM,aAAa,CAAC;AAErB,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAMpC,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../../src/live/writer.ts"],"names":[],"mappings":"AAeA,OAAO,EAOL,KAAK,aAAa,EAClB,KAAK,UAAU,EAEhB,MAAM,aAAa,CAAC;AAErB,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAMpC,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AA4BnC;qBACqB;AACrB,wBAAgB,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS,CAMxD;AAED;mEACmE;AACnE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG,GAAG,aAAa,EAAE,CAmB7D;AAgDD,2EAA2E;AAC3E,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAuD7D;AAuDD,MAAM,WAAW,YAAY;IAC3B,2CAA2C;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,iCAAiC;IACjC,KAAK,IAAI,IAAI,CAAC;IACd,0DAA0D;IAC1D,KAAK,IAAI,IAAI,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,8CAA8C;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,4CAA4C;IAC5C,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC;yCACqC;IACrC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IACnD;+EAC2E;IAC3E,gBAAgB,CAAC,EAAE,CACjB,IAAI,EAAE,GAAG,EACT,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,KAC9C,aAAa,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,IAAI,EAAE,YAAY,GAAG,QAAQ,CAAC;IACnC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,QAAQ,CAAC;CAChD;AA0SD;mBACmB;AACnB,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,UAAU,CAcvE"}
|
package/dist/src/live/writer.js
CHANGED
|
@@ -39,7 +39,9 @@ function toolId(e) {
|
|
|
39
39
|
function toolArgs(e) {
|
|
40
40
|
return record(e.args) ?? record(e.input) ?? record(e.arguments) ?? {};
|
|
41
41
|
}
|
|
42
|
-
|
|
42
|
+
/** A tool call's arguments as one line: the first of its command, path, query,
|
|
43
|
+
* pattern or url. */
|
|
44
|
+
export function argPreview(args) {
|
|
43
45
|
for (const key of ["command", "path", "query", "pattern", "url"]) {
|
|
44
46
|
const value = text(args[key]);
|
|
45
47
|
if (value)
|
|
@@ -149,6 +151,9 @@ export function slimResult(raw, slot) {
|
|
|
149
151
|
: {}),
|
|
150
152
|
...(text(progress.lastMessage) ? { last_message: text(progress.lastMessage) } : {}),
|
|
151
153
|
...(text(progress.error) ? { error: text(progress.error) } : {}),
|
|
154
|
+
...(text(progress.currentTarget)
|
|
155
|
+
? { current_target: text(progress.currentTarget).slice(0, 240) }
|
|
156
|
+
: {}),
|
|
152
157
|
...(recent ? { recent_tools: recent } : {}),
|
|
153
158
|
};
|
|
154
159
|
return {
|