@felan-ai/ext-session-compaction 0.0.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 (40) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +12 -0
  3. package/README.md +49 -0
  4. package/dist/compaction.d.ts +18 -0
  5. package/dist/compaction.d.ts.map +1 -0
  6. package/dist/compaction.js +216 -0
  7. package/dist/compaction.js.map +1 -0
  8. package/dist/config.d.ts +10 -0
  9. package/dist/config.d.ts.map +1 -0
  10. package/dist/config.js +17 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/index.d.ts +8 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +15 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/internal/bounds.d.ts +28 -0
  17. package/dist/internal/bounds.d.ts.map +1 -0
  18. package/dist/internal/bounds.js +62 -0
  19. package/dist/internal/bounds.js.map +1 -0
  20. package/dist/internal/continuity.d.ts +7 -0
  21. package/dist/internal/continuity.d.ts.map +1 -0
  22. package/dist/internal/continuity.js +138 -0
  23. package/dist/internal/continuity.js.map +1 -0
  24. package/dist/internal/contracts.d.ts +80 -0
  25. package/dist/internal/contracts.d.ts.map +1 -0
  26. package/dist/internal/contracts.js +3 -0
  27. package/dist/internal/contracts.js.map +1 -0
  28. package/dist/internal/evidence.d.ts +4 -0
  29. package/dist/internal/evidence.d.ts.map +1 -0
  30. package/dist/internal/evidence.js +329 -0
  31. package/dist/internal/evidence.js.map +1 -0
  32. package/dist/internal/prepared-span.d.ts +4 -0
  33. package/dist/internal/prepared-span.d.ts.map +1 -0
  34. package/dist/internal/prepared-span.js +89 -0
  35. package/dist/internal/prepared-span.js.map +1 -0
  36. package/dist/recall.d.ts +3 -0
  37. package/dist/recall.d.ts.map +1 -0
  38. package/dist/recall.js +172 -0
  39. package/dist/recall.js.map +1 -0
  40. package/package.json +45 -0
