@strands-agents/sdk 1.12.0 → 1.14.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 (214) hide show
  1. package/dist/src/agent/agent-as-tool.d.ts.map +1 -1
  2. package/dist/src/agent/agent-as-tool.js +8 -2
  3. package/dist/src/agent/agent-as-tool.js.map +1 -1
  4. package/dist/src/agent/agent.d.ts +27 -7
  5. package/dist/src/agent/agent.d.ts.map +1 -1
  6. package/dist/src/agent/agent.js +141 -38
  7. package/dist/src/agent/agent.js.map +1 -1
  8. package/dist/src/agent/continuation.d.ts +36 -0
  9. package/dist/src/agent/continuation.d.ts.map +1 -0
  10. package/dist/src/agent/continuation.js +126 -0
  11. package/dist/src/agent/continuation.js.map +1 -0
  12. package/dist/src/agent/tool-caller.d.ts.map +1 -1
  13. package/dist/src/agent/tool-caller.js +1 -0
  14. package/dist/src/agent/tool-caller.js.map +1 -1
  15. package/dist/src/context-manager/context-manager.d.ts +30 -0
  16. package/dist/src/context-manager/context-manager.d.ts.map +1 -0
  17. package/dist/src/context-manager/context-manager.js +89 -0
  18. package/dist/src/context-manager/context-manager.js.map +1 -0
  19. package/dist/src/context-manager/methods/summarize.d.ts +41 -0
  20. package/dist/src/context-manager/methods/summarize.d.ts.map +1 -0
  21. package/dist/src/context-manager/methods/summarize.js +108 -0
  22. package/dist/src/context-manager/methods/summarize.js.map +1 -0
  23. package/dist/src/context-manager/methods/truncate.d.ts +36 -0
  24. package/dist/src/context-manager/methods/truncate.d.ts.map +1 -0
  25. package/dist/src/context-manager/methods/truncate.js +86 -0
  26. package/dist/src/context-manager/methods/truncate.js.map +1 -0
  27. package/dist/src/context-manager/modes/agentic/agentic-context.d.ts +1 -2
  28. package/dist/src/context-manager/modes/agentic/agentic-context.d.ts.map +1 -1
  29. package/dist/src/context-manager/modes/agentic/agentic-context.js +6 -3
  30. package/dist/src/context-manager/modes/agentic/agentic-context.js.map +1 -1
  31. package/dist/src/context-manager/strategies/offload/base.d.ts +140 -0
  32. package/dist/src/context-manager/strategies/offload/base.d.ts.map +1 -0
  33. package/dist/src/context-manager/strategies/offload/base.js +376 -0
  34. package/dist/src/context-manager/strategies/offload/base.js.map +1 -0
  35. package/dist/src/context-manager/strategies/offload/drop.d.ts +19 -0
  36. package/dist/src/context-manager/strategies/offload/drop.d.ts.map +1 -0
  37. package/dist/src/context-manager/strategies/offload/drop.js +31 -0
  38. package/dist/src/context-manager/strategies/offload/drop.js.map +1 -0
  39. package/dist/src/context-manager/strategies/offload/index.d.ts +43 -0
  40. package/dist/src/context-manager/strategies/offload/index.d.ts.map +1 -0
  41. package/dist/src/context-manager/strategies/offload/index.js +37 -0
  42. package/dist/src/context-manager/strategies/offload/index.js.map +1 -0
  43. package/dist/src/context-manager/strategies/offload/summarize.d.ts +22 -0
  44. package/dist/src/context-manager/strategies/offload/summarize.d.ts.map +1 -0
  45. package/dist/src/context-manager/strategies/offload/summarize.js +104 -0
  46. package/dist/src/context-manager/strategies/offload/summarize.js.map +1 -0
  47. package/dist/src/context-manager/strategies/offload/truncate.d.ts +21 -0
  48. package/dist/src/context-manager/strategies/offload/truncate.d.ts.map +1 -0
  49. package/dist/src/context-manager/strategies/offload/truncate.js +66 -0
  50. package/dist/src/context-manager/strategies/offload/truncate.js.map +1 -0
  51. package/dist/src/context-manager/types.d.ts +50 -0
  52. package/dist/src/context-manager/types.d.ts.map +1 -0
  53. package/dist/src/context-manager/types.js +5 -0
  54. package/dist/src/context-manager/types.js.map +1 -0
  55. package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts +25 -0
  56. package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts.map +1 -1
  57. package/dist/src/conversation-manager/sliding-window-conversation-manager.js +90 -2
  58. package/dist/src/conversation-manager/sliding-window-conversation-manager.js.map +1 -1
  59. package/dist/src/index.d.ts +2 -2
  60. package/dist/src/index.d.ts.map +1 -1
  61. package/dist/src/index.js +1 -1
  62. package/dist/src/index.js.map +1 -1
  63. package/dist/src/injection/message-injection.d.ts +12 -9
  64. package/dist/src/injection/message-injection.d.ts.map +1 -1
  65. package/dist/src/injection/message-injection.js +17 -16
  66. package/dist/src/injection/message-injection.js.map +1 -1
  67. package/dist/src/mcp/client.d.ts.map +1 -1
  68. package/dist/src/mcp/client.js +9 -0
  69. package/dist/src/mcp/client.js.map +1 -1
  70. package/dist/src/middleware/stages.d.ts +15 -2
  71. package/dist/src/middleware/stages.d.ts.map +1 -1
  72. package/dist/src/middleware/stages.js.map +1 -1
  73. package/dist/src/mime.d.ts +1 -0
  74. package/dist/src/mime.d.ts.map +1 -1
  75. package/dist/src/mime.js.map +1 -1
  76. package/dist/src/models/anthropic.d.ts +26 -1
  77. package/dist/src/models/anthropic.d.ts.map +1 -1
  78. package/dist/src/models/anthropic.js +178 -54
  79. package/dist/src/models/anthropic.js.map +1 -1
  80. package/dist/src/models/bedrock.d.ts +51 -19
  81. package/dist/src/models/bedrock.d.ts.map +1 -1
  82. package/dist/src/models/bedrock.js +239 -30
  83. package/dist/src/models/bedrock.js.map +1 -1
  84. package/dist/src/models/model.d.ts +73 -5
  85. package/dist/src/models/model.d.ts.map +1 -1
  86. package/dist/src/models/model.js +15 -0
  87. package/dist/src/models/model.js.map +1 -1
  88. package/dist/src/models/openai/model.d.ts.map +1 -1
  89. package/dist/src/models/openai/model.js +5 -0
  90. package/dist/src/models/openai/model.js.map +1 -1
  91. package/dist/src/multiagent/plugins.d.ts +3 -1
  92. package/dist/src/multiagent/plugins.d.ts.map +1 -1
  93. package/dist/src/multiagent/plugins.js +6 -1
  94. package/dist/src/multiagent/plugins.js.map +1 -1
  95. package/dist/src/plugins/registry.d.ts +3 -1
  96. package/dist/src/plugins/registry.d.ts.map +1 -1
  97. package/dist/src/plugins/registry.js +6 -1
  98. package/dist/src/plugins/registry.js.map +1 -1
  99. package/dist/src/sandbox/docker.js +1 -1
  100. package/dist/src/sandbox/docker.js.map +1 -1
  101. package/dist/src/sandbox/ssh.js +1 -1
  102. package/dist/src/sandbox/ssh.js.map +1 -1
  103. package/dist/src/storage/in-memory-storage.d.ts +8 -1
  104. package/dist/src/storage/in-memory-storage.d.ts.map +1 -1
  105. package/dist/src/storage/in-memory-storage.js +10 -0
  106. package/dist/src/storage/in-memory-storage.js.map +1 -1
  107. package/dist/src/storage/local-file-storage.d.ts +8 -1
  108. package/dist/src/storage/local-file-storage.d.ts.map +1 -1
  109. package/dist/src/storage/local-file-storage.js +10 -0
  110. package/dist/src/storage/local-file-storage.js.map +1 -1
  111. package/dist/src/storage/s3-storage.d.ts +8 -1
  112. package/dist/src/storage/s3-storage.d.ts.map +1 -1
  113. package/dist/src/storage/s3-storage.js +10 -0
  114. package/dist/src/storage/s3-storage.js.map +1 -1
  115. package/dist/src/storage/search/index.d.ts +13 -0
  116. package/dist/src/storage/search/index.d.ts.map +1 -0
  117. package/dist/src/storage/search/index.js +11 -0
  118. package/dist/src/storage/search/index.js.map +1 -0
  119. package/dist/src/storage/search/keyword.d.ts +23 -0
  120. package/dist/src/storage/search/keyword.d.ts.map +1 -0
  121. package/dist/src/storage/search/keyword.js +53 -0
  122. package/dist/src/storage/search/keyword.js.map +1 -0
  123. package/dist/src/storage/search/types.d.ts +24 -0
  124. package/dist/src/storage/search/types.d.ts.map +1 -0
  125. package/dist/src/storage/search/types.js +2 -0
  126. package/dist/src/storage/search/types.js.map +1 -0
  127. package/dist/src/storage/storage.d.ts +46 -1
  128. package/dist/src/storage/storage.d.ts.map +1 -1
  129. package/dist/src/storage/storage.js +22 -0
  130. package/dist/src/storage/storage.js.map +1 -1
  131. package/dist/src/tools/executors/executor.d.ts +2 -0
  132. package/dist/src/tools/executors/executor.d.ts.map +1 -1
  133. package/dist/src/tools/executors/executor.js +6 -4
  134. package/dist/src/tools/executors/executor.js.map +1 -1
  135. package/dist/src/tools/executors/sequential.d.ts +1 -1
  136. package/dist/src/tools/executors/sequential.js +2 -2
  137. package/dist/src/tools/executors/sequential.js.map +1 -1
  138. package/dist/src/tools/mcp-tool.d.ts +2 -1
  139. package/dist/src/tools/mcp-tool.d.ts.map +1 -1
  140. package/dist/src/tools/mcp-tool.js +2 -1
  141. package/dist/src/tools/mcp-tool.js.map +1 -1
  142. package/dist/src/tools/tool.d.ts +2 -0
  143. package/dist/src/tools/tool.d.ts.map +1 -1
  144. package/dist/src/tools/tool.js.map +1 -1
  145. package/dist/src/tools/types.d.ts +8 -0
  146. package/dist/src/tools/types.d.ts.map +1 -1
  147. package/dist/src/tsconfig.tsbuildinfo +1 -1
  148. package/dist/src/types/agent.d.ts +2 -2
  149. package/dist/src/types/media.d.ts +65 -3
  150. package/dist/src/types/media.d.ts.map +1 -1
  151. package/dist/src/types/media.js +68 -1
  152. package/dist/src/types/media.js.map +1 -1
  153. package/dist/src/types/messages.d.ts +6 -4
  154. package/dist/src/types/messages.d.ts.map +1 -1
  155. package/dist/src/types/messages.js +4 -1
  156. package/dist/src/types/messages.js.map +1 -1
  157. package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.d.ts +11 -0
  158. package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.d.ts.map +1 -1
  159. package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.js +53 -3
  160. package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.js.map +1 -1
  161. package/dist/src/vended-memory-stores/file-memory-store/index.d.ts +3 -0
  162. package/dist/src/vended-memory-stores/file-memory-store/index.d.ts.map +1 -0
  163. package/dist/src/vended-memory-stores/file-memory-store/index.js +2 -0
  164. package/dist/src/vended-memory-stores/file-memory-store/index.js.map +1 -0
  165. package/dist/src/vended-memory-stores/file-memory-store/store.d.ts +82 -0
  166. package/dist/src/vended-memory-stores/file-memory-store/store.d.ts.map +1 -0
  167. package/dist/src/vended-memory-stores/file-memory-store/store.js +219 -0
  168. package/dist/src/vended-memory-stores/file-memory-store/store.js.map +1 -0
  169. package/dist/src/vended-memory-stores/test-memory-store/store.d.ts.map +1 -1
  170. package/dist/src/vended-memory-stores/test-memory-store/store.js +2 -25
  171. package/dist/src/vended-memory-stores/test-memory-store/store.js.map +1 -1
  172. package/dist/src/vended-plugins/context-offloader/plugin.d.ts.map +1 -1
  173. package/dist/src/vended-plugins/context-offloader/plugin.js +2 -8
  174. package/dist/src/vended-plugins/context-offloader/plugin.js.map +1 -1
  175. package/dist/src/vended-tools/bash/index.d.ts +13 -7
  176. package/dist/src/vended-tools/bash/index.d.ts.map +1 -1
  177. package/dist/src/vended-tools/bash/index.js +13 -6
  178. package/dist/src/vended-tools/bash/index.js.map +1 -1
  179. package/dist/src/vended-tools/bash/types.d.ts +4 -24
  180. package/dist/src/vended-tools/bash/types.d.ts.map +1 -1
  181. package/dist/src/vended-tools/bash/types.js +4 -31
  182. package/dist/src/vended-tools/bash/types.js.map +1 -1
  183. package/dist/src/vended-tools/http-request/http-request.d.ts +1 -1
  184. package/dist/src/vended-tools/http-request/http-request.js +2 -2
  185. package/dist/src/vended-tools/http-request/http-request.js.map +1 -1
  186. package/dist/src/vended-tools/index.d.ts +1 -0
  187. package/dist/src/vended-tools/index.d.ts.map +1 -1
  188. package/dist/src/vended-tools/index.js +1 -0
  189. package/dist/src/vended-tools/index.js.map +1 -1
  190. package/dist/src/vended-tools/notebook/notebook.d.ts +1 -1
  191. package/dist/src/vended-tools/notebook/notebook.d.ts.map +1 -1
  192. package/dist/src/vended-tools/notebook/notebook.js +20 -6
  193. package/dist/src/vended-tools/notebook/notebook.js.map +1 -1
  194. package/dist/src/vended-tools/notebook/types.d.ts +15 -1
  195. package/dist/src/vended-tools/notebook/types.d.ts.map +1 -1
  196. package/dist/src/vended-tools/shell/index.d.ts +15 -0
  197. package/dist/src/vended-tools/shell/index.d.ts.map +1 -0
  198. package/dist/src/vended-tools/shell/index.js +13 -0
  199. package/dist/src/vended-tools/shell/index.js.map +1 -0
  200. package/dist/src/vended-tools/{bash → shell}/make-shell.d.ts +7 -8
  201. package/dist/src/vended-tools/shell/make-shell.d.ts.map +1 -0
  202. package/dist/src/vended-tools/{bash → shell}/make-shell.js +16 -9
  203. package/dist/src/vended-tools/shell/make-shell.js.map +1 -0
  204. package/dist/src/vended-tools/shell/types.d.ts +47 -0
  205. package/dist/src/vended-tools/shell/types.d.ts.map +1 -0
  206. package/dist/src/vended-tools/shell/types.js +34 -0
  207. package/dist/src/vended-tools/shell/types.js.map +1 -0
  208. package/dist/src/vended-tools/sleep/make-sleep.d.ts +4 -6
  209. package/dist/src/vended-tools/sleep/make-sleep.d.ts.map +1 -1
  210. package/dist/src/vended-tools/sleep/make-sleep.js +5 -7
  211. package/dist/src/vended-tools/sleep/make-sleep.js.map +1 -1
  212. package/package.json +15 -2
  213. package/dist/src/vended-tools/bash/make-shell.d.ts.map +0 -1
  214. package/dist/src/vended-tools/bash/make-shell.js.map +0 -1
