@strands-agents/sdk 1.4.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 (435) hide show
  1. package/README.md +11 -11
  2. package/dist/src/__fixtures__/agent-helpers.d.ts.map +1 -1
  3. package/dist/src/__fixtures__/agent-helpers.js +9 -0
  4. package/dist/src/__fixtures__/agent-helpers.js.map +1 -1
  5. package/dist/src/__fixtures__/register-node-defaults.d.ts +2 -0
  6. package/dist/src/__fixtures__/register-node-defaults.d.ts.map +1 -0
  7. package/dist/src/__fixtures__/register-node-defaults.js +6 -0
  8. package/dist/src/__fixtures__/register-node-defaults.js.map +1 -0
  9. package/dist/src/__fixtures__/test-sandbox.node.d.ts.map +1 -1
  10. package/dist/src/__fixtures__/test-sandbox.node.js +4 -3
  11. package/dist/src/__fixtures__/test-sandbox.node.js.map +1 -1
  12. package/dist/src/__tests__/default-slot.test.d.ts +2 -0
  13. package/dist/src/__tests__/default-slot.test.d.ts.map +1 -0
  14. package/dist/src/__tests__/default-slot.test.js +33 -0
  15. package/dist/src/__tests__/default-slot.test.js.map +1 -0
  16. package/dist/src/a2a/__tests__/async-lock.test.d.ts +2 -0
  17. package/dist/src/a2a/__tests__/async-lock.test.d.ts.map +1 -0
  18. package/dist/src/a2a/__tests__/async-lock.test.js +137 -0
  19. package/dist/src/a2a/__tests__/async-lock.test.js.map +1 -0
  20. package/dist/src/a2a/__tests__/executor.test.js +146 -8
  21. package/dist/src/a2a/__tests__/executor.test.js.map +1 -1
  22. package/dist/src/a2a/__tests__/server.test.js +20 -0
  23. package/dist/src/a2a/__tests__/server.test.js.map +1 -1
  24. package/dist/src/a2a/async-lock.d.ts +22 -0
  25. package/dist/src/a2a/async-lock.d.ts.map +1 -0
  26. package/dist/src/a2a/async-lock.js +38 -0
  27. package/dist/src/a2a/async-lock.js.map +1 -0
  28. package/dist/src/a2a/executor.d.ts +59 -24
  29. package/dist/src/a2a/executor.d.ts.map +1 -1
  30. package/dist/src/a2a/executor.js +209 -32
  31. package/dist/src/a2a/executor.js.map +1 -1
  32. package/dist/src/a2a/index.d.ts +1 -1
  33. package/dist/src/a2a/index.d.ts.map +1 -1
  34. package/dist/src/a2a/index.js +1 -1
  35. package/dist/src/a2a/index.js.map +1 -1
  36. package/dist/src/a2a/server.d.ts +18 -2
  37. package/dist/src/a2a/server.d.ts.map +1 -1
  38. package/dist/src/a2a/server.js +13 -2
  39. package/dist/src/a2a/server.js.map +1 -1
  40. package/dist/src/agent/__tests__/agent.context-manager.test.d.ts +2 -0
  41. package/dist/src/agent/__tests__/agent.context-manager.test.d.ts.map +1 -0
  42. package/dist/src/agent/__tests__/agent.context-manager.test.js +107 -0
  43. package/dist/src/agent/__tests__/agent.context-manager.test.js.map +1 -0
  44. package/dist/src/agent/__tests__/agent.stateful-model.test.js +2 -2
  45. package/dist/src/agent/__tests__/agent.stateful-model.test.js.map +1 -1
  46. package/dist/src/agent/__tests__/agent.tracer.test.node.js +14 -0
  47. package/dist/src/agent/__tests__/agent.tracer.test.node.js.map +1 -1
  48. package/dist/src/agent/agent.d.ts +135 -2
  49. package/dist/src/agent/agent.d.ts.map +1 -1
  50. package/dist/src/agent/agent.js +506 -189
  51. package/dist/src/agent/agent.js.map +1 -1
  52. package/dist/src/context-manager/modes/agentic/agentic-context.d.ts +19 -0
  53. package/dist/src/context-manager/modes/agentic/agentic-context.d.ts.map +1 -0
  54. package/dist/src/context-manager/modes/agentic/agentic-context.js +245 -0
  55. package/dist/src/context-manager/modes/agentic/agentic-context.js.map +1 -0
  56. package/dist/src/conversation-manager/__tests__/agentic-context.test.d.ts +2 -0
  57. package/dist/src/conversation-manager/__tests__/agentic-context.test.d.ts.map +1 -0
  58. package/dist/src/conversation-manager/__tests__/agentic-context.test.js +332 -0
  59. package/dist/src/conversation-manager/__tests__/agentic-context.test.js.map +1 -0
  60. package/dist/src/conversation-manager/__tests__/context-compression.test.d.ts +2 -0
  61. package/dist/src/conversation-manager/__tests__/context-compression.test.d.ts.map +1 -0
  62. package/dist/src/conversation-manager/__tests__/context-compression.test.js +176 -0
  63. package/dist/src/conversation-manager/__tests__/context-compression.test.js.map +1 -0
  64. package/dist/src/conversation-manager/__tests__/pin.test.d.ts +2 -0
  65. package/dist/src/conversation-manager/__tests__/pin.test.d.ts.map +1 -0
  66. package/dist/src/conversation-manager/__tests__/pin.test.js +119 -0
  67. package/dist/src/conversation-manager/__tests__/pin.test.js.map +1 -0
  68. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js +49 -0
  69. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js.map +1 -1
  70. package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js +58 -0
  71. package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js.map +1 -1
  72. package/dist/src/conversation-manager/__tests__/token-usage-middleware.test.d.ts +2 -0
  73. package/dist/src/conversation-manager/__tests__/token-usage-middleware.test.d.ts.map +1 -0
  74. package/dist/src/conversation-manager/__tests__/token-usage-middleware.test.js +138 -0
  75. package/dist/src/conversation-manager/__tests__/token-usage-middleware.test.js.map +1 -0
  76. package/dist/src/conversation-manager/compression/context-compression.d.ts +39 -0
  77. package/dist/src/conversation-manager/compression/context-compression.d.ts.map +1 -0
  78. package/dist/src/conversation-manager/compression/context-compression.js +150 -0
  79. package/dist/src/conversation-manager/compression/context-compression.js.map +1 -0
  80. package/dist/src/conversation-manager/compression/pin-message.d.ts +45 -0
  81. package/dist/src/conversation-manager/compression/pin-message.d.ts.map +1 -0
  82. package/dist/src/conversation-manager/compression/pin-message.js +106 -0
  83. package/dist/src/conversation-manager/compression/pin-message.js.map +1 -0
  84. package/dist/src/conversation-manager/conversation-manager.d.ts +2 -0
  85. package/dist/src/conversation-manager/conversation-manager.d.ts.map +1 -1
  86. package/dist/src/conversation-manager/conversation-manager.js +2 -2
  87. package/dist/src/conversation-manager/conversation-manager.js.map +1 -1
  88. package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts +7 -0
  89. package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts.map +1 -1
  90. package/dist/src/conversation-manager/sliding-window-conversation-manager.js +30 -38
  91. package/dist/src/conversation-manager/sliding-window-conversation-manager.js.map +1 -1
  92. package/dist/src/conversation-manager/summarizing-conversation-manager.d.ts +7 -19
  93. package/dist/src/conversation-manager/summarizing-conversation-manager.d.ts.map +1 -1
  94. package/dist/src/conversation-manager/summarizing-conversation-manager.js +20 -109
  95. package/dist/src/conversation-manager/summarizing-conversation-manager.js.map +1 -1
  96. package/dist/src/default-slot.d.ts +6 -0
  97. package/dist/src/default-slot.d.ts.map +1 -0
  98. package/dist/src/default-slot.js +18 -0
  99. package/dist/src/default-slot.js.map +1 -0
  100. package/dist/src/errors.d.ts +8 -0
  101. package/dist/src/errors.d.ts.map +1 -1
  102. package/dist/src/errors.js +11 -0
  103. package/dist/src/errors.js.map +1 -1
  104. package/dist/src/index.d.ts +8 -1
  105. package/dist/src/index.d.ts.map +1 -1
  106. package/dist/src/index.js +7 -1
  107. package/dist/src/index.js.map +1 -1
  108. package/dist/src/index.node.d.ts +2 -0
  109. package/dist/src/index.node.d.ts.map +1 -0
  110. package/dist/src/index.node.js +9 -0
  111. package/dist/src/index.node.js.map +1 -0
  112. package/dist/src/injection/__tests__/message-injection.test.d.ts +2 -0
  113. package/dist/src/injection/__tests__/message-injection.test.d.ts.map +1 -0
  114. package/dist/src/injection/__tests__/message-injection.test.js +200 -0
  115. package/dist/src/injection/__tests__/message-injection.test.js.map +1 -0
  116. package/dist/src/injection/index.d.ts +6 -0
  117. package/dist/src/injection/index.d.ts.map +1 -0
  118. package/dist/src/injection/index.js +2 -0
  119. package/dist/src/injection/index.js.map +1 -0
  120. package/dist/src/injection/message-injection.d.ts +65 -0
  121. package/dist/src/injection/message-injection.d.ts.map +1 -0
  122. package/dist/src/injection/message-injection.js +134 -0
  123. package/dist/src/injection/message-injection.js.map +1 -0
  124. package/dist/src/injection/types.d.ts +63 -0
  125. package/dist/src/injection/types.d.ts.map +1 -0
  126. package/dist/src/injection/types.js +2 -0
  127. package/dist/src/injection/types.js.map +1 -0
  128. package/dist/src/injection/xml.d.ts +27 -0
  129. package/dist/src/injection/xml.d.ts.map +1 -0
  130. package/dist/src/injection/xml.js +31 -0
  131. package/dist/src/injection/xml.js.map +1 -0
  132. package/dist/src/interrupt.d.ts +5 -1
  133. package/dist/src/interrupt.d.ts.map +1 -1
  134. package/dist/src/interrupt.js +6 -0
  135. package/dist/src/interrupt.js.map +1 -1
  136. package/dist/src/memory/__tests__/memory-manager.test.d.ts +2 -0
  137. package/dist/src/memory/__tests__/memory-manager.test.d.ts.map +1 -0
  138. package/dist/src/memory/__tests__/memory-manager.test.js +679 -0
  139. package/dist/src/memory/__tests__/memory-manager.test.js.map +1 -0
  140. package/dist/src/memory/extraction/__tests__/extraction.test.d.ts +2 -0
  141. package/dist/src/memory/extraction/__tests__/extraction.test.d.ts.map +1 -0
  142. package/dist/src/memory/extraction/__tests__/extraction.test.js +637 -0
  143. package/dist/src/memory/extraction/__tests__/extraction.test.js.map +1 -0
  144. package/dist/src/memory/extraction/__tests__/model-extractor.test.d.ts +2 -0
  145. package/dist/src/memory/extraction/__tests__/model-extractor.test.d.ts.map +1 -0
  146. package/dist/src/memory/extraction/__tests__/model-extractor.test.js +68 -0
  147. package/dist/src/memory/extraction/__tests__/model-extractor.test.js.map +1 -0
  148. package/dist/src/memory/extraction/__tests__/resolve-extraction-config.test.d.ts +2 -0
  149. package/dist/src/memory/extraction/__tests__/resolve-extraction-config.test.d.ts.map +1 -0
  150. package/dist/src/memory/extraction/__tests__/resolve-extraction-config.test.js +81 -0
  151. package/dist/src/memory/extraction/__tests__/resolve-extraction-config.test.js.map +1 -0
  152. package/dist/src/memory/extraction/coordinator.d.ts +128 -0
  153. package/dist/src/memory/extraction/coordinator.d.ts.map +1 -0
  154. package/dist/src/memory/extraction/coordinator.js +245 -0
  155. package/dist/src/memory/extraction/coordinator.js.map +1 -0
  156. package/dist/src/memory/extraction/model-extractor.d.ts +32 -0
  157. package/dist/src/memory/extraction/model-extractor.d.ts.map +1 -0
  158. package/dist/src/memory/extraction/model-extractor.js +118 -0
  159. package/dist/src/memory/extraction/model-extractor.js.map +1 -0
  160. package/dist/src/memory/extraction/resolve-extraction-config.d.ts +46 -0
  161. package/dist/src/memory/extraction/resolve-extraction-config.d.ts.map +1 -0
  162. package/dist/src/memory/extraction/resolve-extraction-config.js +59 -0
  163. package/dist/src/memory/extraction/resolve-extraction-config.js.map +1 -0
  164. package/dist/src/memory/extraction/triggers.d.ts +41 -0
  165. package/dist/src/memory/extraction/triggers.d.ts.map +1 -0
  166. package/dist/src/memory/extraction/triggers.js +59 -0
  167. package/dist/src/memory/extraction/triggers.js.map +1 -0
  168. package/dist/src/memory/extraction/types.d.ts +133 -0
  169. package/dist/src/memory/extraction/types.d.ts.map +1 -0
  170. package/dist/src/memory/extraction/types.js +19 -0
  171. package/dist/src/memory/extraction/types.js.map +1 -0
  172. package/dist/src/memory/index.d.ts +10 -0
  173. package/dist/src/memory/index.d.ts.map +1 -0
  174. package/dist/src/memory/index.js +5 -0
  175. package/dist/src/memory/index.js.map +1 -0
  176. package/dist/src/memory/memory-manager.d.ts +178 -0
  177. package/dist/src/memory/memory-manager.d.ts.map +1 -0
  178. package/dist/src/memory/memory-manager.js +526 -0
  179. package/dist/src/memory/memory-manager.js.map +1 -0
  180. package/dist/src/memory/types.d.ts +278 -0
  181. package/dist/src/memory/types.d.ts.map +1 -0
  182. package/dist/src/memory/types.js +2 -0
  183. package/dist/src/memory/types.js.map +1 -0
  184. package/dist/src/middleware/__tests__/agent-middleware.test.d.ts +2 -0
  185. package/dist/src/middleware/__tests__/agent-middleware.test.d.ts.map +1 -0
  186. package/dist/src/middleware/__tests__/agent-middleware.test.js +1206 -0
  187. package/dist/src/middleware/__tests__/agent-middleware.test.js.map +1 -0
  188. package/dist/src/middleware/__tests__/copy-on-input.test.d.ts +2 -0
  189. package/dist/src/middleware/__tests__/copy-on-input.test.d.ts.map +1 -0
  190. package/dist/src/middleware/__tests__/copy-on-input.test.js +379 -0
  191. package/dist/src/middleware/__tests__/copy-on-input.test.js.map +1 -0
  192. package/dist/src/middleware/__tests__/custom-stages.test.d.ts +2 -0
  193. package/dist/src/middleware/__tests__/custom-stages.test.d.ts.map +1 -0
  194. package/dist/src/middleware/__tests__/custom-stages.test.js +97 -0
  195. package/dist/src/middleware/__tests__/custom-stages.test.js.map +1 -0
  196. package/dist/src/middleware/__tests__/middleware-interrupts.test.d.ts +2 -0
  197. package/dist/src/middleware/__tests__/middleware-interrupts.test.d.ts.map +1 -0
  198. package/dist/src/middleware/__tests__/middleware-interrupts.test.js +267 -0
  199. package/dist/src/middleware/__tests__/middleware-interrupts.test.js.map +1 -0
  200. package/dist/src/middleware/__tests__/registry.test.d.ts +2 -0
  201. package/dist/src/middleware/__tests__/registry.test.d.ts.map +1 -0
  202. package/dist/src/middleware/__tests__/registry.test.js +525 -0
  203. package/dist/src/middleware/__tests__/registry.test.js.map +1 -0
  204. package/dist/src/middleware/index.d.ts +5 -0
  205. package/dist/src/middleware/index.d.ts.map +1 -0
  206. package/dist/src/middleware/index.js +3 -0
  207. package/dist/src/middleware/index.js.map +1 -0
  208. package/dist/src/middleware/registry.d.ts +58 -0
  209. package/dist/src/middleware/registry.d.ts.map +1 -0
  210. package/dist/src/middleware/registry.js +107 -0
  211. package/dist/src/middleware/registry.js.map +1 -0
  212. package/dist/src/middleware/stages.d.ts +145 -0
  213. package/dist/src/middleware/stages.d.ts.map +1 -0
  214. package/dist/src/middleware/stages.js +34 -0
  215. package/dist/src/middleware/stages.js.map +1 -0
  216. package/dist/src/middleware/types.d.ts +88 -0
  217. package/dist/src/middleware/types.d.ts.map +1 -0
  218. package/dist/src/middleware/types.js +2 -0
  219. package/dist/src/middleware/types.js.map +1 -0
  220. package/dist/src/models/__tests__/anthropic.test.js +16 -1
  221. package/dist/src/models/__tests__/anthropic.test.js.map +1 -1
  222. package/dist/src/models/__tests__/bedrock.test.js +39 -0
  223. package/dist/src/models/__tests__/bedrock.test.js.map +1 -1
  224. package/dist/src/models/__tests__/model.test.js +46 -3
  225. package/dist/src/models/__tests__/model.test.js.map +1 -1
  226. package/dist/src/models/anthropic.js +2 -2
  227. package/dist/src/models/anthropic.js.map +1 -1
  228. package/dist/src/models/bedrock.d.ts.map +1 -1
  229. package/dist/src/models/bedrock.js +12 -5
  230. package/dist/src/models/bedrock.js.map +1 -1
  231. package/dist/src/models/defaults.d.ts.map +1 -1
  232. package/dist/src/models/defaults.js +2 -0
  233. package/dist/src/models/defaults.js.map +1 -1
  234. package/dist/src/models/model.d.ts.map +1 -1
  235. package/dist/src/models/model.js +7 -3
  236. package/dist/src/models/model.js.map +1 -1
  237. package/dist/src/models/openai/__tests__/responses.test.js +8 -14
  238. package/dist/src/models/openai/__tests__/responses.test.js.map +1 -1
  239. package/dist/src/sandbox/__tests__/default.test.browser.d.ts +2 -0
  240. package/dist/src/sandbox/__tests__/default.test.browser.d.ts.map +1 -0
  241. package/dist/src/sandbox/__tests__/default.test.browser.js +11 -0
  242. package/dist/src/sandbox/__tests__/default.test.browser.js.map +1 -0
  243. package/dist/src/sandbox/__tests__/default.test.node.d.ts +2 -0
  244. package/dist/src/sandbox/__tests__/default.test.node.d.ts.map +1 -0
  245. package/dist/src/sandbox/__tests__/default.test.node.js +23 -0
  246. package/dist/src/sandbox/__tests__/default.test.node.js.map +1 -0
  247. package/dist/src/sandbox/__tests__/docker.test.node.d.ts +2 -0
  248. package/dist/src/sandbox/__tests__/docker.test.node.d.ts.map +1 -0
  249. package/dist/src/sandbox/__tests__/docker.test.node.js +89 -0
  250. package/dist/src/sandbox/__tests__/docker.test.node.js.map +1 -0
  251. package/dist/src/sandbox/__tests__/errors.test.node.d.ts +2 -0
  252. package/dist/src/sandbox/__tests__/errors.test.node.d.ts.map +1 -0
  253. package/dist/src/sandbox/__tests__/errors.test.node.js +33 -0
  254. package/dist/src/sandbox/__tests__/errors.test.node.js.map +1 -0
  255. package/dist/src/sandbox/__tests__/not-a-sandbox-local-environment.test.node.d.ts +2 -0
  256. package/dist/src/sandbox/__tests__/not-a-sandbox-local-environment.test.node.d.ts.map +1 -0
  257. package/dist/src/sandbox/__tests__/not-a-sandbox-local-environment.test.node.js +124 -0
  258. package/dist/src/sandbox/__tests__/not-a-sandbox-local-environment.test.node.js.map +1 -0
  259. package/dist/src/sandbox/__tests__/posix-shell.test.node.js +50 -4
  260. package/dist/src/sandbox/__tests__/posix-shell.test.node.js.map +1 -1
  261. package/dist/src/sandbox/__tests__/ssh.test.node.d.ts +2 -0
  262. package/dist/src/sandbox/__tests__/ssh.test.node.d.ts.map +1 -0
  263. package/dist/src/sandbox/__tests__/ssh.test.node.js +262 -0
  264. package/dist/src/sandbox/__tests__/ssh.test.node.js.map +1 -0
  265. package/dist/src/sandbox/base.d.ts +17 -4
  266. package/dist/src/sandbox/base.d.ts.map +1 -1
  267. package/dist/src/sandbox/base.js +10 -2
  268. package/dist/src/sandbox/base.js.map +1 -1
  269. package/dist/src/sandbox/constants.d.ts +18 -0
  270. package/dist/src/sandbox/constants.d.ts.map +1 -1
  271. package/dist/src/sandbox/constants.js +20 -0
  272. package/dist/src/sandbox/constants.js.map +1 -1
  273. package/dist/src/sandbox/default.d.ts +3 -0
  274. package/dist/src/sandbox/default.d.ts.map +1 -0
  275. package/dist/src/sandbox/default.js +3 -0
  276. package/dist/src/sandbox/default.js.map +1 -0
  277. package/dist/src/sandbox/docker.d.ts +38 -0
  278. package/dist/src/sandbox/docker.d.ts.map +1 -0
  279. package/dist/src/sandbox/docker.js +61 -0
  280. package/dist/src/sandbox/docker.js.map +1 -0
  281. package/dist/src/sandbox/errors.d.ts +26 -0
  282. package/dist/src/sandbox/errors.d.ts.map +1 -0
  283. package/dist/src/sandbox/errors.js +35 -0
  284. package/dist/src/sandbox/errors.js.map +1 -0
  285. package/dist/src/sandbox/index.d.ts +5 -0
  286. package/dist/src/sandbox/index.d.ts.map +1 -0
  287. package/dist/src/sandbox/index.js +4 -0
  288. package/dist/src/sandbox/index.js.map +1 -0
  289. package/dist/src/sandbox/not-a-sandbox-local-environment.d.ts +16 -0
  290. package/dist/src/sandbox/not-a-sandbox-local-environment.d.ts.map +1 -0
  291. package/dist/src/sandbox/not-a-sandbox-local-environment.js +83 -0
  292. package/dist/src/sandbox/not-a-sandbox-local-environment.js.map +1 -0
  293. package/dist/src/sandbox/posix-shell.d.ts +21 -0
  294. package/dist/src/sandbox/posix-shell.d.ts.map +1 -1
  295. package/dist/src/sandbox/posix-shell.js +41 -3
  296. package/dist/src/sandbox/posix-shell.js.map +1 -1
  297. package/dist/src/sandbox/ssh.d.ts +56 -0
  298. package/dist/src/sandbox/ssh.d.ts.map +1 -0
  299. package/dist/src/sandbox/ssh.js +121 -0
  300. package/dist/src/sandbox/ssh.js.map +1 -0
  301. package/dist/src/sandbox/stream-process.d.ts.map +1 -1
  302. package/dist/src/sandbox/stream-process.js +3 -2
  303. package/dist/src/sandbox/stream-process.js.map +1 -1
  304. package/dist/src/tsconfig.tsbuildinfo +1 -1
  305. package/dist/src/types/agent.d.ts +21 -0
  306. package/dist/src/types/agent.d.ts.map +1 -1
  307. package/dist/src/types/agent.js.map +1 -1
  308. package/dist/src/types/messages.d.ts +9 -1
  309. package/dist/src/types/messages.d.ts.map +1 -1
  310. package/dist/src/types/messages.js +13 -1
  311. package/dist/src/types/messages.js.map +1 -1
  312. package/dist/src/vended-interventions/cedar/__tests__/cedar.test.node.d.ts +2 -0
  313. package/dist/src/vended-interventions/cedar/__tests__/cedar.test.node.d.ts.map +1 -0
  314. package/dist/src/vended-interventions/cedar/__tests__/cedar.test.node.js +675 -0
  315. package/dist/src/vended-interventions/cedar/__tests__/cedar.test.node.js.map +1 -0
  316. package/dist/src/vended-interventions/cedar/cedar.d.ts +102 -0
  317. package/dist/src/vended-interventions/cedar/cedar.d.ts.map +1 -0
  318. package/dist/src/vended-interventions/cedar/cedar.js +228 -0
  319. package/dist/src/vended-interventions/cedar/cedar.js.map +1 -0
  320. package/dist/src/vended-interventions/cedar/index.d.ts +3 -0
  321. package/dist/src/vended-interventions/cedar/index.d.ts.map +1 -0
  322. package/dist/src/vended-interventions/cedar/index.js +2 -0
  323. package/dist/src/vended-interventions/cedar/index.js.map +1 -0
  324. package/dist/src/vended-interventions/cedar/schema-generator.d.ts +10 -0
  325. package/dist/src/vended-interventions/cedar/schema-generator.d.ts.map +1 -0
  326. package/dist/src/vended-interventions/cedar/schema-generator.js +33 -0
  327. package/dist/src/vended-interventions/cedar/schema-generator.js.map +1 -0
  328. package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.d.ts +2 -0
  329. package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.d.ts.map +1 -0
  330. package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.js +611 -0
  331. package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.js.map +1 -0
  332. package/dist/src/vended-memory-stores/bedrock-knowledge-base/index.d.ts +2 -0
  333. package/dist/src/vended-memory-stores/bedrock-knowledge-base/index.d.ts.map +1 -0
  334. package/dist/src/vended-memory-stores/bedrock-knowledge-base/index.js +2 -0
  335. package/dist/src/vended-memory-stores/bedrock-knowledge-base/index.js.map +1 -0
  336. package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.d.ts +230 -0
  337. package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.d.ts.map +1 -0
  338. package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.js +370 -0
  339. package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.js.map +1 -0
  340. package/dist/src/vended-plugins/context-injector/__tests__/plugin.test.d.ts +2 -0
  341. package/dist/src/vended-plugins/context-injector/__tests__/plugin.test.d.ts.map +1 -0
  342. package/dist/src/vended-plugins/context-injector/__tests__/plugin.test.js +96 -0
  343. package/dist/src/vended-plugins/context-injector/__tests__/plugin.test.js.map +1 -0
  344. package/dist/src/vended-plugins/context-injector/index.d.ts +25 -0
  345. package/dist/src/vended-plugins/context-injector/index.d.ts.map +1 -0
  346. package/dist/src/vended-plugins/context-injector/index.js +23 -0
  347. package/dist/src/vended-plugins/context-injector/index.js.map +1 -0
  348. package/dist/src/vended-plugins/context-injector/plugin.d.ts +55 -0
  349. package/dist/src/vended-plugins/context-injector/plugin.d.ts.map +1 -0
  350. package/dist/src/vended-plugins/context-injector/plugin.js +41 -0
  351. package/dist/src/vended-plugins/context-injector/plugin.js.map +1 -0
  352. package/dist/src/vended-plugins/context-offloader/__tests__/file-storage-sandbox.test.node.d.ts +2 -0
  353. package/dist/src/vended-plugins/context-offloader/__tests__/file-storage-sandbox.test.node.d.ts.map +1 -0
  354. package/dist/src/vended-plugins/context-offloader/__tests__/file-storage-sandbox.test.node.js +68 -0
  355. package/dist/src/vended-plugins/context-offloader/__tests__/file-storage-sandbox.test.node.js.map +1 -0
  356. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.js +43 -4
  357. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.js.map +1 -1
  358. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.node.d.ts +2 -0
  359. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.node.d.ts.map +1 -0
  360. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.node.js +93 -0
  361. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.node.js.map +1 -0
  362. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.js +68 -0
  363. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.js.map +1 -1
  364. package/dist/src/vended-plugins/context-offloader/index.d.ts +1 -1
  365. package/dist/src/vended-plugins/context-offloader/index.d.ts.map +1 -1
  366. package/dist/src/vended-plugins/context-offloader/plugin.d.ts +4 -1
  367. package/dist/src/vended-plugins/context-offloader/plugin.d.ts.map +1 -1
  368. package/dist/src/vended-plugins/context-offloader/plugin.js +40 -8
  369. package/dist/src/vended-plugins/context-offloader/plugin.js.map +1 -1
  370. package/dist/src/vended-plugins/context-offloader/search.d.ts.map +1 -1
  371. package/dist/src/vended-plugins/context-offloader/search.js +3 -5
  372. package/dist/src/vended-plugins/context-offloader/search.js.map +1 -1
  373. package/dist/src/vended-plugins/context-offloader/storage.d.ts +58 -6
  374. package/dist/src/vended-plugins/context-offloader/storage.d.ts.map +1 -1
  375. package/dist/src/vended-plugins/context-offloader/storage.js +136 -14
  376. package/dist/src/vended-plugins/context-offloader/storage.js.map +1 -1
  377. package/dist/src/vended-plugins/goal/__tests__/plugin.test.d.ts +2 -0
  378. package/dist/src/vended-plugins/goal/__tests__/plugin.test.d.ts.map +1 -0
  379. package/dist/src/vended-plugins/goal/__tests__/plugin.test.js +736 -0
  380. package/dist/src/vended-plugins/goal/__tests__/plugin.test.js.map +1 -0
  381. package/dist/src/vended-plugins/goal/index.d.ts +21 -0
  382. package/dist/src/vended-plugins/goal/index.d.ts.map +1 -0
  383. package/dist/src/vended-plugins/goal/index.js +20 -0
  384. package/dist/src/vended-plugins/goal/index.js.map +1 -0
  385. package/dist/src/vended-plugins/goal/judge.d.ts +41 -0
  386. package/dist/src/vended-plugins/goal/judge.d.ts.map +1 -0
  387. package/dist/src/vended-plugins/goal/judge.js +92 -0
  388. package/dist/src/vended-plugins/goal/judge.js.map +1 -0
  389. package/dist/src/vended-plugins/goal/plugin.d.ts +214 -0
  390. package/dist/src/vended-plugins/goal/plugin.d.ts.map +1 -0
  391. package/dist/src/vended-plugins/goal/plugin.js +287 -0
  392. package/dist/src/vended-plugins/goal/plugin.js.map +1 -0
  393. package/dist/src/vended-plugins/index.d.ts +3 -1
  394. package/dist/src/vended-plugins/index.d.ts.map +1 -1
  395. package/dist/src/vended-plugins/index.js +3 -1
  396. package/dist/src/vended-plugins/index.js.map +1 -1
  397. package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.js +17 -7
  398. package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.js.map +1 -1
  399. package/dist/src/vended-plugins/skills/agent-skills.d.ts +21 -7
  400. package/dist/src/vended-plugins/skills/agent-skills.d.ts.map +1 -1
  401. package/dist/src/vended-plugins/skills/agent-skills.js +144 -77
  402. package/dist/src/vended-plugins/skills/agent-skills.js.map +1 -1
  403. package/dist/src/vended-tools/bash/__tests__/bash.test.node.js +44 -4
  404. package/dist/src/vended-tools/bash/__tests__/bash.test.node.js.map +1 -1
  405. package/dist/src/vended-tools/bash/bash.d.ts +3 -24
  406. package/dist/src/vended-tools/bash/bash.d.ts.map +1 -1
  407. package/dist/src/vended-tools/bash/bash.js +9 -9
  408. package/dist/src/vended-tools/bash/bash.js.map +1 -1
  409. package/dist/src/vended-tools/bash/index.d.ts +3 -1
  410. package/dist/src/vended-tools/bash/index.d.ts.map +1 -1
  411. package/dist/src/vended-tools/bash/index.js +2 -1
  412. package/dist/src/vended-tools/bash/index.js.map +1 -1
  413. package/dist/src/vended-tools/bash/make-bash.d.ts +22 -0
  414. package/dist/src/vended-tools/bash/make-bash.d.ts.map +1 -0
  415. package/dist/src/vended-tools/bash/make-bash.js +40 -0
  416. package/dist/src/vended-tools/bash/make-bash.js.map +1 -0
  417. package/dist/src/vended-tools/bash/types.d.ts +1 -0
  418. package/dist/src/vended-tools/bash/types.d.ts.map +1 -1
  419. package/dist/src/vended-tools/bash/types.js +2 -0
  420. package/dist/src/vended-tools/bash/types.js.map +1 -1
  421. package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.js +83 -1
  422. package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.js.map +1 -1
  423. package/dist/src/vended-tools/file-editor/file-editor.d.ts +19 -10
  424. package/dist/src/vended-tools/file-editor/file-editor.d.ts.map +1 -1
  425. package/dist/src/vended-tools/file-editor/file-editor.js +188 -218
  426. package/dist/src/vended-tools/file-editor/file-editor.js.map +1 -1
  427. package/dist/src/vended-tools/file-editor/index.d.ts +2 -1
  428. package/dist/src/vended-tools/file-editor/index.d.ts.map +1 -1
  429. package/dist/src/vended-tools/file-editor/index.js +1 -1
  430. package/dist/src/vended-tools/file-editor/index.js.map +1 -1
  431. package/package.json +59 -6
  432. package/dist/src/utils/shell-quote.d.ts +0 -12
  433. package/dist/src/utils/shell-quote.d.ts.map +0 -1
  434. package/dist/src/utils/shell-quote.js +0 -14
  435. package/dist/src/utils/shell-quote.js.map +0 -1
