@felan-ai/ext-session-compaction 0.1.1 → 0.1.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 +20 -0
- package/dist/compaction.d.ts +1 -1
- package/dist/compaction.d.ts.map +1 -1
- package/dist/compaction.js +112 -27
- package/dist/compaction.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/continuity.d.ts.map +1 -1
- package/dist/internal/continuity.js +15 -5
- package/dist/internal/continuity.js.map +1 -1
- package/dist/internal/contracts.d.ts +17 -0
- package/dist/internal/contracts.d.ts.map +1 -1
- package/dist/internal/contracts.js +2 -0
- package/dist/internal/contracts.js.map +1 -1
- package/dist/internal/evidence.d.ts.map +1 -1
- package/dist/internal/evidence.js +189 -29
- package/dist/internal/evidence.js.map +1 -1
- package/dist/internal/fallback-diagnostic.d.ts +17 -0
- package/dist/internal/fallback-diagnostic.d.ts.map +1 -0
- package/dist/internal/fallback-diagnostic.js +48 -0
- package/dist/internal/fallback-diagnostic.js.map +1 -0
- package/dist/internal/prepared-span.d.ts.map +1 -1
- package/dist/internal/prepared-span.js +8 -7
- package/dist/internal/prepared-span.js.map +1 -1
- package/dist/internal/split-prefix.d.ts +3 -0
- package/dist/internal/split-prefix.d.ts.map +1 -0
- package/dist/internal/split-prefix.js +193 -0
- package/dist/internal/split-prefix.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { sanitizeText, stableIdentifier, utf8Bytes } from './bounds.js';
|
|
2
|
+
export function renderSplitTurnPrefix(span, evidence, maxBytes, expectedMessages) {
|
|
3
|
+
if (evidence.omitted.reasons.includes('required-prefix-evidence-limit'))
|
|
4
|
+
return undefined;
|
|
5
|
+
const sources = span.sources.filter((source) => source.section === 'turn_prefix');
|
|
6
|
+
if (sources.length !== expectedMessages)
|
|
7
|
+
return undefined;
|
|
8
|
+
if (sources.length === 0)
|
|
9
|
+
return '(none)';
|
|
10
|
+
const sourceIndexes = new Map(sources.map((source, index) => [source.sourceId, index]));
|
|
11
|
+
const itemsBySource = groupEvidence(evidence.items, sourceIndexes);
|
|
12
|
+
const completedCalls = new Set(sources.flatMap((source) => {
|
|
13
|
+
const message = source.message;
|
|
14
|
+
return isRecord(message) && message.role === 'toolResult' && typeof message.toolCallId === 'string'
|
|
15
|
+
? [stableIdentifier(message.toolCallId, 'call')]
|
|
16
|
+
: [];
|
|
17
|
+
}));
|
|
18
|
+
const candidates = [];
|
|
19
|
+
for (const [sourceIndex, source] of sources.entries()) {
|
|
20
|
+
const narrative = narrativeCandidates(source, sourceIndex, maxBytes);
|
|
21
|
+
if (narrative === undefined)
|
|
22
|
+
return undefined;
|
|
23
|
+
candidates.push(...narrative);
|
|
24
|
+
for (const [ordinal, item] of (itemsBySource.get(source.sourceId) ?? []).entries()) {
|
|
25
|
+
if (isNarrativeEvidence(source, item))
|
|
26
|
+
continue;
|
|
27
|
+
if (item.kind === 'tool-call' && item.toolCallId && completedCalls.has(item.toolCallId))
|
|
28
|
+
continue;
|
|
29
|
+
candidates.push({
|
|
30
|
+
sourceIndex,
|
|
31
|
+
ordinal: toolEvidenceOrdinal(source, item, ordinal),
|
|
32
|
+
text: renderToolEvidence(item),
|
|
33
|
+
priority: toolEvidencePriority(item),
|
|
34
|
+
required: isRequiredToolEvidence(item),
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (candidates.length === 0)
|
|
39
|
+
return undefined;
|
|
40
|
+
const required = candidates.filter((candidate) => candidate.required);
|
|
41
|
+
const selected = [...required];
|
|
42
|
+
let bytes = joinedBytes(selected);
|
|
43
|
+
if (bytes > maxBytes)
|
|
44
|
+
return undefined;
|
|
45
|
+
const optional = candidates
|
|
46
|
+
.filter((candidate) => !candidate.required)
|
|
47
|
+
.sort((left, right) => right.priority - left.priority || right.sourceIndex - left.sourceIndex || right.ordinal - left.ordinal);
|
|
48
|
+
for (const candidate of optional) {
|
|
49
|
+
const added = utf8Bytes(candidate.text) + (selected.length === 0 ? 0 : 2);
|
|
50
|
+
if (bytes + added > maxBytes)
|
|
51
|
+
continue;
|
|
52
|
+
selected.push(candidate);
|
|
53
|
+
bytes += added;
|
|
54
|
+
}
|
|
55
|
+
return selected
|
|
56
|
+
.sort((left, right) => left.sourceIndex - right.sourceIndex || left.ordinal - right.ordinal)
|
|
57
|
+
.map((candidate) => candidate.text)
|
|
58
|
+
.join('\n\n');
|
|
59
|
+
}
|
|
60
|
+
function narrativeCandidates(source, sourceIndex, maxBytes) {
|
|
61
|
+
const message = source.message;
|
|
62
|
+
if (!isRecord(message) || typeof message.role !== 'string')
|
|
63
|
+
return undefined;
|
|
64
|
+
const candidates = [];
|
|
65
|
+
let complete = true;
|
|
66
|
+
const add = (label, value, ordinal) => {
|
|
67
|
+
if (typeof value !== 'string')
|
|
68
|
+
return;
|
|
69
|
+
const sanitized = sanitizeText(value, maxBytes);
|
|
70
|
+
if (!sanitized.text)
|
|
71
|
+
return;
|
|
72
|
+
if (sanitized.omittedBytes > 0)
|
|
73
|
+
complete = false;
|
|
74
|
+
candidates.push({
|
|
75
|
+
sourceIndex,
|
|
76
|
+
ordinal,
|
|
77
|
+
text: `[${label} source=${source.sourceId}] ${sanitized.text}`,
|
|
78
|
+
priority: 1_000,
|
|
79
|
+
required: true,
|
|
80
|
+
});
|
|
81
|
+
};
|
|
82
|
+
if (message.role === 'assistant') {
|
|
83
|
+
for (const [blockIndex, block] of arrayValue(message.content).entries()) {
|
|
84
|
+
if (!isRecord(block))
|
|
85
|
+
continue;
|
|
86
|
+
if (block.type === 'thinking')
|
|
87
|
+
add('assistant reasoning', block.thinking, blockIndex * 2);
|
|
88
|
+
else if (block.type === 'text')
|
|
89
|
+
add('assistant', block.text, blockIndex * 2);
|
|
90
|
+
}
|
|
91
|
+
return complete ? candidates : undefined;
|
|
92
|
+
}
|
|
93
|
+
if (message.role === 'toolResult')
|
|
94
|
+
return candidates;
|
|
95
|
+
if (message.role === 'bashExecution') {
|
|
96
|
+
add('user bash request', message.command, 0);
|
|
97
|
+
if (typeof message.output === 'string') {
|
|
98
|
+
const output = sanitizeText(message.output, Math.min(maxBytes, 2_048));
|
|
99
|
+
if (output.text)
|
|
100
|
+
candidates.push({
|
|
101
|
+
sourceIndex,
|
|
102
|
+
ordinal: 1,
|
|
103
|
+
text: `[bash result source=${source.sourceId}] ${output.text}`,
|
|
104
|
+
priority: 750,
|
|
105
|
+
required: false,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
return complete ? candidates : undefined;
|
|
109
|
+
}
|
|
110
|
+
if (message.role === 'branchSummary' || message.role === 'compactionSummary') {
|
|
111
|
+
add(message.role, message.summary, 0);
|
|
112
|
+
return complete ? candidates : undefined;
|
|
113
|
+
}
|
|
114
|
+
if (message.role !== 'user' && message.role !== 'custom')
|
|
115
|
+
return undefined;
|
|
116
|
+
for (const [index, text] of textContent(message.content).entries())
|
|
117
|
+
add(message.role, text, index * 2);
|
|
118
|
+
return complete ? candidates : undefined;
|
|
119
|
+
}
|
|
120
|
+
function groupEvidence(items, sourceIndexes) {
|
|
121
|
+
const grouped = new Map();
|
|
122
|
+
for (const item of items) {
|
|
123
|
+
if (!sourceIndexes.has(item.sourceId))
|
|
124
|
+
continue;
|
|
125
|
+
const sourceItems = grouped.get(item.sourceId) ?? [];
|
|
126
|
+
sourceItems.push(item);
|
|
127
|
+
grouped.set(item.sourceId, sourceItems);
|
|
128
|
+
}
|
|
129
|
+
return grouped;
|
|
130
|
+
}
|
|
131
|
+
function isNarrativeEvidence(source, item) {
|
|
132
|
+
const message = source.message;
|
|
133
|
+
if (!isRecord(message))
|
|
134
|
+
return false;
|
|
135
|
+
if (message.role === 'assistant')
|
|
136
|
+
return item.kind === 'report';
|
|
137
|
+
if (message.role !== 'user')
|
|
138
|
+
return false;
|
|
139
|
+
return item.kind === 'request' || item.kind === 'constraint' || item.kind === 'decision' || item.kind === 'open-loop';
|
|
140
|
+
}
|
|
141
|
+
function renderToolEvidence(item) {
|
|
142
|
+
const tool = item.toolName ? ` tool=${item.toolName}` : '';
|
|
143
|
+
const call = item.toolCallId ? ` call=${item.toolCallId}` : '';
|
|
144
|
+
const label = item.kind === 'tool-call' ? 'assistant tool call' : 'tool result';
|
|
145
|
+
return `[${label}/${item.kind}/${item.status}${tool}${call} source=${item.sourceId}] ${item.text}`;
|
|
146
|
+
}
|
|
147
|
+
function toolEvidenceOrdinal(source, item, fallback) {
|
|
148
|
+
const message = source.message;
|
|
149
|
+
const blocks = isRecord(message) ? arrayValue(message.content) : [];
|
|
150
|
+
if (item.kind === 'tool-call' && item.toolCallId) {
|
|
151
|
+
const blockIndex = blocks.findIndex((block) => isRecord(block)
|
|
152
|
+
&& block.type === 'toolCall'
|
|
153
|
+
&& typeof block.id === 'string'
|
|
154
|
+
&& stableIdentifier(block.id, 'call') === item.toolCallId);
|
|
155
|
+
if (blockIndex >= 0)
|
|
156
|
+
return blockIndex * 2;
|
|
157
|
+
}
|
|
158
|
+
return blocks.length * 2 + fallback;
|
|
159
|
+
}
|
|
160
|
+
function isRequiredToolEvidence(item) {
|
|
161
|
+
return item.status === 'failed' || item.kind === 'error' || item.kind === 'test';
|
|
162
|
+
}
|
|
163
|
+
function toolEvidencePriority(item) {
|
|
164
|
+
if (item.status === 'failed' || item.kind === 'error')
|
|
165
|
+
return 950;
|
|
166
|
+
if (item.kind === 'test' || item.kind === 'file' || item.kind === 'task' || item.kind === 'background-job')
|
|
167
|
+
return 850;
|
|
168
|
+
if (item.kind === 'command' || item.kind === 'rtk-pointer')
|
|
169
|
+
return 750;
|
|
170
|
+
if (item.kind === 'tool-call')
|
|
171
|
+
return 600;
|
|
172
|
+
return 300;
|
|
173
|
+
}
|
|
174
|
+
function joinedBytes(candidates) {
|
|
175
|
+
if (candidates.length === 0)
|
|
176
|
+
return 0;
|
|
177
|
+
return candidates.reduce((sum, candidate) => sum + utf8Bytes(candidate.text), 0) + (candidates.length - 1) * 2;
|
|
178
|
+
}
|
|
179
|
+
function textContent(value) {
|
|
180
|
+
if (typeof value === 'string')
|
|
181
|
+
return [value];
|
|
182
|
+
return arrayValue(value)
|
|
183
|
+
.filter(isRecord)
|
|
184
|
+
.filter((block) => block.type === 'text' && typeof block.text === 'string')
|
|
185
|
+
.map((block) => block.text);
|
|
186
|
+
}
|
|
187
|
+
function arrayValue(value) {
|
|
188
|
+
return Array.isArray(value) ? value : [];
|
|
189
|
+
}
|
|
190
|
+
function isRecord(value) {
|
|
191
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=split-prefix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"split-prefix.js","sourceRoot":"","sources":["../../src/internal/split-prefix.ts"],"names":[],"mappings":"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"}
|