@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.
- package/README.md +11 -11
- package/dist/src/__fixtures__/agent-helpers.d.ts.map +1 -1
- package/dist/src/__fixtures__/agent-helpers.js +9 -0
- package/dist/src/__fixtures__/agent-helpers.js.map +1 -1
- package/dist/src/__fixtures__/register-node-defaults.d.ts +2 -0
- package/dist/src/__fixtures__/register-node-defaults.d.ts.map +1 -0
- package/dist/src/__fixtures__/register-node-defaults.js +6 -0
- package/dist/src/__fixtures__/register-node-defaults.js.map +1 -0
- package/dist/src/__fixtures__/test-sandbox.node.d.ts.map +1 -1
- package/dist/src/__fixtures__/test-sandbox.node.js +4 -3
- package/dist/src/__fixtures__/test-sandbox.node.js.map +1 -1
- package/dist/src/__tests__/default-slot.test.d.ts +2 -0
- package/dist/src/__tests__/default-slot.test.d.ts.map +1 -0
- package/dist/src/__tests__/default-slot.test.js +33 -0
- package/dist/src/__tests__/default-slot.test.js.map +1 -0
- package/dist/src/a2a/__tests__/async-lock.test.d.ts +2 -0
- package/dist/src/a2a/__tests__/async-lock.test.d.ts.map +1 -0
- package/dist/src/a2a/__tests__/async-lock.test.js +137 -0
- package/dist/src/a2a/__tests__/async-lock.test.js.map +1 -0
- package/dist/src/a2a/__tests__/executor.test.js +146 -8
- package/dist/src/a2a/__tests__/executor.test.js.map +1 -1
- package/dist/src/a2a/__tests__/server.test.js +20 -0
- package/dist/src/a2a/__tests__/server.test.js.map +1 -1
- package/dist/src/a2a/async-lock.d.ts +22 -0
- package/dist/src/a2a/async-lock.d.ts.map +1 -0
- package/dist/src/a2a/async-lock.js +38 -0
- package/dist/src/a2a/async-lock.js.map +1 -0
- package/dist/src/a2a/executor.d.ts +59 -24
- package/dist/src/a2a/executor.d.ts.map +1 -1
- package/dist/src/a2a/executor.js +209 -32
- package/dist/src/a2a/executor.js.map +1 -1
- package/dist/src/a2a/index.d.ts +1 -1
- package/dist/src/a2a/index.d.ts.map +1 -1
- package/dist/src/a2a/index.js +1 -1
- package/dist/src/a2a/index.js.map +1 -1
- package/dist/src/a2a/server.d.ts +18 -2
- package/dist/src/a2a/server.d.ts.map +1 -1
- package/dist/src/a2a/server.js +13 -2
- package/dist/src/a2a/server.js.map +1 -1
- package/dist/src/agent/__tests__/agent.context-manager.test.d.ts +2 -0
- package/dist/src/agent/__tests__/agent.context-manager.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/agent.context-manager.test.js +107 -0
- package/dist/src/agent/__tests__/agent.context-manager.test.js.map +1 -0
- package/dist/src/agent/__tests__/agent.stateful-model.test.js +2 -2
- package/dist/src/agent/__tests__/agent.stateful-model.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.tracer.test.node.js +14 -0
- package/dist/src/agent/__tests__/agent.tracer.test.node.js.map +1 -1
- package/dist/src/agent/agent.d.ts +135 -2
- package/dist/src/agent/agent.d.ts.map +1 -1
- package/dist/src/agent/agent.js +506 -189
- package/dist/src/agent/agent.js.map +1 -1
- package/dist/src/context-manager/modes/agentic/agentic-context.d.ts +19 -0
- package/dist/src/context-manager/modes/agentic/agentic-context.d.ts.map +1 -0
- package/dist/src/context-manager/modes/agentic/agentic-context.js +245 -0
- package/dist/src/context-manager/modes/agentic/agentic-context.js.map +1 -0
- package/dist/src/conversation-manager/__tests__/agentic-context.test.d.ts +2 -0
- package/dist/src/conversation-manager/__tests__/agentic-context.test.d.ts.map +1 -0
- package/dist/src/conversation-manager/__tests__/agentic-context.test.js +332 -0
- package/dist/src/conversation-manager/__tests__/agentic-context.test.js.map +1 -0
- package/dist/src/conversation-manager/__tests__/context-compression.test.d.ts +2 -0
- package/dist/src/conversation-manager/__tests__/context-compression.test.d.ts.map +1 -0
- package/dist/src/conversation-manager/__tests__/context-compression.test.js +176 -0
- package/dist/src/conversation-manager/__tests__/context-compression.test.js.map +1 -0
- package/dist/src/conversation-manager/__tests__/pin.test.d.ts +2 -0
- package/dist/src/conversation-manager/__tests__/pin.test.d.ts.map +1 -0
- package/dist/src/conversation-manager/__tests__/pin.test.js +119 -0
- package/dist/src/conversation-manager/__tests__/pin.test.js.map +1 -0
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js +49 -0
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js.map +1 -1
- package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js +58 -0
- package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js.map +1 -1
- package/dist/src/conversation-manager/__tests__/token-usage-middleware.test.d.ts +2 -0
- package/dist/src/conversation-manager/__tests__/token-usage-middleware.test.d.ts.map +1 -0
- package/dist/src/conversation-manager/__tests__/token-usage-middleware.test.js +138 -0
- package/dist/src/conversation-manager/__tests__/token-usage-middleware.test.js.map +1 -0
- package/dist/src/conversation-manager/compression/context-compression.d.ts +39 -0
- package/dist/src/conversation-manager/compression/context-compression.d.ts.map +1 -0
- package/dist/src/conversation-manager/compression/context-compression.js +150 -0
- package/dist/src/conversation-manager/compression/context-compression.js.map +1 -0
- package/dist/src/conversation-manager/compression/pin-message.d.ts +45 -0
- package/dist/src/conversation-manager/compression/pin-message.d.ts.map +1 -0
- package/dist/src/conversation-manager/compression/pin-message.js +106 -0
- package/dist/src/conversation-manager/compression/pin-message.js.map +1 -0
- package/dist/src/conversation-manager/conversation-manager.d.ts +2 -0
- package/dist/src/conversation-manager/conversation-manager.d.ts.map +1 -1
- package/dist/src/conversation-manager/conversation-manager.js +2 -2
- package/dist/src/conversation-manager/conversation-manager.js.map +1 -1
- package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts +7 -0
- package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts.map +1 -1
- package/dist/src/conversation-manager/sliding-window-conversation-manager.js +30 -38
- package/dist/src/conversation-manager/sliding-window-conversation-manager.js.map +1 -1
- package/dist/src/conversation-manager/summarizing-conversation-manager.d.ts +7 -19
- package/dist/src/conversation-manager/summarizing-conversation-manager.d.ts.map +1 -1
- package/dist/src/conversation-manager/summarizing-conversation-manager.js +20 -109
- package/dist/src/conversation-manager/summarizing-conversation-manager.js.map +1 -1
- package/dist/src/default-slot.d.ts +6 -0
- package/dist/src/default-slot.d.ts.map +1 -0
- package/dist/src/default-slot.js +18 -0
- package/dist/src/default-slot.js.map +1 -0
- package/dist/src/errors.d.ts +8 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +11 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/index.d.ts +8 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/index.node.d.ts +2 -0
- package/dist/src/index.node.d.ts.map +1 -0
- package/dist/src/index.node.js +9 -0
- package/dist/src/index.node.js.map +1 -0
- package/dist/src/injection/__tests__/message-injection.test.d.ts +2 -0
- package/dist/src/injection/__tests__/message-injection.test.d.ts.map +1 -0
- package/dist/src/injection/__tests__/message-injection.test.js +200 -0
- package/dist/src/injection/__tests__/message-injection.test.js.map +1 -0
- package/dist/src/injection/index.d.ts +6 -0
- package/dist/src/injection/index.d.ts.map +1 -0
- package/dist/src/injection/index.js +2 -0
- package/dist/src/injection/index.js.map +1 -0
- package/dist/src/injection/message-injection.d.ts +65 -0
- package/dist/src/injection/message-injection.d.ts.map +1 -0
- package/dist/src/injection/message-injection.js +134 -0
- package/dist/src/injection/message-injection.js.map +1 -0
- package/dist/src/injection/types.d.ts +63 -0
- package/dist/src/injection/types.d.ts.map +1 -0
- package/dist/src/injection/types.js +2 -0
- package/dist/src/injection/types.js.map +1 -0
- package/dist/src/injection/xml.d.ts +27 -0
- package/dist/src/injection/xml.d.ts.map +1 -0
- package/dist/src/injection/xml.js +31 -0
- package/dist/src/injection/xml.js.map +1 -0
- package/dist/src/interrupt.d.ts +5 -1
- package/dist/src/interrupt.d.ts.map +1 -1
- package/dist/src/interrupt.js +6 -0
- package/dist/src/interrupt.js.map +1 -1
- package/dist/src/memory/__tests__/memory-manager.test.d.ts +2 -0
- package/dist/src/memory/__tests__/memory-manager.test.d.ts.map +1 -0
- package/dist/src/memory/__tests__/memory-manager.test.js +679 -0
- package/dist/src/memory/__tests__/memory-manager.test.js.map +1 -0
- package/dist/src/memory/extraction/__tests__/extraction.test.d.ts +2 -0
- package/dist/src/memory/extraction/__tests__/extraction.test.d.ts.map +1 -0
- package/dist/src/memory/extraction/__tests__/extraction.test.js +637 -0
- package/dist/src/memory/extraction/__tests__/extraction.test.js.map +1 -0
- package/dist/src/memory/extraction/__tests__/model-extractor.test.d.ts +2 -0
- package/dist/src/memory/extraction/__tests__/model-extractor.test.d.ts.map +1 -0
- package/dist/src/memory/extraction/__tests__/model-extractor.test.js +68 -0
- package/dist/src/memory/extraction/__tests__/model-extractor.test.js.map +1 -0
- package/dist/src/memory/extraction/__tests__/resolve-extraction-config.test.d.ts +2 -0
- package/dist/src/memory/extraction/__tests__/resolve-extraction-config.test.d.ts.map +1 -0
- package/dist/src/memory/extraction/__tests__/resolve-extraction-config.test.js +81 -0
- package/dist/src/memory/extraction/__tests__/resolve-extraction-config.test.js.map +1 -0
- package/dist/src/memory/extraction/coordinator.d.ts +128 -0
- package/dist/src/memory/extraction/coordinator.d.ts.map +1 -0
- package/dist/src/memory/extraction/coordinator.js +245 -0
- package/dist/src/memory/extraction/coordinator.js.map +1 -0
- package/dist/src/memory/extraction/model-extractor.d.ts +32 -0
- package/dist/src/memory/extraction/model-extractor.d.ts.map +1 -0
- package/dist/src/memory/extraction/model-extractor.js +118 -0
- package/dist/src/memory/extraction/model-extractor.js.map +1 -0
- package/dist/src/memory/extraction/resolve-extraction-config.d.ts +46 -0
- package/dist/src/memory/extraction/resolve-extraction-config.d.ts.map +1 -0
- package/dist/src/memory/extraction/resolve-extraction-config.js +59 -0
- package/dist/src/memory/extraction/resolve-extraction-config.js.map +1 -0
- package/dist/src/memory/extraction/triggers.d.ts +41 -0
- package/dist/src/memory/extraction/triggers.d.ts.map +1 -0
- package/dist/src/memory/extraction/triggers.js +59 -0
- package/dist/src/memory/extraction/triggers.js.map +1 -0
- package/dist/src/memory/extraction/types.d.ts +133 -0
- package/dist/src/memory/extraction/types.d.ts.map +1 -0
- package/dist/src/memory/extraction/types.js +19 -0
- package/dist/src/memory/extraction/types.js.map +1 -0
- package/dist/src/memory/index.d.ts +10 -0
- package/dist/src/memory/index.d.ts.map +1 -0
- package/dist/src/memory/index.js +5 -0
- package/dist/src/memory/index.js.map +1 -0
- package/dist/src/memory/memory-manager.d.ts +178 -0
- package/dist/src/memory/memory-manager.d.ts.map +1 -0
- package/dist/src/memory/memory-manager.js +526 -0
- package/dist/src/memory/memory-manager.js.map +1 -0
- package/dist/src/memory/types.d.ts +278 -0
- package/dist/src/memory/types.d.ts.map +1 -0
- package/dist/src/memory/types.js +2 -0
- package/dist/src/memory/types.js.map +1 -0
- package/dist/src/middleware/__tests__/agent-middleware.test.d.ts +2 -0
- package/dist/src/middleware/__tests__/agent-middleware.test.d.ts.map +1 -0
- package/dist/src/middleware/__tests__/agent-middleware.test.js +1206 -0
- package/dist/src/middleware/__tests__/agent-middleware.test.js.map +1 -0
- package/dist/src/middleware/__tests__/copy-on-input.test.d.ts +2 -0
- package/dist/src/middleware/__tests__/copy-on-input.test.d.ts.map +1 -0
- package/dist/src/middleware/__tests__/copy-on-input.test.js +379 -0
- package/dist/src/middleware/__tests__/copy-on-input.test.js.map +1 -0
- package/dist/src/middleware/__tests__/custom-stages.test.d.ts +2 -0
- package/dist/src/middleware/__tests__/custom-stages.test.d.ts.map +1 -0
- package/dist/src/middleware/__tests__/custom-stages.test.js +97 -0
- package/dist/src/middleware/__tests__/custom-stages.test.js.map +1 -0
- package/dist/src/middleware/__tests__/middleware-interrupts.test.d.ts +2 -0
- package/dist/src/middleware/__tests__/middleware-interrupts.test.d.ts.map +1 -0
- package/dist/src/middleware/__tests__/middleware-interrupts.test.js +267 -0
- package/dist/src/middleware/__tests__/middleware-interrupts.test.js.map +1 -0
- package/dist/src/middleware/__tests__/registry.test.d.ts +2 -0
- package/dist/src/middleware/__tests__/registry.test.d.ts.map +1 -0
- package/dist/src/middleware/__tests__/registry.test.js +525 -0
- package/dist/src/middleware/__tests__/registry.test.js.map +1 -0
- package/dist/src/middleware/index.d.ts +5 -0
- package/dist/src/middleware/index.d.ts.map +1 -0
- package/dist/src/middleware/index.js +3 -0
- package/dist/src/middleware/index.js.map +1 -0
- package/dist/src/middleware/registry.d.ts +58 -0
- package/dist/src/middleware/registry.d.ts.map +1 -0
- package/dist/src/middleware/registry.js +107 -0
- package/dist/src/middleware/registry.js.map +1 -0
- package/dist/src/middleware/stages.d.ts +145 -0
- package/dist/src/middleware/stages.d.ts.map +1 -0
- package/dist/src/middleware/stages.js +34 -0
- package/dist/src/middleware/stages.js.map +1 -0
- package/dist/src/middleware/types.d.ts +88 -0
- package/dist/src/middleware/types.d.ts.map +1 -0
- package/dist/src/middleware/types.js +2 -0
- package/dist/src/middleware/types.js.map +1 -0
- package/dist/src/models/__tests__/anthropic.test.js +16 -1
- package/dist/src/models/__tests__/anthropic.test.js.map +1 -1
- package/dist/src/models/__tests__/bedrock.test.js +39 -0
- package/dist/src/models/__tests__/bedrock.test.js.map +1 -1
- package/dist/src/models/__tests__/model.test.js +46 -3
- package/dist/src/models/__tests__/model.test.js.map +1 -1
- package/dist/src/models/anthropic.js +2 -2
- package/dist/src/models/anthropic.js.map +1 -1
- package/dist/src/models/bedrock.d.ts.map +1 -1
- package/dist/src/models/bedrock.js +12 -5
- package/dist/src/models/bedrock.js.map +1 -1
- package/dist/src/models/defaults.d.ts.map +1 -1
- package/dist/src/models/defaults.js +2 -0
- package/dist/src/models/defaults.js.map +1 -1
- package/dist/src/models/model.d.ts.map +1 -1
- package/dist/src/models/model.js +7 -3
- package/dist/src/models/model.js.map +1 -1
- package/dist/src/models/openai/__tests__/responses.test.js +8 -14
- package/dist/src/models/openai/__tests__/responses.test.js.map +1 -1
- package/dist/src/sandbox/__tests__/default.test.browser.d.ts +2 -0
- package/dist/src/sandbox/__tests__/default.test.browser.d.ts.map +1 -0
- package/dist/src/sandbox/__tests__/default.test.browser.js +11 -0
- package/dist/src/sandbox/__tests__/default.test.browser.js.map +1 -0
- package/dist/src/sandbox/__tests__/default.test.node.d.ts +2 -0
- package/dist/src/sandbox/__tests__/default.test.node.d.ts.map +1 -0
- package/dist/src/sandbox/__tests__/default.test.node.js +23 -0
- package/dist/src/sandbox/__tests__/default.test.node.js.map +1 -0
- package/dist/src/sandbox/__tests__/docker.test.node.d.ts +2 -0
- package/dist/src/sandbox/__tests__/docker.test.node.d.ts.map +1 -0
- package/dist/src/sandbox/__tests__/docker.test.node.js +89 -0
- package/dist/src/sandbox/__tests__/docker.test.node.js.map +1 -0
- package/dist/src/sandbox/__tests__/errors.test.node.d.ts +2 -0
- package/dist/src/sandbox/__tests__/errors.test.node.d.ts.map +1 -0
- package/dist/src/sandbox/__tests__/errors.test.node.js +33 -0
- package/dist/src/sandbox/__tests__/errors.test.node.js.map +1 -0
- package/dist/src/sandbox/__tests__/not-a-sandbox-local-environment.test.node.d.ts +2 -0
- package/dist/src/sandbox/__tests__/not-a-sandbox-local-environment.test.node.d.ts.map +1 -0
- package/dist/src/sandbox/__tests__/not-a-sandbox-local-environment.test.node.js +124 -0
- package/dist/src/sandbox/__tests__/not-a-sandbox-local-environment.test.node.js.map +1 -0
- package/dist/src/sandbox/__tests__/posix-shell.test.node.js +50 -4
- package/dist/src/sandbox/__tests__/posix-shell.test.node.js.map +1 -1
- package/dist/src/sandbox/__tests__/ssh.test.node.d.ts +2 -0
- package/dist/src/sandbox/__tests__/ssh.test.node.d.ts.map +1 -0
- package/dist/src/sandbox/__tests__/ssh.test.node.js +262 -0
- package/dist/src/sandbox/__tests__/ssh.test.node.js.map +1 -0
- package/dist/src/sandbox/base.d.ts +17 -4
- package/dist/src/sandbox/base.d.ts.map +1 -1
- package/dist/src/sandbox/base.js +10 -2
- package/dist/src/sandbox/base.js.map +1 -1
- package/dist/src/sandbox/constants.d.ts +18 -0
- package/dist/src/sandbox/constants.d.ts.map +1 -1
- package/dist/src/sandbox/constants.js +20 -0
- package/dist/src/sandbox/constants.js.map +1 -1
- package/dist/src/sandbox/default.d.ts +3 -0
- package/dist/src/sandbox/default.d.ts.map +1 -0
- package/dist/src/sandbox/default.js +3 -0
- package/dist/src/sandbox/default.js.map +1 -0
- package/dist/src/sandbox/docker.d.ts +38 -0
- package/dist/src/sandbox/docker.d.ts.map +1 -0
- package/dist/src/sandbox/docker.js +61 -0
- package/dist/src/sandbox/docker.js.map +1 -0
- package/dist/src/sandbox/errors.d.ts +26 -0
- package/dist/src/sandbox/errors.d.ts.map +1 -0
- package/dist/src/sandbox/errors.js +35 -0
- package/dist/src/sandbox/errors.js.map +1 -0
- package/dist/src/sandbox/index.d.ts +5 -0
- package/dist/src/sandbox/index.d.ts.map +1 -0
- package/dist/src/sandbox/index.js +4 -0
- package/dist/src/sandbox/index.js.map +1 -0
- package/dist/src/sandbox/not-a-sandbox-local-environment.d.ts +16 -0
- package/dist/src/sandbox/not-a-sandbox-local-environment.d.ts.map +1 -0
- package/dist/src/sandbox/not-a-sandbox-local-environment.js +83 -0
- package/dist/src/sandbox/not-a-sandbox-local-environment.js.map +1 -0
- package/dist/src/sandbox/posix-shell.d.ts +21 -0
- package/dist/src/sandbox/posix-shell.d.ts.map +1 -1
- package/dist/src/sandbox/posix-shell.js +41 -3
- package/dist/src/sandbox/posix-shell.js.map +1 -1
- package/dist/src/sandbox/ssh.d.ts +56 -0
- package/dist/src/sandbox/ssh.d.ts.map +1 -0
- package/dist/src/sandbox/ssh.js +121 -0
- package/dist/src/sandbox/ssh.js.map +1 -0
- package/dist/src/sandbox/stream-process.d.ts.map +1 -1
- package/dist/src/sandbox/stream-process.js +3 -2
- package/dist/src/sandbox/stream-process.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/src/types/agent.d.ts +21 -0
- package/dist/src/types/agent.d.ts.map +1 -1
- package/dist/src/types/agent.js.map +1 -1
- package/dist/src/types/messages.d.ts +9 -1
- package/dist/src/types/messages.d.ts.map +1 -1
- package/dist/src/types/messages.js +13 -1
- package/dist/src/types/messages.js.map +1 -1
- package/dist/src/vended-interventions/cedar/__tests__/cedar.test.node.d.ts +2 -0
- package/dist/src/vended-interventions/cedar/__tests__/cedar.test.node.d.ts.map +1 -0
- package/dist/src/vended-interventions/cedar/__tests__/cedar.test.node.js +675 -0
- package/dist/src/vended-interventions/cedar/__tests__/cedar.test.node.js.map +1 -0
- package/dist/src/vended-interventions/cedar/cedar.d.ts +102 -0
- package/dist/src/vended-interventions/cedar/cedar.d.ts.map +1 -0
- package/dist/src/vended-interventions/cedar/cedar.js +228 -0
- package/dist/src/vended-interventions/cedar/cedar.js.map +1 -0
- package/dist/src/vended-interventions/cedar/index.d.ts +3 -0
- package/dist/src/vended-interventions/cedar/index.d.ts.map +1 -0
- package/dist/src/vended-interventions/cedar/index.js +2 -0
- package/dist/src/vended-interventions/cedar/index.js.map +1 -0
- package/dist/src/vended-interventions/cedar/schema-generator.d.ts +10 -0
- package/dist/src/vended-interventions/cedar/schema-generator.d.ts.map +1 -0
- package/dist/src/vended-interventions/cedar/schema-generator.js +33 -0
- package/dist/src/vended-interventions/cedar/schema-generator.js.map +1 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.d.ts +2 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.d.ts.map +1 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.js +611 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.js.map +1 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/index.d.ts +2 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/index.d.ts.map +1 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/index.js +2 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/index.js.map +1 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.d.ts +230 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.d.ts.map +1 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.js +370 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.js.map +1 -0
- package/dist/src/vended-plugins/context-injector/__tests__/plugin.test.d.ts +2 -0
- package/dist/src/vended-plugins/context-injector/__tests__/plugin.test.d.ts.map +1 -0
- package/dist/src/vended-plugins/context-injector/__tests__/plugin.test.js +96 -0
- package/dist/src/vended-plugins/context-injector/__tests__/plugin.test.js.map +1 -0
- package/dist/src/vended-plugins/context-injector/index.d.ts +25 -0
- package/dist/src/vended-plugins/context-injector/index.d.ts.map +1 -0
- package/dist/src/vended-plugins/context-injector/index.js +23 -0
- package/dist/src/vended-plugins/context-injector/index.js.map +1 -0
- package/dist/src/vended-plugins/context-injector/plugin.d.ts +55 -0
- package/dist/src/vended-plugins/context-injector/plugin.d.ts.map +1 -0
- package/dist/src/vended-plugins/context-injector/plugin.js +41 -0
- package/dist/src/vended-plugins/context-injector/plugin.js.map +1 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/file-storage-sandbox.test.node.d.ts +2 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/file-storage-sandbox.test.node.d.ts.map +1 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/file-storage-sandbox.test.node.js +68 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/file-storage-sandbox.test.node.js.map +1 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.js +43 -4
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.js.map +1 -1
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.node.d.ts +2 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.node.d.ts.map +1 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.node.js +93 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.node.js.map +1 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.js +68 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.js.map +1 -1
- package/dist/src/vended-plugins/context-offloader/index.d.ts +1 -1
- package/dist/src/vended-plugins/context-offloader/index.d.ts.map +1 -1
- package/dist/src/vended-plugins/context-offloader/plugin.d.ts +4 -1
- package/dist/src/vended-plugins/context-offloader/plugin.d.ts.map +1 -1
- package/dist/src/vended-plugins/context-offloader/plugin.js +40 -8
- package/dist/src/vended-plugins/context-offloader/plugin.js.map +1 -1
- package/dist/src/vended-plugins/context-offloader/search.d.ts.map +1 -1
- package/dist/src/vended-plugins/context-offloader/search.js +3 -5
- package/dist/src/vended-plugins/context-offloader/search.js.map +1 -1
- package/dist/src/vended-plugins/context-offloader/storage.d.ts +58 -6
- package/dist/src/vended-plugins/context-offloader/storage.d.ts.map +1 -1
- package/dist/src/vended-plugins/context-offloader/storage.js +136 -14
- package/dist/src/vended-plugins/context-offloader/storage.js.map +1 -1
- package/dist/src/vended-plugins/goal/__tests__/plugin.test.d.ts +2 -0
- package/dist/src/vended-plugins/goal/__tests__/plugin.test.d.ts.map +1 -0
- package/dist/src/vended-plugins/goal/__tests__/plugin.test.js +736 -0
- package/dist/src/vended-plugins/goal/__tests__/plugin.test.js.map +1 -0
- package/dist/src/vended-plugins/goal/index.d.ts +21 -0
- package/dist/src/vended-plugins/goal/index.d.ts.map +1 -0
- package/dist/src/vended-plugins/goal/index.js +20 -0
- package/dist/src/vended-plugins/goal/index.js.map +1 -0
- package/dist/src/vended-plugins/goal/judge.d.ts +41 -0
- package/dist/src/vended-plugins/goal/judge.d.ts.map +1 -0
- package/dist/src/vended-plugins/goal/judge.js +92 -0
- package/dist/src/vended-plugins/goal/judge.js.map +1 -0
- package/dist/src/vended-plugins/goal/plugin.d.ts +214 -0
- package/dist/src/vended-plugins/goal/plugin.d.ts.map +1 -0
- package/dist/src/vended-plugins/goal/plugin.js +287 -0
- package/dist/src/vended-plugins/goal/plugin.js.map +1 -0
- package/dist/src/vended-plugins/index.d.ts +3 -1
- package/dist/src/vended-plugins/index.d.ts.map +1 -1
- package/dist/src/vended-plugins/index.js +3 -1
- package/dist/src/vended-plugins/index.js.map +1 -1
- package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.js +17 -7
- package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.js.map +1 -1
- package/dist/src/vended-plugins/skills/agent-skills.d.ts +21 -7
- package/dist/src/vended-plugins/skills/agent-skills.d.ts.map +1 -1
- package/dist/src/vended-plugins/skills/agent-skills.js +144 -77
- package/dist/src/vended-plugins/skills/agent-skills.js.map +1 -1
- package/dist/src/vended-tools/bash/__tests__/bash.test.node.js +44 -4
- package/dist/src/vended-tools/bash/__tests__/bash.test.node.js.map +1 -1
- package/dist/src/vended-tools/bash/bash.d.ts +3 -24
- package/dist/src/vended-tools/bash/bash.d.ts.map +1 -1
- package/dist/src/vended-tools/bash/bash.js +9 -9
- package/dist/src/vended-tools/bash/bash.js.map +1 -1
- package/dist/src/vended-tools/bash/index.d.ts +3 -1
- package/dist/src/vended-tools/bash/index.d.ts.map +1 -1
- package/dist/src/vended-tools/bash/index.js +2 -1
- package/dist/src/vended-tools/bash/index.js.map +1 -1
- package/dist/src/vended-tools/bash/make-bash.d.ts +22 -0
- package/dist/src/vended-tools/bash/make-bash.d.ts.map +1 -0
- package/dist/src/vended-tools/bash/make-bash.js +40 -0
- package/dist/src/vended-tools/bash/make-bash.js.map +1 -0
- package/dist/src/vended-tools/bash/types.d.ts +1 -0
- package/dist/src/vended-tools/bash/types.d.ts.map +1 -1
- package/dist/src/vended-tools/bash/types.js +2 -0
- package/dist/src/vended-tools/bash/types.js.map +1 -1
- package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.js +83 -1
- package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.js.map +1 -1
- package/dist/src/vended-tools/file-editor/file-editor.d.ts +19 -10
- package/dist/src/vended-tools/file-editor/file-editor.d.ts.map +1 -1
- package/dist/src/vended-tools/file-editor/file-editor.js +188 -218
- package/dist/src/vended-tools/file-editor/file-editor.js.map +1 -1
- package/dist/src/vended-tools/file-editor/index.d.ts +2 -1
- package/dist/src/vended-tools/file-editor/index.d.ts.map +1 -1
- package/dist/src/vended-tools/file-editor/index.js +1 -1
- package/dist/src/vended-tools/file-editor/index.js.map +1 -1
- package/package.json +59 -6
- package/dist/src/utils/shell-quote.d.ts +0 -12
- package/dist/src/utils/shell-quote.d.ts.map +0 -1
- package/dist/src/utils/shell-quote.js +0 -14
- package/dist/src/utils/shell-quote.js.map +0 -1
|
@@ -0,0 +1,526 @@
|
|
|
1
|
+
import { MessageAddedEvent } from '../hooks/events.js';
|
|
2
|
+
import { ExtractionCoordinator } from './extraction/coordinator.js';
|
|
3
|
+
import { resolveExtractionConfig } from './extraction/resolve-extraction-config.js';
|
|
4
|
+
import { tool } from '../tools/tool-factory.js';
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { logger } from '../logging/logger.js';
|
|
7
|
+
import { normalizeError } from '../errors.js';
|
|
8
|
+
import { isUserTurn, createInjectionMiddleware } from '../injection/message-injection.js';
|
|
9
|
+
import { escapeXmlText, escapeXmlAttr } from '../injection/xml.js';
|
|
10
|
+
import { InvokeModelStage } from '../middleware/index.js';
|
|
11
|
+
const SEARCH_TOOL_DESCRIPTION = 'Search long-term memory for facts, preferences, or context from previous conversations. Use when you need background about the user or topic that may have been discussed before.';
|
|
12
|
+
const ADD_TOOL_DESCRIPTION = 'Add facts, preferences, or decisions to long-term memory so they are remembered across conversations. Use when the user shares something worth recalling later.';
|
|
13
|
+
/**
|
|
14
|
+
* Default maximum results per store when neither the caller nor the store specifies one.
|
|
15
|
+
* Resolved by the {@link MemoryManager}.
|
|
16
|
+
*/
|
|
17
|
+
export const DEFAULT_MAX_SEARCH_RESULTS = 3;
|
|
18
|
+
/**
|
|
19
|
+
* Default number of entries injected per model call when injection does not specify one.
|
|
20
|
+
*
|
|
21
|
+
* A memory store ranks by semantic (embedding) similarity, which is not the same as contextual
|
|
22
|
+
* usefulness — the top hit is not reliably the most useful entry for the turn. Injecting the top few
|
|
23
|
+
* gives the model a small candidate set to pick from rather than betting on the store's first result.
|
|
24
|
+
* Five balances that recall against context bloat; lower it for a tighter prepend.
|
|
25
|
+
*/
|
|
26
|
+
const DEFAULT_MAX_ENTRIES = 5;
|
|
27
|
+
/** Flattens nested AggregateErrors so the leaves are concrete reasons, not errors-of-errors. */
|
|
28
|
+
function _flattenReasons(reasons) {
|
|
29
|
+
return reasons.flatMap((reason) => (reason instanceof AggregateError ? _flattenReasons(reason.errors) : [reason]));
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Whether a store has any write sink. The `add_memory` tool and programmatic `add` use `add`;
|
|
33
|
+
* extraction additionally accepts `addMessages`. A writable store must have at least one.
|
|
34
|
+
*/
|
|
35
|
+
function _hasWriteSink(store) {
|
|
36
|
+
return typeof store.add === 'function' || typeof store.addMessages === 'function';
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Provides cross-session memory retrieval and storage for agents.
|
|
40
|
+
*
|
|
41
|
+
* Manages one or more {@link MemoryStore} backends, exposing `search_memory` and
|
|
42
|
+
* `add_memory` tools for agent-driven recall and persistence. Any tools the stores
|
|
43
|
+
* themselves provide (via {@link MemoryStore.getTools}) are registered alongside these.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```typescript
|
|
47
|
+
* import { Agent, MemoryManager } from '@strands-agents/sdk'
|
|
48
|
+
*
|
|
49
|
+
* // Config shorthand
|
|
50
|
+
* const agent = new Agent({
|
|
51
|
+
* model,
|
|
52
|
+
* memoryManager: { stores: [myStore], addToolConfig: true },
|
|
53
|
+
* })
|
|
54
|
+
*
|
|
55
|
+
* // Class instance (for programmatic access)
|
|
56
|
+
* const memoryManager = new MemoryManager({ stores: [myStore], addToolConfig: true })
|
|
57
|
+
* const agent = new Agent({ model, memoryManager })
|
|
58
|
+
* await memoryManager.search('user preferences')
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export class MemoryManager {
|
|
62
|
+
name = 'strands:memory-manager';
|
|
63
|
+
_config;
|
|
64
|
+
_searchStores;
|
|
65
|
+
/** All writable stores — the unscoped target set for the programmatic {@link add} method. */
|
|
66
|
+
_addStores;
|
|
67
|
+
_searchToolConfig;
|
|
68
|
+
_addToolConfig;
|
|
69
|
+
_addToolStores;
|
|
70
|
+
/** Stores with extraction enabled, each paired with its resolved config; wired up in {@link initAgent}. */
|
|
71
|
+
_extractionStores;
|
|
72
|
+
/** Background extraction coordinator, created in {@link initAgent} when extraction is configured. */
|
|
73
|
+
_coordinator;
|
|
74
|
+
/** Resolved injection config, or `false` when injection is disabled. */
|
|
75
|
+
_injectionConfig;
|
|
76
|
+
constructor(config) {
|
|
77
|
+
if (config.stores.length === 0) {
|
|
78
|
+
throw new Error('MemoryManager: at least one store is required');
|
|
79
|
+
}
|
|
80
|
+
const seenNames = new Set();
|
|
81
|
+
const extractionStores = [];
|
|
82
|
+
for (const store of config.stores) {
|
|
83
|
+
if (seenNames.has(store.name)) {
|
|
84
|
+
throw new Error(`MemoryManager: duplicate store name '${store.name}'`);
|
|
85
|
+
}
|
|
86
|
+
seenNames.add(store.name);
|
|
87
|
+
if (store.writable && !_hasWriteSink(store)) {
|
|
88
|
+
throw new Error(`MemoryManager: store '${store.name}' is writable but has no add or addMessages method`);
|
|
89
|
+
}
|
|
90
|
+
if (store.extraction) {
|
|
91
|
+
if (!store.writable) {
|
|
92
|
+
throw new Error(`MemoryManager: store '${store.name}' has extraction config but is not writable`);
|
|
93
|
+
}
|
|
94
|
+
const resolved = resolveExtractionConfig(store.extraction, store);
|
|
95
|
+
if (resolved.triggers.length === 0) {
|
|
96
|
+
throw new Error(`MemoryManager: store '${store.name}' has extraction config but no triggers`);
|
|
97
|
+
}
|
|
98
|
+
// Each extraction shape needs its matching write sink. An extractor produces discrete entries
|
|
99
|
+
// written via `add`; without an extractor the raw message batch goes to `addMessages`.
|
|
100
|
+
if (resolved.extractor) {
|
|
101
|
+
if (typeof store.add !== 'function') {
|
|
102
|
+
throw new Error(`MemoryManager: store '${store.name}' has an extractor but no add method (extracted entries are written via add)`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else if (typeof store.addMessages !== 'function') {
|
|
106
|
+
throw new Error(`MemoryManager: store '${store.name}' has extraction config without an extractor but no addMessages method`);
|
|
107
|
+
}
|
|
108
|
+
extractionStores.push({ store, config: resolved });
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
this._config = config;
|
|
112
|
+
this._searchStores = config.stores;
|
|
113
|
+
// `add`-targeting paths (tool / programmatic) need an `add` method specifically.
|
|
114
|
+
this._addStores = config.stores.filter((s) => s.writable && typeof s.add === 'function');
|
|
115
|
+
this._extractionStores = extractionStores;
|
|
116
|
+
this._searchToolConfig =
|
|
117
|
+
config.searchToolConfig === false
|
|
118
|
+
? false
|
|
119
|
+
: typeof config.searchToolConfig === 'object'
|
|
120
|
+
? config.searchToolConfig
|
|
121
|
+
: {};
|
|
122
|
+
if (config.addToolConfig === undefined || config.addToolConfig === false) {
|
|
123
|
+
this._addToolConfig = false;
|
|
124
|
+
this._addToolStores = [];
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
// The `add_memory` tool writes via `add` (not `addMessages`), so it needs an `add`-capable store.
|
|
128
|
+
if (this._addStores.length === 0) {
|
|
129
|
+
throw new Error('MemoryManager: addToolConfig is enabled but no writable stores implement add');
|
|
130
|
+
}
|
|
131
|
+
this._addToolConfig = typeof config.addToolConfig === 'object' ? config.addToolConfig : {};
|
|
132
|
+
this._addToolStores = this._resolveAddToolStores(this._addToolConfig);
|
|
133
|
+
}
|
|
134
|
+
this._injectionConfig =
|
|
135
|
+
config.injection === false ? false : typeof config.injection === 'object' ? config.injection : {};
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Resolves the writable stores the `add_memory` tool may write to. When `stores` is given, each
|
|
139
|
+
* entry (a store name or a {@link MemoryStore} instance) must resolve by name to a configured,
|
|
140
|
+
* `add`-capable writable store (else throws). Omitted means all such stores.
|
|
141
|
+
*/
|
|
142
|
+
_resolveAddToolStores(toolConfig) {
|
|
143
|
+
if (toolConfig.stores === undefined) {
|
|
144
|
+
return this._addStores;
|
|
145
|
+
}
|
|
146
|
+
const names = toolConfig.stores.map((store) => (typeof store === 'string' ? store : store.name));
|
|
147
|
+
return [...new Set(names)].map((name) => {
|
|
148
|
+
const found = this._config.stores.find((s) => s.name === name);
|
|
149
|
+
if (!found) {
|
|
150
|
+
throw new Error(`MemoryManager: addToolConfig store '${name}' not found`);
|
|
151
|
+
}
|
|
152
|
+
if (!found.writable) {
|
|
153
|
+
throw new Error(`MemoryManager: addToolConfig store '${name}' is not writable`);
|
|
154
|
+
}
|
|
155
|
+
if (typeof found.add !== 'function') {
|
|
156
|
+
throw new Error(`MemoryManager: addToolConfig store '${name}' has no add method (only addMessages)`);
|
|
157
|
+
}
|
|
158
|
+
return found;
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Initializes the plugin with the agent.
|
|
163
|
+
*
|
|
164
|
+
* Wires up two independent behaviors:
|
|
165
|
+
* - **Extraction**: for any store configured with {@link ExtractionConfig}, buffers conversation
|
|
166
|
+
* messages and attaches each store's triggers. A no-op when no store uses extraction.
|
|
167
|
+
* - **Injection**: when enabled, registers an `InvokeModelStage` middleware that folds retrieved
|
|
168
|
+
* memory into the model input for each call without touching durable history. See
|
|
169
|
+
* {@link _provideMemoryContext}, the `renderContent` callback the middleware invokes.
|
|
170
|
+
*
|
|
171
|
+
* @param agent - The agent this plugin is being attached to
|
|
172
|
+
*/
|
|
173
|
+
initAgent(agent) {
|
|
174
|
+
this._initExtraction(agent);
|
|
175
|
+
this._initInjection(agent);
|
|
176
|
+
}
|
|
177
|
+
/** Wires background extraction for stores configured with {@link ExtractionConfig}. */
|
|
178
|
+
_initExtraction(agent) {
|
|
179
|
+
if (this._extractionStores.length === 0) {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
const coordinator = new ExtractionCoordinator(this._extractionStores, agent.model);
|
|
183
|
+
this._coordinator = coordinator;
|
|
184
|
+
// Buffer every message the agent adds, so extraction has its own copy to save from.
|
|
185
|
+
agent.addHook(MessageAddedEvent, (event) => {
|
|
186
|
+
coordinator.record(event.message.toJSON());
|
|
187
|
+
});
|
|
188
|
+
for (const { store, config } of this._extractionStores) {
|
|
189
|
+
for (const trigger of config.triggers) {
|
|
190
|
+
trigger.attach({ agent, fire: () => void coordinator.process(store) });
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Registers the injection middleware when injection is enabled. Folds retrieved memory into the
|
|
196
|
+
* model input for each call via {@link _provideMemoryContext}, without touching durable history. A
|
|
197
|
+
* no-op when injection is disabled.
|
|
198
|
+
*/
|
|
199
|
+
_initInjection(agent) {
|
|
200
|
+
const config = this._injectionConfig;
|
|
201
|
+
if (config === false) {
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
agent.addMiddleware(InvokeModelStage.Input, createInjectionMiddleware({
|
|
205
|
+
...(config.trigger !== undefined && { trigger: config.trigger }),
|
|
206
|
+
renderContent: (context) => this._provideMemoryContext(context.messages, config),
|
|
207
|
+
}));
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Produces the memory context text to inject for a model call, or `undefined` to skip. This is the
|
|
211
|
+
* `renderContent` callback the injection middleware invokes (see {@link initAgent}).
|
|
212
|
+
*
|
|
213
|
+
* Derives a query (the configured callback or an adaptive default), searches memory, and renders the
|
|
214
|
+
* top entries. Skips silently (returns `undefined`) when no query can be derived or the search
|
|
215
|
+
* returns nothing. The rendering callback throwing fails open (returns `undefined`).
|
|
216
|
+
*
|
|
217
|
+
* @param messages - The current conversation, as data
|
|
218
|
+
* @param config - The resolved injection configuration
|
|
219
|
+
* @returns The injected text, or `undefined` when there is nothing to inject
|
|
220
|
+
*/
|
|
221
|
+
async _provideMemoryContext(messages, config) {
|
|
222
|
+
const query = this._resolveInjectionQuery(messages, config);
|
|
223
|
+
if (!query?.trim()) {
|
|
224
|
+
return undefined;
|
|
225
|
+
}
|
|
226
|
+
const maxResults = config.maxEntries ?? DEFAULT_MAX_ENTRIES;
|
|
227
|
+
const entries = (await this.search(query, { maxSearchResults: maxResults })).slice(0, maxResults);
|
|
228
|
+
if (entries.length === 0) {
|
|
229
|
+
return undefined;
|
|
230
|
+
}
|
|
231
|
+
try {
|
|
232
|
+
return config.format ? config.format({ entries }) : this._defaultInjectionFormat(entries);
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
logger.warn(`reason=<${normalizeError(error).message}> | injection format threw; skipping injection`);
|
|
236
|
+
return undefined;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Saves every store's remaining messages and waits for all saves to finish. No-op when no store has
|
|
241
|
+
* extraction configured.
|
|
242
|
+
*
|
|
243
|
+
* Extraction normally runs in the background, so the most recent turn may not be saved yet when the
|
|
244
|
+
* agent responds. Call this once at a boundary you control - typically your app's shutdown handler -
|
|
245
|
+
* so nothing is lost. A process killed before then (crash, hard timeout) may still lose the last
|
|
246
|
+
* unsaved turn; a more frequent trigger narrows that window.
|
|
247
|
+
*
|
|
248
|
+
* Do not call this after every turn alongside a periodic trigger: it forces a save each time and so
|
|
249
|
+
* defeats the trigger's schedule.
|
|
250
|
+
*/
|
|
251
|
+
async flush() {
|
|
252
|
+
await this._coordinator?.flush();
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Derives the injection search query. Uses the configured `query` callback when provided (a throw
|
|
256
|
+
* fails open, skipping injection); otherwise an adaptive default: the latest user message's text on
|
|
257
|
+
* a user turn, or the most recent assistant message's text otherwise (the previous autonomous step).
|
|
258
|
+
*
|
|
259
|
+
* @param messages - The current conversation, as data
|
|
260
|
+
* @param config - The resolved injection configuration
|
|
261
|
+
* @returns The query string, or `undefined` when none is available
|
|
262
|
+
*/
|
|
263
|
+
_resolveInjectionQuery(messages, config) {
|
|
264
|
+
if (config.query) {
|
|
265
|
+
try {
|
|
266
|
+
return config.query({ messages });
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
logger.warn(`reason=<${normalizeError(error).message}> | injection query threw; skipping injection`);
|
|
270
|
+
return undefined;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
const role = isUserTurn(messages) ? 'user' : 'assistant';
|
|
274
|
+
const index = this._findLastIndex(messages, (message) => message.role === role);
|
|
275
|
+
if (index < 0) {
|
|
276
|
+
return undefined;
|
|
277
|
+
}
|
|
278
|
+
const text = messages[index].content.filter((block) => 'text' in block)
|
|
279
|
+
.map((block) => block.text)
|
|
280
|
+
.join('\n')
|
|
281
|
+
.trim();
|
|
282
|
+
return text.length > 0 ? text : undefined;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Default injection format: a `<memory>` block with one `<entry>` per result. Each entry carries a
|
|
286
|
+
* `source` attribute naming the originating store (when known) so the model can attribute memories.
|
|
287
|
+
*
|
|
288
|
+
* @param entries - The retrieved memory entries to render
|
|
289
|
+
* @returns The rendered `<memory>` block
|
|
290
|
+
*/
|
|
291
|
+
_defaultInjectionFormat(entries) {
|
|
292
|
+
const items = entries.map((entry) => entry.storeName
|
|
293
|
+
? `<entry source="${escapeXmlAttr(entry.storeName)}">${escapeXmlText(entry.content)}</entry>`
|
|
294
|
+
: `<entry>${escapeXmlText(entry.content)}</entry>`);
|
|
295
|
+
return `<memory>\n${items.join('\n')}\n</memory>`;
|
|
296
|
+
}
|
|
297
|
+
/** Returns the index of the last element matching `predicate`, or -1. */
|
|
298
|
+
_findLastIndex(items, predicate) {
|
|
299
|
+
for (let i = items.length - 1; i >= 0; i--) {
|
|
300
|
+
if (predicate(items[i])) {
|
|
301
|
+
return i;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
return -1;
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Returns tools registered by this plugin.
|
|
308
|
+
*
|
|
309
|
+
* Includes the manager's own `search_memory` / `add_memory` tools (per their config) plus any
|
|
310
|
+
* tools the configured stores expose via {@link MemoryStore.getTools}.
|
|
311
|
+
*
|
|
312
|
+
* @returns Array of tools to register with the agent
|
|
313
|
+
*/
|
|
314
|
+
getTools() {
|
|
315
|
+
const tools = [];
|
|
316
|
+
if (this._searchToolConfig !== false) {
|
|
317
|
+
tools.push(this._createSearchTool(this._searchToolConfig));
|
|
318
|
+
}
|
|
319
|
+
if (this._addToolConfig !== false) {
|
|
320
|
+
tools.push(this._createAddTool(this._addToolConfig, this._addToolStores));
|
|
321
|
+
}
|
|
322
|
+
for (const store of this._config.stores) {
|
|
323
|
+
const storeTools = store.getTools?.() ?? [];
|
|
324
|
+
tools.push(...storeTools);
|
|
325
|
+
}
|
|
326
|
+
return tools;
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Search stores for entries matching the query. If `stores` is provided, only searches to those named stores.
|
|
330
|
+
*
|
|
331
|
+
* This method is unscoped with full access to all configured stores.
|
|
332
|
+
* Tool-level store scoping is applied by the search tool callback.
|
|
333
|
+
* When `options.stores` is omitted, all stores are searched.
|
|
334
|
+
*
|
|
335
|
+
* Only `maxSearchResults` and routing (`stores`) cross this layer. Store-specific search
|
|
336
|
+
* parameters (e.g. a Bedrock metadata `filter` or search-type override) are not expressible here
|
|
337
|
+
* across heterogeneous stores — set them as per-instance defaults on the store, or call the
|
|
338
|
+
* store's own `search()` directly for full control. Per-instance store policy (such as a tenant
|
|
339
|
+
* filter) always applies, including when reached through the `search_memory` tool.
|
|
340
|
+
*
|
|
341
|
+
* @param query - The search query string
|
|
342
|
+
* @param options - Optional max results (forwarded to all stores) and store name filter
|
|
343
|
+
* @returns Array of memory entries from matching stores
|
|
344
|
+
*/
|
|
345
|
+
async search(query, options) {
|
|
346
|
+
logger.debug(`query=<${query}>, max_search_results=<${options?.maxSearchResults}>, stores=<${options?.stores}> | searching stores`);
|
|
347
|
+
const targetStores = options?.stores !== undefined
|
|
348
|
+
? [...new Set(options.stores)].map((name) => {
|
|
349
|
+
const found = this._config.stores.find((s) => s.name === name);
|
|
350
|
+
if (!found) {
|
|
351
|
+
throw new Error(`MemoryManager: store '${name}' not found`);
|
|
352
|
+
}
|
|
353
|
+
return found;
|
|
354
|
+
})
|
|
355
|
+
: this._config.stores;
|
|
356
|
+
const settled = await Promise.allSettled(targetStores.map((store) => store.search(query, {
|
|
357
|
+
maxSearchResults: options?.maxSearchResults ?? store.maxSearchResults ?? DEFAULT_MAX_SEARCH_RESULTS,
|
|
358
|
+
})));
|
|
359
|
+
const results = [];
|
|
360
|
+
for (let i = 0; i < settled.length; i++) {
|
|
361
|
+
const settledResult = settled[i];
|
|
362
|
+
const storeName = targetStores[i].name;
|
|
363
|
+
if (settledResult.status === 'rejected') {
|
|
364
|
+
logger.warn(`store=<${storeName}>, reason=<${normalizeError(settledResult.reason).message}> | store search failed`);
|
|
365
|
+
continue;
|
|
366
|
+
}
|
|
367
|
+
for (const entry of settledResult.value) {
|
|
368
|
+
results.push({ ...entry, storeName });
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
logger.debug(`results=<${results.length}> | search complete`);
|
|
372
|
+
return results;
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Add content to writable stores. If `stores` is provided, only writes to those named stores;
|
|
376
|
+
* otherwise all writable stores are targeted.
|
|
377
|
+
*
|
|
378
|
+
* This method is unscoped, with full access to all configured writable stores; tool-level store
|
|
379
|
+
* scoping is applied by the add tool callback. Target stores are validated first (an unknown or
|
|
380
|
+
* read-only named store throws), then the writes are awaited: per-store failures are logged, and
|
|
381
|
+
* an `AggregateError` is thrown if any store fails.
|
|
382
|
+
*
|
|
383
|
+
* @param content - The text content to add
|
|
384
|
+
* @param options - Optional metadata and store name filter
|
|
385
|
+
*/
|
|
386
|
+
async add(content, options) {
|
|
387
|
+
let writableStores;
|
|
388
|
+
if (options?.stores !== undefined) {
|
|
389
|
+
writableStores = [...new Set(options.stores)].map((name) => {
|
|
390
|
+
const found = this._config.stores.find((s) => s.name === name);
|
|
391
|
+
if (!found) {
|
|
392
|
+
throw new Error(`MemoryManager: store '${name}' not found`);
|
|
393
|
+
}
|
|
394
|
+
if (!found.writable) {
|
|
395
|
+
throw new Error(`MemoryManager: store '${name}' is read-only`);
|
|
396
|
+
}
|
|
397
|
+
return found;
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
writableStores = this._addStores;
|
|
402
|
+
}
|
|
403
|
+
if (writableStores.length === 0) {
|
|
404
|
+
throw new Error('MemoryManager: no writable store matched');
|
|
405
|
+
}
|
|
406
|
+
const settled = await Promise.allSettled(writableStores.map((store) => store.add(content, options?.metadata)));
|
|
407
|
+
const failures = [];
|
|
408
|
+
for (let i = 0; i < settled.length; i++) {
|
|
409
|
+
const settledResult = settled[i];
|
|
410
|
+
if (settledResult.status === 'rejected') {
|
|
411
|
+
const storeName = writableStores[i].name;
|
|
412
|
+
logger.warn(`store=<${storeName}>, reason=<${normalizeError(settledResult.reason).message}> | store write failed`);
|
|
413
|
+
failures.push({ store: storeName, reason: settledResult.reason });
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
if (failures.length > 0) {
|
|
417
|
+
throw new AggregateError(failures.map((failure) => failure.reason), `MemoryManager: store writes failed: ${failures.map((failure) => failure.store).join(', ')}`);
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Resolves the store names that a tool callback should target against the tool's scoped set.
|
|
422
|
+
*
|
|
423
|
+
* - Omitting `requested` targets all scoped stores.
|
|
424
|
+
* - Names that are in scope are kept; out-of-scope names are dropped with a warning.
|
|
425
|
+
* - When every requested name is out of scope, throws so the model receives an actionable error
|
|
426
|
+
* (the tool layer turns the thrown error into a model-visible result it can correct from).
|
|
427
|
+
*
|
|
428
|
+
* @param scopedNames - Store names available to this tool
|
|
429
|
+
* @param requested - Store names the model asked for, if any
|
|
430
|
+
* @returns A non-empty list of in-scope store names to target
|
|
431
|
+
*/
|
|
432
|
+
_resolveToolTargets(scopedNames, requested) {
|
|
433
|
+
if (requested === undefined || requested.length === 0) {
|
|
434
|
+
return scopedNames;
|
|
435
|
+
}
|
|
436
|
+
const inScope = requested.filter((name) => scopedNames.includes(name));
|
|
437
|
+
const outOfScope = requested.filter((name) => !scopedNames.includes(name));
|
|
438
|
+
if (inScope.length === 0) {
|
|
439
|
+
throw new Error(`MemoryManager: requested=<${requested.join(', ')}> | none of the requested memory stores are available; available stores: ${scopedNames.join(', ')}`);
|
|
440
|
+
}
|
|
441
|
+
if (outOfScope.length > 0) {
|
|
442
|
+
logger.warn(`requested=<${outOfScope.join(', ')}> | ignoring memory stores outside this tool's scope`);
|
|
443
|
+
}
|
|
444
|
+
return inScope;
|
|
445
|
+
}
|
|
446
|
+
_createSearchTool(config) {
|
|
447
|
+
let description = config.description ?? SEARCH_TOOL_DESCRIPTION;
|
|
448
|
+
const storeDescriptions = this._searchStores
|
|
449
|
+
.filter((s) => s.description)
|
|
450
|
+
.map((s) => `- ${s.name}: ${s.description}`);
|
|
451
|
+
if (storeDescriptions.length > 0) {
|
|
452
|
+
description += `\n\nAvailable memory stores:\n${storeDescriptions.join('\n')}`;
|
|
453
|
+
description +=
|
|
454
|
+
'\n\nYou can target one or more memory stores by name if you know which domains are relevant, or omit the stores parameter to search all.';
|
|
455
|
+
}
|
|
456
|
+
const scopedNames = this._searchStores.map((s) => s.name);
|
|
457
|
+
const inputSchema = z.object({
|
|
458
|
+
query: z.string().describe('What to search for'),
|
|
459
|
+
maxSearchResults: z.number().optional().describe('Maximum number of results per store'),
|
|
460
|
+
stores: z
|
|
461
|
+
.array(z.string())
|
|
462
|
+
.optional()
|
|
463
|
+
.describe('Filter to specific stores by name. Omit to search all available stores.'),
|
|
464
|
+
});
|
|
465
|
+
return tool({
|
|
466
|
+
name: config.name ?? 'search_memory',
|
|
467
|
+
description,
|
|
468
|
+
inputSchema,
|
|
469
|
+
callback: async (input) => {
|
|
470
|
+
const stores = this._resolveToolTargets(scopedNames, input.stores);
|
|
471
|
+
const results = await this.search(input.query, {
|
|
472
|
+
...(input.maxSearchResults != null && { maxSearchResults: input.maxSearchResults }),
|
|
473
|
+
stores,
|
|
474
|
+
});
|
|
475
|
+
return results.map((entry) => ({
|
|
476
|
+
content: entry.content,
|
|
477
|
+
...(entry.storeName && { storeName: entry.storeName }),
|
|
478
|
+
...(entry.metadata && { metadata: entry.metadata }),
|
|
479
|
+
}));
|
|
480
|
+
},
|
|
481
|
+
});
|
|
482
|
+
}
|
|
483
|
+
_createAddTool(config, stores) {
|
|
484
|
+
let description = config.description ?? ADD_TOOL_DESCRIPTION;
|
|
485
|
+
const storeDescriptions = stores.filter((s) => s.description).map((s) => `- ${s.name}: ${s.description}`);
|
|
486
|
+
if (storeDescriptions.length > 0) {
|
|
487
|
+
description += `\n\nAvailable writable stores:\n${storeDescriptions.join('\n')}`;
|
|
488
|
+
description +=
|
|
489
|
+
'\n\nYou can target a specific store by name to route facts to the right place, or omit to add to all available writable stores.';
|
|
490
|
+
}
|
|
491
|
+
const scopedNames = stores.map((s) => s.name);
|
|
492
|
+
const waitForWrites = config.waitForWrites ?? true;
|
|
493
|
+
const inputSchema = z.object({
|
|
494
|
+
entries: z.array(z.string()).min(1).describe('Data to add to long-term memory'),
|
|
495
|
+
stores: z
|
|
496
|
+
.array(z.string())
|
|
497
|
+
.optional()
|
|
498
|
+
.describe('Target specific stores by name. Omit to add to all writable stores.'),
|
|
499
|
+
});
|
|
500
|
+
return tool({
|
|
501
|
+
name: config.name ?? 'add_memory',
|
|
502
|
+
description,
|
|
503
|
+
inputSchema,
|
|
504
|
+
callback: async (input) => {
|
|
505
|
+
const stores = this._resolveToolTargets(scopedNames, input.stores);
|
|
506
|
+
if (!waitForWrites) {
|
|
507
|
+
// Fire-and-forget: dispatch the writes without awaiting so the agent loop isn't blocked.
|
|
508
|
+
// add() logs per-store failures; swallow the rejection so it isn't an unhandled rejection.
|
|
509
|
+
for (const content of input.entries) {
|
|
510
|
+
void this.add(content, { stores }).catch(() => { });
|
|
511
|
+
}
|
|
512
|
+
return { accepted: input.entries.length };
|
|
513
|
+
}
|
|
514
|
+
// Await mode: surface failures to the model with concrete reasons (not nested AggregateErrors).
|
|
515
|
+
const settled = await Promise.allSettled(input.entries.map((content) => this.add(content, { stores })));
|
|
516
|
+
const failures = settled.filter((settledResult) => settledResult.status === 'rejected');
|
|
517
|
+
if (failures.length > 0) {
|
|
518
|
+
const reasons = _flattenReasons(failures.map((failure) => failure.reason));
|
|
519
|
+
throw new AggregateError(reasons, `MemoryManager: failed to add ${failures.length} of ${input.entries.length} entries: ${reasons.map((reason) => normalizeError(reason).message).join('; ')}`);
|
|
520
|
+
}
|
|
521
|
+
return { stored: input.entries.length };
|
|
522
|
+
},
|
|
523
|
+
});
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
//# sourceMappingURL=memory-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-manager.js","sourceRoot":"","sources":["../../../src/memory/memory-manager.ts"],"names":[],"mappings":"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"}
|