@@ -0,0 +1,138 @@
1
+ import { describe, it, expect, vi } from 'vitest';
2
+ import { createTokenUsageMiddleware } from '../../context-manager/modes/agentic/agentic-context.js';
3
+ import { Message, TextBlock } from '../../types/messages.js';
4
+ import { Agent } from '../../agent/agent.js';
5
+ import { MockMessageModel } from '../../__fixtures__/mock-message-model.js';
6
+ function createMockModel(contextWindowLimit) {
7
+ return {
8
+ getConfig: () => ({ contextWindowLimit }),
9
+ };
10
+ }
11
+ function createContext(overrides = {}) {
12
+ return {
13
+ agent: {},
14
+ messages: [new Message({ role: 'user', content: [new TextBlock('hello')] })],
15
+ toolSpecs: [],
16
+ invocationState: {},
17
+ ...overrides,
18
+ };
19
+ }
20
+ describe('createTokenUsageMiddleware', () => {
21
+ it('returns context unchanged when projectedInputTokens is not set', async () => {
22
+ const middleware = createTokenUsageMiddleware(createMockModel(200_000));
23
+ const context = createContext();
24
+ const result = await middleware(context);
25
+ expect(result).toBe(context);
26
+ });
27
+ it('returns context unchanged when messages are empty', async () => {
28
+ const middleware = createTokenUsageMiddleware(createMockModel(200_000));
29
+ const context = createContext({
30
+ messages: [],
31
+ projectedInputTokens: 50_000,
32
+ });
33
+ const result = await middleware(context);
34
+ expect(result).toBe(context);
35
+ });
36
+ it('appends context status to last message content', async () => {
37
+ const middleware = createTokenUsageMiddleware(createMockModel(200_000));
38
+ const context = createContext({
39
+ projectedInputTokens: 50_000,
40
+ });
41
+ const result = await middleware(context);
42
+ expect(result.messages.length).toBe(1);
43
+ const lastMsg = result.messages[0];
44
+ expect(lastMsg.content.length).toBe(2);
45
+ const statusBlock = lastMsg.content[1];
46
+ expect(statusBlock.text).toContain('<context-status>');
47
+ expect(statusBlock.text).toContain('25.0%');
48
+ expect(statusBlock.text).toContain('<remaining>');
49
+ expect(statusBlock.text).toContain('</context-status>');
50
+ });
51
+ it('does not mutate the original messages array', async () => {
52
+ const middleware = createTokenUsageMiddleware(createMockModel(200_000));
53
+ const originalMessage = new Message({ role: 'user', content: [new TextBlock('hello')] });
54
+ const context = createContext({
55
+ messages: [originalMessage],
56
+ projectedInputTokens: 50_000,
57
+ });
58
+ const result = await middleware(context);
59
+ expect(result.messages).not.toBe(context.messages);
60
+ expect(originalMessage.content.length).toBe(1);
61
+ });
62
+ it('uses DEFAULT_CONTEXT_WINDOW_LIMIT when model config has no limit', async () => {
63
+ const middleware = createTokenUsageMiddleware(createMockModel(undefined));
64
+ const context = createContext({
65
+ projectedInputTokens: 100_000,
66
+ });
67
+ const result = await middleware(context);
68
+ const statusBlock = result.messages[0].content[1];
69
+ expect(statusBlock.text).toContain('<context-status>');
70
+ expect(statusBlock.text).toContain('50.0%');
71
+ expect(statusBlock.text).toContain('200,000');
72
+ });
73
+ it('preserves message metadata', async () => {
74
+ const middleware = createTokenUsageMiddleware(createMockModel(200_000));
75
+ const metadata = { usage: { inputTokens: 10, outputTokens: 5, totalTokens: 15 } };
76
+ const context = createContext({
77
+ messages: [new Message({ role: 'user', content: [new TextBlock('hello')], metadata })],
78
+ projectedInputTokens: 50_000,
79
+ });
80
+ const result = await middleware(context);
81
+ expect(result.messages[0].metadata).toEqual(metadata);
82
+ });
83
+ it('reports correct remaining tokens', async () => {
84
+ const middleware = createTokenUsageMiddleware(createMockModel(100_000));
85
+ const context = createContext({
86
+ projectedInputTokens: 80_000,
87
+ });
88
+ const result = await middleware(context);
89
+ const statusBlock = result.messages[0].content[1];
90
+ expect(statusBlock.text).toContain('80.0%');
91
+ expect(statusBlock.text).toContain('<remaining>~20,000 tokens</remaining>');
92
+ });
93
+ });
94
+ describe('token usage middleware integration', () => {
95
+ it('injects context status into messages sent to model on second call', async () => {
96
+ const model = new MockMessageModel()
97
+ .addTurn({ type: 'textBlock', text: 'First response' }, { usage: { inputTokens: 1000, outputTokens: 200, totalTokens: 1200 } })
98
+ .addTurn({ type: 'textBlock', text: 'Second response' }, { usage: { inputTokens: 2000, outputTokens: 300, totalTokens: 2300 } });
99
+ model.updateConfig({ contextWindowLimit: 100_000 });
100
+ const agent = new Agent({ model, contextManager: 'agentic', printer: false });
101
+ const streamSpy = vi.spyOn(model, 'stream');
102
+ await agent.invoke('First message');
103
+ await agent.invoke('Second message');
104
+ const secondCallMessages = streamSpy.mock.calls[1][0];
105
+ const lastMessage = secondCallMessages[secondCallMessages.length - 1];
106
+ const lastBlock = lastMessage.content[lastMessage.content.length - 1];
107
+ expect(lastBlock.text).toContain('<context-status>');
108
+ expect(lastBlock.text).toContain('100,000');
109
+ expect(lastBlock.text).toContain('<remaining>');
110
+ });
111
+ it('injects on first call when token estimation succeeds', async () => {
112
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'First response' }, { usage: { inputTokens: 1000, outputTokens: 200, totalTokens: 1200 } });
113
+ model.updateConfig({ contextWindowLimit: 100_000 });
114
+ const agent = new Agent({ model, contextManager: 'agentic', printer: false });
115
+ const streamSpy = vi.spyOn(model, 'stream');
116
+ await agent.invoke('First message');
117
+ const firstCallMessages = streamSpy.mock.calls[0][0];
118
+ const lastMessage = firstCallMessages[firstCallMessages.length - 1];
119
+ const lastBlock = lastMessage.content[lastMessage.content.length - 1];
120
+ expect(lastBlock.text).toContain('<context-status>');
121
+ expect(lastBlock.text).toContain('100,000');
122
+ });
123
+ it('does not register middleware when contextManager is not agentic', async () => {
124
+ const model = new MockMessageModel()
125
+ .addTurn({ type: 'textBlock', text: 'First response' }, { usage: { inputTokens: 1000, outputTokens: 200, totalTokens: 1200 } })
126
+ .addTurn({ type: 'textBlock', text: 'Second response' }, { usage: { inputTokens: 2000, outputTokens: 300, totalTokens: 2300 } });
127
+ model.updateConfig({ contextWindowLimit: 100_000 });
128
+ const agent = new Agent({ model, printer: false });
129
+ const streamSpy = vi.spyOn(model, 'stream');
130
+ await agent.invoke('First message');
131
+ await agent.invoke('Second message');
132
+ const secondCallMessages = streamSpy.mock.calls[1][0];
133
+ const lastMessage = secondCallMessages[secondCallMessages.length - 1];
134
+ const lastBlock = lastMessage.content[lastMessage.content.length - 1];
135
+ expect(lastBlock.text).not.toContain('<context-status>');
136
+ });
137
+ });
138
+ //# sourceMappingURL=token-usage-middleware.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-usage-middleware.test.js","sourceRoot":"","sources":["../../../../src/conversation-manager/__tests__/token-usage-middleware.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AACjD,OAAO,EAAE,0BAA0B,EAAE,MAAM,wDAAwD,CAAA;AACnG,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAG5D,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAA;AAE3E,SAAS,eAAe,CAAC,kBAA2B;IAClD,OAAO;QACL,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC;KACtB,CAAA;AACvB,CAAC;AAED,SAAS,aAAa,CAAC,YAAyC,EAAE;IAChE,OAAO;QACL,KAAK,EAAE,EAAiC;QACxC,QAAQ,EAAE,CAAC,IAAI,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5E,SAAS,EAAE,EAAE;QACb,eAAe,EAAE,EAAE;QACnB,GAAG,SAAS;KACb,CAAA;AACH,CAAC;AAED,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,UAAU,GAAG,0BAA0B,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAA;QACvE,MAAM,OAAO,GAAG,aAAa,EAAE,CAAA;QAE/B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAA;QAExC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,UAAU,GAAG,0BAA0B,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAA;QACvE,MAAM,OAAO,GAAG,aAAa,CAAC;YAC5B,QAAQ,EAAE,EAAE;YACZ,oBAAoB,EAAE,MAAM;SAC7B,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAA;QAExC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,UAAU,GAAG,0BAA0B,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAA;QACvE,MAAM,OAAO,GAAG,aAAa,CAAC;YAC5B,oBAAoB,EAAE,MAAM;SAC7B,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAA;QAExC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACtC,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAA;QACnC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACtC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAc,CAAA;QACnD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA;QACtD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QAC3C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;QACjD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAA;IACzD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,UAAU,GAAG,0BAA0B,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAA;QACvE,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;QACxF,MAAM,OAAO,GAAG,aAAa,CAAC;YAC5B,QAAQ,EAAE,CAAC,eAAe,CAAC;YAC3B,oBAAoB,EAAE,MAAM;SAC7B,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAA;QAExC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAClD,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,UAAU,GAAG,0BAA0B,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAA;QACzE,MAAM,OAAO,GAAG,aAAa,CAAC;YAC5B,oBAAoB,EAAE,OAAO;SAC9B,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAA;QAExC,MAAM,WAAW,GAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAc,CAAC,OAAO,CAAC,CAAC,CAAc,CAAA;QAC5E,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA;QACtD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QAC3C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;IAC/C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,UAAU,GAAG,0BAA0B,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAA;QACvE,MAAM,QAAQ,GAAG,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,CAAA;QACjF,MAAM,OAAO,GAAG,aAAa,CAAC;YAC5B,QAAQ,EAAE,CAAC,IAAI,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YACtF,oBAAoB,EAAE,MAAM;SAC7B,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAA;QAExC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACxD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,UAAU,GAAG,0BAA0B,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAA;QACvE,MAAM,OAAO,GAAG,aAAa,CAAC;YAC5B,oBAAoB,EAAE,MAAM;SAC7B,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAA;QAExC,MAAM,WAAW,GAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAc,CAAC,OAAO,CAAC,CAAC,CAAc,CAAA;QAC5E,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QAC3C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,uCAAuC,CAAC,CAAA;IAC7E,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,KAAK,GAAG,IAAI,gBAAgB,EAAE;aACjC,OAAO,CACN,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAC7C,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CACvE;aACA,OAAO,CACN,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAC9C,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CACvE,CAAA;QAEH,KAAK,CAAC,YAAY,CAAC,EAAE,kBAAkB,EAAE,OAAO,EAAE,CAAC,CAAA;QAEnD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;QAC7E,MAAM,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QAE3C,MAAM,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;QACnC,MAAM,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;QAEpC,MAAM,kBAAkB,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAc,CAAA;QACnE,MAAM,WAAW,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAE,CAAA;QACtE,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAc,CAAA;QAClF,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA;QACpD,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;QAC3C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,KAAK,GAAG,IAAI,gBAAgB,EAAE,CAAC,OAAO,CAC1C,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAC7C,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CACvE,CAAA;QAED,KAAK,CAAC,YAAY,CAAC,EAAE,kBAAkB,EAAE,OAAO,EAAE,CAAC,CAAA;QAEnD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;QAC7E,MAAM,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QAE3C,MAAM,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;QAEnC,MAAM,iBAAiB,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAc,CAAA;QAClE,MAAM,WAAW,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAE,CAAA;QACpE,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAc,CAAA;QAClF,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA;QACpD,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,KAAK,GAAG,IAAI,gBAAgB,EAAE;aACjC,OAAO,CACN,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAC7C,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CACvE;aACA,OAAO,CACN,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAC9C,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CACvE,CAAA;QAEH,KAAK,CAAC,YAAY,CAAC,EAAE,kBAAkB,EAAE,OAAO,EAAE,CAAC,CAAA;QAEnD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;QAClD,MAAM,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QAE3C,MAAM,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;QACnC,MAAM,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;QAEpC,MAAM,kBAAkB,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAc,CAAA;QACnE,MAAM,WAAW,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAE,CAAA;QACtE,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAc,CAAA;QAClF,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA;IAC1D,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,39 @@
1
+ import { Message } from '../../types/messages.js';
2
+ import type { Model } from '../../models/model.js';
3
+ export declare const DEFAULT_SUMMARIZATION_PROMPT = "You are a conversation summarizer. Provide a concise summary of the conversation history.\n\nFormat Requirements:\n- You MUST create a structured and concise summary in bullet-point format.\n- You MUST NOT respond conversationally.\n- You MUST NOT address the user directly.\n- You MUST NOT comment on tool availability.\n\nAssumptions:\n- You MUST NOT assume tool executions failed unless otherwise stated.\n\nTask:\nYour task is to create a structured summary document:\n- It MUST contain bullet points with key topics and questions covered\n- It MUST contain bullet points for all significant tools executed and their results\n- It MUST contain bullet points for any code or technical information shared\n- It MUST contain a section of key insights gained\n- It MUST format the summary in the third person\n\nExample format:\n\n## Conversation Summary\n* Topic 1: Key information\n* Topic 2: Key information\n\n## Tools Executed\n* Tool X: Result Y";
4
+ /**
5
+ * Adjust a split point forward to avoid breaking tool use/result pairs.
6
+ *
7
+ * Walks the split point forward until the message at that position is neither
8
+ * an orphaned toolResult nor a toolUse without an immediately following toolResult.
9
+ *
10
+ * @throws If no valid split point can be found (walked past all messages)
11
+ */
12
+ export declare function adjustSplitPointForToolPairs(messages: Message[], splitPoint: number): number;
13
+ /**
14
+ * Find a valid trim point for truncation starting at `startIndex`.
15
+ *
16
+ * A valid trim point must:
17
+ * 1. Be a user message (required by some models)
18
+ * 2. Not be an orphaned toolResult
19
+ * 3. Not be a toolUse unless its toolResult immediately follows
20
+ *
21
+ * @returns The valid trim index, or `messages.length` if none found
22
+ */
23
+ export declare function findValidTrimPoint(messages: Message[], startIndex: number): number;
24
+ /**
25
+ * Generate a summary of the provided messages by calling the model.
26
+ *
27
+ * @returns A user-role message containing the model-generated summary
28
+ * @throws If the model fails to produce a response
29
+ */
30
+ export declare function generateSummary(messagesToSummarize: Message[], model: Model, systemPrompt?: string): Promise<Message>;
31
+ export type MessageTypeFilter = 'tools' | 'messages' | 'all';
32
+ /**
33
+ * Returns true if the message matches the given type filter.
34
+ * - 'tools': message contains at least one toolUseBlock or toolResultBlock
35
+ * - 'messages': message contains no toolUseBlock or toolResultBlock
36
+ * - 'all': always matches
37
+ */
38
+ export declare function matchesMessageType(message: Message, filter: MessageTypeFilter): boolean;
39
+ //# sourceMappingURL=context-compression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-compression.d.ts","sourceRoot":"","sources":["../../../../src/conversation-manager/compression/context-compression.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAa,MAAM,yBAAyB,CAAA;AAC5D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAElD,eAAO,MAAM,4BAA4B,47BA2BtB,CAAA;AAEnB;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAgC5F;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAgClF;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,mBAAmB,EAAE,OAAO,EAAE,EAC9B,KAAK,EAAE,KAAK,EACZ,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,OAAO,CAAC,CA2BlB;AAED,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,UAAU,GAAG,KAAK,CAAA;AAE5D;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAMvF"}
@@ -0,0 +1,150 @@
1
+ import { Message, TextBlock } from '../../types/messages.js';
2
+ export const DEFAULT_SUMMARIZATION_PROMPT = `You are a conversation summarizer. Provide a concise summary of the conversation \
3
+ history.
4
+
5
+ Format Requirements:
6
+ - You MUST create a structured and concise summary in bullet-point format.
7
+ - You MUST NOT respond conversationally.
8
+ - You MUST NOT address the user directly.
9
+ - You MUST NOT comment on tool availability.
10
+
11
+ Assumptions:
12
+ - You MUST NOT assume tool executions failed unless otherwise stated.
13
+
14
+ Task:
15
+ Your task is to create a structured summary document:
16
+ - It MUST contain bullet points with key topics and questions covered
17
+ - It MUST contain bullet points for all significant tools executed and their results
18
+ - It MUST contain bullet points for any code or technical information shared
19
+ - It MUST contain a section of key insights gained
20
+ - It MUST format the summary in the third person
21
+
22
+ Example format:
23
+
24
+ ## Conversation Summary
25
+ * Topic 1: Key information
26
+ * Topic 2: Key information
27
+
28
+ ## Tools Executed
29
+ * Tool X: Result Y`;
30
+ /**
31
+ * Adjust a split point forward to avoid breaking tool use/result pairs.
32
+ *
33
+ * Walks the split point forward until the message at that position is neither
34
+ * an orphaned toolResult nor a toolUse without an immediately following toolResult.
35
+ *
36
+ * @throws If no valid split point can be found (walked past all messages)
37
+ */
38
+ export function adjustSplitPointForToolPairs(messages, splitPoint) {
39
+ if (splitPoint >= messages.length) {
40
+ return splitPoint;
41
+ }
42
+ while (splitPoint < messages.length) {
43
+ const message = messages[splitPoint];
44
+ const hasToolResult = message.content.some((block) => block.type === 'toolResultBlock');
45
+ if (hasToolResult) {
46
+ splitPoint++;
47
+ continue;
48
+ }
49
+ const hasToolUse = message.content.some((block) => block.type === 'toolUseBlock');
50
+ if (hasToolUse) {
51
+ const nextMessage = messages[splitPoint + 1];
52
+ const nextHasToolResult = nextMessage?.content.some((block) => block.type === 'toolResultBlock');
53
+ if (!nextHasToolResult) {
54
+ splitPoint++;
55
+ continue;
56
+ }
57
+ }
58
+ break;
59
+ }
60
+ if (splitPoint >= messages.length) {
61
+ throw new Error('Unable to find valid split point for summarization');
62
+ }
63
+ return splitPoint;
64
+ }
65
+ /**
66
+ * Find a valid trim point for truncation starting at `startIndex`.
67
+ *
68
+ * A valid trim point must:
69
+ * 1. Be a user message (required by some models)
70
+ * 2. Not be an orphaned toolResult
71
+ * 3. Not be a toolUse unless its toolResult immediately follows
72
+ *
73
+ * @returns The valid trim index, or `messages.length` if none found
74
+ */
75
+ export function findValidTrimPoint(messages, startIndex) {
76
+ let trimIndex = startIndex;
77
+ while (trimIndex < messages.length) {
78
+ const message = messages[trimIndex];
79
+ if (!message)
80
+ break;
81
+ if (message.role !== 'user') {
82
+ trimIndex++;
83
+ continue;
84
+ }
85
+ const hasToolResult = message.content.some((block) => block.type === 'toolResultBlock');
86
+ if (hasToolResult) {
87
+ trimIndex++;
88
+ continue;
89
+ }
90
+ const hasToolUse = message.content.some((block) => block.type === 'toolUseBlock');
91
+ if (hasToolUse) {
92
+ const nextMessage = messages[trimIndex + 1];
93
+ const nextHasToolResult = nextMessage && nextMessage.content.some((block) => block.type === 'toolResultBlock');
94
+ if (!nextHasToolResult) {
95
+ trimIndex++;
96
+ continue;
97
+ }
98
+ }
99
+ break;
100
+ }
101
+ return trimIndex;
102
+ }
103
+ /**
104
+ * Generate a summary of the provided messages by calling the model.
105
+ *
106
+ * @returns A user-role message containing the model-generated summary
107
+ * @throws If the model fails to produce a response
108
+ */
109
+ export async function generateSummary(messagesToSummarize, model, systemPrompt) {
110
+ const summarizationMessages = [
111
+ ...messagesToSummarize,
112
+ new Message({
113
+ role: 'user',
114
+ content: [new TextBlock('Please summarize this conversation.')],
115
+ }),
116
+ ];
117
+ const stream = model.streamAggregated(summarizationMessages, {
118
+ systemPrompt: systemPrompt ?? DEFAULT_SUMMARIZATION_PROMPT,
119
+ });
120
+ let result;
121
+ for (;;) {
122
+ result = await stream.next();
123
+ if (result.done)
124
+ break;
125
+ }
126
+ if (!result?.done || !result.value) {
127
+ throw new Error('Failed to generate summary: no response from model');
128
+ }
129
+ return new Message({
130
+ role: 'user',
131
+ content: result.value.message.content,
132
+ });
133
+ }
134
+ /**
135
+ * Returns true if the message matches the given type filter.
136
+ * - 'tools': message contains at least one toolUseBlock or toolResultBlock
137
+ * - 'messages': message contains no toolUseBlock or toolResultBlock
138
+ * - 'all': always matches
139
+ */
140
+ export function matchesMessageType(message, filter) {
141
+ if (filter === 'all')
142
+ return true;
143
+ const hasTool = message.content.some((b) => b.type === 'toolUseBlock' || b.type === 'toolResultBlock');
144
+ if (filter === 'tools')
145
+ return hasTool;
146
+ if (filter === 'messages')
147
+ return !hasTool;
148
+ return false;
149
+ }
150
+ //# sourceMappingURL=context-compression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-compression.js","sourceRoot":"","sources":["../../../../src/conversation-manager/compression/context-compression.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { Message } from '../../types/messages.js';
2
+ /**
3
+ * Check if a message is pinned, including tool-pair partner protection.
4
+ * Returns `true` if the message at `index` is pinned, or if it is the
5
+ * adjacent tool-pair partner (toolUse/toolResult) of a pinned message,
6
+ * matched by toolUseId.
7
+ *
8
+ * @param messages - The full messages array.
9
+ * @param index - The index to check.
10
+ * @returns `true` if the message or its tool-pair partner is pinned.
11
+ */
12
+ export declare function isPinned(messages: Message[], index: number): boolean;
13
+ /**
14
+ * Pin a message so it is protected from eviction during context reduction.
15
+ * Mutates the message in place by setting `metadata.custom.pinned = true`.
16
+ *
17
+ * @param messages - The messages array containing the message to pin.
18
+ * @param index - The index of the message to pin.
19
+ */
20
+ export declare function pinMessage(messages: Message[], index: number): void;
21
+ /**
22
+ * Pin the first N messages in the array permanently.
23
+ *
24
+ * @param messages - The messages array.
25
+ * @param count - Number of messages from the start to pin.
26
+ */
27
+ export declare function applyPinFirst(messages: Message[], count: number): void;
28
+ /**
29
+ * Partition a range of messages into pinned (protected) and unpinned arrays.
30
+ *
31
+ * @param messages - The full messages array.
32
+ * @param start - Start index of the range (inclusive).
33
+ * @param end - End index of the range (exclusive).
34
+ * @returns A tuple of [pinned, unpinned] message arrays.
35
+ */
36
+ export declare function partitionPinned(messages: Message[], start: number, end: number): [Message[], Message[]];
37
+ /**
38
+ * Unpin a message so it can be evicted during context reduction.
39
+ * Mutates the message in place by removing the `pinned` flag from metadata.
40
+ *
41
+ * @param messages - The messages array containing the message to unpin.
42
+ * @param index - The index of the message to unpin.
43
+ */
44
+ export declare function unpinMessage(messages: Message[], index: number): void;
45
+ //# sourceMappingURL=pin-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pin-message.d.ts","sourceRoot":"","sources":["../../../../src/conversation-manager/compression/pin-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA2C,MAAM,yBAAyB,CAAA;AAE1F;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CA8BpE;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAMnE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAItE;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAWvG;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAWrE"}
@@ -0,0 +1,106 @@
1
+ import { Message } from '../../types/messages.js';
2
+ /**
3
+ * Check if a message is pinned, including tool-pair partner protection.
4
+ * Returns `true` if the message at `index` is pinned, or if it is the
5
+ * adjacent tool-pair partner (toolUse/toolResult) of a pinned message,
6
+ * matched by toolUseId.
7
+ *
8
+ * @param messages - The full messages array.
9
+ * @param index - The index to check.
10
+ * @returns `true` if the message or its tool-pair partner is pinned.
11
+ */
12
+ export function isPinned(messages, index) {
13
+ const msg = messages[index];
14
+ if (msg.metadata?.custom?.pinned === true)
15
+ return true;
16
+ // Tool-pair partner protection: if this is a toolResult, check if prev toolUse is pinned
17
+ const toolResultBlocks = msg.content.filter((b) => b.type === 'toolResultBlock');
18
+ if (toolResultBlocks.length > 0 && index > 0) {
19
+ const prev = messages[index - 1];
20
+ if (prev.metadata?.custom?.pinned === true) {
21
+ const resultIds = new Set(toolResultBlocks.map((b) => b.toolUseId));
22
+ if (prev.content.some((b) => b.type === 'toolUseBlock' && resultIds.has(b.toolUseId))) {
23
+ return true;
24
+ }
25
+ }
26
+ }
27
+ // Tool-pair partner protection: if this is a toolUse, check if next toolResult is pinned
28
+ const toolUseBlocks = msg.content.filter((b) => b.type === 'toolUseBlock');
29
+ if (toolUseBlocks.length > 0 && index + 1 < messages.length) {
30
+ const next = messages[index + 1];
31
+ if (next.metadata?.custom?.pinned === true) {
32
+ const useIds = new Set(toolUseBlocks.map((b) => b.toolUseId));
33
+ if (next.content.some((b) => b.type === 'toolResultBlock' && useIds.has(b.toolUseId))) {
34
+ return true;
35
+ }
36
+ }
37
+ }
38
+ return false;
39
+ }
40
+ /**
41
+ * Pin a message so it is protected from eviction during context reduction.
42
+ * Mutates the message in place by setting `metadata.custom.pinned = true`.
43
+ *
44
+ * @param messages - The messages array containing the message to pin.
45
+ * @param index - The index of the message to pin.
46
+ */
47
+ export function pinMessage(messages, index) {
48
+ const message = messages[index];
49
+ message.metadata = {
50
+ ...message.metadata,
51
+ custom: { ...message.metadata?.custom, pinned: true },
52
+ };
53
+ }
54
+ /**
55
+ * Pin the first N messages in the array permanently.
56
+ *
57
+ * @param messages - The messages array.
58
+ * @param count - Number of messages from the start to pin.
59
+ */
60
+ export function applyPinFirst(messages, count) {
61
+ for (let i = 0; i < Math.min(count, messages.length); i++) {
62
+ pinMessage(messages, i);
63
+ }
64
+ }
65
+ /**
66
+ * Partition a range of messages into pinned (protected) and unpinned arrays.
67
+ *
68
+ * @param messages - The full messages array.
69
+ * @param start - Start index of the range (inclusive).
70
+ * @param end - End index of the range (exclusive).
71
+ * @returns A tuple of [pinned, unpinned] message arrays.
72
+ */
73
+ export function partitionPinned(messages, start, end) {
74
+ const pinned = [];
75
+ const unpinned = [];
76
+ for (let i = start; i < end; i++) {
77
+ if (isPinned(messages, i)) {
78
+ pinned.push(messages[i]);
79
+ }
80
+ else {
81
+ unpinned.push(messages[i]);
82
+ }
83
+ }
84
+ return [pinned, unpinned];
85
+ }
86
+ /**
87
+ * Unpin a message so it can be evicted during context reduction.
88
+ * Mutates the message in place by removing the `pinned` flag from metadata.
89
+ *
90
+ * @param messages - The messages array containing the message to unpin.
91
+ * @param index - The index of the message to unpin.
92
+ */
93
+ export function unpinMessage(messages, index) {
94
+ const message = messages[index];
95
+ const { pinned: _, ...restCustom } = message.metadata?.custom ?? {};
96
+ const { custom: __, ...restMetadata } = message.metadata ?? {};
97
+ const hasCustom = Object.keys(restCustom).length > 0;
98
+ const hasMetadata = hasCustom || Object.keys(restMetadata).length > 0;
99
+ if (hasMetadata) {
100
+ message.metadata = { ...restMetadata, ...(hasCustom ? { custom: restCustom } : {}) };
101
+ }
102
+ else {
103
+ delete message.metadata;
104
+ }
105
+ }
106
+ //# sourceMappingURL=pin-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pin-message.js","sourceRoot":"","sources":["../../../../src/conversation-manager/compression/pin-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA2C,MAAM,yBAAyB,CAAA;AAE1F;;;;;;;;;GASG;AACH,MAAM,UAAU,QAAQ,CAAC,QAAmB,EAAE,KAAa;IACzD,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAE,CAAA;IAE5B,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IAEtD,yFAAyF;IACzF,MAAM,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAwB,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAA;IACtG,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAE,CAAA;QACjC,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,EAAE,CAAC;YAC3C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;YACnE,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,IAAI,SAAS,CAAC,GAAG,CAAE,CAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;gBACxG,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;IACH,CAAC;IAED,yFAAyF;IACzF,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAqB,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAA;IAC7F,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC5D,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAE,CAAA;QACjC,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;YAC7D,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,IAAI,MAAM,CAAC,GAAG,CAAE,CAAqB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;gBAC3G,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,QAAmB,EAAE,KAAa;IAC3D,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAE,CAAA;IAChC,OAAO,CAAC,QAAQ,GAAG;QACjB,GAAG,OAAO,CAAC,QAAQ;QACnB,MAAM,EAAE,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;KACtD,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,QAAmB,EAAE,KAAa;IAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1D,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;IACzB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,QAAmB,EAAE,KAAa,EAAE,GAAW;IAC7E,MAAM,MAAM,GAAc,EAAE,CAAA;IAC5B,MAAM,QAAQ,GAAc,EAAE,CAAA;IAC9B,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAA;QAC3B,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;AAC3B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,QAAmB,EAAE,KAAa;IAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAE,CAAA;IAChC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,UAAU,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,CAAA;IACnE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,YAAY,EAAE,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAA;IAC9D,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;IACpD,MAAM,WAAW,GAAG,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;IACrE,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,QAAQ,GAAG,EAAE,GAAG,YAAY,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IACtF,CAAC;SAAM,CAAC;QACN,OAAO,OAAO,CAAC,QAAQ,CAAA;IACzB,CAAC;AACH,CAAC"}
@@ -8,6 +8,8 @@ import type { Plugin } from '../plugins/plugin.js';
8
8
  import type { LocalAgent } from '../types/agent.js';
