@strands-agents/sdk 1.5.0 → 1.6.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 (160) hide show
  1. package/dist/src/__fixtures__/agent-helpers.d.ts.map +1 -1
  2. package/dist/src/__fixtures__/agent-helpers.js +3 -0
  3. package/dist/src/__fixtures__/agent-helpers.js.map +1 -1
  4. package/dist/src/agent/__tests__/agent.stateful-model.test.js +2 -2
  5. package/dist/src/agent/__tests__/agent.stateful-model.test.js.map +1 -1
  6. package/dist/src/agent/agent.d.ts +8 -5
  7. package/dist/src/agent/agent.d.ts.map +1 -1
  8. package/dist/src/agent/agent.js +60 -33
  9. package/dist/src/agent/agent.js.map +1 -1
  10. package/dist/src/context-manager/modes/agentic/agentic-context.d.ts +19 -0
  11. package/dist/src/context-manager/modes/agentic/agentic-context.d.ts.map +1 -0
  12. package/dist/src/context-manager/modes/agentic/agentic-context.js +245 -0
  13. package/dist/src/context-manager/modes/agentic/agentic-context.js.map +1 -0
  14. package/dist/src/conversation-manager/__tests__/agentic-context.test.d.ts +2 -0
  15. package/dist/src/conversation-manager/__tests__/agentic-context.test.d.ts.map +1 -0
  16. package/dist/src/conversation-manager/__tests__/agentic-context.test.js +332 -0
  17. package/dist/src/conversation-manager/__tests__/agentic-context.test.js.map +1 -0
  18. package/dist/src/conversation-manager/__tests__/context-compression.test.d.ts +2 -0
  19. package/dist/src/conversation-manager/__tests__/context-compression.test.d.ts.map +1 -0
  20. package/dist/src/conversation-manager/__tests__/context-compression.test.js +176 -0
  21. package/dist/src/conversation-manager/__tests__/context-compression.test.js.map +1 -0
  22. package/dist/src/conversation-manager/__tests__/pin.test.js +1 -1
  23. package/dist/src/conversation-manager/__tests__/pin.test.js.map +1 -1
  24. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js +1 -1
  25. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js.map +1 -1
  26. package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js +1 -1
  27. package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js.map +1 -1
  28. package/dist/src/conversation-manager/__tests__/token-usage-middleware.test.d.ts +2 -0
  29. package/dist/src/conversation-manager/__tests__/token-usage-middleware.test.d.ts.map +1 -0
  30. package/dist/src/conversation-manager/__tests__/token-usage-middleware.test.js +138 -0
  31. package/dist/src/conversation-manager/__tests__/token-usage-middleware.test.js.map +1 -0
  32. package/dist/src/conversation-manager/compression/context-compression.d.ts +39 -0
  33. package/dist/src/conversation-manager/compression/context-compression.d.ts.map +1 -0
  34. package/dist/src/conversation-manager/compression/context-compression.js +150 -0
  35. package/dist/src/conversation-manager/compression/context-compression.js.map +1 -0
  36. package/dist/src/conversation-manager/{pin-message.d.ts → compression/pin-message.d.ts} +1 -1
  37. package/dist/src/conversation-manager/compression/pin-message.d.ts.map +1 -0
  38. package/dist/src/conversation-manager/{pin-message.js → compression/pin-message.js} +1 -1
  39. package/dist/src/conversation-manager/compression/pin-message.js.map +1 -0
  40. package/dist/src/conversation-manager/conversation-manager.d.ts +2 -0
  41. package/dist/src/conversation-manager/conversation-manager.d.ts.map +1 -1
  42. package/dist/src/conversation-manager/conversation-manager.js +2 -2
  43. package/dist/src/conversation-manager/conversation-manager.js.map +1 -1
  44. package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts.map +1 -1
  45. package/dist/src/conversation-manager/sliding-window-conversation-manager.js +4 -35
  46. package/dist/src/conversation-manager/sliding-window-conversation-manager.js.map +1 -1
  47. package/dist/src/conversation-manager/summarizing-conversation-manager.d.ts +0 -19
  48. package/dist/src/conversation-manager/summarizing-conversation-manager.d.ts.map +1 -1
  49. package/dist/src/conversation-manager/summarizing-conversation-manager.js +4 -107
  50. package/dist/src/conversation-manager/summarizing-conversation-manager.js.map +1 -1
  51. package/dist/src/index.d.ts +3 -3
  52. package/dist/src/index.d.ts.map +1 -1
  53. package/dist/src/index.js +1 -1
  54. package/dist/src/index.js.map +1 -1
  55. package/dist/src/injection/__tests__/message-injection.test.d.ts +2 -0
  56. package/dist/src/injection/__tests__/message-injection.test.d.ts.map +1 -0
  57. package/dist/src/injection/__tests__/message-injection.test.js +200 -0
  58. package/dist/src/injection/__tests__/message-injection.test.js.map +1 -0
  59. package/dist/src/injection/index.d.ts +6 -0
  60. package/dist/src/injection/index.d.ts.map +1 -0
  61. package/dist/src/injection/index.js +2 -0
  62. package/dist/src/injection/index.js.map +1 -0
  63. package/dist/src/injection/message-injection.d.ts +65 -0
  64. package/dist/src/injection/message-injection.d.ts.map +1 -0
  65. package/dist/src/injection/message-injection.js +134 -0
  66. package/dist/src/injection/message-injection.js.map +1 -0
  67. package/dist/src/injection/types.d.ts +63 -0
  68. package/dist/src/injection/types.d.ts.map +1 -0
  69. package/dist/src/injection/types.js +2 -0
  70. package/dist/src/injection/types.js.map +1 -0
  71. package/dist/src/injection/xml.d.ts +27 -0
  72. package/dist/src/injection/xml.d.ts.map +1 -0
  73. package/dist/src/injection/xml.js +31 -0
  74. package/dist/src/injection/xml.js.map +1 -0
  75. package/dist/src/memory/__tests__/memory-manager.test.js +187 -1
  76. package/dist/src/memory/__tests__/memory-manager.test.js.map +1 -1
  77. package/dist/src/memory/index.d.ts +2 -1
  78. package/dist/src/memory/index.d.ts.map +1 -1
  79. package/dist/src/memory/index.js.map +1 -1
  80. package/dist/src/memory/memory-manager.d.ts +49 -2
  81. package/dist/src/memory/memory-manager.d.ts.map +1 -1
  82. package/dist/src/memory/memory-manager.js +124 -2
  83. package/dist/src/memory/memory-manager.js.map +1 -1
  84. package/dist/src/memory/types.d.ts +65 -0
  85. package/dist/src/memory/types.d.ts.map +1 -1
  86. package/dist/src/middleware/__tests__/agent-middleware.test.js +0 -1
  87. package/dist/src/middleware/__tests__/agent-middleware.test.js.map +1 -1
  88. package/dist/src/middleware/__tests__/copy-on-input.test.d.ts +2 -0
  89. package/dist/src/middleware/__tests__/copy-on-input.test.d.ts.map +1 -0
  90. package/dist/src/middleware/__tests__/copy-on-input.test.js +379 -0
  91. package/dist/src/middleware/__tests__/copy-on-input.test.js.map +1 -0
  92. package/dist/src/middleware/stages.d.ts +14 -7
  93. package/dist/src/middleware/stages.d.ts.map +1 -1
  94. package/dist/src/middleware/stages.js +3 -0
  95. package/dist/src/middleware/stages.js.map +1 -1
  96. package/dist/src/sandbox/__tests__/docker.test.node.js +2 -2
  97. package/dist/src/sandbox/__tests__/docker.test.node.js.map +1 -1
  98. package/dist/src/sandbox/__tests__/ssh.test.node.js +2 -2
  99. package/dist/src/sandbox/__tests__/ssh.test.node.js.map +1 -1
  100. package/dist/src/sandbox/base.d.ts +0 -5
  101. package/dist/src/sandbox/base.d.ts.map +1 -1
  102. package/dist/src/sandbox/base.js +0 -5
  103. package/dist/src/sandbox/base.js.map +1 -1
  104. package/dist/src/sandbox/docker.d.ts.map +1 -1
  105. package/dist/src/sandbox/docker.js +2 -0
  106. package/dist/src/sandbox/docker.js.map +1 -1
  107. package/dist/src/sandbox/ssh.d.ts.map +1 -1
  108. package/dist/src/sandbox/ssh.js +2 -0
  109. package/dist/src/sandbox/ssh.js.map +1 -1
  110. package/dist/src/tsconfig.tsbuildinfo +1 -1
  111. package/dist/src/types/messages.d.ts +8 -0
  112. package/dist/src/types/messages.d.ts.map +1 -1
  113. package/dist/src/types/messages.js +13 -1
  114. package/dist/src/types/messages.js.map +1 -1
  115. package/dist/src/vended-interventions/cedar/__tests__/cedar.test.node.d.ts +2 -0
  116. package/dist/src/vended-interventions/cedar/__tests__/cedar.test.node.d.ts.map +1 -0
  117. package/dist/src/vended-interventions/cedar/__tests__/cedar.test.node.js +675 -0
  118. package/dist/src/vended-interventions/cedar/__tests__/cedar.test.node.js.map +1 -0
  119. package/dist/src/vended-interventions/cedar/cedar.d.ts +102 -0
  120. package/dist/src/vended-interventions/cedar/cedar.d.ts.map +1 -0
  121. package/dist/src/vended-interventions/cedar/cedar.js +228 -0
  122. package/dist/src/vended-interventions/cedar/cedar.js.map +1 -0
  123. package/dist/src/vended-interventions/cedar/index.d.ts +3 -0
  124. package/dist/src/vended-interventions/cedar/index.d.ts.map +1 -0
  125. package/dist/src/vended-interventions/cedar/index.js +2 -0
  126. package/dist/src/vended-interventions/cedar/index.js.map +1 -0
  127. package/dist/src/vended-interventions/cedar/schema-generator.d.ts +10 -0
  128. package/dist/src/vended-interventions/cedar/schema-generator.d.ts.map +1 -0
  129. package/dist/src/vended-interventions/cedar/schema-generator.js +33 -0
  130. package/dist/src/vended-interventions/cedar/schema-generator.js.map +1 -0
  131. package/dist/src/vended-plugins/context-injector/__tests__/plugin.test.d.ts +2 -0
  132. package/dist/src/vended-plugins/context-injector/__tests__/plugin.test.d.ts.map +1 -0
  133. package/dist/src/vended-plugins/context-injector/__tests__/plugin.test.js +96 -0
  134. package/dist/src/vended-plugins/context-injector/__tests__/plugin.test.js.map +1 -0
  135. package/dist/src/vended-plugins/context-injector/index.d.ts +25 -0
  136. package/dist/src/vended-plugins/context-injector/index.d.ts.map +1 -0
  137. package/dist/src/vended-plugins/context-injector/index.js +23 -0
  138. package/dist/src/vended-plugins/context-injector/index.js.map +1 -0
  139. package/dist/src/vended-plugins/context-injector/plugin.d.ts +55 -0
  140. package/dist/src/vended-plugins/context-injector/plugin.d.ts.map +1 -0
  141. package/dist/src/vended-plugins/context-injector/plugin.js +41 -0
  142. package/dist/src/vended-plugins/context-injector/plugin.js.map +1 -0
  143. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.js +43 -4
  144. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.js.map +1 -1
  145. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.js +68 -0
  146. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.js.map +1 -1
  147. package/dist/src/vended-plugins/context-offloader/plugin.d.ts.map +1 -1
  148. package/dist/src/vended-plugins/context-offloader/plugin.js +12 -2
  149. package/dist/src/vended-plugins/context-offloader/plugin.js.map +1 -1
  150. package/dist/src/vended-plugins/context-offloader/storage.d.ts +29 -1
  151. package/dist/src/vended-plugins/context-offloader/storage.d.ts.map +1 -1
  152. package/dist/src/vended-plugins/context-offloader/storage.js +61 -3
  153. package/dist/src/vended-plugins/context-offloader/storage.js.map +1 -1
  154. package/dist/src/vended-plugins/index.d.ts +2 -1
  155. package/dist/src/vended-plugins/index.d.ts.map +1 -1
  156. package/dist/src/vended-plugins/index.js +2 -1
  157. package/dist/src/vended-plugins/index.js.map +1 -1
  158. package/package.json +19 -1
  159. package/dist/src/conversation-manager/pin-message.d.ts.map +0 -1
  160. package/dist/src/conversation-manager/pin-message.js.map +0 -1