@@ -0,0 +1,376 @@
1
+ /**
2
+ * Base offload strategy and shared infrastructure.
3
+ *
4
+ * @internal
5
+ */
6
+ import { logger } from '../../../logging/logger.js';
7
+ import { MessageAddedEvent } from '../../../hooks/events.js';
8
+ import { Message, TextBlock, ToolResultBlock, ToolUseBlock } from '../../../types/messages.js';
9
+ // --- Shared helpers ---
10
+ function finiteOrUndefined(value) {
11
+ return typeof value === 'number' && Number.isFinite(value) ? Math.max(0, value) : undefined;
12
+ }
13
+ /**
14
+ * Builds a toolUseId → toolName map from all assistant messages in the conversation.
15
+ * Called once per apply() to avoid O(messages × toolResults) scanning.
16
+ */
17
+ export function buildToolNameMap(messages) {
18
+ const map = new Map();
19
+ for (const message of messages) {
20
+ if (message.role !== 'assistant')
21
+ continue;
22
+ for (const block of message.content) {
23
+ if (block instanceof ToolUseBlock) {
24
+ map.set(block.toolUseId, block.name);
25
+ }
26
+ }
27
+ }
28
+ return map;
29
+ }
30
+ export function toolMatchesTarget(block, target, toolNameMap, toolIncludeFilter, toolExcludeFilter) {
31
+ if (target === '*')
32
+ return true;
33
+ if (target === 'toolResults')
34
+ return block.status === 'success';
35
+ if (target === 'toolResultErrors')
36
+ return block.status === 'error';
37
+ const toolName = toolNameMap.get(block.toolUseId);
38
+ if (!toolName)
39
+ return false;
40
+ if (toolExcludeFilter)
41
+ return !toolExcludeFilter.has(toolName);
42
+ if (toolIncludeFilter)
43
+ return toolIncludeFilter.has(toolName);
44
+ return false;
45
+ }
46
+ export function targetMatchesMessage(target, message) {
47
+ if (target === undefined || target === '*')
48
+ return true;
49
+ if (target === 'assistantText')
50
+ return message.role === 'assistant' && message.content.some((b) => b instanceof TextBlock);
51
+ if (target === 'userText')
52
+ return message.role === 'user' && message.content.some((b) => b instanceof TextBlock);
53
+ return false;
54
+ }
55
+ export function messageMatchesTarget(message, target, toolNameMap, toolIncludeFilter, toolExcludeFilter) {
56
+ if (targetMatchesMessage(target, message))
57
+ return true;
58
+ if (!target)
59
+ return false;
60
+ // Tool result targets — must be a user message with a matching tool result
61
+ if (message.role !== 'user')
62
+ return false;
63
+ for (const block of message.content) {
64
+ if (block instanceof ToolResultBlock) {
65
+ if (toolMatchesTarget(block, target, toolNameMap, toolIncludeFilter, toolExcludeFilter))
66
+ return true;
67
+ }
68
+ }
69
+ return false;
70
+ }
71
+ /**
72
+ * Returns target-matching messages excluding the N most recent matches.
73
+ * First filters to only messages that match the target, then removes the last N from that set.
74
+ */
75
+ export function getOldestMatches(messages, target, count, toolNameMap, toolIncludeFilter, toolExcludeFilter) {
76
+ const matching = messages.filter((message) => messageMatchesTarget(message, target, toolNameMap, toolIncludeFilter, toolExcludeFilter));
77
+ if (count >= matching.length)
78
+ return [];
79
+ return matching.slice(0, -count);
80
+ }
81
+ /**
82
+ * Collects a message and its paired partner (if any) for safe removal.
83
+ * If removing a message would orphan a tool-use/tool-result pair, includes the partner
84
+ * so the pair is removed together. Skips messages[0] (head-pin).
85
+ */
86
+ export function collectRemovableWithPair(messages, index) {
87
+ const message = messages[index];
88
+ if (!message)
89
+ return [];
90
+ if (index === 0)
91
+ return [];
92
+ const result = [message];
93
+ const hasToolResult = message.content.some((block) => block instanceof ToolResultBlock);
94
+ if (hasToolResult) {
95
+ const prev = messages[index - 1];
96
+ if (prev && prev.content.some((block) => block instanceof ToolUseBlock)) {
97
+ if (index - 1 > 0)
98
+ result.push(prev);
99
+ else
100
+ return [];
101
+ }
102
+ }
103
+ const hasToolUse = message.content.some((block) => block instanceof ToolUseBlock);
104
+ if (hasToolUse && index < messages.length - 1) {
105
+ const next = messages[index + 1];
106
+ if (next && next.content.some((block) => block instanceof ToolResultBlock)) {
107
+ result.push(next);
108
+ }
109
+ }
110
+ return result;
111
+ }
112
+ /**
113
+ * Collects removable messages (with their tool pairs), then splices them from the array.
114
+ * Returns the number of messages removed and the lowest index that was removed.
115
+ */
116
+ export function spliceWithPairs(messages, toRemove) {
117
+ const toSplice = new Set();
118
+ for (const message of toRemove) {
119
+ const index = messages.indexOf(message);
120
+ if (index === -1)
121
+ continue;
122
+ for (const removable of collectRemovableWithPair(messages, index)) {
123
+ toSplice.add(removable);
124
+ }
125
+ }
126
+ let removed = 0;
127
+ let lowestIndex = messages.length;
128
+ for (const message of toSplice) {
129
+ const index = messages.indexOf(message);
130
+ if (index === -1)
131
+ continue;
132
+ if (index < lowestIndex)
133
+ lowestIndex = index;
134
+ messages.splice(index, 1);
135
+ removed++;
136
+ }
137
+ return { removed, lowestIndex };
138
+ }
139
+ /**
140
+ * Merges consecutive same-role messages to restore the user/assistant alternation
141
+ * that Anthropic/Bedrock APIs require. Called after message-level operations that
142
+ * may leave gaps. Constructs new Message objects for merges to avoid mutating
143
+ * objects that may be referenced elsewhere (session storage, event payloads).
144
+ */
145
+ export function repairAlternation(messages) {
146
+ let writeIndex = 0;
147
+ for (let readIndex = 0; readIndex < messages.length; readIndex++) {
148
+ const current = messages[readIndex];
149
+ if (writeIndex > 0 && messages[writeIndex - 1].role === current.role) {
150
+ const prev = messages[writeIndex - 1];
151
+ messages[writeIndex - 1] = new Message({
152
+ role: prev.role,
153
+ content: [...prev.content, ...current.content],
154
+ });
155
+ }
156
+ else {
157
+ messages[writeIndex] = current;
158
+ writeIndex++;
159
+ }
160
+ }
161
+ messages.length = writeIndex;
162
+ }
163
+ /**
164
+ * Parses a string[] target into include/exclude filter sets.
165
+ * Entries must be prefixed with `tool::` (e.g. `'tool::bash'`).
166
+ * An additional `!` prefix excludes (e.g. `'!tool::bash'`).
167
+ */
168
+ export function resolveToolFilter(target) {
169
+ if (!Array.isArray(target))
170
+ return {};
171
+ const TOOL_PREFIX = 'tool::';
172
+ const includes = [];
173
+ const excludes = [];
174
+ for (const entry of target) {
175
+ if (entry.startsWith('!')) {
176
+ const name = entry.slice(1);
177
+ excludes.push(name.startsWith(TOOL_PREFIX) ? name.slice(TOOL_PREFIX.length) : name);
178
+ }
179
+ else {
180
+ includes.push(entry.startsWith(TOOL_PREFIX) ? entry.slice(TOOL_PREFIX.length) : entry);
181
+ }
182
+ }
183
+ if (excludes.length > 0 && includes.length > 0) {
184
+ logger.warn('tool filter contains both includes and excludes, excludes will be ignored');
185
+ return { include: new Set(includes) };
186
+ }
187
+ if (excludes.length > 0) {
188
+ return { exclude: new Set(excludes) };
189
+ }
190
+ if (includes.length > 0) {
191
+ return { include: new Set(includes) };
192
+ }
193
+ return {};
194
+ }
195
+ // --- Base strategy class ---
196
+ /** Shared offload logic: target routing, eager hooks, preserveRecent. */
197
+ export class BaseOffloadStrategy {
198
+ _target;
199
+ _threshold;
200
+ _utilizationThreshold;
201
+ _preserveRecent;
202
+ _removalRatio = 0.3;
203
+ _includeFilter;
204
+ _excludeFilter;
205
+ constructor(target, conditions) {
206
+ if (Array.isArray(target) && target.length === 0) {
207
+ throw new Error('Empty array target matches nothing — provide at least one target');
208
+ }
209
+ this._target = target;
210
+ this._threshold = finiteOrUndefined(conditions?.threshold);
211
+ this._utilizationThreshold = finiteOrUndefined(conditions?.utilization);
212
+ this._preserveRecent = Math.floor(finiteOrUndefined(conditions?.preserveRecent) ?? 0);
213
+ const resolved = resolveToolFilter(target);
214
+ this._includeFilter = resolved.include;
215
+ this._excludeFilter = resolved.exclude;
216
+ }
217
+ /** Whether this strategy operates at message-level (batch) vs per-block. */
218
+ get _isMessageLevel() {
219
+ return this._utilizationThreshold !== undefined;
220
+ }
221
+ init(agent) {
222
+ if (this._isMessageLevel)
223
+ return;
224
+ if (this._preserveRecent > 0)
225
+ return;
226
+ agent.addHook(MessageAddedEvent, async (event) => {
227
+ const messages = event.agent.messages;
228
+ const toolNameMap = buildToolNameMap(messages);
229
+ await this._transformBlocks(event.message, messages, toolNameMap, event.agent);
230
+ });
231
+ }
232
+ async apply(context) {
233
+ if (this._isMessageLevel) {
234
+ if (context.utilization < this._utilizationThreshold)
235
+ return false;
236
+ return this._applyPerMessage(context);
237
+ }
238
+ return this._applyPerBlock(context);
239
+ }
240
+ /** Per-block execution: walk each message, transform individual blocks above threshold. */
241
+ async _applyPerBlock(context) {
242
+ const { messages, agent } = context;
243
+ const toolNameMap = buildToolNameMap(messages);
244
+ const eligible = this._preserveRecent > 0
245
+ ? getOldestMatches(messages, this._target, this._preserveRecent, toolNameMap, this._includeFilter, this._excludeFilter)
246
+ : messages;
247
+ let acted = false;
248
+ for (const message of eligible) {
249
+ if (await this._transformBlocks(message, messages, toolNameMap, agent)) {
250
+ acted = true;
251
+ }
252
+ }
253
+ return acted;
254
+ }
255
+ /** Message-level execution: remove oldest 30% of eligible messages with pair safety. */
256
+ async _applyPerMessage(context) {
257
+ const { messages } = context;
258
+ if (messages.length <= 1)
259
+ return false;
260
+ const eligible = await this._getEligibleMessages(context);
261
+ if (eligible.length === 0)
262
+ return false;
263
+ const targetRemoval = Math.max(1, Math.floor(eligible.length * this._removalRatio));
264
+ const toRemove = eligible.slice(0, targetRemoval);
265
+ const { removed, lowestIndex } = spliceWithPairs(messages, toRemove);
266
+ if (removed === 0)
267
+ return false;
268
+ const marker = this._makeRemovalMarker(removed);
269
+ if (marker) {
270
+ const insertIndex = Math.max(1, Math.min(lowestIndex, messages.length));
271
+ messages.splice(insertIndex, 0, new Message({ role: 'user', content: [new TextBlock(marker)] }));
272
+ }
273
+ repairAlternation(messages);
274
+ return true;
275
+ }
276
+ /** Override to insert a marker when messages are removed. Return null for no marker. */
277
+ _makeRemovalMarker(_count) {
278
+ return null;
279
+ }
280
+ /** Whether a block is eligible for offload given the current target and filters. */
281
+ _blockMatchesTarget(block, message, toolNameMap) {
282
+ if (block instanceof TextBlock)
283
+ return targetMatchesMessage(this._target, message);
284
+ if (block instanceof ToolResultBlock) {
285
+ return (this._target === undefined ||
286
+ toolMatchesTarget(block, this._target, toolNameMap, this._includeFilter, this._excludeFilter));
287
+ }
288
+ return false;
289
+ }
290
+ /** Process eligible blocks in a message. */
291
+ async _transformBlocks(message, messages, toolNameMap, agent) {
292
+ const effectiveThreshold = this._threshold ?? 0;
293
+ let acted = false;
294
+ for (let blockIndex = 0; blockIndex < message.content.length; blockIndex++) {
295
+ const block = message.content[blockIndex];
296
+ if (!this._blockMatchesTarget(block, message, toolNameMap))
297
+ continue;
298
+ const tokens = await agent.model.countTokens([new Message({ role: message.role, content: [block] })]);
299
+ if (tokens <= effectiveThreshold)
300
+ continue;
301
+ const replacement = await this._replaceBlock(block, tokens, message, agent);
302
+ if (replacement && replacement !== block) {
303
+ // Intentional in-place mutation: per-block replacement shrinks existing message content
304
+ // rather than constructing a new Message (unlike message-level removal which uses new objects).
305
+ ;
306
+ message.content[blockIndex] = replacement;
307
+ acted = true;
308
+ }
309
+ }
310
+ return acted;
311
+ }
312
+ /** Collect eligible messages for message-level operations, respecting preserveRecent, head-pin, and threshold. */
313
+ async _getEligibleMessages(context) {
314
+ const { messages, agent } = context;
315
+ const toolNameMap = buildToolNameMap(messages);
316
+ let candidates;
317
+ if (this._preserveRecent > 0) {
318
+ candidates = getOldestMatches(messages, this._target, this._preserveRecent, toolNameMap, this._includeFilter, this._excludeFilter).filter((message) => messages.indexOf(message) > 0);
319
+ }
320
+ else {
321
+ candidates = messages.filter((message, index) => index > 0 &&
322
+ messageMatchesTarget(message, this._target, toolNameMap, this._includeFilter, this._excludeFilter));
323
+ }
324
+ if (this._threshold === undefined)
325
+ return candidates;
326
+ const eligible = [];
327
+ for (const message of candidates) {
328
+ let hasOversize = false;
329
+ for (const block of message.content) {
330
+ if (!this._blockMatchesTarget(block, message, toolNameMap))
331
+ continue;
332
+ const tokens = await agent.model.countTokens([new Message({ role: message.role, content: [block] })]);
333
+ if (tokens > this._threshold) {
334
+ hasOversize = true;
335
+ break;
336
+ }
337
+ }
338
+ if (hasOversize)
339
+ eligible.push(message);
340
+ }
341
+ return eligible;
342
+ }
343
+ }
344
+ // --- Emergency truncation strategy ---
345
+ /**
346
+ * Last-resort strategy that recomputes utilization and drops the oldest 20% of messages
347
+ * when the context window is still overflowing after all user-configured strategies have run.
348
+ * Appended internally by ContextManager — not part of the public builder API.
349
+ *
350
+ * TODO: add a ContextManagerConfig flag to disable this for users who want full control.
351
+ *
352
+ * @internal
353
+ */
354
+ export class EmergencyTruncateStrategy extends BaseOffloadStrategy {
355
+ name = 'offload:emergency-truncate';
356
+ _removalRatio = 0.2;
357
+ constructor() {
358
+ super('*');
359
+ }
360
+ init() {
361
+ // No eager hooks — this only fires on overflow
362
+ }
363
+ async apply(context) {
364
+ if (context.messages.length <= 3)
365
+ return false;
366
+ const tokens = await context.agent.model.countTokens(context.messages);
367
+ const utilization = context.agent.model.estimateUtilization(tokens);
368
+ if (utilization < 1.0)
369
+ return false;
370
+ return this._applyPerMessage({ ...context, utilization });
371
+ }
372
+ async _replaceBlock() {
373
+ return null;
374
+ }
375
+ }
376
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../../src/context-manager/strategies/offload/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Drop strategy — removes matching content from the context window entirely.
3
+ *
4
+ * @internal
5
+ */
6
+ import { Message, TextBlock, ToolResultBlock } from '../../../types/messages.js';
7
+ import type { ContentBlock } from '../../../types/messages.js';
8
+ import type { LocalAgent } from '../../../types/agent.js';
9
+ import type { ContextStrategy } from '../../types.js';
10
+ import { BaseOffloadStrategy } from './base.js';
11
+ import type { OffloadConditions } from './base.js';
12
+ export declare const DROPPED_MARKER = "[Dropped]";
13
+ export declare class DropStrategy extends BaseOffloadStrategy {
14
+ readonly name = "offload:drop";
15
+ when(conditions: OffloadConditions): ContextStrategy;
16
+ protected _makeRemovalMarker(count: number): string;
17
+ protected _replaceBlock(block: TextBlock | ToolResultBlock, _tokens: number, message: Message, _agent: LocalAgent): Promise<ContentBlock | null>;
18
+ }
19
+ //# sourceMappingURL=drop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drop.d.ts","sourceRoot":"","sources":["../../../../../src/context-manager/strategies/offload/drop.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAElD,eAAO,MAAM,cAAc,cAAc,CAAA;AAEzC,qBAAa,YAAa,SAAQ,mBAAmB;IACnD,QAAQ,CAAC,IAAI,kBAAiB;IAE9B,IAAI,CAAC,UAAU,EAAE,iBAAiB,GAAG,eAAe;cAIjC,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;cAI5C,aAAa,CAC3B,KAAK,EAAE,SAAS,GAAG,eAAe,EAClC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;CAYhC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Drop strategy — removes matching content from the context window entirely.
3
+ *
4
+ * @internal
5
+ */
6
+ import { logger } from '../../../logging/logger.js';
7
+ import { Message, TextBlock, ToolResultBlock } from '../../../types/messages.js';
8
+ import { BaseOffloadStrategy } from './base.js';
9
+ export const DROPPED_MARKER = '[Dropped]';
10
+ export class DropStrategy extends BaseOffloadStrategy {
11
+ name = 'offload:drop';
12
+ when(conditions) {
13
+ return new DropStrategy(this._target, conditions);
14
+ }
15
+ _makeRemovalMarker(count) {
16
+ return `[Dropped: ${count} ${count === 1 ? 'message' : 'messages'}]`;
17
+ }
18
+ async _replaceBlock(block, _tokens, message, _agent) {
19
+ if (block instanceof ToolResultBlock) {
20
+ logger.debug(`toolUseId=<${block.toolUseId}> | dropped tool result from context window`);
21
+ return new ToolResultBlock({
22
+ toolUseId: block.toolUseId,
23
+ status: block.status,
24
+ content: [new TextBlock(DROPPED_MARKER)],
25
+ });
26
+ }
27
+ logger.debug(`trackingId=<${message.trackingId}> | dropped text block from context window`);
28
+ return new TextBlock(DROPPED_MARKER);
29
+ }
30
+ }
31
+ //# sourceMappingURL=drop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drop.js","sourceRoot":"","sources":["../../../../../src/context-manager/strategies/offload/drop.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAIhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAG/C,MAAM,CAAC,MAAM,cAAc,GAAG,WAAW,CAAA;AAEzC,MAAM,OAAO,YAAa,SAAQ,mBAAmB;IAC1C,IAAI,GAAG,cAAc,CAAA;IAE9B,IAAI,CAAC,UAA6B;QAChC,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;IACnD,CAAC;IAEkB,kBAAkB,CAAC,KAAa;QACjD,OAAO,aAAa,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,GAAG,CAAA;IACtE,CAAC;IAES,KAAK,CAAC,aAAa,CAC3B,KAAkC,EAClC,OAAe,EACf,OAAgB,EAChB,MAAkB;QAElB,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,cAAc,KAAK,CAAC,SAAS,6CAA6C,CAAC,CAAA;YACxF,OAAO,IAAI,eAAe,CAAC;gBACzB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,OAAO,EAAE,CAAC,IAAI,SAAS,CAAC,cAAc,CAAC,CAAC;aACzC,CAAC,CAAA;QACJ,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,eAAe,OAAO,CAAC,UAAU,4CAA4C,CAAC,CAAA;QAC3F,OAAO,IAAI,SAAS,CAAC,cAAc,CAAC,CAAA;IACtC,CAAC;CACF"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Offload strategies — reduce content in the context window.
3
+ *
4
+ * @internal
5
+ */
6
+ import type { TruncateConfig } from '../../methods/truncate.js';
7
+ import type { SummarizeConfig } from '../../methods/summarize.js';
8
+ import type { OffloadStrategyBuilder, OffloadTarget } from './base.js';
9
+ export { EmergencyTruncateStrategy } from './base.js';
10
+ export { DROPPED_MARKER } from './drop.js';
11
+ export type { OffloadTarget, OffloadConditions, OffloadStrategyBuilder } from './base.js';
12
+ /**
13
+ * Offload strategy builder namespace.
14
+ *
15
+ * - `Offload.drop(target)` — drop matching content from context window entirely
16
+ * - `Offload.truncate(target, config)` — replace with a preview
17
+ * - `Offload.summarize(target, config)` — replace with LLM-generated summary
18
+ */
19
+ interface OffloadNamespace {
20
+ /** Drop matching content from context window entirely. */
21
+ drop(target: OffloadTarget): OffloadStrategyBuilder;
22
+ /** Replace oversized content with a preview. */
23
+ truncate(target: OffloadTarget, config?: TruncateConfig): OffloadStrategyBuilder;
24
+ /** Replace oversized content with an LLM-generated summary. */
25
+ summarize(target: OffloadTarget, config?: SummarizeConfig): OffloadStrategyBuilder;
26
+ }
27
+ /**
28
+ * Builder for offload strategies — reduces content in the context window.
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * // Per-block: truncate each result over 2500 tokens, eagerly
33
+ * Offload.truncate("toolResults", { previewTokens: 750 }).when({ threshold: 1500 })
34
+ * // Per-block: truncate specific tools
35
+ * Offload.truncate(["tool::bash", "tool::read_file"]).when({ threshold: 2000 })
36
+ * // Message-level: summarize oldest messages on overflow
37
+ * Offload.summarize("*").when({ utilization: 1, preserveRecent: 4 })
38
+ * // Per-block: drop errors over 500 tokens
39
+ * Offload.drop("toolResultErrors").when({ threshold: 500 })
40
+ * ```
41
+ */
42
+ export declare const Offload: OffloadNamespace;
43
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/context-manager/strategies/offload/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACjE,OAAO,KAAK,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAKtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAEzF;;;;;;GAMG;AACH,UAAU,gBAAgB;IACxB,0DAA0D;IAC1D,IAAI,CAAC,MAAM,EAAE,aAAa,GAAG,sBAAsB,CAAA;IAEnD,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,cAAc,GAAG,sBAAsB,CAAA;IAEhF,+DAA+D;IAC/D,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,sBAAsB,CAAA;CACnF;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,OAAO,EAAE,gBAYrB,CAAA"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Offload strategies — reduce content in the context window.
3
+ *
4
+ * @internal
5
+ */
6
+ import { DropStrategy } from './drop.js';
7
+ import { TruncateStrategy } from './truncate.js';
8
+ import { SummarizeStrategy } from './summarize.js';
9
+ export { EmergencyTruncateStrategy } from './base.js';
10
+ export { DROPPED_MARKER } from './drop.js';
11
+ /**
12
+ * Builder for offload strategies — reduces content in the context window.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * // Per-block: truncate each result over 2500 tokens, eagerly
17
+ * Offload.truncate("toolResults", { previewTokens: 750 }).when({ threshold: 1500 })
18
+ * // Per-block: truncate specific tools
19
+ * Offload.truncate(["tool::bash", "tool::read_file"]).when({ threshold: 2000 })
20
+ * // Message-level: summarize oldest messages on overflow
21
+ * Offload.summarize("*").when({ utilization: 1, preserveRecent: 4 })
22
+ * // Per-block: drop errors over 500 tokens
23
+ * Offload.drop("toolResultErrors").when({ threshold: 500 })
24
+ * ```
25
+ */
26
+ export const Offload = {
27
+ drop(target) {
28
+ return new DropStrategy(target);
29
+ },
30
+ truncate(target, config) {
31
+ return new TruncateStrategy(target, config);
32
+ },
33
+ summarize(target, config) {
34
+ return new SummarizeStrategy(target, config);
35
+ },
36
+ };
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/context-manager/strategies/offload/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAElD,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAqB1C;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,OAAO,GAAqB;IACvC,IAAI,CAAC,MAAqB;QACxB,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,CAAA;IACjC,CAAC;IAED,QAAQ,CAAC,MAAqB,EAAE,MAAuB;QACrD,OAAO,IAAI,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7C,CAAC;IAED,SAAS,CAAC,MAAqB,EAAE,MAAwB;QACvD,OAAO,IAAI,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9C,CAAC;CACF,CAAA"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Summarize strategy — replaces oversized content with LLM-generated summaries.
3
+ *
4
+ * @internal
5
+ */
6
+ import { Message, TextBlock, ToolResultBlock } from '../../../types/messages.js';
7
+ import type { ContentBlock } from '../../../types/messages.js';
8
+ import type { LocalAgent } from '../../../types/agent.js';
9
+ import type { ContextStrategy, ContextState } from '../../types.js';
10
+ import { type SummarizeConfig } from '../../methods/summarize.js';
11
+ import { BaseOffloadStrategy, type OffloadConditions, type OffloadTarget } from './base.js';
12
+ export declare class SummarizeStrategy extends BaseOffloadStrategy {
13
+ readonly name = "offload:summarize";
14
+ private readonly _config;
15
+ constructor(target?: OffloadTarget, config?: SummarizeConfig, conditions?: OffloadConditions);
16
+ when(conditions: OffloadConditions): ContextStrategy;
17
+ apply(context: ContextState): Promise<boolean>;
18
+ protected _applyPerMessage(context: ContextState): Promise<boolean>;
19
+ protected _replaceBlock(block: TextBlock | ToolResultBlock, tokens: number, message: Message, agent: LocalAgent): Promise<ContentBlock | null>;
20
+ private _resolveModel;
21
+ }
22
+ //# sourceMappingURL=summarize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarize.d.ts","sourceRoot":"","sources":["../../../../../src/context-manager/strategies/offload/summarize.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAE9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,mBAAmB,EAGnB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EACnB,MAAM,WAAW,CAAA;AAElB,qBAAa,iBAAkB,SAAQ,mBAAmB;IACxD,QAAQ,CAAC,IAAI,uBAAsB;IAEnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;gBAE7B,MAAM,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE,iBAAiB;IAK5F,IAAI,CAAC,UAAU,EAAE,iBAAiB,GAAG,eAAe;IAIrC,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;cAQpC,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;cAwDlE,aAAa,CAC3B,KAAK,EAAE,SAAS,GAAG,eAAe,EAClC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,UAAU,GAChB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAuB/B,OAAO,CAAC,aAAa;CAGtB"}