9
9
  import { ContextWindowOverflowError } from '../errors.js';
10
10
  import type { Model } from '../models/model.js';
11
+ /** @internal Default context window limit fallback when the model doesn't report one. */
12
+ export declare const DEFAULT_CONTEXT_WINDOW_LIMIT = 200000;
11
13
  /**
12
14
  * Options passed to {@link ConversationManager.reduce}.
13
15
  *
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-manager.d.ts","sourceRoot":"","sources":["../../../src/conversation-manager/conversation-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAU/C;;;;;;;;GAQG;AACH,MAAM,MAAM,gCAAgC,GAAG;IAC7C;;OAEG;IACH,KAAK,EAAE,UAAU,CAAA;IAEjB;;;OAGG;IACH,KAAK,EAAE,KAAK,CAAA;IAEZ;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,0BAA0B,CAAA;CACnC,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC;;;;OAIG;IACH,oBAAoB,EAAE,MAAM,CAAA;CAC7B,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,OAAO,GAAG,0BAA0B,CAAA;CAC5D,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,8BAAsB,mBAAoB,YAAW,MAAM;IACzD;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAE9B,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,GAAG,SAAS,CAAA;IAE5D;;OAEG;gBACS,OAAO,CAAC,EAAE,0BAA0B;IAehD;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,gCAAgC,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAEtF;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;CA2CnC"}
1
+ {"version":3,"file":"conversation-manager.d.ts","sourceRoot":"","sources":["../../../src/conversation-manager/conversation-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAO/C,yFAAyF;AACzF,eAAO,MAAM,4BAA4B,SAAU,CAAA;AAEnD;;;;;;;;GAQG;AACH,MAAM,MAAM,gCAAgC,GAAG;IAC7C;;OAEG;IACH,KAAK,EAAE,UAAU,CAAA;IAEjB;;;OAGG;IACH,KAAK,EAAE,KAAK,CAAA;IAEZ;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,0BAA0B,CAAA;CACnC,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC;;;;OAIG;IACH,oBAAoB,EAAE,MAAM,CAAA;CAC7B,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,OAAO,GAAG,0BAA0B,CAAA;CAC5D,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,8BAAsB,mBAAoB,YAAW,MAAM;IACzD;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAE9B,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,GAAG,SAAS,CAAA;IAE5D;;OAEG;gBACS,OAAO,CAAC,EAAE,0BAA0B;IAehD;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,gCAAgC,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAEtF;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;CA2CnC"}
@@ -10,8 +10,8 @@ import { logger } from '../logging/logger.js';
10
10
  import { warnOnce } from '../logging/warn-once.js';
11
11
  /** Default compression threshold ratio. */
