ccompactor 0.1.1 → 0.1.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/README.md +19 -15
- package/dist/adapters/claude.js +109 -122
- package/dist/adapters/claude.js.map +1 -1
- package/dist/adapters/codex.d.ts +1 -1
- package/dist/adapters/codex.js +7 -4
- package/dist/adapters/codex.js.map +1 -1
- package/dist/adapters/pi.d.ts +1 -1
- package/dist/adapters/pi.js +8 -4
- package/dist/adapters/pi.js.map +1 -1
- package/dist/adapters/types.d.ts +24 -2
- package/dist/adapters/types.js +33 -5
- package/dist/adapters/types.js.map +1 -1
- package/dist/artifact/expand.d.ts +3 -12
- package/dist/artifact/expand.js +140 -13
- package/dist/artifact/expand.js.map +1 -1
- package/dist/artifact/render.js +59 -11
- package/dist/artifact/render.js.map +1 -1
- package/dist/artifact/transcript.d.ts +31 -0
- package/dist/artifact/transcript.js +82 -0
- package/dist/artifact/transcript.js.map +1 -0
- package/dist/bench/run.d.ts +19 -1
- package/dist/bench/run.js +10 -3
- package/dist/bench/run.js.map +1 -1
- package/dist/cli.js +52 -8
- package/dist/cli.js.map +1 -1
- package/dist/discover/index.d.ts +1 -0
- package/dist/discover/index.js.map +1 -1
- package/dist/extract.d.ts +4 -0
- package/dist/extract.js +27 -0
- package/dist/extract.js.map +1 -1
- package/dist/ledgers/index.d.ts +0 -5
- package/dist/ledgers/index.js +29 -7
- package/dist/ledgers/index.js.map +1 -1
- package/dist/triage.js +26 -0
- package/dist/triage.js.map +1 -1
- package/dist/tui/App.d.ts +8 -0
- package/dist/tui/App.js +513 -0
- package/dist/tui/App.js.map +1 -0
- package/dist/tui/details.d.ts +37 -0
- package/dist/tui/details.js +75 -0
- package/dist/tui/details.js.map +1 -0
- package/dist/tui/index.d.ts +3 -2
- package/dist/tui/index.js +10 -129
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/mouse.d.ts +37 -0
- package/dist/tui/mouse.js +41 -0
- package/dist/tui/mouse.js.map +1 -0
- package/package.json +5 -4
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `[evt a–b]` → the events behind it.
|
|
3
|
-
*
|
|
4
|
-
* The pointer is the artifact's only claim-checking mechanism, so this has to
|
|
5
|
-
* mean exactly one thing: the events in that inclusive range, in source order.
|
|
6
|
-
* A range is delivered in exact, non-overlapping pages rather than one
|
|
7
|
-
* unbounded dump, and every page says how to reach the next one — a window that
|
|
8
|
-
* has already shown you events 1–200 owes you a way to reach 201.
|
|
9
|
-
*/
|
|
10
1
|
import type { SessionIR } from '../ir/types.js';
|
|
11
2
|
export interface Page {
|
|
12
3
|
index: number;
|
|
@@ -16,8 +7,8 @@ export interface ExpandOptions {
|
|
|
16
7
|
context?: number;
|
|
17
8
|
page?: Page;
|
|
18
9
|
}
|
|
19
|
-
export declare function expand(ir: SessionIR, ranges: Array<[number, number]>, options?: ExpandOptions): string
|
|
20
|
-
/** Consecutive, non-overlapping pages. A single oversized
|
|
21
|
-
export declare function paginate(
|
|
10
|
+
export declare function expand(ir: SessionIR, ranges: Array<[number, number]>, options?: ExpandOptions): Promise<string>;
|
|
11
|
+
/** Consecutive, non-overlapping pages. A single oversized line is its own page. */
|
|
12
|
+
export declare function paginate(rendered: string[], tokens: number): string[][];
|
|
22
13
|
/** Parse the `4122..4381`, `4122..=4381` and `4122` forms an artifact prints. */
|
|
23
14
|
export declare function parseRange(text: string): [number, number];
|
package/dist/artifact/expand.js
CHANGED
|
@@ -1,23 +1,78 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* `[evt a–b]` → the events behind it.
|
|
3
|
+
*
|
|
4
|
+
* The pointer is the artifact's only claim-checking mechanism, so it has to mean
|
|
5
|
+
* exactly one thing: the events in that inclusive range, in source order — and
|
|
6
|
+
* it has to **resolve**. Both properties were wrong in the first version, and
|
|
7
|
+
* the second one cost 50 points of retrieval accuracy against the same
|
|
8
|
+
* benchmark on the same questions before it was found.
|
|
9
|
+
*
|
|
10
|
+
* The IR is a filtered view: an adapter keeps the events it can turn into
|
|
11
|
+
* messages and drops the rest, so `evt 13063` existed in the transcript and not
|
|
12
|
+
* in the IR, and a reader that asked for it was told the event did not exist. A
|
|
13
|
+
* pointer the artifact printed could not be followed. Anything missing from the
|
|
14
|
+
* IR is now read back off the transcript itself, so every index in a range
|
|
15
|
+
* resolves whether or not the IR kept it.
|
|
16
|
+
*
|
|
17
|
+
* Ranges are delivered in exact, non-overlapping pages rather than one unbounded
|
|
18
|
+
* dump, and every page says how to reach the next one.
|
|
19
|
+
*/
|
|
20
|
+
import { lines } from '../adapters/types.js';
|
|
21
|
+
export async function expand(ir, ranges, options = {}) {
|
|
3
22
|
const context = options.context ?? 0;
|
|
23
|
+
const out = [];
|
|
4
24
|
for (const [from, to] of ranges) {
|
|
5
25
|
const start = Math.max(0, from - context);
|
|
6
26
|
const end = to + context;
|
|
7
|
-
const
|
|
8
|
-
|
|
27
|
+
const byIndex = new Map();
|
|
28
|
+
for (const message of ir.messages) {
|
|
29
|
+
if (message.eventIndex < start || message.eventIndex > end)
|
|
30
|
+
continue;
|
|
31
|
+
byIndex.set(message.eventIndex, renderEvent(message));
|
|
32
|
+
}
|
|
33
|
+
// Whatever the IR did not keep comes off the transcript. One pass, stopping
|
|
34
|
+
// as soon as the range is covered, so a range near the start does not read
|
|
35
|
+
// the whole file.
|
|
36
|
+
const missing = new Set();
|
|
37
|
+
for (let i = start; i <= end; i += 1)
|
|
38
|
+
if (!byIndex.has(i))
|
|
39
|
+
missing.add(i);
|
|
40
|
+
if (missing.size > 0) {
|
|
41
|
+
const path = ir.ref.path;
|
|
42
|
+
try {
|
|
43
|
+
for await (const line of lines(path)) {
|
|
44
|
+
const index = line.n - 1;
|
|
45
|
+
if (index > end)
|
|
46
|
+
break;
|
|
47
|
+
if (!missing.has(index))
|
|
48
|
+
continue;
|
|
49
|
+
missing.delete(index);
|
|
50
|
+
byIndex.set(index, renderRawLine(index, line.text));
|
|
51
|
+
if (missing.size === 0)
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
// An unreadable transcript still yields what the IR had.
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const ordered = [...byIndex.entries()].sort((a, b) => a[0] - b[0]);
|
|
60
|
+
const rendered = ordered.map(([, text]) => text);
|
|
61
|
+
if (rendered.length === 0) {
|
|
9
62
|
out.push(`=== evt ${start}–${end} ===\n(no events in this range)\n`);
|
|
10
63
|
continue;
|
|
11
64
|
}
|
|
12
65
|
if (!options.page) {
|
|
13
|
-
out.push(`=== evt ${start}–${end} ===\n${
|
|
66
|
+
out.push(`=== evt ${start}–${end} ===\n${rendered.join('\n')}\n`);
|
|
14
67
|
continue;
|
|
15
68
|
}
|
|
16
|
-
const pages = paginate(
|
|
69
|
+
const pages = paginate(rendered, options.page.tokens);
|
|
17
70
|
const index = Math.min(Math.max(1, options.page.index), pages.length);
|
|
18
71
|
const slice = pages[index - 1];
|
|
19
|
-
|
|
20
|
-
|
|
72
|
+
const first = firstIndex(slice) ?? start;
|
|
73
|
+
const last = lastIndex(slice) ?? end;
|
|
74
|
+
out.push(`=== evt ${start}–${end} · page ${index}/${pages.length} · evt ${first}–${last} · ${slice.reduce((n, t) => n + Math.ceil(t.length / 4), 0)} token(s) ===`);
|
|
75
|
+
out.push(slice.join('\n'));
|
|
21
76
|
if (pages.length > 1) {
|
|
22
77
|
const next = index === pages.length ? 1 : index + 1;
|
|
23
78
|
out.push(`\n--- page ${index} of ${pages.length}; page ${next} is \`ccompactor expand <ref> ${from}..${to} --page ${next}\` ---`);
|
|
@@ -26,19 +81,29 @@ export function expand(ir, ranges, options = {}) {
|
|
|
26
81
|
}
|
|
27
82
|
return out.join('\n');
|
|
28
83
|
}
|
|
29
|
-
|
|
30
|
-
|
|
84
|
+
function firstIndex(lines) {
|
|
85
|
+
return indexOf(lines[0]);
|
|
86
|
+
}
|
|
87
|
+
function lastIndex(lines) {
|
|
88
|
+
return indexOf(lines.at(-1));
|
|
89
|
+
}
|
|
90
|
+
function indexOf(line) {
|
|
91
|
+
const match = line ? /^evt (\d+)/.exec(line) : null;
|
|
92
|
+
return match ? Number.parseInt(match[1], 10) : undefined;
|
|
93
|
+
}
|
|
94
|
+
/** Consecutive, non-overlapping pages. A single oversized line is its own page. */
|
|
95
|
+
export function paginate(rendered, tokens) {
|
|
31
96
|
const pages = [];
|
|
32
97
|
let current = [];
|
|
33
98
|
let used = 0;
|
|
34
|
-
for (const
|
|
35
|
-
const cost = Math.ceil(
|
|
99
|
+
for (const line of rendered) {
|
|
100
|
+
const cost = Math.ceil(line.length / 4);
|
|
36
101
|
if (current.length > 0 && used + cost > tokens) {
|
|
37
102
|
pages.push(current);
|
|
38
103
|
current = [];
|
|
39
104
|
used = 0;
|
|
40
105
|
}
|
|
41
|
-
current.push(
|
|
106
|
+
current.push(line);
|
|
42
107
|
used += cost;
|
|
43
108
|
}
|
|
44
109
|
if (current.length > 0)
|
|
@@ -51,6 +116,68 @@ function renderEvent(message) {
|
|
|
51
116
|
const body = message.text ?? (message.toolInput ? JSON.stringify(message.toolInput) : '');
|
|
52
117
|
return `evt ${message.eventIndex} [${tag}] ${body.replace(/\s+/g, ' ').slice(0, 2_000)}`;
|
|
53
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* A line the IR did not keep, shown compactly.
|
|
121
|
+
*
|
|
122
|
+
* Returning the JSON verbatim was the obvious thing and it is wrong twice over:
|
|
123
|
+
* a Claude transcript's unkept lines are mostly hook bookkeeping — dozens of
|
|
124
|
+
* `hook_success` records per tool call, each several hundred tokens of the same
|
|
125
|
+
* shell bootstrap — and handing those to a reader as the answer to "what
|
|
126
|
+
* happened at evt 13063" buries the one line that mattered under noise that
|
|
127
|
+
* means nothing. They are named and dropped instead. Everything else is reduced
|
|
128
|
+
* to its shape: a type, and whatever short field identifies it.
|
|
129
|
+
*/
|
|
130
|
+
const SILENT = new Set([
|
|
131
|
+
'hook_success',
|
|
132
|
+
'hook_error',
|
|
133
|
+
'async_hook_response',
|
|
134
|
+
'total_tokens_reminder',
|
|
135
|
+
'file-history-snapshot',
|
|
136
|
+
'queued_command',
|
|
137
|
+
'hook_progress',
|
|
138
|
+
]);
|
|
139
|
+
function renderRawLine(index, text) {
|
|
140
|
+
let raw;
|
|
141
|
+
try {
|
|
142
|
+
raw = JSON.parse(text);
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
return `evt ${index} [raw] ${text.replace(/\s+/g, ' ').slice(0, 400)}`;
|
|
146
|
+
}
|
|
147
|
+
const attachment = raw['attachment'];
|
|
148
|
+
if (typeof attachment === 'object' && attachment !== null) {
|
|
149
|
+
const kind = String(attachment['type'] ?? 'attachment');
|
|
150
|
+
if (SILENT.has(kind)) {
|
|
151
|
+
// Named, not silent: the event exists and the reader can see it was
|
|
152
|
+
// bookkeeping rather than wonder why the index is missing.
|
|
153
|
+
return `evt ${index} [${kind}] (no content)`;
|
|
154
|
+
}
|
|
155
|
+
return `evt ${index} [${kind}] ${compact(attachment, 400)}`;
|
|
156
|
+
}
|
|
157
|
+
const type = String(raw['type'] ?? 'unknown');
|
|
158
|
+
const body = typeof raw['content'] === 'string'
|
|
159
|
+
? raw['content']
|
|
160
|
+
: typeof raw['summary'] === 'string'
|
|
161
|
+
? raw['summary']
|
|
162
|
+
: compact(raw, 400);
|
|
163
|
+
return `evt ${index} [${type}] ${body.replace(/\s+/g, ' ').slice(0, 600)}`;
|
|
164
|
+
}
|
|
165
|
+
/** The short fields of an object, with the bookkeeping stripped out. */
|
|
166
|
+
function compact(value, max) {
|
|
167
|
+
if (typeof value === 'string')
|
|
168
|
+
return value.replace(/\s+/g, ' ').slice(0, max);
|
|
169
|
+
if (typeof value !== 'object' || value === null)
|
|
170
|
+
return String(value);
|
|
171
|
+
const interesting = ['text', 'stdout', 'stderr', 'content', 'message', 'command', 'name', 'prompt'];
|
|
172
|
+
const parts = [];
|
|
173
|
+
for (const key of interesting) {
|
|
174
|
+
const field = value[key];
|
|
175
|
+
if (typeof field === 'string' && field.trim().length > 0) {
|
|
176
|
+
parts.push(field.replace(/\s+/g, ' ').slice(0, 200));
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return (parts.join(' · ') || JSON.stringify(value)).slice(0, max);
|
|
180
|
+
}
|
|
54
181
|
/** Parse the `4122..4381`, `4122..=4381` and `4122` forms an artifact prints. */
|
|
55
182
|
export function parseRange(text) {
|
|
56
183
|
const trimmed = text.trim();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expand.js","sourceRoot":"","sources":["../../src/artifact/expand.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"expand.js","sourceRoot":"","sources":["../../src/artifact/expand.ts"],"names":[],"mappings":"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"}
|
package/dist/artifact/render.js
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
import { approxTokens, truncateMiddle } from '../ir/tokens.js';
|
|
2
|
+
/**
|
|
3
|
+
* The provider's own continuation preamble is a user turn and is not a request.
|
|
4
|
+
*
|
|
5
|
+
* Showing it as "last user request" tells a reader that the human's most recent
|
|
6
|
+
* wish was to be given a summary of their own session.
|
|
7
|
+
*/
|
|
8
|
+
const CONTINUATION = /this session is being continued from a previous conversation/i;
|
|
9
|
+
/** How files that live outside the session's project are reported. */
|
|
10
|
+
const OUTSIDE = '(outside the project)';
|
|
2
11
|
/** The brief's own ceiling. A brief that does not fit a screen is not a brief. */
|
|
3
12
|
const BRIEF_BUDGET = 1_200;
|
|
4
13
|
/** Tokens the constraints block may spend before it starts counting itself. */
|
|
@@ -24,7 +33,7 @@ export function render(input) {
|
|
|
24
33
|
brief += '\n';
|
|
25
34
|
}
|
|
26
35
|
const first = ledgers.userTurns[0];
|
|
27
|
-
const last = ledgers.userTurns.at(-1);
|
|
36
|
+
const last = ledgers.userTurns.filter((t) => !CONTINUATION.test(t.text)).at(-1);
|
|
28
37
|
if (first) {
|
|
29
38
|
brief += `**Goal** (from the first user message, not model-inferred): ${oneLine(first.text, 300)} [evt ${first.evt}]\n\n`;
|
|
30
39
|
}
|
|
@@ -34,7 +43,7 @@ export function render(input) {
|
|
|
34
43
|
brief += renderConstraints(constraints);
|
|
35
44
|
}
|
|
36
45
|
if (ledgers.files.length > 0) {
|
|
37
|
-
const byDir = topDirectories(ledgers, 5);
|
|
46
|
+
const byDir = topDirectories(ledgers, projectRoot(input), 5);
|
|
38
47
|
brief += `**Where the work was**\n`;
|
|
39
48
|
for (const [dir, count] of byDir)
|
|
40
49
|
brief += `- \`${dir}\` — ${count} touch(es)\n`;
|
|
@@ -91,7 +100,7 @@ export function render(input) {
|
|
|
91
100
|
markdown,
|
|
92
101
|
json: {
|
|
93
102
|
schema: 'ccompactor.handoff/v1',
|
|
94
|
-
version: '0.1.
|
|
103
|
+
version: '0.1.2',
|
|
95
104
|
session: {
|
|
96
105
|
agent: ir.ref.agent,
|
|
97
106
|
id: ir.ref.id,
|
|
@@ -114,7 +123,7 @@ function frontMatter(input) {
|
|
|
114
123
|
const cwd = ir.metadata['cwd'];
|
|
115
124
|
return `---
|
|
116
125
|
schema: ccompactor.handoff/v1
|
|
117
|
-
ccompactor: 0.1.
|
|
126
|
+
ccompactor: 0.1.2
|
|
118
127
|
source: {agent: ${ir.ref.agent}, session: ${ir.ref.id}, events: ${ir.messages.length}, user_turns: ${ledgers.counts.userTurns}, compact_boundaries: ${ir.compactBoundaries.length}${typeof cwd === 'string' ? `, cwd: ${cwd}` : ''}}
|
|
119
128
|
engine: ${input.engine}
|
|
120
129
|
llm: ${input.summary ? 'on' : 'none'}
|
|
@@ -131,11 +140,23 @@ function preamble() {
|
|
|
131
140
|
> \`[evt a–b]\` pointer you need with \`ccompactor expand\`.
|
|
132
141
|
`;
|
|
133
142
|
}
|
|
143
|
+
/**
|
|
144
|
+
* A short label, not the message.
|
|
145
|
+
*
|
|
146
|
+
* The first user turn is often a page of onboarding. The goal is quoted in full
|
|
147
|
+
* a few lines below, so the title only has to say which task this is.
|
|
148
|
+
*/
|
|
149
|
+
const TITLE_MAX = 72;
|
|
134
150
|
function title(input) {
|
|
135
151
|
const first = input.ledgers.userTurns[0];
|
|
136
152
|
if (!first)
|
|
137
153
|
return `${input.ir.ref.agent} session ${input.ir.ref.id}`;
|
|
138
|
-
|
|
154
|
+
const text = oneLine(first.text, 400);
|
|
155
|
+
if (text.length <= TITLE_MAX)
|
|
156
|
+
return text;
|
|
157
|
+
const cut = text.slice(0, TITLE_MAX);
|
|
158
|
+
const space = cut.lastIndexOf(' ');
|
|
159
|
+
return `${(space > 40 ? cut.slice(0, space) : cut).replace(/[\s,;:.\u2014-]+$/, '')}\u2026`;
|
|
139
160
|
}
|
|
140
161
|
function renderConstraints(constraints) {
|
|
141
162
|
let block = `**Hard constraints** (standing instructions, quoted verbatim)\n`;
|
|
@@ -335,16 +356,43 @@ export function stripAnalysis(text) {
|
|
|
335
356
|
const summary = /<summary>([\s\S]*?)<\/summary>/i.exec(withoutAnalysis);
|
|
336
357
|
return (summary ? summary[1] : withoutAnalysis).trim();
|
|
337
358
|
}
|
|
338
|
-
/**
|
|
339
|
-
function
|
|
359
|
+
/** The directory the session was working in, when the provider recorded one. */
|
|
360
|
+
function projectRoot(input) {
|
|
361
|
+
const cwd = input.ir.metadata['cwd'];
|
|
362
|
+
return typeof cwd === 'string' ? cwd.replace(/\/$/, '') : '';
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Where the work was, relative to the project.
|
|
366
|
+
*
|
|
367
|
+
* The first version split the absolute path and took its first two components,
|
|
368
|
+
* which for `/Users/musichen/_projects/acme/app/src/db.ts` is `Users/musichen` —
|
|
369
|
+
* the same answer for every file in every project on the machine, and no answer
|
|
370
|
+
* to the question a reader is asking. Stripping the session's own working
|
|
371
|
+
* directory first is the whole fix, and it turns the same ledger into
|
|
372
|
+
* `app/src`, `app/tests`, `docs`.
|
|
373
|
+
*/
|
|
374
|
+
function topDirectories(ledgers, root, limit) {
|
|
340
375
|
const counts = new Map();
|
|
341
376
|
for (const file of ledgers.files) {
|
|
342
|
-
const
|
|
343
|
-
|
|
344
|
-
|
|
377
|
+
const inside = root.length > 0 && file.path.startsWith(`${root}/`);
|
|
378
|
+
// A file outside the project is not "in Users/musichen": it is outside, and
|
|
379
|
+
// saying so is more useful than inventing a directory for it.
|
|
380
|
+
const parts = inside
|
|
381
|
+
? file.path.slice(root.length + 1).split('/').filter(Boolean)
|
|
382
|
+
: [];
|
|
383
|
+
const weight = file.edits * 3 + file.writes * 3 + file.reads;
|
|
384
|
+
if (parts.length <= 1) {
|
|
385
|
+
counts.set(OUTSIDE, (counts.get(OUTSIDE) ?? 0) + weight);
|
|
386
|
+
continue;
|
|
387
|
+
}
|
|
388
|
+
const depth = Math.min(2, parts.length - 1);
|
|
389
|
+
const dir = parts.slice(0, depth).join('/');
|
|
390
|
+
counts.set(dir, (counts.get(dir) ?? 0) + weight);
|
|
345
391
|
}
|
|
392
|
+
// A place the reader cannot navigate to does not lead the list, however many
|
|
393
|
+
// touches it has.
|
|
346
394
|
return [...counts.entries()]
|
|
347
|
-
.sort((a, b) => b[
|
|
395
|
+
.sort((a, b) => (a[0] === OUTSIDE ? 1 : b[0] === OUTSIDE ? -1 : b[1] - a[1]))
|
|
348
396
|
.slice(0, limit);
|
|
349
397
|
}
|
|
350
398
|
/** Collapse whitespace and truncate on a word boundary. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/artifact/render.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/artifact/render.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The readable transcript: what was said, in order, with nothing added.
|
|
3
|
+
*
|
|
4
|
+
* A second output shape, because a handoff and a transcript answer different
|
|
5
|
+
* questions. The handoff says *where the work stands* and drops almost
|
|
6
|
+
* everything to say it. This says *what was actually said* — the user's turns
|
|
7
|
+
* and the agent's replies, verbatim, in a file a human can read top to bottom
|
|
8
|
+
* or grep.
|
|
9
|
+
*
|
|
10
|
+
* It exists because "is this the session I want?" is a question people answer by
|
|
11
|
+
* skimming, and a 4,000-token brief cannot be skimmed for that. Tool calls and
|
|
12
|
+
* their output are summarised to one line each by default: they are most of the
|
|
13
|
+
* bytes and almost none of the meaning, and `--full` includes them when they are
|
|
14
|
+
* the point.
|
|
15
|
+
*/
|
|
16
|
+
import type { SessionIR } from '../ir/types.js';
|
|
17
|
+
export interface TranscriptOptions {
|
|
18
|
+
/** Include tool calls and their output, not just the conversation. */
|
|
19
|
+
full?: boolean;
|
|
20
|
+
/** Include reasoning blocks. Off by default: it is the noisiest tier. */
|
|
21
|
+
reasoning?: boolean;
|
|
22
|
+
/** Only the last N messages, when the file is too large to read whole. */
|
|
23
|
+
last?: number;
|
|
24
|
+
}
|
|
25
|
+
export interface Transcript {
|
|
26
|
+
text: string;
|
|
27
|
+
messages: number;
|
|
28
|
+
tokens: number;
|
|
29
|
+
}
|
|
30
|
+
/** Render a session as plain text, oldest first. */
|
|
31
|
+
export declare function renderTranscript(ir: SessionIR, options?: TranscriptOptions): Transcript;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/** Render a session as plain text, oldest first. */
|
|
2
|
+
export function renderTranscript(ir, options = {}) {
|
|
3
|
+
const source = options.last ? ir.messages.slice(-options.last) : ir.messages;
|
|
4
|
+
const out = [];
|
|
5
|
+
let rendered = 0;
|
|
6
|
+
const header = [
|
|
7
|
+
`# ${ir.ref.agent} session ${ir.ref.id}`,
|
|
8
|
+
`# ${ir.ref.path}`,
|
|
9
|
+
typeof ir.metadata['cwd'] === 'string' ? `# cwd: ${ir.metadata['cwd']}` : undefined,
|
|
10
|
+
typeof ir.metadata['branch'] === 'string' ? `# branch: ${ir.metadata['branch']}` : undefined,
|
|
11
|
+
typeof ir.metadata['model'] === 'string' ? `# model: ${ir.metadata['model']}` : undefined,
|
|
12
|
+
`# ${source.length} of ${ir.messages.length} message(s)`,
|
|
13
|
+
'',
|
|
14
|
+
].filter((line) => line !== undefined);
|
|
15
|
+
out.push(...header);
|
|
16
|
+
for (const message of source) {
|
|
17
|
+
const block = renderOne(message, options);
|
|
18
|
+
if (!block)
|
|
19
|
+
continue;
|
|
20
|
+
out.push(block);
|
|
21
|
+
rendered += 1;
|
|
22
|
+
}
|
|
23
|
+
const text = `${out.join('\n')}\n`;
|
|
24
|
+
return { text, messages: rendered, tokens: Math.ceil(text.length / 4) };
|
|
25
|
+
}
|
|
26
|
+
function renderOne(message, options) {
|
|
27
|
+
const text = (message.text ?? '').trim();
|
|
28
|
+
if (message.isHumanTurn) {
|
|
29
|
+
return `\n${rule('USER')}\n${text}\n`;
|
|
30
|
+
}
|
|
31
|
+
if (message.role === 'user') {
|
|
32
|
+
// Harness-injected, but worth seeing: it is where provider summaries land.
|
|
33
|
+
return text ? `\n${rule('USER (harness)')}\n${text}\n` : undefined;
|
|
34
|
+
}
|
|
35
|
+
if (message.role === 'assistant') {
|
|
36
|
+
const parts = [];
|
|
37
|
+
if (text)
|
|
38
|
+
parts.push(`${rule('ASSISTANT')}\n${text}`);
|
|
39
|
+
if (message.toolName) {
|
|
40
|
+
if (options.full) {
|
|
41
|
+
parts.push(`${rule(`TOOL ${message.toolName}`)}\n${stringify(message.toolInput)}`);
|
|
42
|
+
}
|
|
43
|
+
else if (!text) {
|
|
44
|
+
// A tool call with no prose still tells the reader what happened.
|
|
45
|
+
parts.push(` · ${message.toolName} ${oneLine(stringify(message.toolInput), 100)}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return parts.length > 0 ? `\n${parts.join('\n')}\n` : undefined;
|
|
49
|
+
}
|
|
50
|
+
if (message.role === 'tool') {
|
|
51
|
+
if (!options.full)
|
|
52
|
+
return undefined;
|
|
53
|
+
return `${rule('TOOL RESULT')}\n${oneLine(text, 2_000)}\n`;
|
|
54
|
+
}
|
|
55
|
+
if (message.role === 'system') {
|
|
56
|
+
return text ? `\n${rule('SYSTEM')}\n${text}\n` : undefined;
|
|
57
|
+
}
|
|
58
|
+
if (message.role === 'attachment') {
|
|
59
|
+
return text ? `\n${rule('PROVIDER SUMMARY')}\n${text}\n` : undefined;
|
|
60
|
+
}
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
function rule(label) {
|
|
64
|
+
return `──── ${label} ${'─'.repeat(Math.max(4, 60 - label.length))}`;
|
|
65
|
+
}
|
|
66
|
+
function stringify(value) {
|
|
67
|
+
if (value === undefined)
|
|
68
|
+
return '';
|
|
69
|
+
if (typeof value === 'string')
|
|
70
|
+
return value;
|
|
71
|
+
try {
|
|
72
|
+
return JSON.stringify(value);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return String(value);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function oneLine(text, max) {
|
|
79
|
+
const single = text.replace(/\s+/g, ' ').trim();
|
|
80
|
+
return single.length <= max ? single : `${single.slice(0, max - 1)}…`;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=transcript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript.js","sourceRoot":"","sources":["../../src/artifact/transcript.ts"],"names":[],"mappings":"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"}
|
package/dist/bench/run.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type DiscoverOptions } from '../discover/index.js';
|
|
2
2
|
import { type Selection } from '../llm/index.js';
|
|
3
|
-
import { score, type Arm, type BenchOptions, type Trial } from './index.js';
|
|
3
|
+
import { score, type Arm, type BenchOptions, type Question, type Trial } from './index.js';
|
|
4
4
|
export interface BenchRun {
|
|
5
5
|
backend: string;
|
|
6
6
|
questions: number;
|
|
@@ -13,5 +13,23 @@ export declare function runBench(references: string[], options?: {
|
|
|
13
13
|
bench?: Partial<BenchOptions>;
|
|
14
14
|
outDir?: string;
|
|
15
15
|
discover?: DiscoverOptions;
|
|
16
|
+
/**
|
|
17
|
+
* Use this file as the artifact instead of rendering one.
|
|
18
|
+
*
|
|
19
|
+
* The point is comparison. Two tools can be measured on the same session and
|
|
20
|
+
* the same questions, and the only way to tell whether a difference is the
|
|
21
|
+
* artifact or the harness is to hold one of them fixed.
|
|
22
|
+
*/
|
|
23
|
+
artifactOverride?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Use exactly these questions instead of deriving them.
|
|
26
|
+
*
|
|
27
|
+
* Two tools can be pointed at the same session and the same questions, but
|
|
28
|
+
* each derives its own from its own event model — so they end up asking
|
|
29
|
+
* different things at different difficulties, and comparing the scores
|
|
30
|
+
* compares the questions. Reading a shared file is the only way the two
|
|
31
|
+
* numbers mean the same thing.
|
|
32
|
+
*/
|
|
33
|
+
questions?: Question[];
|
|
16
34
|
}, progress?: (message: string) => void): Promise<BenchRun>;
|
|
17
35
|
export declare function renderTable(scores: ReturnType<typeof score>, trials: Trial[], backend: string): string;
|
package/dist/bench/run.js
CHANGED
|
@@ -15,6 +15,10 @@ export async function runBench(references, options = {}, progress = () => { }) {
|
|
|
15
15
|
if (!backend) {
|
|
16
16
|
throw new Error('the benchmark needs a backend that can read the context: pass --llm api:<provider>. Without one there is no successor agent and nothing to measure.');
|
|
17
17
|
}
|
|
18
|
+
if (options.questions) {
|
|
19
|
+
// A shared question set describes one session; expand against that one.
|
|
20
|
+
references = references.slice(0, 1);
|
|
21
|
+
}
|
|
18
22
|
const trials = [];
|
|
19
23
|
const perSession = [];
|
|
20
24
|
for (const reference of references) {
|
|
@@ -22,9 +26,11 @@ export async function runBench(references, options = {}, progress = () => { }) {
|
|
|
22
26
|
const ir = await readSession(ref);
|
|
23
27
|
const ledgers = (await import('../ledgers/index.js')).buildLedgers(ir);
|
|
24
28
|
const constraints = extractConstraints(ir);
|
|
25
|
-
const artifact =
|
|
29
|
+
const artifact = options.artifactOverride
|
|
30
|
+
? await (await import('node:fs/promises')).readFile(options.artifactOverride, 'utf8')
|
|
31
|
+
: render({ ir, ledgers, constraints, engine: 'deterministic' }).markdown;
|
|
26
32
|
const tail = tailOf(ir);
|
|
27
|
-
const asked = questions(ir, ledgers, bench);
|
|
33
|
+
const asked = options.questions ?? questions(ir, ledgers, bench);
|
|
28
34
|
if (asked.length === 0) {
|
|
29
35
|
progress(`${reference}: no checkable questions could be derived; skipping`);
|
|
30
36
|
continue;
|
|
@@ -50,6 +56,7 @@ export async function runBench(references, options = {}, progress = () => { }) {
|
|
|
50
56
|
const report = {
|
|
51
57
|
schema: 'ccompactor.bench/v1',
|
|
52
58
|
backend: selectionLabel(selection),
|
|
59
|
+
artifact: options.artifactOverride ?? 'ccompactor (rendered)',
|
|
53
60
|
settings: bench,
|
|
54
61
|
arms,
|
|
55
62
|
questions: trials.length / Math.max(1, arms.length),
|
|
@@ -87,7 +94,7 @@ async function trial(backend, arm, question, artifact, tail, ir, ledgers, bench)
|
|
|
87
94
|
if (!range)
|
|
88
95
|
break;
|
|
89
96
|
expansions += 1;
|
|
90
|
-
const events = expand(ir, [range]);
|
|
97
|
+
const events = await expand(ir, [range]);
|
|
91
98
|
tokens += Math.ceil(events.length / 4);
|
|
92
99
|
conversation += `\nYou asked for evt ${range[0]}..${range[1]}:\n${events}\n`;
|
|
93
100
|
}
|