@animalabs/context-manager 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 (83) hide show
  1. package/dist/src/blob-manager.d.ts +37 -0
  2. package/dist/src/blob-manager.d.ts.map +1 -0
  3. package/dist/src/blob-manager.js +128 -0
  4. package/dist/src/blob-manager.js.map +1 -0
  5. package/dist/src/context-log.d.ts +99 -0
  6. package/dist/src/context-log.d.ts.map +1 -0
  7. package/dist/src/context-log.js +277 -0
  8. package/dist/src/context-log.js.map +1 -0
  9. package/dist/src/context-manager.d.ts +245 -0
  10. package/dist/src/context-manager.d.ts.map +1 -0
  11. package/dist/src/context-manager.js +553 -0
  12. package/dist/src/context-manager.js.map +1 -0
  13. package/dist/src/index.d.ts +12 -0
  14. package/dist/src/index.d.ts.map +1 -0
  15. package/dist/src/index.js +12 -0
  16. package/dist/src/index.js.map +1 -0
  17. package/dist/src/message-store.d.ts +135 -0
  18. package/dist/src/message-store.d.ts.map +1 -0
  19. package/dist/src/message-store.js +372 -0
  20. package/dist/src/message-store.js.map +1 -0
  21. package/dist/src/strategies/autobiographical.d.ts +199 -0
  22. package/dist/src/strategies/autobiographical.d.ts.map +1 -0
  23. package/dist/src/strategies/autobiographical.js +1122 -0
  24. package/dist/src/strategies/autobiographical.js.map +1 -0
  25. package/dist/src/strategies/index.d.ts +3 -0
  26. package/dist/src/strategies/index.d.ts.map +1 -0
  27. package/dist/src/strategies/index.js +3 -0
  28. package/dist/src/strategies/index.js.map +1 -0
  29. package/dist/src/strategies/knowledge.d.ts +46 -0
  30. package/dist/src/strategies/knowledge.d.ts.map +1 -0
  31. package/dist/src/strategies/knowledge.js +270 -0
  32. package/dist/src/strategies/knowledge.js.map +1 -0
  33. package/dist/src/strategies/passthrough.d.ts +17 -0
  34. package/dist/src/strategies/passthrough.d.ts.map +1 -0
  35. package/dist/src/strategies/passthrough.js +69 -0
  36. package/dist/src/strategies/passthrough.js.map +1 -0
  37. package/dist/src/types/context.d.ts +108 -0
  38. package/dist/src/types/context.d.ts.map +1 -0
  39. package/dist/src/types/context.js +2 -0
  40. package/dist/src/types/context.js.map +1 -0
  41. package/dist/src/types/index.d.ts +5 -0
  42. package/dist/src/types/index.d.ts.map +1 -0
  43. package/dist/src/types/index.js +2 -0
  44. package/dist/src/types/index.js.map +1 -0
  45. package/dist/src/types/message.d.ts +129 -0
  46. package/dist/src/types/message.d.ts.map +1 -0
  47. package/dist/src/types/message.js +2 -0
  48. package/dist/src/types/message.js.map +1 -0
  49. package/dist/src/types/strategy.d.ts +233 -0
  50. package/dist/src/types/strategy.d.ts.map +1 -0
  51. package/dist/src/types/strategy.js +32 -0
  52. package/dist/src/types/strategy.js.map +1 -0
  53. package/dist/test/autobiographical.test.d.ts +2 -0
  54. package/dist/test/autobiographical.test.d.ts.map +1 -0
  55. package/dist/test/autobiographical.test.js +46 -0
  56. package/dist/test/autobiographical.test.js.map +1 -0
  57. package/dist/test/head-window-reset.test.d.ts +17 -0
  58. package/dist/test/head-window-reset.test.d.ts.map +1 -0
  59. package/dist/test/head-window-reset.test.js +342 -0
  60. package/dist/test/head-window-reset.test.js.map +1 -0
  61. package/dist/test/integration.test.d.ts +2 -0
  62. package/dist/test/integration.test.d.ts.map +1 -0
  63. package/dist/test/integration.test.js +1341 -0
  64. package/dist/test/integration.test.js.map +1 -0
  65. package/dist/test/knowledge.test.d.ts +2 -0
  66. package/dist/test/knowledge.test.d.ts.map +1 -0
  67. package/dist/test/knowledge.test.js +617 -0
  68. package/dist/test/knowledge.test.js.map +1 -0
  69. package/dist/tsconfig.tsbuildinfo +1 -0
  70. package/package.json +48 -0
  71. package/src/blob-manager.ts +155 -0
  72. package/src/context-log.ts +342 -0
  73. package/src/context-manager.ts +726 -0
  74. package/src/index.ts +50 -0
  75. package/src/message-store.ts +479 -0
  76. package/src/strategies/autobiographical.ts +1355 -0
  77. package/src/strategies/index.ts +2 -0
  78. package/src/strategies/knowledge.ts +336 -0
  79. package/src/strategies/passthrough.ts +98 -0
  80. package/src/types/context.ts +119 -0
  81. package/src/types/index.ts +42 -0
  82. package/src/types/message.ts +140 -0
  83. package/src/types/strategy.ts +282 -0
