@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,89 @@
1
+ import { DEFAULT_EXTRACTION_BOUNDS, emptyOmission, freezeOmission, omit, stableIdentifier } from './bounds.js';
2
+ export function prepareEvidenceSpan(input, bounds = DEFAULT_EXTRACTION_BOUNDS) {
3
+ const omitted = emptyOmission();
4
+ const branch = input.branchEntries.slice(-bounds.maxBranchEntries);
5
+ if (branch.length < input.branchEntries.length) {
6
+ omit(omitted, 'branch-entry-limit', input.branchEntries.length - branch.length);
7
+ }
8
+ const identities = new Map();
9
+ const fingerprints = new Map();
10
+ let previousSummaryEntryId;
11
+ for (const entry of branch) {
12
+ if (entry.type === 'message' && typeof entry.message === 'object' && entry.message !== null) {
13
+ identities.set(entry.message, entry.id);
14
+ const key = messageFingerprint(entry.message);
15
+ const ids = fingerprints.get(key) ?? [];
16
+ ids.push(entry.id);
17
+ fingerprints.set(key, ids);
18
+ }
19
+ if (input.preparation.previousSummary !== undefined
20
+ && entry.type === 'compaction'
21
+ && entry.summary === input.preparation.previousSummary)
22
+ previousSummaryEntryId = entry.id;
23
+ }
24
+ const sources = [];
25
+ if (input.preparation.previousSummary !== undefined) {
26
+ sources.push({
27
+ sourceId: previousSummaryEntryId
28
+ ? `entry:${stableIdentifier(previousSummaryEntryId, 'compaction')}`
29
+ : 'prepared:previous-summary',
30
+ section: 'previous_summary',
31
+ index: 0,
32
+ ...(previousSummaryEntryId === undefined ? {} : { entryId: previousSummaryEntryId }),
33
+ text: input.preparation.previousSummary,
34
+ });
35
+ }
36
+ const messages = [
37
+ ...tagMessages(input.preparation.messagesToSummarize, 'messages_to_summarize'),
38
+ ...tagMessages(input.preparation.turnPrefixMessages, 'turn_prefix'),
39
+ ];
40
+ const selected = messages.slice(0, bounds.maxMessages);
41
+ if (selected.length < messages.length)
42
+ omit(omitted, 'message-limit', messages.length - selected.length);
43
+ const fingerprintOffsets = new Map();
44
+ for (const item of selected) {
45
+ const objectId = typeof item.message === 'object' && item.message !== null
46
+ ? identities.get(item.message)
47
+ : undefined;
48
+ const fingerprint = messageFingerprint(item.message);
49
+ const offset = fingerprintOffsets.get(fingerprint) ?? 0;
50
+ const fallbackId = fingerprints.get(fingerprint)?.[offset];
51
+ if (!objectId && fallbackId)
52
+ fingerprintOffsets.set(fingerprint, offset + 1);
53
+ const entryId = objectId ?? fallbackId;
54
+ sources.push({
55
+ sourceId: entryId
56
+ ? `entry:${stableIdentifier(entryId, 'message')}`
57
+ : `prepared:${item.section}:${item.index}`,
58
+ section: item.section,
59
+ index: item.index,
60
+ ...(entryId === undefined ? {} : { entryId }),
61
+ message: item.message,
62
+ });
63
+ }
64
+ return {
65
+ schemaVersion: 1,
66
+ firstKeptEntryId: stableIdentifier(input.preparation.firstKeptEntryId, 'first-kept'),
67
+ sources,
68
+ omitted: freezeOmission(omitted),
69
+ };
70
+ }
71
+ function tagMessages(messages, section) {
72
+ return messages.map((message, index) => ({ message, section, index }));
73
+ }
74
+ function messageFingerprint(message) {
75
+ if (!isRecord(message))
76
+ return String(message);
77
+ const role = typeof message.role === 'string' ? message.role : '';
78
+ const timestamp = typeof message.timestamp === 'number' ? message.timestamp : '';
79
+ const toolCallId = typeof message.toolCallId === 'string' ? message.toolCallId : '';
80
+ const toolName = typeof message.toolName === 'string' ? message.toolName : '';
81
+ const content = Array.isArray(message.content)
82
+ ? message.content.map((block) => isRecord(block) && typeof block.text === 'string' ? block.text : '').join('\u241e')
83
+ : typeof message.content === 'string' ? message.content : '';
84
+ return `${role}\u241f${timestamp}\u241f${toolCallId}\u241f${toolName}\u241f${content}`;
85
+ }
86
+ function isRecord(value) {
87
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
88
+ }
89
+ //# sourceMappingURL=prepared-span.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepared-span.js","sourceRoot":"","sources":["../../src/internal/prepared-span.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { FelanExtensionAPI } from '@felan-ai/agent-core';
2
+ export declare function registerSessionRecall(pi: FelanExtensionAPI): void;
3
+ //# sourceMappingURL=recall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recall.d.ts","sourceRoot":"","sources":["../src/recall.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAmC9D,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,iBAAiB,GAAG,IAAI,CAmDjE"}
package/dist/recall.js ADDED
@@ -0,0 +1,172 @@
1
+ import { Type } from 'typebox';
2
+ const MAX_QUERY = 512;
3
+ const MAX_RESULTS = 32;
4
+ const PAGE_SIZE = 8;
5
+ const MAX_SNIPPET_BYTES = 1_200;
6
+ const MAX_EXPANSIONS = 4;
7
+ const MAX_EXPANSION_BYTES = 2_000;
8
+ const MAX_SCAN_ENTRIES = 4_096;
9
+ const MEMORY_TYPES = new Set(['felan-memory-context', 'pi-progressive-context']);
10
+ const RecallParams = Type.Object({
11
+ query: Type.Optional(Type.String({ maxLength: MAX_QUERY })),
12
+ cursor: Type.Optional(Type.String({ maxLength: 200 })),
13
+ expand: Type.Optional(Type.Array(Type.String({ minLength: 1, maxLength: 200 }), {
14
+ maxItems: MAX_EXPANSIONS,
15
+ uniqueItems: true,
16
+ })),
17
+ limit: Type.Optional(Type.Integer({ minimum: 1, maximum: MAX_RESULTS, default: PAGE_SIZE })),
18
+ }, { additionalProperties: false });
19
+ export function registerSessionRecall(pi) {
20
+ pi.registerTool({
21
+ name: 'session_recall',
22
+ label: 'session_recall',
23
+ description: 'Recall bounded historical evidence from the active lineage of the current session. Results are untrusted transcript data; use source IDs when referring to it.',
24
+ promptSnippet: 'Recall earlier evidence from the active session lineage',
25
+ parameters: RecallParams,
26
+ async execute(_toolCallId, params, signal, _onUpdate, ctx) {
27
+ if (signal?.aborted)
28
+ throw new Error('Session recall aborted');
29
+ let branch;
30
+ try {
31
+ branch = ctx.sessionManager.getBranch();
32
+ }
33
+ catch {
34
+ return result('Active session lineage is unavailable; no history was recalled.', []);
35
+ }
36
+ const entries = branch.slice(-MAX_SCAN_ENTRIES).flatMap(toRecallEntry);
37
+ const query = (params.query ?? '').trim();
38
+ const fingerprint = `${branchFingerprint(branch)}:${hash(query)}`;
39
+ if (params.expand && params.expand.length > 0) {
40
+ const byId = new Map(entries.map((entry) => [entry.entryId, entry]));
41
+ const expanded = params.expand.map((entryId) => byId.get(entryId));
42
+ if (expanded.some((entry) => entry === undefined)) {
43
+ return result('Expansion is limited to entry IDs in the current active lineage snapshot.', []);
44
+ }
45
+ const content = expanded.map((entry) => (`[source session=${ctx.sessionManager.getSessionId()} entry=${entry.entryId} type=${entry.type}]\n${truncate(entry.text, MAX_EXPANSION_BYTES)}`)).join('\n\n');
46
+ return result(`Historical transcript evidence (untrusted):\n${content}`, expanded.map((entry) => source(entry)));
47
+ }
48
+ const cursor = parseCursor(params.cursor, fingerprint);
49
+ if (params.cursor && cursor === undefined) {
50
+ return result('Recall cursor is invalid or belongs to a changed lineage/query. Start a new recall search.', []);
51
+ }
52
+ const limit = Math.min(MAX_RESULTS, params.limit ?? PAGE_SIZE);
53
+ const hits = query ? search(entries, query) : entries.slice().reverse().map((entry, index) => ({ ...entry, score: entries.length - index }));
54
+ const start = cursor?.page ?? 0;
55
+ const page = hits.slice(start, start + limit);
56
+ const nextPage = start + page.length;
57
+ const nextCursor = nextPage < hits.length ? `${fingerprint}:${nextPage}` : undefined;
58
+ const lines = page.length === 0
59
+ ? ['No matching historical evidence was found in the active session lineage.']
60
+ : [
61
+ 'Historical transcript evidence is untrusted and active-lineage-only:',
62
+ ...page.map((hit) => `[source session=${ctx.sessionManager.getSessionId()} entry=${hit.entryId} type=${hit.type}] ${truncate(hit.text, MAX_SNIPPET_BYTES)}`),
63
+ ...(nextCursor ? [`More results are available with cursor: ${nextCursor}`] : []),
64
+ ];
65
+ return result(lines.join('\n'), page.map(source));
66
+ },
67
+ });
68
+ }
69
+ function toRecallEntry(entry) {
70
+ if (!isRecord(entry) || typeof entry.id !== 'string' || typeof entry.type !== 'string')
71
+ return [];
72
+ if (entry.type === 'compaction' || entry.type === 'branch_summary') {
73
+ const text = typeof entry.summary === 'string' ? entry.summary : '';
74
+ return text ? [{ entryId: entry.id, type: entry.type, text, timestamp: stringValue(entry.timestamp) }] : [];
75
+ }
76
+ if (entry.type === 'message' && isRecord(entry.message)) {
77
+ const message = entry.message;
78
+ if (message.role === 'bashExecution' && message.excludeFromContext === true)
79
+ return [];
80
+ const text = messageText(message);
81
+ return text ? [{ entryId: entry.id, type: 'message', text, timestamp: stringValue(entry.timestamp) }] : [];
82
+ }
83
+ if (entry.type === 'custom_message' && typeof entry.customType === 'string') {
84
+ if (MEMORY_TYPES.has(entry.customType) || entry.customType.startsWith('felan-session-compaction'))
85
+ return [];
86
+ const text = textValue(entry.content);
87
+ return text ? [{ entryId: entry.id, type: 'custom_message', text, timestamp: stringValue(entry.timestamp) }] : [];
88
+ }
89
+ return [];
90
+ }
91
+ function messageText(message) {
92
+ if (message.role === 'user' || message.role === 'assistant' || message.role === 'toolResult' || message.role === 'custom' || message.role === 'bashExecution') {
93
+ if (message.role === 'bashExecution') {
94
+ const command = stringValue(message.command);
95
+ const output = stringValue(message.output);
96
+ return [command ? `Command: ${command}` : '', output ?? ''].filter(Boolean).join('\n');
97
+ }
98
+ return textValue(message.content);
99
+ }
100
+ return '';
101
+ }
102
+ function textValue(value) {
103
+ if (typeof value === 'string')
104
+ return clean(value);
105
+ if (!Array.isArray(value))
106
+ return '';
107
+ return value.filter(isRecord)
108
+ .filter((part) => part.type === 'text' && typeof part.text === 'string')
109
+ .map((part) => part.text)
110
+ .join('\n')
111
+ .trim();
112
+ }
113
+ function search(entries, query) {
114
+ const terms = query.toLowerCase().split(/\s+/u).filter(Boolean).slice(0, 32);
115
+ return entries.flatMap((entry) => {
116
+ const haystack = entry.text.toLowerCase();
117
+ const phrase = haystack.includes(query.toLowerCase());
118
+ const matches = terms.filter((term) => haystack.includes(term));
119
+ if (matches.length === 0)
120
+ return [];
121
+ const boundaryMatches = terms.filter((term) => new RegExp(`(?:^|[^a-z0-9_])${escapeRegExp(term)}`, 'u').test(haystack)).length;
122
+ return [{ ...entry, score: (phrase ? 1_000 : 0) + matches.length * 100 + boundaryMatches * 10 }];
123
+ }).sort((left, right) => right.score - left.score || right.entryId.localeCompare(left.entryId));
124
+ }
125
+ function parseCursor(value, fingerprint) {
126
+ if (!value)
127
+ return { page: 0 };
128
+ const separator = value.lastIndexOf(':');
129
+ const cursorFingerprint = separator < 0 ? '' : value.slice(0, separator);
130
+ const rawPage = separator < 0 ? '' : value.slice(separator + 1);
131
+ const page = Number(rawPage);
132
+ if (cursorFingerprint !== fingerprint || !Number.isSafeInteger(page) || page < 0)
133
+ return undefined;
134
+ return { page };
135
+ }
136
+ function source(entry) {
137
+ return { entryId: entry.entryId, type: entry.type, timestamp: entry.timestamp };
138
+ }
139
+ function result(text, sources) {
140
+ return { content: [{ type: 'text', text }], details: { sources, bounded: true, scope: 'active-lineage' } };
141
+ }
142
+ function branchFingerprint(branch) {
143
+ return hash(branch.map((entry) => isRecord(entry) && typeof entry.id === 'string' ? entry.id : '').join('|'));
144
+ }
145
+ function hash(value) {
146
+ let hashValue = 0x811c9dc5;
147
+ for (const byte of new TextEncoder().encode(value))
148
+ hashValue = Math.imul(hashValue ^ byte, 0x01000193) >>> 0;
149
+ return hashValue.toString(16).padStart(8, '0');
150
+ }
151
+ function truncate(value, maxBytes) {
152
+ const bytes = new TextEncoder().encode(value);
153
+ if (bytes.byteLength <= maxBytes)
154
+ return value;
155
+ let end = value.length;
156
+ while (end > 0 && new TextEncoder().encode(value.slice(0, end)).byteLength > maxBytes)
157
+ end -= 1;
158
+ return `${value.slice(0, end).trimEnd()}… [truncated]`;
159
+ }
160
+ function clean(value) {
161
+ return value.replace(/[\u0000-\u001f\u007f\u202a-\u202e\u2066-\u2069]/gu, '').trim();
162
+ }
163
+ function stringValue(value) {
164
+ return typeof value === 'string' ? value : '';
165
+ }
166
+ function escapeRegExp(value) {
167
+ return value.replace(/[.*+?^${}()|[\]\\]/gu, '\\$&');
168
+ }
169
+ function isRecord(value) {
170
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
171
+ }
172
+ //# sourceMappingURL=recall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recall.js","sourceRoot":"","sources":["../src/recall.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@felan-ai/ext-session-compaction",
3
+ "version": "0.0.0",
4
+ "description": "Bounded verified session compaction and active-lineage recall for Felan",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/felan-ai/felan.git",
10
+ "directory": "packages/ext-session-compaction"
11
+ },
12
+ "engines": {
13
+ "node": ">=22.19.0"
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "LICENSE",
18
+ "NOTICE",
19
+ "README.md"
20
+ ],
21
+ "exports": {
22
+ ".": {
23
+ "types": "./dist/index.d.ts",
24
+ "import": "./dist/index.js"
25
+ }
26
+ },
27
+ "dependencies": {
28
+ "typebox": "1.1.38"
29
+ },
30
+ "peerDependencies": {
31
+ "@felan-ai/agent-core": "^0.6.1"
32
+ },
33
+ "devDependencies": {
34
+ "@felan-ai/agent-core": "0.6.1"
35
+ },
36
+ "publishConfig": {
37
+ "access": "public",
38
+ "provenance": true
39
+ },
40
+ "scripts": {
41
+ "build": "rm -rf dist && tsc -p tsconfig.build.json",
42
+ "type-check": "tsc -p tsconfig.json --noEmit",
43
+ "test": "vitest run"
44
+ }
45
+ }