ccompactor 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +37 -0
  3. package/README.md +101 -0
  4. package/dist/adapters/claude.d.ts +36 -0
  5. package/dist/adapters/claude.js +361 -0
  6. package/dist/adapters/claude.js.map +1 -0
  7. package/dist/adapters/codex.d.ts +11 -0
  8. package/dist/adapters/codex.js +218 -0
  9. package/dist/adapters/codex.js.map +1 -0
  10. package/dist/adapters/index.d.ts +17 -0
  11. package/dist/adapters/index.js +19 -0
  12. package/dist/adapters/index.js.map +1 -0
  13. package/dist/adapters/pi.d.ts +16 -0
  14. package/dist/adapters/pi.js +213 -0
  15. package/dist/adapters/pi.js.map +1 -0
  16. package/dist/adapters/types.d.ts +31 -0
  17. package/dist/adapters/types.js +7 -0
  18. package/dist/adapters/types.js.map +1 -0
  19. package/dist/artifact/expand.d.ts +23 -0
  20. package/dist/artifact/expand.js +71 -0
  21. package/dist/artifact/expand.js.map +1 -0
  22. package/dist/artifact/render.d.ts +59 -0
  23. package/dist/artifact/render.js +357 -0
  24. package/dist/artifact/render.js.map +1 -0
  25. package/dist/artifact/verify.d.ts +12 -0
  26. package/dist/artifact/verify.js +48 -0
  27. package/dist/artifact/verify.js.map +1 -0
  28. package/dist/bench/index.d.ts +71 -0
  29. package/dist/bench/index.js +186 -0
  30. package/dist/bench/index.js.map +1 -0
  31. package/dist/bench/run.d.ts +17 -0
  32. package/dist/bench/run.js +187 -0
  33. package/dist/bench/run.js.map +1 -0
  34. package/dist/cli.d.ts +2 -0
  35. package/dist/cli.js +322 -0
  36. package/dist/cli.js.map +1 -0
  37. package/dist/compact/engine.d.ts +69 -0
  38. package/dist/compact/engine.js +164 -0
  39. package/dist/compact/engine.js.map +1 -0
  40. package/dist/compact/shims.d.ts +24 -0
  41. package/dist/compact/shims.js +14 -0
  42. package/dist/compact/shims.js.map +1 -0
  43. package/dist/discover/index.d.ts +40 -0
  44. package/dist/discover/index.js +164 -0
  45. package/dist/discover/index.js.map +1 -0
  46. package/dist/discover/reference.d.ts +21 -0
  47. package/dist/discover/reference.js +44 -0
  48. package/dist/discover/reference.js.map +1 -0
  49. package/dist/extract.d.ts +26 -0
  50. package/dist/extract.js +103 -0
  51. package/dist/extract.js.map +1 -0
  52. package/dist/handoff/index.d.ts +12 -0
  53. package/dist/handoff/index.js +67 -0
  54. package/dist/handoff/index.js.map +1 -0
  55. package/dist/ir/tokens.d.ts +14 -0
  56. package/dist/ir/tokens.js +36 -0
  57. package/dist/ir/tokens.js.map +1 -0
  58. package/dist/ir/types.d.ts +82 -0
  59. package/dist/ir/types.js +36 -0
  60. package/dist/ir/types.js.map +1 -0
  61. package/dist/ledgers/index.d.ts +66 -0
  62. package/dist/ledgers/index.js +185 -0
  63. package/dist/ledgers/index.js.map +1 -0
  64. package/dist/llm/index.d.ts +43 -0
  65. package/dist/llm/index.js +143 -0
  66. package/dist/llm/index.js.map +1 -0
  67. package/dist/redact.d.ts +39 -0
  68. package/dist/redact.js +104 -0
  69. package/dist/redact.js.map +1 -0
  70. package/dist/skill/index.d.ts +9 -0
  71. package/dist/skill/index.js +48 -0
  72. package/dist/skill/index.js.map +1 -0
  73. package/dist/triage.d.ts +25 -0
  74. package/dist/triage.js +160 -0
  75. package/dist/triage.js.map +1 -0
  76. package/dist/tui/index.d.ts +4 -0
  77. package/dist/tui/index.js +147 -0
  78. package/dist/tui/index.js.map +1 -0
  79. package/package.json +71 -0
  80. package/skill/SKILL.md +54 -0