@@ -0,0 +1,342 @@
1
+ /**
2
+ * Tests for the resettable head window / topic transition feature.
3
+ *
4
+ * Covers:
5
+ * - resetHeadWindow() shifts the head window anchor
6
+ * - getHeadWindowStartIndex() resolves IDs correctly
7
+ * - selectHierarchical() excludes old head window from verbatim zone
8
+ * - rebuildChunks() includes old head window in compressible zone
9
+ * - isTopicTransitionMessage() detection
10
+ * - initialize() restores headWindowStartId from persisted markers
11
+ * - tool_use boundary retreat (if, not while)
12
+ * - KnowledgeStrategy inherits head window reset behavior
13
+ * - ContextManager.resetHeadWindow() public API
14
+ * - ResettableStrategy type guard
15
+ */
16
+ import { describe, it, before, after } from 'node:test';
17
+ import assert from 'node:assert';
18
+ import { rmSync, existsSync } from 'node:fs';
19
+ import { ContextManager, AutobiographicalStrategy, KnowledgeStrategy, PassthroughStrategy, isResettableStrategy, } from '../src/index.js';
20
+ const TEST_STORE_PATH = './test-head-window-reset';
21
+ function cleanup() {
22
+ if (existsSync(TEST_STORE_PATH)) {
23
+ rmSync(TEST_STORE_PATH, { recursive: true, force: true });
24
+ }
25
+ }
26
+ function textBlock(text) {
27
+ return [{ type: 'text', text }];
28
+ }
29
+ describe('Head Window Reset', () => {
30
+ before(() => cleanup());
31
+ after(() => cleanup());
32
+ describe('AutobiographicalStrategy.resetHeadWindow', () => {
33
+ it('should shift the head window to start from the specified message', async () => {
34
+ cleanup();
35
+ const strategy = new AutobiographicalStrategy({
36
+ headWindowTokens: 200,
37
+ recentWindowTokens: 100,
38
+ });
39
+ const manager = await ContextManager.open({
40
+ path: TEST_STORE_PATH,
41
+ strategy,
42
+ });
43
+ // Topic A messages (will be in head window initially)
44
+ manager.addMessage('user', textBlock('Topic A: Tell me about cats'));
45
+ manager.addMessage('assistant', textBlock('Topic A: Cats are great pets'));
46
+ manager.addMessage('user', textBlock('Topic A: What breeds exist?'));
47
+ // Inject transition marker
48
+ const transitionId = manager.addMessage('Context Manager', textBlock('[Topic Transition]\n\nWe discussed cats.'));
49
+ // Topic B messages
50
+ manager.addMessage('user', textBlock('Topic B: Now tell me about dogs'));
51
+ manager.addMessage('assistant', textBlock('Topic B: Dogs are loyal companions'));
52
+ // Reset head window to start from the transition message
53
+ strategy.resetHeadWindow(transitionId);
54
+ const { messages } = await manager.compile();
55
+ // Head window should start from the transition, not from Topic A
56
+ const firstMsg = messages[0];
57
+ assert.ok(firstMsg, 'Should have at least one message');
58
+ // Topic A messages should NOT be the first verbatim messages
59
+ const firstText = firstMsg.content
60
+ .filter((b) => b.type === 'text')
61
+ .map(b => b.text)
62
+ .join('');
63
+ assert.ok(!firstText.includes('Topic A'), `First message should not be Topic A content, got: ${firstText.slice(0, 80)}`);
64
+ // The transition marker or Topic B should be in the output
65
+ const allText = messages.flatMap(m => m.content.filter((b) => b.type === 'text').map(b => b.text)).join('\n');
66
+ assert.ok(allText.includes('Topic B'), 'Topic B should be in compiled output');
67
+ manager.close();
68
+ });
69
+ it('should make old head window messages compressible', async () => {
70
+ cleanup();
71
+ const strategy = new AutobiographicalStrategy({
72
+ headWindowTokens: 200,
73
+ recentWindowTokens: 50,
74
+ targetChunkTokens: 100,
75
+ });
76
+ const manager = await ContextManager.open({
77
+ path: TEST_STORE_PATH,
78
+ strategy,
79
+ });
80
+ // Add enough Topic A messages to fill the head window
81
+ for (let i = 0; i < 5; i++) {
82
+ manager.addMessage(i % 2 === 0 ? 'user' : 'assistant', textBlock(`Topic A message ${i}: ${'a'.repeat(50)}`));
83
+ }
84
+ // Transition
85
+ const transitionId = manager.addMessage('Context Manager', textBlock('[Topic Transition]\n\nSummary of Topic A.'));
86
+ strategy.resetHeadWindow(transitionId);
87
+ // Add Topic B messages
88
+ for (let i = 0; i < 5; i++) {
89
+ manager.addMessage(i % 2 === 0 ? 'user' : 'assistant', textBlock(`Topic B message ${i}: ${'b'.repeat(50)}`));
90
+ }
91
+ // Compiling should work without errors — old head window is now chunkable
92
+ const { messages } = await manager.compile();
93
+ assert.ok(messages.length > 0, 'Should compile messages');
94
+ manager.close();
95
+ });
96
+ });
97
+ describe('getHeadWindowStartIndex', () => {
98
+ it('should return 0 when no head window start is set', async () => {
99
+ cleanup();
100
+ const strategy = new AutobiographicalStrategy({
101
+ headWindowTokens: 200,
102
+ recentWindowTokens: 100,
103
+ });
104
+ const manager = await ContextManager.open({
105
+ path: TEST_STORE_PATH,
106
+ strategy,
107
+ });
108
+ manager.addMessage('user', textBlock('Hello'));
109
+ manager.addMessage('assistant', textBlock('Hi'));
110
+ // With no reset, head window starts from 0
111
+ const { messages } = await manager.compile();
112
+ const firstText = messages[0].content
113
+ .filter((b) => b.type === 'text')
114
+ .map(b => b.text)
115
+ .join('');
116
+ assert.ok(firstText.includes('Hello'), 'First message should be the first one added');
117
+ manager.close();
118
+ });
119
+ it('should fall back to 0 if referenced message is deleted', async () => {
120
+ cleanup();
121
+ const strategy = new AutobiographicalStrategy({
122
+ headWindowTokens: 500,
123
+ recentWindowTokens: 100,
124
+ });
125
+ const manager = await ContextManager.open({
126
+ path: TEST_STORE_PATH,
127
+ strategy,
128
+ });
129
+ manager.addMessage('user', textBlock('First'));
130
+ const midId = manager.addMessage('assistant', textBlock('Second'));
131
+ manager.addMessage('user', textBlock('Third'));
132
+ // Reset to mid message, then remove it
133
+ strategy.resetHeadWindow(midId);
134
+ manager.removeMessage(midId);
135
+ // Should not throw — falls back to 0
136
+ const { messages } = await manager.compile();
137
+ assert.ok(messages.length > 0);
138
+ manager.close();
139
+ });
140
+ });
141
+ describe('isTopicTransitionMessage detection', () => {
142
+ it('should detect [Topic Transition] messages from Context Manager', async () => {
143
+ cleanup();
144
+ const strategy = new AutobiographicalStrategy({
145
+ headWindowTokens: 200,
146
+ recentWindowTokens: 200,
147
+ });
148
+ const manager = await ContextManager.open({
149
+ path: TEST_STORE_PATH,
150
+ strategy,
151
+ });
152
+ // Add regular messages
153
+ manager.addMessage('user', textBlock('Hello'));
154
+ manager.addMessage('assistant', textBlock('[Topic Transition] fake'));
155
+ // Add real transition
156
+ const realTransitionId = manager.addMessage('Context Manager', textBlock('[Topic Transition]\n\nReal transition.'));
157
+ // Add another regular message
158
+ manager.addMessage('user', textBlock('After transition'));
159
+ manager.close();
160
+ // Reopen — initialize should find the transition marker
161
+ const strategy2 = new AutobiographicalStrategy({
162
+ headWindowTokens: 200,
163
+ recentWindowTokens: 200,
164
+ });
165
+ const manager2 = await ContextManager.open({
166
+ path: TEST_STORE_PATH,
167
+ strategy: strategy2,
168
+ });
169
+ // The head window should start from the transition message
170
+ const { messages } = await manager2.compile();
171
+ const allText = messages.flatMap(m => m.content.filter((b) => b.type === 'text').map(b => b.text)).join('\n');
172
+ // The first verbatim message should be the transition or after it,
173
+ // NOT the initial "Hello"
174
+ const firstText = messages[0].content
175
+ .filter((b) => b.type === 'text')
176
+ .map(b => b.text)
177
+ .join('');
178
+ assert.ok(firstText.includes('Topic Transition') || firstText.includes('After transition'), `Expected transition or post-transition as first message, got: ${firstText.slice(0, 80)}`);
179
+ manager2.close();
180
+ });
181
+ });
182
+ describe('Persistence across restarts', () => {
183
+ it('should restore headWindowStartId from topic transition markers', async () => {
184
+ cleanup();
185
+ // Session 1: create messages and reset head window
186
+ const strategy1 = new AutobiographicalStrategy({
187
+ headWindowTokens: 300,
188
+ recentWindowTokens: 100,
189
+ });
190
+ const manager1 = await ContextManager.open({
191
+ path: TEST_STORE_PATH,
192
+ strategy: strategy1,
193
+ });
194
+ manager1.addMessage('user', textBlock('Old topic: planning'));
195
+ manager1.addMessage('assistant', textBlock('Old topic: sure, lets plan'));
196
+ const transitionId = manager1.addMessage('Context Manager', textBlock('[Topic Transition]\n\nWe planned things.'));
197
+ strategy1.resetHeadWindow(transitionId);
198
+ manager1.addMessage('user', textBlock('New topic: execution'));
199
+ manager1.sync();
200
+ manager1.close();
201
+ // Session 2: reopen with fresh strategy
202
+ const strategy2 = new AutobiographicalStrategy({
203
+ headWindowTokens: 300,
204
+ recentWindowTokens: 100,
205
+ });
206
+ const manager2 = await ContextManager.open({
207
+ path: TEST_STORE_PATH,
208
+ strategy: strategy2,
209
+ });
210
+ const { messages } = await manager2.compile();
211
+ // The old topic messages should not be in the head window
212
+ const firstText = messages[0].content
213
+ .filter((b) => b.type === 'text')
214
+ .map(b => b.text)
215
+ .join('');
216
+ assert.ok(!firstText.includes('Old topic'), `After restart, head window should not start from old topic: ${firstText.slice(0, 80)}`);
217
+ manager2.close();
218
+ });
219
+ });
220
+ describe('Tool use boundary retreat', () => {
221
+ it('should retreat at most one position for tool_use at head window boundary', async () => {
222
+ cleanup();
223
+ const strategy = new AutobiographicalStrategy({
224
+ headWindowTokens: 300,
225
+ recentWindowTokens: 50,
226
+ });
227
+ const manager = await ContextManager.open({
228
+ path: TEST_STORE_PATH,
229
+ strategy,
230
+ });
231
+ // Fill with tool_use/tool_result pairs that push the boundary
232
+ manager.addMessage('user', textBlock('Start'));
233
+ manager.addMessage('assistant', [
234
+ { type: 'text', text: 'Tool 1' },
235
+ { type: 'tool_use', id: 'c1', name: 'search', input: {} },
236
+ ]);
237
+ manager.addMessage('user', [
238
+ { type: 'tool_result', toolUseId: 'c1', content: 'result1' },
239
+ ]);
240
+ manager.addMessage('assistant', [
241
+ { type: 'text', text: 'Tool 2' },
242
+ { type: 'tool_use', id: 'c2', name: 'search', input: {} },
243
+ ]);
244
+ manager.addMessage('user', [
245
+ { type: 'tool_result', toolUseId: 'c2', content: 'result2' },
246
+ ]);
247
+ // Push well over the head window budget
248
+ manager.addMessage('assistant', textBlock('x'.repeat(1000)));
249
+ manager.addMessage('user', textBlock('End'));
250
+ const { messages } = await manager.compile();
251
+ // The head window should not be empty — the retreat should NOT
252
+ // hollow out the entire head window through consecutive tool_use messages
253
+ assert.ok(messages.length >= 2, `Should have multiple messages, got ${messages.length}`);
254
+ // Validate no orphaned tool_use/tool_result
255
+ for (let i = 0; i < messages.length; i++) {
256
+ const hasToolUse = messages[i].content.some(b => b.type === 'tool_use');
257
+ if (hasToolUse && i + 1 < messages.length) {
258
+ const nextHasToolResult = messages[i + 1].content.some(b => b.type === 'tool_result');
259
+ assert.ok(nextHasToolResult, 'tool_use must be followed by tool_result');
260
+ }
261
+ }
262
+ manager.close();
263
+ });
264
+ });
265
+ describe('KnowledgeStrategy compatibility', () => {
266
+ it('should support head window reset on KnowledgeStrategy', async () => {
267
+ cleanup();
268
+ const strategy = new KnowledgeStrategy({
269
+ headWindowTokens: 200,
270
+ recentWindowTokens: 100,
271
+ });
272
+ const manager = await ContextManager.open({
273
+ path: TEST_STORE_PATH,
274
+ strategy,
275
+ });
276
+ manager.addMessage('user', textBlock('Knowledge topic A'));
277
+ manager.addMessage('assistant', textBlock('Analyzing topic A'));
278
+ const transitionId = manager.addMessage('Context Manager', textBlock('[Topic Transition]\n\nTransitioned to new topic.'));
279
+ strategy.resetHeadWindow(transitionId);
280
+ manager.addMessage('user', textBlock('Knowledge topic B'));
281
+ manager.addMessage('assistant', textBlock('Analyzing topic B'));
282
+ const { messages } = await manager.compile();
283
+ assert.ok(messages.length > 0);
284
+ // First message should be the transition marker, not "Knowledge topic A"
285
+ const firstText = messages[0].content
286
+ .filter((b) => b.type === 'text')
287
+ .map(b => b.text)
288
+ .join('');
289
+ assert.ok(firstText.includes('[Topic Transition]') || firstText.includes('topic B'), `KnowledgeStrategy head should start from transition or topic B, got: ${firstText.slice(0, 80)}`);
290
+ manager.close();
291
+ });
292
+ });
293
+ describe('ContextManager.resetHeadWindow public API', () => {
294
+ it('should inject transition marker and reset strategy', async () => {
295
+ cleanup();
296
+ const strategy = new AutobiographicalStrategy({
297
+ headWindowTokens: 300,
298
+ recentWindowTokens: 100,
299
+ });
300
+ const manager = await ContextManager.open({
301
+ path: TEST_STORE_PATH,
302
+ strategy,
303
+ });
304
+ manager.addMessage('user', textBlock('Old context'));
305
+ manager.addMessage('assistant', textBlock('Old response'));
306
+ // Call public API with explicit text
307
+ const summary = await manager.resetHeadWindow('User switched from old to new topic.');
308
+ assert.strictEqual(summary, 'User switched from old to new topic.');
309
+ manager.addMessage('user', textBlock('New context'));
310
+ const { messages } = await manager.compile();
311
+ // Transition marker should be in the output
312
+ const allText = messages.flatMap(m => m.content.filter((b) => b.type === 'text').map(b => b.text)).join('\n');
313
+ assert.ok(allText.includes('[Topic Transition]'), 'Should contain transition marker');
314
+ assert.ok(allText.includes('New context'), 'Should contain new topic');
315
+ manager.close();
316
+ });
317
+ it('should throw for strategies that do not support reset', async () => {
318
+ cleanup();
319
+ const manager = await ContextManager.open({
320
+ path: TEST_STORE_PATH,
321
+ strategy: new PassthroughStrategy(),
322
+ });
323
+ await assert.rejects(() => manager.resetHeadWindow('test'), { message: /does not support head window reset/ });
324
+ manager.close();
325
+ });
326
+ });
327
+ describe('isResettableStrategy type guard', () => {
328
+ it('should return true for AutobiographicalStrategy', () => {
329
+ const strategy = new AutobiographicalStrategy();
330
+ assert.strictEqual(isResettableStrategy(strategy), true);
331
+ });
332
+ it('should return true for KnowledgeStrategy', () => {
333
+ const strategy = new KnowledgeStrategy();
334
+ assert.strictEqual(isResettableStrategy(strategy), true);
335
+ });
336
+ it('should return false for PassthroughStrategy', () => {
337
+ const strategy = new PassthroughStrategy();
338
+ assert.strictEqual(isResettableStrategy(strategy), false);
339
+ });
340
+ });
341
+ });
342
+ //# sourceMappingURL=head-window-reset.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"head-window-reset.test.js","sourceRoot":"","sources":["../../test/head-window-reset.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.test.d.ts","sourceRoot":"","sources":["../../test/integration.test.ts"],"names":[],"mappings":""}