12
12
  const DEFAULT_COMPRESSION_THRESHOLD = 0.7;
13
- /** Default context window limit fallback when the model doesn't report one. */
14
- const DEFAULT_CONTEXT_WINDOW_LIMIT = 200_000;
13
+ /** @internal Default context window limit fallback when the model doesn't report one. */
14
+ export const DEFAULT_CONTEXT_WINDOW_LIMIT = 200_000;
15
15
  /**
16
16
  * Abstract base class for conversation history management strategies.
17
17
  *
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-manager.js","sourceRoot":"","sources":["../../../src/conversation-manager/conversation-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAC9E,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAA;AAEzD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAElD,2CAA2C;AAC3C,MAAM,6BAA6B,GAAG,GAAG,CAAA;AAEzC,+EAA+E;AAC/E,MAAM,4BAA4B,GAAG,OAAO,CAAA;AA8D5C;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,OAAgB,mBAAmB;IAMpB,qBAAqB,CAAoB;IAE5D;;OAEG;IACH,YAAY,OAAoC;QAC9C,MAAM,oBAAoB,GAAG,OAAO,EAAE,oBAAoB,CAAA;QAC1D,MAAM,SAAS,GACb,oBAAoB,KAAK,IAAI;YAC3B,CAAC,CAAC,6BAA6B;YAC/B,CAAC,CAAC,oBAAoB;gBACpB,CAAC,CAAC,oBAAoB,CAAC,oBAAoB;gBAC3C,CAAC,CAAC,SAAS,CAAA;QAEjB,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;YACjE,MAAM,IAAI,KAAK,CAAC,6EAA6E,SAAS,EAAE,CAAC,CAAA;QAC3G,CAAC;QACD,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAA;IACxC,CAAC;IAqBD;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,KAAiB;QACzB,6BAA6B;QAC7B,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACjD,IAAI,KAAK,CAAC,KAAK,YAAY,0BAA0B,EAAE,CAAC;gBACtD,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;oBACtF,KAAK,CAAC,KAAK,GAAG,IAAI,CAAA;gBACpB,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,2EAA2E;QAC3E,KAAK,CAAC,OAAO,CAAC,oBAAoB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAClD,IAAI,IAAI,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;gBAC7C,OAAM;YACR,CAAC;YAED,IAAI,kBAAkB,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,kBAAkB,CAAA;YACnE,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;gBACrC,kBAAkB,GAAG,4BAA4B,CAAA;gBACjD,QAAQ,CACN,MAAM,EACN,yBAAyB,IAAI,CAAC,IAAI,oEAAoE,4BAA4B,mFAAmF,CACtN,CAAA;YACH,CAAC;YAED,IAAI,KAAK,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;gBAC7C,OAAM;YACR,CAAC;YAED,MAAM,KAAK,GAAG,KAAK,CAAC,oBAAoB,GAAG,kBAAkB,CAAA;YAC7D,IAAI,KAAK,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBACxC,MAAM,CAAC,KAAK,CACV,qBAAqB,KAAK,CAAC,oBAAoB,aAAa,kBAAkB,aAAa,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B,IAAI,CAAC,qBAAqB,sDAAsD,CACzN,CAAA;gBACD,4FAA4F;gBAC5F,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;gBAC/D,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,MAAM,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,IAAI,yDAAyD,CAAC,GAAG,CAAC,CAAA;gBAC9G,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"conversation-manager.js","sourceRoot":"","sources":["../../../src/conversation-manager/conversation-manager.ts"],"names":[],"mappings":"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"}
@@ -28,6 +28,11 @@ export type SlidingWindowConversationManagerConfig = {
28
28
  * - `false` or omitted: disabled, only reactive overflow recovery is used.
29
29
  */