@@ -0,0 +1,332 @@
1
+ import { describe, it, expect, vi } from 'vitest';
2
+ import { summarizeContextTool, truncateContextTool, pinContextTool, } from '../../context-manager/modes/agentic/agentic-context.js';
3
+ import { pinMessage } from '../compression/pin-message.js';
4
+ import { Message, TextBlock, ToolUseBlock, ToolResultBlock } from '../../types/messages.js';
5
+ function textMsg(role, text) {
6
+ return new Message({ role, content: [new TextBlock(text)] });
7
+ }
8
+ function makeMessages(count) {
9
+ return Array.from({ length: count }, (_, i) => textMsg(i % 2 === 0 ? 'user' : 'assistant', `Message ${i + 1}`));
10
+ }
11
+ function mockModel(summaryText = 'Summary of older messages') {
12
+ const message = new Message({ role: 'assistant', content: [new TextBlock(summaryText)] });
13
+ return {
14
+ streamAggregated: vi.fn(() => ({
15
+ next: vi
16
+ .fn()
17
+ .mockResolvedValueOnce({ done: false, value: undefined })
18
+ .mockResolvedValueOnce({ done: true, value: { message } }),
19
+ [Symbol.asyncIterator]: vi.fn(),
20
+ })),
21
+ };
22
+ }
23
+ function makeContext(messages, model) {
24
+ return { agent: { messages, model: model ?? {} } };
25
+ }
26
+ describe('summarizeContextTool', () => {
27
+ it('returns message when not enough messages to summarize', async () => {
28
+ const messages = makeMessages(4);
29
+ const result = await summarizeContextTool.invoke({ keepRecent: 10 }, makeContext(messages));
30
+ expect(result).toContain('No summarization performed');
31
+ expect(result).toContain('not enough eligible messages');
32
+ expect(messages).toHaveLength(4);
33
+ });
34
+ it('summarizes eligible messages and splices the array', async () => {
35
+ const model = mockModel('Summary');
36
+ const messages = makeMessages(20);
37
+ const result = await summarizeContextTool.invoke({ keepRecent: 10, summaryRatio: 0.5 }, makeContext(messages, model));
38
+ expect(result).toContain('Summarized');
39
+ expect(result).toContain('message(s)');
40
+ expect(messages.length).toBeLessThan(20);
41
+ expect(messages[0].role).toBe('user');
42
+ });
43
+ it('preserves pinned messages during summarization', async () => {
44
+ const model = mockModel('Summary');
45
+ const messages = makeMessages(20);
46
+ pinMessage(messages, 1);
47
+ const pinnedText = messages[1].content[0].text;
48
+ await summarizeContextTool.invoke({ keepRecent: 6, summaryRatio: 0.5 }, makeContext(messages, model));
49
+ const texts = messages.map((m) => m.content[0].text);
50
+ expect(texts).toContain(pinnedText);
51
+ });
52
+ it('respects messageType filter', async () => {
53
+ const model = mockModel('Summary');
54
+ const messages = [
55
+ new Message({ role: 'assistant', content: [new ToolUseBlock({ toolUseId: 'id-1', name: 'tool1', input: {} })] }),
56
+ new Message({
57
+ role: 'user',
58
+ content: [new ToolResultBlock({ toolUseId: 'id-1', status: 'success', content: [new TextBlock('Result')] })],
59
+ }),
60
+ ...makeMessages(14),
61
+ ];
62
+ const result = await summarizeContextTool.invoke({ keepRecent: 10, summaryRatio: 0.3, messageType: 'messages' }, makeContext(messages, model));
63
+ expect(result).toContain('"messages"');
64
+ });
65
+ it('returns message when no eligible messages in range after filtering', async () => {
66
+ const messages = [
67
+ new Message({ role: 'assistant', content: [new ToolUseBlock({ toolUseId: 'id-1', name: 't', input: {} })] }),
68
+ new Message({
69
+ role: 'user',
70
+ content: [new ToolResultBlock({ toolUseId: 'id-1', status: 'success', content: [new TextBlock('R')] })],
71
+ }),
72
+ new Message({ role: 'assistant', content: [new ToolUseBlock({ toolUseId: 'id-2', name: 't', input: {} })] }),
73
+ new Message({
74
+ role: 'user',
75
+ content: [new ToolResultBlock({ toolUseId: 'id-2', status: 'success', content: [new TextBlock('R')] })],
76
+ }),
77
+ ...makeMessages(12),
78
+ ];
79
+ const result = await summarizeContextTool.invoke({ keepRecent: 12, summaryRatio: 0.3, messageType: 'messages' }, makeContext(messages, mockModel()));
80
+ expect(result).toContain('No summarization performed');
81
+ });
82
+ it('preserves pinned toolUse when its toolResult is in the eligible set', async () => {
83
+ const model = mockModel('Summary');
84
+ const messages = [
85
+ new Message({ role: 'assistant', content: [new ToolUseBlock({ toolUseId: 'id-1', name: 'tool1', input: {} })] }),
86
+ new Message({
87
+ role: 'user',
88
+ content: [
89
+ new ToolResultBlock({ toolUseId: 'id-1', status: 'success', content: [new TextBlock('Important result')] }),
90
+ ],
91
+ }),
92
+ ...makeMessages(14),
93
+ ];
94
+ pinMessage(messages, 0);
95
+ await summarizeContextTool.invoke({ keepRecent: 10, summaryRatio: 0.3 }, makeContext(messages, model));
96
+ const hasToolUse = messages.some((m) => m.content.some((b) => b.type === 'toolUseBlock') && m.metadata?.custom?.pinned);
97
+ expect(hasToolUse).toBe(true);
98
+ });
99
+ it('preserves message order after summarization with pinned assistant message', async () => {
100
+ const model = mockModel('Summary');
101
+ const messages = [textMsg('user', 'First'), textMsg('assistant', 'Pinned response'), ...makeMessages(18)];
102
+ pinMessage(messages, 1);
103
+ await summarizeContextTool.invoke({ keepRecent: 10, summaryRatio: 0.3 }, makeContext(messages, model));
104
+ expect(messages[0].role).toBe('user');
105
+ });
106
+ it('returns failure message when model throws', async () => {
107
+ const model = {
108
+ streamAggregated: vi.fn(() => ({
109
+ next: vi.fn().mockRejectedValueOnce(new Error('model error')),
110
+ [Symbol.asyncIterator]: vi.fn(),
111
+ })),
112
+ };
113
+ const messages = makeMessages(20);
114
+ const result = await summarizeContextTool.invoke({ keepRecent: 5, summaryRatio: 0.5 }, makeContext(messages, model));
115
+ expect(result).toContain('Summarization failed');
116
+ });
117
+ });
118
+ describe('truncateContextTool', () => {
119
+ it('does not drop messages when keepRecent exceeds conversation length', async () => {
120
+ const messages = makeMessages(6);
121
+ const result = await truncateContextTool.invoke({ keepRecent: 10 }, makeContext(messages));
122
+ expect(result).toContain('No messages dropped');
123
+ expect(messages).toHaveLength(6);
124
+ });
125
+ it('preserves message order when pinned assistant message exists', async () => {
126
+ const messages = [textMsg('user', 'First'), textMsg('assistant', 'Response'), ...makeMessages(18)];
127
+ pinMessage(messages, 1);
128
+ await truncateContextTool.invoke({ keepRecent: 5 }, makeContext(messages));
129
+ expect(messages[0].role).toBe('user');
130
+ });
131
+ it('returns message when conversation is too short', async () => {
132
+ const messages = makeMessages(2);
133
+ const result = await truncateContextTool.invoke({}, makeContext(messages));
134
+ expect(result).toContain('No messages dropped');
135
+ expect(result).toContain('only has 2 messages');
136
+ expect(messages).toHaveLength(2);
137
+ });
138
+ it('drops oldest messages respecting window', async () => {
139
+ const messages = makeMessages(20);
140
+ const result = await truncateContextTool.invoke({ keepRecent: 5 }, makeContext(messages));
141
+ expect(result).toContain('Dropped');
142
+ expect(result).toContain('remaining');
143
+ expect(messages.length).toBeLessThan(20);
144
+ expect(messages.length).toBeGreaterThanOrEqual(4);
145
+ const lastMsg = messages[messages.length - 1];
146
+ expect(lastMsg.content[0].text).toBe('Message 20');
147
+ });
148
+ it('preserves pinned messages during truncation', async () => {
149
+ const messages = makeMessages(20);
150
+ pinMessage(messages, 0);
151
+ pinMessage(messages, 1);
152
+ const pinnedText0 = messages[0].content[0].text;
153
+ const pinnedText1 = messages[1].content[0].text;
154
+ await truncateContextTool.invoke({ keepRecent: 5 }, makeContext(messages));
155
+ const remainingTexts = messages.map((m) => m.content[0].text);
156
+ expect(remainingTexts).toContain(pinnedText0);
157
+ expect(remainingTexts).toContain(pinnedText1);
158
+ });
159
+ it('respects messageType filter', async () => {
160
+ const messages = [
161
+ textMsg('user', 'Hello'),
162
+ textMsg('assistant', 'Hi'),
163
+ new Message({ role: 'assistant', content: [new ToolUseBlock({ toolUseId: 'id-1', name: 't', input: {} })] }),
164
+ new Message({
165
+ role: 'user',
166
+ content: [new ToolResultBlock({ toolUseId: 'id-1', status: 'success', content: [new TextBlock('R')] })],
167
+ }),
168
+ ...makeMessages(10),
169
+ ];
170
+ const result = await truncateContextTool.invoke({ keepRecent: 5, messageType: 'messages' }, makeContext(messages));
171
+ expect(result).toContain('"messages"');
172
+ });
173
+ it('returns message when no valid trim point found', async () => {
174
+ const messages = Array.from({ length: 6 }, (_, i) => new Message({
175
+ role: 'user',
176
+ content: [new ToolResultBlock({ toolUseId: `id-${i}`, status: 'success', content: [new TextBlock('R')] })],
177
+ }));
178
+ const result = await truncateContextTool.invoke({ keepRecent: 2 }, makeContext(messages));
179
+ expect(result).toContain('No messages dropped');
180
+ expect(result).toContain('no valid trim boundary');
181
+ });
182
+ });
183
+ describe('pinContextTool', () => {
184
+ describe('select: last_turn', () => {
185
+ it('pins the entire current turn', async () => {
186
+ const messages = [
187
+ textMsg('user', 'First question'),
188
+ textMsg('assistant', 'First answer'),
189
+ textMsg('user', 'Second question'),
190
+ textMsg('assistant', 'Second answer'),
191
+ ];
192
+ const result = await pinContextTool.invoke({ select: 'last_turn', action: 'pin' }, makeContext(messages));
193
+ expect(result).toContain('Pinned');
194
+ expect(result).toContain('2 message(s)');
195
+ expect(messages[2].metadata?.custom?.pinned).toBe(true);
196
+ expect(messages[3].metadata?.custom?.pinned).toBe(true);
197
+ expect(messages[0].metadata?.custom?.pinned).toBeUndefined();
198
+ });
199
+ it('includes tool calls in the current turn', async () => {
200
+ const messages = [
201
+ textMsg('user', 'Old question'),
202
+ textMsg('assistant', 'Old answer'),
203
+ textMsg('user', 'Check weather'),
204
+ new Message({
205
+ role: 'assistant',
206
+ content: [new ToolUseBlock({ toolUseId: 'id-1', name: 'weather', input: {} })],
207
+ }),
208
+ new Message({
209
+ role: 'user',
210
+ content: [new ToolResultBlock({ toolUseId: 'id-1', status: 'success', content: [new TextBlock('Sunny')] })],
211
+ }),
212
+ textMsg('assistant', 'It is sunny'),
213
+ ];
214
+ const result = await pinContextTool.invoke({ select: 'last_turn', action: 'pin' }, makeContext(messages));
215
+ expect(result).toContain('4 message(s)');
216
+ expect(messages[2].metadata?.custom?.pinned).toBe(true);
217
+ expect(messages[3].metadata?.custom?.pinned).toBe(true);
218
+ expect(messages[4].metadata?.custom?.pinned).toBe(true);
219
+ expect(messages[5].metadata?.custom?.pinned).toBe(true);
220
+ expect(messages[0].metadata?.custom?.pinned).toBeUndefined();
221
+ });
222
+ it('pins with filter on last_turn', async () => {
223
+ const messages = [
224
+ textMsg('user', 'Old'),
225
+ textMsg('assistant', 'Old'),
226
+ textMsg('user', 'New question'),
227
+ textMsg('assistant', 'New answer'),
228
+ ];
229
+ const result = await pinContextTool.invoke({ select: 'last_turn', filter: 'user', action: 'pin' }, makeContext(messages));
230
+ expect(result).toContain('1 message(s)');
231
+ expect(messages[2].metadata?.custom?.pinned).toBe(true);
232
+ expect(messages[3].metadata?.custom?.pinned).toBeUndefined();
233
+ });
234
+ });
235
+ describe('select: number (last N)', () => {
236
+ it('pins the last N messages', async () => {
237
+ const messages = makeMessages(6);
238
+ const result = await pinContextTool.invoke({ select: 3, action: 'pin' }, makeContext(messages));
239
+ expect(result).toContain('Pinned');
240
+ expect(result).toContain('3 message(s)');
241
+ expect(messages[3].metadata?.custom?.pinned).toBe(true);
242
+ expect(messages[4].metadata?.custom?.pinned).toBe(true);
243
+ expect(messages[5].metadata?.custom?.pinned).toBe(true);
244
+ expect(messages[0].metadata?.custom?.pinned).toBeUndefined();
245
+ });
246
+ it('clamps to conversation length', async () => {
247
+ const messages = makeMessages(3);
248
+ const result = await pinContextTool.invoke({ select: 100, action: 'pin' }, makeContext(messages));
249
+ expect(result).toContain('3 message(s)');
250
+ });
251
+ it('filters by role within last N', async () => {
252
+ const messages = makeMessages(6);
253
+ const result = await pinContextTool.invoke({ select: 6, filter: 'user', action: 'pin' }, makeContext(messages));
254
+ expect(result).toContain('3 message(s)');
255
+ expect(messages[0].metadata?.custom?.pinned).toBe(true);
256
+ expect(messages[2].metadata?.custom?.pinned).toBe(true);
257
+ expect(messages[4].metadata?.custom?.pinned).toBe(true);
258
+ expect(messages[1].metadata?.custom?.pinned).toBeUndefined();
259
+ });
260
+ });
261
+ describe('select: indices', () => {
262
+ it('pins messages at specific indices', async () => {
263
+ const messages = makeMessages(6);
264
+ const result = await pinContextTool.invoke({ select: [0, 2, 4], action: 'pin' }, makeContext(messages));
265
+ expect(result).toContain('Pinned');
266
+ expect(result).toContain('3 message(s)');
267
+ expect(messages[0].metadata?.custom?.pinned).toBe(true);
268
+ expect(messages[1].metadata?.custom?.pinned).toBeUndefined();
269
+ expect(messages[2].metadata?.custom?.pinned).toBe(true);
270
+ expect(messages[4].metadata?.custom?.pinned).toBe(true);
271
+ });
272
+ it('returns error when all indices out of range', async () => {
273
+ const messages = makeMessages(3);
274
+ const result = await pinContextTool.invoke({ select: [10, 20, 30], action: 'pin' }, makeContext(messages));
275
+ expect(result).toContain('All indices out of range');
276
+ expect(result).toContain('3 messages');
277
+ });
278
+ it('filters out-of-range indices but pins valid ones', async () => {
279
+ const messages = makeMessages(4);
280
+ const result = await pinContextTool.invoke({ select: [1, 99], action: 'pin' }, makeContext(messages));
281
+ expect(result).toContain('Pinned');
282
+ expect(result).toContain('1 message(s)');
283
+ expect(messages[1].metadata?.custom?.pinned).toBe(true);
284
+ });
285
+ });
286
+ describe('filter: tools', () => {
287
+ it('pins only tool use and tool result messages', async () => {
288
+ const messages = [
289
+ textMsg('user', 'Do something'),
290
+ new Message({ role: 'assistant', content: [new ToolUseBlock({ toolUseId: 'id-1', name: 't', input: {} })] }),
291
+ new Message({
292
+ role: 'user',
293
+ content: [new ToolResultBlock({ toolUseId: 'id-1', status: 'success', content: [new TextBlock('Result')] })],
294
+ }),
295
+ textMsg('assistant', 'Done'),
296
+ ];
297
+ const result = await pinContextTool.invoke({ select: 4, filter: 'tools', action: 'pin' }, makeContext(messages));
298
+ expect(result).toContain('2 message(s)');
299
+ expect(messages[1].metadata?.custom?.pinned).toBe(true);
300
+ expect(messages[2].metadata?.custom?.pinned).toBe(true);
301
+ expect(messages[0].metadata?.custom?.pinned).toBeUndefined();
302
+ expect(messages[3].metadata?.custom?.pinned).toBeUndefined();
303
+ });
304
+ });
305
+ describe('unpin action', () => {
306
+ it('removes pin from previously pinned messages', async () => {
307
+ const messages = makeMessages(4);
308
+ pinMessage(messages, 1);
309
+ pinMessage(messages, 2);
310
+ const result = await pinContextTool.invoke({ select: [1, 2], action: 'unpin' }, makeContext(messages));
311
+ expect(result).toContain('Unpinned');
312
+ expect(result).toContain('2 message(s)');
313
+ expect(messages[1].metadata?.custom?.pinned).toBeUndefined();
314
+ expect(messages[2].metadata?.custom?.pinned).toBeUndefined();
315
+ });
316
+ it('unpins last N messages', async () => {
317
+ const messages = makeMessages(4);
318
+ pinMessage(messages, 2);
319
+ pinMessage(messages, 3);
320
+ await pinContextTool.invoke({ select: 2, action: 'unpin' }, makeContext(messages));
321
+ expect(messages[2].metadata?.custom?.pinned).toBeUndefined();
322
+ expect(messages[3].metadata?.custom?.pinned).toBeUndefined();
323
+ });
324
+ });
325
+ describe('empty conversation', () => {
326
+ it('returns appropriate message', async () => {
327
+ const result = await pinContextTool.invoke({ select: 'last_turn', action: 'pin' }, makeContext([]));
328
+ expect(result).toBe('No messages in the conversation.');
329
+ });
330
+ });
331
+ });
332
+ //# sourceMappingURL=agentic-context.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentic-context.test.js","sourceRoot":"","sources":["../../../../src/conversation-manager/__tests__/agentic-context.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=context-compression.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-compression.test.d.ts","sourceRoot":"","sources":["../../../../src/conversation-manager/__tests__/context-compression.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,176 @@
1
+ import { describe, it, expect, vi } from 'vitest';
2
+ import { adjustSplitPointForToolPairs, findValidTrimPoint, generateSummary, matchesMessageType, DEFAULT_SUMMARIZATION_PROMPT, } from '../compression/context-compression.js';
3
+ import { pinMessage, partitionPinned } from '../compression/pin-message.js';
4
+ import { Message, TextBlock, ToolUseBlock, ToolResultBlock } from '../../types/messages.js';
5
+ function textMsg(role, text) {
6
+ return new Message({ role, content: [new TextBlock(text)] });
7
+ }
8
+ function toolUseMsg(toolUseId, name = 'test') {
9
+ return new Message({
10
+ role: 'assistant',
11
+ content: [new ToolUseBlock({ toolUseId, name, input: {} })],
12
+ });
13
+ }
14
+ function toolResultMsg(toolUseId, text = 'result') {
15
+ return new Message({
16
+ role: 'user',
17
+ content: [new ToolResultBlock({ toolUseId, status: 'success', content: [new TextBlock(text)] })],
18
+ });
19
+ }
20
+ describe('adjustSplitPointForToolPairs', () => {
21
+ it('returns split point when message is plain text', () => {
22
+ const messages = [textMsg('user', 'hello'), textMsg('assistant', 'hi'), textMsg('user', 'bye')];
23
+ expect(adjustSplitPointForToolPairs(messages, 0)).toBe(0);
24
+ });
25
+ it('skips toolResult messages', () => {
26
+ const messages = [toolResultMsg('id-1'), textMsg('user', 'hello')];
27
+ expect(adjustSplitPointForToolPairs(messages, 0)).toBe(1);
28
+ });
29
+ it('skips toolUse without following toolResult', () => {
30
+ const messages = [toolUseMsg('id-1'), textMsg('assistant', 'no result'), textMsg('user', 'hello')];
31
+ expect(adjustSplitPointForToolPairs(messages, 0)).toBe(1);
32
+ });
33
+ it('accepts toolUse when followed by toolResult', () => {
34
+ const messages = [toolUseMsg('id-1'), toolResultMsg('id-1'), textMsg('user', 'hello')];
35
+ expect(adjustSplitPointForToolPairs(messages, 0)).toBe(0);
36
+ });
37
+ it('skips multiple consecutive toolResults', () => {
38
+ const messages = [toolResultMsg('id-1'), toolResultMsg('id-2'), textMsg('user', 'hello')];
39
+ expect(adjustSplitPointForToolPairs(messages, 0)).toBe(2);
40
+ });
41
+ it('throws when no valid split point exists', () => {
42
+ const messages = [toolResultMsg('id-1'), toolResultMsg('id-2')];
43
+ expect(() => adjustSplitPointForToolPairs(messages, 0)).toThrow('Unable to find valid split point');
44
+ });
45
+ it('returns splitPoint as-is when it equals messages.length', () => {
46
+ const messages = [textMsg('user', 'hello'), textMsg('assistant', 'hi')];
47
+ expect(adjustSplitPointForToolPairs(messages, 2)).toBe(2);
48
+ });
49
+ it('returns splitPoint as-is when it exceeds messages.length', () => {
50
+ const messages = [textMsg('user', 'hello')];
51
+ expect(adjustSplitPointForToolPairs(messages, 5)).toBe(5);
52
+ });
53
+ });
54
+ describe('findValidTrimPoint', () => {
55
+ it('finds plain user message', () => {
56
+ const messages = [textMsg('user', 'hello'), textMsg('assistant', 'hi')];
57
+ expect(findValidTrimPoint(messages, 0)).toBe(0);
58
+ });
59
+ it('skips non-user messages', () => {
60
+ const messages = [textMsg('assistant', 'hi'), textMsg('user', 'hello')];
61
+ expect(findValidTrimPoint(messages, 0)).toBe(1);
62
+ });
63
+ it('skips toolResult user messages', () => {
64
+ const messages = [toolResultMsg('id-1'), textMsg('user', 'hello')];
65
+ expect(findValidTrimPoint(messages, 0)).toBe(1);
66
+ });
67
+ it('returns messages.length when no valid point found', () => {
68
+ const messages = [textMsg('assistant', 'hi'), toolResultMsg('id-1')];
69
+ expect(findValidTrimPoint(messages, 0)).toBe(messages.length);
70
+ });
71
+ it('respects startIndex', () => {
72
+ const messages = [textMsg('user', 'skip'), textMsg('assistant', 'hi'), textMsg('user', 'find')];
73
+ expect(findValidTrimPoint(messages, 1)).toBe(2);
74
+ });
75
+ it('returns 0 for empty messages', () => {
76
+ expect(findValidTrimPoint([], 0)).toBe(0);
77
+ });
78
+ });
79
+ describe('matchesMessageType', () => {
80
+ it('"all" always matches', () => {
81
+ expect(matchesMessageType(textMsg('user', 'hello'), 'all')).toBe(true);
82
+ expect(matchesMessageType(toolUseMsg('id-1'), 'all')).toBe(true);
83
+ expect(matchesMessageType(toolResultMsg('id-1'), 'all')).toBe(true);
84
+ });
85
+ it('"tools" matches tool messages', () => {
86
+ expect(matchesMessageType(toolUseMsg('id-1'), 'tools')).toBe(true);
87
+ expect(matchesMessageType(toolResultMsg('id-1'), 'tools')).toBe(true);
88
+ });
89
+ it('"tools" does not match plain text', () => {
90
+ expect(matchesMessageType(textMsg('user', 'hello'), 'tools')).toBe(false);
91
+ expect(matchesMessageType(textMsg('assistant', 'hi'), 'tools')).toBe(false);
92
+ });
93
+ it('"messages" matches plain text', () => {
94
+ expect(matchesMessageType(textMsg('user', 'hello'), 'messages')).toBe(true);
95
+ expect(matchesMessageType(textMsg('assistant', 'hi'), 'messages')).toBe(true);
96
+ });
97
+ it('"messages" does not match tool messages', () => {
98
+ expect(matchesMessageType(toolUseMsg('id-1'), 'messages')).toBe(false);
99
+ expect(matchesMessageType(toolResultMsg('id-1'), 'messages')).toBe(false);
100
+ });
101
+ });
102
+ describe('partitionPinned', () => {
103
+ it('separates pinned and unpinned messages', () => {
104
+ const messages = [textMsg('user', 'a'), textMsg('assistant', 'b'), textMsg('user', 'c')];
105
+ pinMessage(messages, 1);
106
+ const [pinned, unpinned] = partitionPinned(messages, 0, 3);
107
+ expect(pinned).toHaveLength(1);
108
+ expect(unpinned).toHaveLength(2);
109
+ });
110
+ it('respects rangeEnd', () => {
111
+ const messages = [textMsg('user', 'a'), textMsg('assistant', 'b'), textMsg('user', 'c')];
112
+ pinMessage(messages, 0);
113
+ pinMessage(messages, 2);
114
+ const [pinned, unpinned] = partitionPinned(messages, 0, 2);
115
+ expect(pinned).toHaveLength(1);
116
+ expect(unpinned).toHaveLength(1);
117
+ });
118
+ });
119
+ describe('generateSummary', () => {
120
+ function mockModel(summaryText) {
121
+ const message = new Message({ role: 'assistant', content: [new TextBlock(summaryText)] });
122
+ return {
123
+ streamAggregated: vi.fn(() => ({
124
+ next: vi
125
+ .fn()
126
+ .mockResolvedValueOnce({ done: false, value: undefined })
127
+ .mockResolvedValueOnce({ done: true, value: { message } }),
128
+ [Symbol.asyncIterator]: vi.fn(),
129
+ })),
130
+ };
131
+ }
132
+ it('returns a user-role message', async () => {
133
+ const model = mockModel('Summary of conversation');
134
+ const messages = [textMsg('user', 'hello'), textMsg('assistant', 'hi')];
135
+ const result = await generateSummary(messages, model);
136
+ expect(result.role).toBe('user');
137
+ });
138
+ it('passes the default system prompt', async () => {
139
+ const model = mockModel('Summary');
140
+ await generateSummary([textMsg('user', 'hello')], model);
141
+ expect(model.streamAggregated).toHaveBeenCalledWith(expect.any(Array), {
142
+ systemPrompt: DEFAULT_SUMMARIZATION_PROMPT,
143
+ });
144
+ });
145
+ it('passes a custom system prompt', async () => {
146
+ const model = mockModel('Summary');
147
+ await generateSummary([textMsg('user', 'hello')], model, 'Custom prompt');
148
+ expect(model.streamAggregated).toHaveBeenCalledWith(expect.any(Array), {
149
+ systemPrompt: 'Custom prompt',
150
+ });
151
+ });
152
+ it('appends summarization request message', async () => {
153
+ const model = mockModel('Summary');
154
+ const original = [textMsg('user', 'hello'), textMsg('assistant', 'hi')];
155
+ await generateSummary(original, model);
156
+ const passedMessages = model.streamAggregated.mock.calls[0][0];
157
+ expect(passedMessages).toHaveLength(3);
158
+ expect(passedMessages[2].content[0].text).toContain('summarize');
159
+ });
160
+ it('does not mutate original messages', async () => {
161
+ const model = mockModel('Summary');
162
+ const original = [textMsg('user', 'hello'), textMsg('assistant', 'hi')];
163
+ await generateSummary(original, model);
164
+ expect(original).toHaveLength(2);
165
+ });
166
+ it('throws if model returns no response', async () => {
167
+ const model = {
168
+ streamAggregated: vi.fn(() => ({
169
+ next: vi.fn().mockResolvedValueOnce({ done: true, value: undefined }),
170
+ [Symbol.asyncIterator]: vi.fn(),
171
+ })),
172
+ };
173
+ await expect(generateSummary([textMsg('user', 'hello')], model)).rejects.toThrow('Failed to generate summary');
174
+ });
175
+ });
176
+ //# sourceMappingURL=context-compression.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-compression.test.js","sourceRoot":"","sources":["../../../../src/conversation-manager/__tests__/context-compression.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { describe, it, expect } from 'vitest';
2
- import { pinMessage, unpinMessage, isPinned } from '../pin-message.js';
2
+ import { pinMessage, unpinMessage, isPinned } from '../compression/pin-message.js';
3
3
  import { Message, TextBlock, ToolUseBlock, ToolResultBlock } from '../../types/messages.js';
4
4
  function makeMessage(text, metadata) {
5
5
  return new Message({
@@ -1 +1 @@
1
- {"version":3,"file":"pin.test.js","sourceRoot":"","sources":["../../../../src/conversation-manager/__tests__/pin.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pin.test.js","sourceRoot":"","sources":["../../../../src/conversation-manager/__tests__/pin.test.ts"],"names":[],"mappings":"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"}
@@ -1059,7 +1059,7 @@ describe('SlidingWindowConversationManager', () => {
1059
1059
  expect(result).toBe(false);
1060
1060
  });
1061
1061
  it('pinned message in middle of window survives trimming', async () => {
1062
- const { pinMessage } = await import('../pin-message.js');
1062
+ const { pinMessage } = await import('../compression/pin-message.js');
1063
1063
  const messages = [
1064
1064
  new Message({ role: 'user', content: [new TextBlock('first')] }),
1065
1065
  new Message({ role: 'assistant', content: [new TextBlock('second')] }),