@@ -0,0 +1,186 @@
1
+ export const ARMS = ['none', 'tail', 'artifact', 'retrieval'];
2
+ export const DEFAULT_BENCH = { brief: 6, deep: 8, recent: 4, expansions: 3 };
3
+ export function questions(ir, ledgers, options) {
4
+ const out = [];
5
+ const first = ledgers.userTurns[0];
6
+ if (first) {
7
+ out.push({
8
+ id: 'brief-goal',
9
+ class: 'brief',
10
+ prompt: 'What did the user originally ask for? Quote a distinctive phrase.',
11
+ key: first.text.split(/\s+/).slice(0, 8).join(' '),
12
+ evt: first.evt,
13
+ });
14
+ }
15
+ const busiest = ledgers.files.filter((f) => f.edits > 0).sort((a, b) => b.edits - a.edits)[0];
16
+ if (busiest) {
17
+ out.push({
18
+ id: 'brief-busiest-file',
19
+ class: 'brief',
20
+ prompt: 'Which file did the session edit the most times?',
21
+ key: busiest.path,
22
+ evt: busiest.lastEvt,
23
+ });
24
+ }
25
+ const commit = ledgers.commits.at(-1);
26
+ if (commit) {
27
+ out.push({
28
+ id: 'brief-last-commit',
29
+ class: 'brief',
30
+ prompt: 'What was the newest commit made during the session?',
31
+ key: commit.subject,
32
+ evt: commit.evt,
33
+ });
34
+ }
35
+ const error = ledgers.errors[0];
36
+ if (error) {
37
+ out.push({
38
+ id: 'brief-unresolved',
39
+ class: 'brief',
40
+ prompt: 'Name an error the session kept hitting.',
41
+ key: error.signature,
42
+ evt: error.evt,
43
+ });
44
+ }
45
+ out.push({
46
+ id: 'brief-user-turns',
47
+ class: 'brief',
48
+ prompt: 'How many times did the user speak in this session? Answer with the number.',
49
+ key: String(ledgers.counts.userTurns),
50
+ evt: 0,
51
+ });
52
+ // Deep: sampled from events that can actually be asked about, spread over the
53
+ // first 85% so no recency tail can reach them. Filtering first and sampling
54
+ // second is what makes the requested count the count that is asked.
55
+ //
56
+ // Preference order matters. A tool result is a poor question source: its
57
+ // distinctive token is a long path buried past any reasonable truncation, so
58
+ // asking about it measures truncation rather than the context. The first run
59
+ // drew most questions from tool results and the tail arm scored zero on every
60
+ // class — including recent — which is the arm the published evidence says
61
+ // should be competitive. Prose first, artifacts only to fill the quota.
62
+ const speakable = ir.messages.filter((m) => isHumanTurn(m) || isAssistantText(m));
63
+ const askable = speakable.length >= options.deep + options.recent
64
+ ? speakable
65
+ : ir.messages.filter((m) => keyFor(m) !== undefined);
66
+ const usable = Math.floor((askable.length * 85) / 100);
67
+ if (usable >= options.deep && options.deep > 0) {
68
+ const stride = Math.floor(usable / options.deep);
69
+ for (let n = 0; n < options.deep; n += 1) {
70
+ const message = askable[n * stride + Math.floor(stride / 2)];
71
+ if (!message)
72
+ continue;
73
+ const key = keyFor(message);
74
+ if (!key)
75
+ continue;
76
+ out.push({
77
+ id: `deep-${n}`,
78
+ class: 'deep',
79
+ prompt: `At event ${message.eventIndex}: what was ${describe(message)}? Quote a distinctive path or identifier.`,
80
+ key,
81
+ evt: message.eventIndex,
82
+ });
83
+ }
84
+ }
85
+ for (const [n, message] of askable.slice(-options.recent).reverse().entries()) {
86
+ const key = keyFor(message);
87
+ if (!key)
88
+ continue;
89
+ out.push({
90
+ id: `recent-${n}`,
91
+ class: 'recent',
92
+ prompt: `Most recently: what was ${describe(message)}? Quote a distinctive phrase.`,
93
+ key,
94
+ evt: message.eventIndex,
95
+ });
96
+ }
97
+ return out;
98
+ }
99
+ function isHumanTurn(message) {
100
+ return message.isHumanTurn === true && Boolean(message.text && message.text.trim().length > 0);
101
+ }
102
+ function isAssistantText(message) {
103
+ return message.role === 'assistant' && !message.toolName && Boolean(message.text && message.text.trim().length > 4);
104
+ }
105
+ function describe(message) {
106
+ if (message.isHumanTurn)
107
+ return 'the user asking for';
108
+ if (message.toolName)
109
+ return `the ${message.toolName} call doing`;
110
+ if (message.role === 'tool')
111
+ return 'the tool returning';
112
+ return 'the agent saying';
113
+ }
114
+ /**
115
+ * The key a question is scored against.
116
+ *
117
+ * A distinctive single token, not a phrase: whole phrases do not survive
118
+ * paraphrase, and the first run of sctxx's version of this benchmark keyed on a
119
+ * tool name followed by its argument and scored zero on correct answers that
120
+ * described the call instead of reciting it.
121
+ */
122
+ export function keyFor(message) {
123
+ const text = [message.text ?? '', message.toolInput ? JSON.stringify(message.toolInput) : ''].join(' ');
124
+ // A request is keyed on its own words, because the human's phrasing is what a
125
+ // correct answer quotes back.
126
+ //
127
+ // An *answer* is not. Keying assistant text on its first eight words looked
128
+ // reasonable and was wrong: a correct answer paraphrases, so the score
129
+ // measures phrasing rather than retrieval. Measured against sctxx on the same
130
+ // session — same questions derived the same way, same backend — the deep
131
+ // class scored 22% here and 78% there, and this line was why. An assistant
132
+ // turn is keyed on a distinctive path or identifier instead, which a correct
133
+ // answer contains verbatim if it knows the answer at all.
134
+ if (isHumanTurn(message) && message.text) {
135
+ const words = message.text.split(/\s+/).filter((w) => w.length > 0);
136
+ if (words.length >= 4)
137
+ return words.slice(0, 8).join(' ');
138
+ }
139
+ let best;
140
+ for (const raw of text.split(/\s+/)) {
141
+ const token = raw.replace(/^[^A-Za-z0-9/._-]+|[^A-Za-z0-9/._-]+$/g, '');
142
+ if (token.length < 8)
143
+ continue;
144
+ const letters = token.replace(/[^A-Za-z]/g, '').length;
145
+ const rank = token.includes('/') && token.includes('.') ? 0 : token.includes('/') ? 1 : letters >= 6 ? 3 : 9;
146
+ if (rank === 9)
147
+ continue;
148
+ if (!best || rank < best.rank || (rank === best.rank && token.length > best.token.length)) {
149
+ best = { rank, token };
150
+ }
151
+ }
152
+ return best?.token;
153
+ }
154
+ export function normalize(text) {
155
+ return text.toLowerCase().replace(/[^a-z0-9/.]+/g, ' ').trim();
156
+ }
157
+ export function answeredBy(question, answer) {
158
+ const key = normalize(question.key);
159
+ return key.length > 0 && normalize(answer).includes(key);
160
+ }
161
+ /** A range a successor asked for, parsed out of its reply. */
162
+ export function requestedRange(reply) {
163
+ for (const line of reply.split('\n')) {
164
+ const match = /^\s*EXPAND\s+(\d+)\s*\.\.\s*=?\s*(\d+)\s*$/.exec(line);
165
+ if (match)
166
+ return [Number.parseInt(match[1], 10), Number.parseInt(match[2], 10)];
167
+ }
168
+ return undefined;
169
+ }
170
+ export function score(trials) {
171
+ const scores = {};
172
+ for (const trial of trials) {
173
+ const entry = (scores[trial.arm] ??= { asked: 0, correct: 0, tokens: 0, expansions: 0, byClass: {} });
174
+ entry.asked += 1;
175
+ entry.tokens += trial.tokens;
176
+ entry.expansions += trial.expansions;
177
+ if (trial.correct)
178
+ entry.correct += 1;
179
+ const slot = (entry.byClass[trial.class] ??= [0, 0]);
180
+ slot[0] += 1;
181
+ if (trial.correct)
182
+ slot[1] += 1;
183
+ }
184
+ return scores;
185
+ }
186
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bench/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { type DiscoverOptions } from '../discover/index.js';
2
+ import { type Selection } from '../llm/index.js';
3
+ import { score, type Arm, type BenchOptions, type Trial } from './index.js';
4
+ export interface BenchRun {
5
+ backend: string;
6
+ questions: number;
7
+ trials: Trial[];
8
+ scores: ReturnType<typeof score>;
9
+ }
10
+ export declare function runBench(references: string[], options?: {
11
+ llm?: Selection;
12
+ arms?: Arm[];
13
+ bench?: Partial<BenchOptions>;
14
+ outDir?: string;
15
+ discover?: DiscoverOptions;
16
+ }, progress?: (message: string) => void): Promise<BenchRun>;
17
+ export declare function renderTable(scores: ReturnType<typeof score>, trials: Trial[], backend: string): string;
@@ -0,0 +1,187 @@
1
+ /** Running the benchmark: build each arm's context, ask, score, report. */
2
+ import { mkdir, writeFile } from 'node:fs/promises';
3
+ import { join } from 'node:path';
4
+ import { readSession, resolveSession } from '../discover/index.js';
5
+ import { render } from '../artifact/render.js';
6
+ import { extractConstraints } from '../triage.js';
7
+ import { build, resolveAuto, selectionLabel } from '../llm/index.js';
8
+ import { expand } from '../artifact/expand.js';
9
+ import { ARMS, answeredBy, questions, requestedRange, score, DEFAULT_BENCH, } from './index.js';
10
+ export async function runBench(references, options = {}, progress = () => { }) {
11
+ const arms = options.arms ?? ARMS;
12
+ const bench = { ...DEFAULT_BENCH, ...options.bench };
13
+ const selection = options.llm ?? resolveAuto();
14
+ const backend = build(selection);
15
+ if (!backend) {
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
+ }
18
+ const trials = [];
19
+ const perSession = [];
20
+ for (const reference of references) {
21
+ const ref = await resolveSession(reference, options.discover ?? {});
22
+ const ir = await readSession(ref);
23
+ const ledgers = (await import('../ledgers/index.js')).buildLedgers(ir);
24
+ const constraints = extractConstraints(ir);
25
+ const artifact = render({ ir, ledgers, constraints, engine: 'deterministic' }).markdown;
26
+ const tail = tailOf(ir);
27
+ const asked = questions(ir, ledgers, bench);
28
+ if (asked.length === 0) {
29
+ progress(`${reference}: no checkable questions could be derived; skipping`);
30
+ continue;
31
+ }
32
+ progress(`${reference}: ${asked.length} question(s) × ${arms.length} arm(s)`);
33
+ const sessionTrials = [];
34
+ for (const arm of arms) {
35
+ for (const question of asked) {
36
+ sessionTrials.push(await trial(backend, arm, question, artifact, tail, ir, ledgers, bench));
37
+ }
38
+ }
39
+ trials.push(...sessionTrials);
40
+ const sessionScores = score(sessionTrials);
41
+ perSession.push({
42
+ session: `${ref.agent}:${ref.id}`,
43
+ questions: asked.length,
44
+ arms: summarize(sessionScores),
45
+ });
46
+ }
47
+ const scores = score(trials);
48
+ if (options.outDir) {
49
+ await mkdir(options.outDir, { recursive: true });
50
+ const report = {
51
+ schema: 'ccompactor.bench/v1',
52
+ backend: selectionLabel(selection),
53
+ settings: bench,
54
+ arms,
55
+ questions: trials.length / Math.max(1, arms.length),
56
+ arms_scores: summarize(scores),
57
+ sessions: perSession,
58
+ trials,
59
+ };
60
+ await writeFile(join(options.outDir, 'bench.json'), `${JSON.stringify(report, null, 2)}\n`, 'utf8');
61
+ await writeFile(join(options.outDir, 'bench.md'), renderTable(scores, trials, selectionLabel(selection)), 'utf8');
62
+ }
63
+ return { backend: selectionLabel(selection), questions: trials.length / Math.max(1, arms.length), trials, scores };
64
+ }
65
+ async function trial(backend, arm, question, artifact, tail, ir, ledgers, bench) {
66
+ const context = arm === 'none' ? '' : arm === 'tail' ? tail : artifact;
67
+ let conversation = '';
68
+ let tokens = 0;
69
+ let expansions = 0;
70
+ let answer = '';
71
+ for (let round = 0; round <= bench.expansions; round += 1) {
72
+ const user = arm === 'none'
73
+ ? `QUESTION: ${question.prompt}`
74
+ : `${round === 0 ? `# CONTEXT\n\n${context}\n\n` : ''}${conversation}\nQUESTION: ${question.prompt}`;
75
+ tokens += Math.ceil(user.length / 4);
76
+ try {
77
+ const response = await backend.complete({ system: systemFor(arm), user, maxTokens: 400 });
78
+ answer = response.text;
79
+ }
80
+ catch (error) {
81
+ conversation += `\n(backend error: ${error.message})\n`;
82
+ break;
83
+ }
84
+ if (arm !== 'retrieval' || expansions >= bench.expansions)
85
+ break;
86
+ const range = requestedRange(answer);
87
+ if (!range)
88
+ break;
89
+ expansions += 1;
90
+ const events = expand(ir, [range]);
91
+ tokens += Math.ceil(events.length / 4);
92
+ conversation += `\nYou asked for evt ${range[0]}..${range[1]}:\n${events}\n`;
93
+ }
94
+ return {
95
+ question: question.id,
96
+ class: question.class,
97
+ arm,
98
+ correct: answeredBy(question, answer),
99
+ tokens,
100
+ expansions,
101
+ answer,
102
+ };
103
+ }
104
+ function systemFor(arm) {
105
+ const base = 'You are taking over a coding task from another agent. Answer the question using only the context you are given. Answer in one short sentence, and say NOT FOUND if the context does not contain the answer. Do not guess.';
106
+ return arm === 'retrieval'
107
+ ? `${base} You may ask for the raw events by replying with a single line \`EXPAND <start>..<end>\`; you will be given those events and asked again.`
108
+ : base;
109
+ }
110
+ /**
111
+ * The recency window: the newest events that fit a fixed token budget.
112
+ *
113
+ * Budgeted, not proportional. The first version took the last tenth of the
114
+ * messages, which on a 25,000-message session is 1,955,968 tokens — a "tail"
115
+ * larger than most context windows, scoring zero because the context was
116
+ * swamped rather than because the strategy is bad. An arm that loses for the
117
+ * wrong reason measures nothing, and this is the arm the published evidence
118
+ * says should be competitive (arXiv:2508.21433), so it has to be a fair one.
119
+ */
120
+ const TAIL_TOKENS = 12_000;
121
+ function tailOf(ir) {
122
+ const lines = [];
123
+ let spent = 0;
124
+ for (const message of [...ir.messages].reverse()) {
125
+ const line = `evt ${message.eventIndex} ${message.role}: ${(message.text ?? '').slice(0, 600)}`;
126
+ const cost = Math.ceil(line.length / 4);
127
+ if (spent + cost > TAIL_TOKENS)
128
+ break;
129
+ spent += cost;
130
+ lines.push(line);
131
+ }
132
+ return lines.reverse().join('\n');
133
+ }
134
+ function summarize(scores) {
135
+ const out = {};
136
+ for (const arm of ARMS) {
137
+ const s = scores[arm];
138
+ if (!s)
139
+ continue;
140
+ out[arm] = {
141
+ asked: s.asked,
142
+ correct: s.correct,
143
+ accuracy: s.asked > 0 ? s.correct / s.asked : 0,
144
+ tokens: s.tokens,
145
+ tokensPerCorrect: s.correct > 0 ? Math.round(s.tokens / s.correct) : null,
146
+ expansions: s.expansions,
147
+ byClass: s.byClass,
148
+ };
149
+ }
150
+ return out;
151
+ }
152
+ export function renderTable(scores, trials, backend) {
153
+ const lines = [];
154
+ lines.push('ccompactor handoff benchmark (ccompactor.bench/v1)');
155
+ lines.push('');
156
+ lines.push(`successor: ${backend}`);
157
+ lines.push(`questions: ${Math.max(...Object.values(scores).map((s) => s.asked), 0)}`);
158
+ lines.push('');
159
+ lines.push(`${'arm'.padEnd(20)}${'correct'.padStart(9)}${'acc'.padStart(7)}${'tokens'.padStart(10)}${'tok/correct'.padStart(13)}`);
160
+ for (const arm of ARMS) {
161
+ const s = scores[arm];
162
+ if (!s)
163
+ continue;
164
+ const acc = s.asked > 0 ? `${Math.round((s.correct / s.asked) * 100)}%` : '—';
165
+ const tpc = s.correct > 0 ? String(Math.round(s.tokens / s.correct)) : '—';
166
+ lines.push(`${arm.padEnd(20)}${`${s.correct}/${s.asked}`.padStart(9)}${acc.padStart(7)}${String(s.tokens).padStart(10)}${tpc.padStart(13)}`);
167
+ }
168
+ lines.push('');
169
+ lines.push(`${'by class'.padEnd(20)}${'brief'.padStart(9)}${'deep'.padStart(9)}${'recent'.padStart(9)}`);
170
+ for (const arm of ARMS) {
171
+ const s = scores[arm];
172
+ if (!s)
173
+ continue;
174
+ const cells = ['brief', 'deep', 'recent'].map((cls) => {
175
+ const slot = s.byClass[cls];
176
+ return (slot ? `${slot[1]}/${slot[0]}` : '—').padStart(9);
177
+ });
178
+ lines.push(`${arm.padEnd(20)}${cells.join('')}`);
179
+ }
180
+ const expansions = Object.values(scores).reduce((n, s) => n + s.expansions, 0);
181
+ if (expansions > 0)
182
+ lines.push(`\nthe retrieval arm asked for more transcript ${expansions} time(s)`);
183
+ lines.push('\nThis measures whether a fresh agent can answer questions about the session from each context. It does not measure whether it resolves an issue.');
184
+ void trials;
185
+ return `${lines.join('\n')}\n`;
186
+ }
187
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/bench/run.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};