30
30
  proactiveCompression?: boolean | ProactiveCompressionConfig;
31
+ /**
32
+ * Number of messages at the start of the conversation to permanently pin.
33
+ * Pinned messages are protected from eviction during context reduction.
34
+ */
35
+ pinFirst?: number;
31
36
  };
32
37
  /**
33
38
  * Implements a sliding window strategy for managing conversation history.
@@ -45,6 +50,8 @@ export type SlidingWindowConversationManagerConfig = {
45
50
  export declare class SlidingWindowConversationManager extends ConversationManager {
46
51
  private readonly _windowSize;
47
52
  private readonly _shouldTruncateResults;
53
+ private readonly _pinFirst;
54
+ private _pinFirstApplied;
48
55
  /**
49
56
  * Unique identifier for this conversation manager.
50
57
  */
@@ -1 +1 @@
1
- {"version":3,"file":"sliding-window-conversation-manager.d.ts","sourceRoot":"","sources":["../../../src/conversation-manager/sliding-window-conversation-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EACL,mBAAmB,EACnB,KAAK,0BAA0B,EAC/B,KAAK,gCAAgC,EACtC,MAAM,2BAA2B,CAAA;AAkElC;;GAEG;AACH,MAAM,MAAM,sCAAsC,GAAG;IACnD;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAE/B;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,OAAO,GAAG,0BAA0B,CAAA;CAC5D,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,gCAAiC,SAAQ,mBAAmB;IACvE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAS;IAEhD;;OAEG;IACH,QAAQ,CAAC,IAAI,iDAAgD;IAE7D;;;;OAIG;gBACS,MAAM,CAAC,EAAE,sCAAsC;IAM3D;;;;;;;;;OASG;IACa,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAQlD;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,gCAAgC,GAAG,OAAO;IAInE;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,cAAc;IAkEtB;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,oBAAoB;IAoI5B;;;;;;;;OAQG;IACH,OAAO,CAAC,iCAAiC;CAa1C"}
1
+ {"version":3,"file":"sliding-window-conversation-manager.d.ts","sourceRoot":"","sources":["../../../src/conversation-manager/sliding-window-conversation-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EACL,mBAAmB,EACnB,KAAK,0BAA0B,EAC/B,KAAK,gCAAgC,EACtC,MAAM,2BAA2B,CAAA;AAoElC;;GAEG;AACH,MAAM,MAAM,sCAAsC,GAAG;IACnD;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAE/B;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,OAAO,GAAG,0BAA0B,CAAA;IAE3D;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,gCAAiC,SAAQ,mBAAmB;IACvE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAS;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAC9C,OAAO,CAAC,gBAAgB,CAAQ;IAEhC;;OAEG;IACH,QAAQ,CAAC,IAAI,iDAAgD;IAE7D;;;;OAIG;gBACS,MAAM,CAAC,EAAE,sCAAsC;IAO3D;;;;;;;;;OASG;IACa,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAQlD;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,gCAAgC,GAAG,OAAO;IAInE;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,cAAc;IAmDtB;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,oBAAoB;IAoI5B;;;;;;;;OAQG;IACH,OAAO,CAAC,iCAAiC;CAY1C"}