@@ -0,0 +1,138 @@
1
+ import { DEFAULT_EXTRACTION_BOUNDS, emptyOmission, freezeOmission, omit, sanitizeText, utf8Bytes, } from './bounds.js';
2
+ import { DETAILS_NAMESPACE, DETAILS_SCHEMA_VERSION, } from './contracts.js';
3
+ export function readContinuityDetails(value) {
4
+ if (!isRecord(value)
5
+ || value.namespace !== DETAILS_NAMESPACE
6
+ || value.schemaVersion !== DETAILS_SCHEMA_VERSION
7
+ || !isRecord(value.continuity)
8
+ || value.continuity.schemaVersion !== 1
9
+ || !Array.isArray(value.continuity.facts))
10
+ return undefined;
11
+ const facts = [];
12
+ for (const candidate of value.continuity.facts.slice(0, DEFAULT_EXTRACTION_BOUNDS.maxContinuityItems)) {
13
+ if (!isContinuityFact(candidate))
14
+ return undefined;
15
+ facts.push({
16
+ key: candidate.key,
17
+ kind: candidate.kind,
18
+ text: candidate.text,
19
+ sourceIds: [...candidate.sourceIds],
20
+ });
21
+ }
22
+ return { schemaVersion: 1, facts, omitted: normalizeOmission(value.continuity.omitted) };
23
+ }
24
+ export function mergeContinuity(previous, evidence, resolutions = [], bounds = DEFAULT_EXTRACTION_BOUNDS) {
25
+ const omitted = emptyOmission();
26
+ const evidenceById = new Map(evidence.items.map((item) => [item.id, item]));
27
+ const allowedResolutions = new Set();
28
+ for (const resolution of resolutions) {
29
+ const proof = evidenceById.get(resolution.evidenceId);
30
+ if (resolution.mode === 'override' && proof?.provenance === 'requested') {
31
+ allowedResolutions.add(resolution.targetKey);
32
+ }
33
+ if (resolution.mode === 'positive' && proof?.provenance === 'recorded-result' && isPositive(proof)) {
34
+ allowedResolutions.add(resolution.targetKey);
35
+ }
36
+ }
37
+ const merged = new Map();
38
+ for (const fact of previous?.facts ?? []) {
39
+ if (!allowedResolutions.has(fact.key) && isContinuityFact(fact))
40
+ merged.set(fact.key, fact);
41
+ }
42
+ for (const item of evidence.items) {
43
+ const fact = factFromEvidence(item, bounds);
44
+ if (fact)
45
+ merged.set(fact.key, fact);
46
+ }
47
+ const facts = [];
48
+ let bytes = 0;
49
+ for (const fact of merged.values()) {
50
+ const size = utf8Bytes(JSON.stringify(fact));
51
+ if (facts.length >= bounds.maxContinuityItems) {
52
+ omit(omitted, 'continuity-item-limit');
53
+ continue;
54
+ }
55
+ if (bytes + size > bounds.maxContinuityBytes) {
56
+ omit(omitted, 'continuity-byte-limit', 1, size);
57
+ continue;
58
+ }
59
+ facts.push(fact);
60
+ bytes += size;
61
+ }
62
+ return { schemaVersion: 1, facts, omitted: freezeOmission(omitted) };
63
+ }
64
+ export function createCompactionDetails(continuity) {
65
+ return { namespace: DETAILS_NAMESPACE, schemaVersion: DETAILS_SCHEMA_VERSION, continuity };
66
+ }
67
+ export function renderContinuity(state, maxBytes = DEFAULT_EXTRACTION_BOUNDS.maxContinuityBytes) {
68
+ const lines = state.facts.map((fact) => `- [${fact.kind}] ${fact.text}`);
69
+ if (state.omitted.itemCount > 0 || state.omitted.byteCount > 0) {
70
+ lines.push(`- [bounded] Additional continuity was omitted (${state.omitted.itemCount} items, ${state.omitted.byteCount} bytes).`);
71
+ }
72
+ return sanitizeText(lines.join('\n'), maxBytes).text;
73
+ }
74
+ function factFromEvidence(item, bounds) {
75
+ const text = sanitizeText(item.text, bounds.maxTextBytes).text;
76
+ if (!text)
77
+ return undefined;
78
+ if (item.kind === 'request' || item.kind === 'constraint' || item.kind === 'decision' || item.kind === 'open-loop') {
79
+ return fact(item.key ?? `${item.kind}:${item.id}`, item.kind, text, item.sourceId);
80
+ }
81
+ if (item.kind === 'file' && item.status !== 'failed') {
82
+ if (item.paths?.length === 1)
83
+ return fact(`file:${item.paths[0]}`, 'file-state', text, item.sourceId);
84
+ return fact(item.key ?? `file-result:${item.id}`, 'file-state', text, item.sourceId);
85
+ }
86
+ if ((item.kind === 'error' || item.kind === 'test' || item.kind === 'command') && item.status === 'failed') {
87
+ return fact(item.key ?? `failure:${item.id}`, 'failure', text, item.sourceId);
88
+ }
89
+ if (item.kind === 'task')
90
+ return fact(item.key ?? `task:${item.id}`, 'task-state', text, item.sourceId);
91
+ if (item.kind === 'background-job') {
92
+ return fact(item.key ?? `background:${item.id}`, 'background-job', text, item.sourceId);
93
+ }
94
+ return undefined;
95
+ }
96
+ function fact(key, kind, text, sourceId) {
97
+ return { key, kind, text, sourceIds: [sourceId] };
98
+ }
99
+ function isPositive(item) {
100
+ return item.status === 'succeeded' || item.status === 'completed' || item.status === 'cancelled';
101
+ }
102
+ function isContinuityFact(value) {
103
+ if (!isRecord(value)
104
+ || typeof value.key !== 'string'
105
+ || value.key.length > 512
106
+ || typeof value.text !== 'string'
107
+ || value.text.length > DEFAULT_EXTRACTION_BOUNDS.maxTextBytes
108
+ || !Array.isArray(value.sourceIds)
109
+ || value.sourceIds.length > 32
110
+ || !value.sourceIds.every((id) => typeof id === 'string' && id.length <= 256))
111
+ return false;
112
+ return value.kind === 'request'
113
+ || value.kind === 'constraint'
114
+ || value.kind === 'decision'
115
+ || value.kind === 'open-loop'
116
+ || value.kind === 'file-state'
117
+ || value.kind === 'failure'
118
+ || value.kind === 'task-state'
119
+ || value.kind === 'background-job';
120
+ }
121
+ function normalizeOmission(value) {
122
+ if (!isRecord(value))
123
+ return freezeOmission(emptyOmission());
124
+ return {
125
+ itemCount: safeCount(value.itemCount),
126
+ byteCount: safeCount(value.byteCount),
127
+ reasons: Array.isArray(value.reasons)
128
+ ? value.reasons.filter((reason) => typeof reason === 'string').slice(0, 32)
129
+ : [],
130
+ };
131
+ }
132
+ function safeCount(value) {
133
+ return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0 ? value : 0;
134
+ }
135
+ function isRecord(value) {
136
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
137
+ }
138
+ //# sourceMappingURL=continuity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"continuity.js","sourceRoot":"","sources":["../../src/internal/continuity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import type { SessionEntry } from '@felan-ai/agent-core';
2
+ export interface CompactionPreparation {
3
+ readonly firstKeptEntryId: string;
4
+ readonly messagesToSummarize: readonly unknown[];
5
+ readonly turnPrefixMessages: readonly unknown[];
6
+ readonly previousSummary?: string;
7
+ readonly tokensBefore: number;
8
+ }
9
+ export type PreparedMessageValue = unknown;
10
+ export declare const DETAILS_NAMESPACE: "felan.session-compaction";
11
+ export declare const DETAILS_SCHEMA_VERSION: 1;
12
+ export type SpanSection = 'previous_summary' | 'messages_to_summarize' | 'turn_prefix';
13
+ export interface PreparedSource {
14
+ readonly sourceId: string;
15
+ readonly section: SpanSection;
16
+ readonly index: number;
17
+ readonly entryId?: string;
18
+ readonly message?: PreparedMessageValue;
19
+ readonly text?: string;
20
+ }
21
+ export interface PreparedSpan {
22
+ readonly schemaVersion: 1;
23
+ readonly firstKeptEntryId: string;
24
+ readonly sources: readonly PreparedSource[];
25
+ readonly omitted: OmissionReport;
26
+ }
27
+ export type EvidenceProvenance = 'requested' | 'observed' | 'agent-reported' | 'recorded-result';
28
+ export type EvidenceKind = 'request' | 'constraint' | 'decision' | 'open-loop' | 'report' | 'tool-call' | 'observation' | 'file' | 'command' | 'test' | 'error' | 'task' | 'background-job' | 'rtk-pointer';
29
+ export type EvidenceStatus = 'unknown' | 'requested' | 'observed' | 'running' | 'succeeded' | 'failed' | 'partial' | 'completed' | 'cancelled' | 'blocked';
30
+ export interface EvidenceItem {
31
+ readonly id: string;
32
+ readonly sourceId: string;
33
+ readonly provenance: EvidenceProvenance;
34
+ readonly kind: EvidenceKind;
35
+ readonly status: EvidenceStatus;
36
+ readonly text: string;
37
+ readonly toolCallId?: string;
38
+ readonly toolName?: string;
39
+ readonly key?: string;
40
+ readonly paths?: readonly string[];
41
+ readonly recoveryPath?: string;
42
+ readonly techniques?: readonly string[];
43
+ }
44
+ export interface EvidenceBundle {
45
+ readonly schemaVersion: 1;
46
+ readonly items: readonly EvidenceItem[];
47
+ readonly omitted: OmissionReport;
48
+ }
49
+ export interface OmissionReport {
50
+ readonly itemCount: number;
51
+ readonly byteCount: number;
52
+ readonly reasons: readonly string[];
53
+ }
54
+ export type ContinuityKind = 'request' | 'constraint' | 'decision' | 'open-loop' | 'file-state' | 'failure' | 'task-state' | 'background-job';
55
+ export interface ContinuityFact {
56
+ readonly key: string;
57
+ readonly kind: ContinuityKind;
58
+ readonly text: string;
59
+ readonly sourceIds: readonly string[];
60
+ }
61
+ export interface ContinuityStateV1 {
62
+ readonly schemaVersion: 1;
63
+ readonly facts: readonly ContinuityFact[];
64
+ readonly omitted: OmissionReport;
65
+ }
66
+ export interface ContinuityResolution {
67
+ readonly targetKey: string;
68
+ readonly evidenceId: string;
69
+ readonly mode: 'positive' | 'override';
70
+ }
71
+ export interface SessionCompactionDetailsV1 {
72
+ readonly namespace: typeof DETAILS_NAMESPACE;
73
+ readonly schemaVersion: typeof DETAILS_SCHEMA_VERSION;
74
+ readonly continuity: ContinuityStateV1;
75
+ }
76
+ export interface PreparedSpanInput {
77
+ readonly preparation: CompactionPreparation;
78
+ readonly branchEntries: readonly SessionEntry[];
79
+ }
80
+ //# sourceMappingURL=contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/internal/contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export const DETAILS_NAMESPACE = 'felan.session-compaction';
2
+ export const DETAILS_SCHEMA_VERSION = 1;
3
+ //# sourceMappingURL=contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/internal/contracts.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,iBAAiB,GAAG,0BAAmC,CAAC;AACrE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAU,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ExtractionBounds } from './bounds.js';
2
+ import type { EvidenceBundle, PreparedSpan } from './contracts.js';
3
+ export declare function extractEvidence(span: PreparedSpan, bounds?: ExtractionBounds): EvidenceBundle;
4
+ //# sourceMappingURL=evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../src/internal/evidence.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAmB,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EACV,cAAc,EAMd,YAAY,EACb,MAAM,gBAAgB,CAAC;AAcxB,wBAAgB,eAAe,CAC7B,IAAI,EAAE,YAAY,EAClB,MAAM,GAAE,gBAA4C,GACnD,cAAc,CAiBhB"}
@@ -0,0 +1,329 @@
1
+ import { DEFAULT_EXTRACTION_BOUNDS, emptyOmission, freezeOmission, omit, sanitizeText, stableIdentifier, utf8Bytes, } from './bounds.js';
2
+ export function extractEvidence(span, bounds = DEFAULT_EXTRACTION_BOUNDS) {
3
+ const state = {
4
+ items: [],
5
+ omitted: { ...span.omitted, reasons: [...span.omitted.reasons] },
6
+ calls: new Map(),
7
+ work: 0,
8
+ bytes: 0,
9
+ };
10
+ for (const source of span.sources) {
11
+ if (state.work >= bounds.maxWorkUnits) {
12
+ omit(state.omitted, 'work-limit');
13
+ break;
14
+ }
15
+ state.work += 1;
16
+ extractSource(source, state, bounds);
17
+ }
18
+ return { schemaVersion: 1, items: state.items, omitted: freezeOmission(state.omitted) };
19
+ }
20
+ function extractSource(source, state, bounds) {
21
+ if (source.section === 'previous_summary') {
22
+ add(state, source, {
23
+ provenance: 'agent-reported', kind: 'report', status: 'observed', text: source.text,
24
+ }, bounds);
25
+ return;
26
+ }
27
+ const rawMessage = source.message;
28
+ if (!isRecord(rawMessage) || typeof rawMessage.role !== 'string') {
29
+ omit(state.omitted, 'unsupported-message');
30
+ return;
31
+ }
32
+ const message = rawMessage;
33
+ if (message.role === 'user') {
34
+ for (const text of textContent(message.content)) {
35
+ add(state, source, { provenance: 'requested', kind: 'request', status: 'requested', text }, bounds);
36
+ for (const match of explicitFacts(text)) {
37
+ add(state, source, {
38
+ provenance: 'requested', kind: match.kind, status: 'requested', text: match.text,
39
+ key: `${match.kind}:${match.text.toLowerCase()}`,
40
+ }, bounds);
41
+ }
42
+ }
43
+ return;
44
+ }
45
+ if (message.role === 'assistant') {
46
+ for (const block of arrayValue(message.content)) {
47
+ if (!isRecord(block))
48
+ continue;
49
+ if (block.type === 'text') {
50
+ add(state, source, {
51
+ provenance: 'agent-reported', kind: 'report', status: 'observed', text: block.text,
52
+ }, bounds);
53
+ }
54
+ else if (block.type === 'toolCall' && typeof block.id === 'string' && typeof block.name === 'string') {
55
+ const args = isRecord(block.arguments) ? block.arguments : {};
56
+ state.calls.set(block.id, { name: block.name, arguments: args });
57
+ add(state, source, {
58
+ provenance: 'requested',
59
+ kind: 'tool-call',
60
+ status: 'requested',
61
+ text: `${block.name} ${stableJson(args)}`,
62
+ toolCallId: stableIdentifier(block.id, 'call'),
63
+ toolName: stableIdentifier(block.name, 'tool'),
64
+ }, bounds);
65
+ }
66
+ }
67
+ return;
68
+ }
69
+ if (message.role === 'toolResult')
70
+ extractToolResult(source, message, state, bounds);
71
+ else
72
+ omit(state.omitted, 'unsupported-message');
73
+ }
74
+ function explicitFacts(text) {
75
+ const facts = [];
76
+ for (const sentence of text
77
+ .split(/(?<=[.!?])\s+|\n+/u)
78
+ .map((sentence) => sentence.trim())
79
+ .filter(Boolean)) {
80
+ if (/\b(?:must|need to|required?|always|never|do not|don't|prefer|constraint)\b/iu.test(sentence)) {
81
+ facts.push({ kind: 'constraint', text: sentence });
82
+ }
83
+ else if (/\b(?:decided|decision|we will|choose|chosen|agreed|keep|avoid)\b/iu.test(sentence)) {
84
+ facts.push({ kind: 'decision', text: sentence });
85
+ }
86
+ else if (/\b(?:todo|to-do|still need|remaining|follow[- ]?up|next step|blocked|waiting for)\b/iu.test(sentence)) {
87
+ facts.push({ kind: 'open-loop', text: sentence });
88
+ }
89
+ }
90
+ return facts;
91
+ }
92
+ function extractToolResult(source, message, state, bounds) {
93
+ const rawCallId = typeof message.toolCallId === 'string' ? message.toolCallId : '';
94
+ const call = state.calls.get(rawCallId);
95
+ const toolName = typeof message.toolName === 'string' ? message.toolName : call?.name ?? 'unknown';
96
+ const toolCallId = stableIdentifier(rawCallId, 'call');
97
+ const isError = message.isError === true;
98
+ const common = { toolCallId, toolName: stableIdentifier(toolName, 'tool') };
99
+ const details = isRecord(message.details) ? message.details : undefined;
100
+ let handled = false;
101
+ if (toolName === 'apply_patch' && details) {
102
+ handled = extractPatch(source, details, common, state, bounds);
103
+ }
104
+ else if (toolName === 'read' || toolName === 'write' || toolName === 'edit') {
105
+ const path = cleanPath(call?.arguments.path, bounds);
106
+ const action = toolName === 'read' ? 'Read' : toolName === 'write' ? 'Wrote' : 'Edited';
107
+ add(state, source, {
108
+ provenance: 'recorded-result', kind: 'file', status: isError ? 'failed' : 'succeeded',
109
+ text: path ? `${action} ${path}` : `${action} file (path unavailable)`,
110
+ ...common, ...(path ? { key: `file:${path}`, paths: [path] } : {}),
111
+ }, bounds);
112
+ handled = true;
113
+ }
114
+ else if (isTaskTool(toolName) && details) {
115
+ handled = extractTasks(source, details, common, state, bounds);
116
+ }
117
+ else if (isBackgroundTool(toolName) && details) {
118
+ handled = extractBackground(source, details, common, state, bounds);
119
+ }
120
+ else if (toolName === 'bash' || toolName === 'exec_command' || toolName === 'write_stdin') {
121
+ const command = stringValue(call?.arguments.command) ?? stringValue(call?.arguments.cmd) ?? toolName;
122
+ const text = textContent(message.content).join('\n');
123
+ const test = looksLikeTestCommand(command);
124
+ add(state, source, {
125
+ provenance: 'recorded-result', kind: test ? 'test' : 'command', status: isError ? 'failed' : 'succeeded',
126
+ text: `${isError ? 'Failed' : 'Completed'}: ${command}${text ? `\n${text}` : ''}`,
127
+ ...common, key: `${test ? 'test' : 'command'}:${command}`,
128
+ }, bounds);
129
+ handled = true;
130
+ }
131
+ if (isError && !handled) {
132
+ add(state, source, {
133
+ provenance: 'recorded-result', kind: 'error', status: 'failed',
134
+ text: textContent(message.content).join('\n') || `${toolName} failed`, ...common,
135
+ key: `failure:${toolCallId}`,
136
+ }, bounds);
137
+ }
138
+ else if (!handled) {
139
+ const text = textContent(message.content).join('\n');
140
+ if (text)
141
+ add(state, source, {
142
+ provenance: 'observed', kind: 'observation', status: 'observed', text, ...common,
143
+ }, bounds);
144
+ }
145
+ extractRtk(source, details, common, state, bounds);
146
+ }
147
+ function extractPatch(source, details, common, state, bounds) {
148
+ if (details.status !== 'success' && details.status !== 'partial_failure')
149
+ return false;
150
+ if (!isRecord(details.result))
151
+ return false;
152
+ const paths = boundedPaths(details.result.changedFiles, bounds, state.omitted);
153
+ const failedPath = cleanPath(details.failedPath, bounds);
154
+ const partial = details.status === 'partial_failure';
155
+ add(state, source, {
156
+ provenance: 'recorded-result', kind: 'file', status: partial ? 'partial' : 'succeeded',
157
+ text: partial
158
+ ? `Patch partially applied${failedPath ? `; failed at ${failedPath}` : ''}${paths.length ? `; changed ${paths.join(', ')}` : ''}`
159
+ : `Patch applied${paths.length ? `; changed ${paths.join(', ')}` : ''}`,
160
+ ...common, key: `patch:${common.toolCallId ?? source.sourceId}`, paths,
161
+ }, bounds);
162
+ return true;
163
+ }
164
+ function extractTasks(source, details, common, state, bounds) {
165
+ const tasks = isRecord(details.task) ? [details.task] : arrayValue(details.tasks).filter(isRecord);
166
+ let handled = false;
167
+ for (const task of tasks.slice(0, bounds.maxPathsPerItem)) {
168
+ const id = typeof task.id === 'string' ? stableIdentifier(task.id, 'task') : undefined;
169
+ const status = taskStatus(task.status);
170
+ if (!id || !status)
171
+ continue;
172
+ const title = sanitizeText(task.title, Math.floor(bounds.maxTextBytes / 2)).text || '(untitled)';
173
+ add(state, source, {
174
+ provenance: 'recorded-result', kind: 'task', status, text: `${id} ${status}: ${title}`,
175
+ ...common, key: `task:${id}`,
176
+ }, bounds);
177
+ handled = true;
178
+ }
179
+ if (tasks.length > bounds.maxPathsPerItem)
180
+ omit(state.omitted, 'task-limit', tasks.length - bounds.maxPathsPerItem);
181
+ return handled;
182
+ }
183
+ function extractBackground(source, details, common, state, bounds) {
184
+ const records = [details, details.job, ...arrayValue(details.jobs)].filter(isRecord);
185
+ let handled = false;
186
+ for (const record of records.slice(0, bounds.maxPathsPerItem)) {
187
+ const nestedStatus = isRecord(record.status) ? record.status.status : record.status;
188
+ const nestedMeta = isRecord(record.meta) ? record.meta : record;
189
+ const idValue = record.id ?? nestedMeta.id;
190
+ const id = typeof idValue === 'string' ? stableIdentifier(idValue, 'job') : undefined;
191
+ const status = backgroundStatus(nestedStatus);
192
+ if (!id || !status)
193
+ continue;
194
+ const exit = isRecord(record.status) && typeof record.status.exitCode === 'number'
195
+ ? ` (exit ${record.status.exitCode})`
196
+ : '';
197
+ add(state, source, {
198
+ provenance: 'recorded-result', kind: 'background-job', status,
199
+ text: `Background job ${id}: ${status}${exit}`, ...common, key: `background:${id}`,
200
+ }, bounds);
201
+ handled = true;
202
+ }
203
+ return handled;
204
+ }
205
+ function extractRtk(source, details, common, state, bounds) {
206
+ const metadata = details && (isRecord(details.rtkCompaction)
207
+ ? details.rtkCompaction
208
+ : isRecord(details.metadata) && isRecord(details.metadata.rtkCompaction)
209
+ ? details.metadata.rtkCompaction
210
+ : undefined);
211
+ if (!metadata || metadata.applied !== true)
212
+ return;
213
+ const techniques = arrayValue(metadata.techniques)
214
+ .filter((value) => typeof value === 'string')
215
+ .slice(0, 16)
216
+ .map((value) => sanitizeText(value, 64).text)
217
+ .filter(Boolean);
218
+ const recoveryPath = metadata.truncated === true ? cleanPath(metadata.recoveryPath, bounds) : undefined;
219
+ add(state, source, {
220
+ provenance: 'recorded-result', kind: 'rtk-pointer', status: 'observed',
221
+ text: `RTK compacted output${techniques.length ? ` using ${techniques.join(', ')}` : ''}${recoveryPath ? `; recovery ${recoveryPath}` : ''}`,
222
+ ...common, ...(recoveryPath ? { recoveryPath } : {}), techniques,
223
+ }, bounds);
224
+ }
225
+ function add(state, source, candidate, bounds) {
226
+ if (state.items.length >= bounds.maxEvidenceItems) {
227
+ omit(state.omitted, 'evidence-item-limit');
228
+ return;
229
+ }
230
+ const sanitized = sanitizeText(candidate.text, bounds.maxTextBytes);
231
+ if (!sanitized.text)
232
+ return;
233
+ if (sanitized.omittedBytes > 0)
234
+ omit(state.omitted, 'text-byte-limit', 0, sanitized.omittedBytes);
235
+ const ordinal = state.items.length;
236
+ const item = {
237
+ ...candidate,
238
+ id: `evidence:${source.sourceId}:${ordinal}`,
239
+ sourceId: source.sourceId,
240
+ text: sanitized.text,
241
+ };
242
+ const bytes = utf8Bytes(JSON.stringify(item));
243
+ if (state.bytes + bytes > bounds.maxEvidenceBytes) {
244
+ omit(state.omitted, 'evidence-byte-limit', 1, bytes);
245
+ return;
246
+ }
247
+ state.items.push(item);
248
+ state.bytes += bytes;
249
+ }
250
+ function boundedPaths(value, bounds, omitted) {
251
+ const raw = arrayValue(value);
252
+ const paths = raw.slice(0, bounds.maxPathsPerItem)
253
+ .map((path) => cleanPath(path, bounds))
254
+ .filter((path) => Boolean(path));
255
+ if (raw.length > paths.length)
256
+ omit(omitted, 'path-limit-or-invalid', raw.length - paths.length);
257
+ return [...new Set(paths)];
258
+ }
259
+ function cleanPath(value, bounds) {
260
+ const text = sanitizeText(value, Math.min(bounds.maxTextBytes, 512)).text;
261
+ return text || undefined;
262
+ }
263
+ function stableJson(value) {
264
+ try {
265
+ return JSON.stringify(sortJson(value), null, 0) ?? '{}';
266
+ }
267
+ catch {
268
+ return '{}';
269
+ }
270
+ }
271
+ function sortJson(value, depth = 0) {
272
+ if (depth > 4)
273
+ return '[depth omitted]';
274
+ if (Array.isArray(value))
275
+ return value.slice(0, 32).map((item) => sortJson(item, depth + 1));
276
+ if (!isRecord(value))
277
+ return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' || value === null
278
+ ? value
279
+ : String(value);
280
+ return Object.fromEntries(Object.keys(value).sort().slice(0, 32).map((key) => [key, sortJson(value[key], depth + 1)]));
281
+ }
282
+ function textContent(value) {
283
+ if (typeof value === 'string')
284
+ return [value];
285
+ return arrayValue(value).filter(isRecord)
286
+ .filter((block) => block.type === 'text' && typeof block.text === 'string')
287
+ .map((block) => block.text);
288
+ }
289
+ function taskStatus(value) {
290
+ if (value === 'completed')
291
+ return 'completed';
292
+ if (value === 'cancelled')
293
+ return 'cancelled';
294
+ if (value === 'blocked')
295
+ return 'blocked';
296
+ if (value === 'in_progress' || value === 'pending')
297
+ return value === 'in_progress' ? 'running' : 'requested';
298
+ return undefined;
299
+ }
300
+ function backgroundStatus(value) {
301
+ if (value === 'running')
302
+ return 'running';
303
+ if (value === 'completed')
304
+ return 'completed';
305
+ if (value === 'failed' || value === 'unknown')
306
+ return 'failed';
307
+ if (value === 'killed')
308
+ return 'cancelled';
309
+ return undefined;
310
+ }
311
+ function isTaskTool(value) {
312
+ return value === 'TaskCreate' || value === 'TaskUpdate' || value === 'TaskList' || value === 'TaskGet';
313
+ }
314
+ function isBackgroundTool(value) {
315
+ return value.endsWith('_background_bash') || value === 'list_background_bash';
316
+ }
317
+ function looksLikeTestCommand(command) {
318
+ return /(?:^|\s)(?:test|vitest|jest|pytest|cargo test|go test|pnpm test|npm test)(?:\s|$)/iu.test(command);
319
+ }
320
+ function stringValue(value) {
321
+ return typeof value === 'string' ? value : undefined;
322
+ }
323
+ function arrayValue(value) {
324
+ return Array.isArray(value) ? value : [];
325
+ }
326
+ function isRecord(value) {
327
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
328
+ }
329
+ //# sourceMappingURL=evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../src/internal/evidence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ExtractionBounds } from './bounds.js';
2
+ import type { PreparedSpan, PreparedSpanInput } from './contracts.js';
3
+ export declare function prepareEvidenceSpan(input: PreparedSpanInput, bounds?: ExtractionBounds): PreparedSpan;
4
+ //# sourceMappingURL=prepared-span.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepared-span.d.ts","sourceRoot":"","sources":["../../src/internal/prepared-span.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAGV,YAAY,EACZ,iBAAiB,EAElB,MAAM,gBAAgB,CAAC;AAExB,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,iBAAiB,EACxB,MAAM,GAAE,gBAA4C,GACnD,YAAY,CAwEd"}