@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
package/README.md
CHANGED
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
</h2>
|
|
15
15
|
|
|
16
16
|
<div align="center">
|
|
17
|
-
<a href="https://github.com/strands-agents/sdk
|
|
18
|
-
<a href="https://github.com/strands-agents/sdk
|
|
19
|
-
<a href="https://github.com/strands-agents/sdk
|
|
20
|
-
<a href="https://github.com/strands-agents/sdk
|
|
17
|
+
<a href="https://github.com/strands-agents/harness-sdk/graphs/commit-activity"><img alt="GitHub commit activity" src="https://img.shields.io/github/commit-activity/m/strands-agents/harness-sdk"/></a>
|
|
18
|
+
<a href="https://github.com/strands-agents/harness-sdk/issues"><img alt="GitHub open issues" src="https://img.shields.io/github/issues/strands-agents/harness-sdk"/></a>
|
|
19
|
+
<a href="https://github.com/strands-agents/harness-sdk/pulls"><img alt="GitHub open pull requests" src="https://img.shields.io/github/issues-pr/strands-agents/harness-sdk"/></a>
|
|
20
|
+
<a href="https://github.com/strands-agents/harness-sdk/blob/main/LICENSE.APACHE"><img alt="License" src="https://img.shields.io/github/license/strands-agents/harness-sdk"/></a>
|
|
21
21
|
<a href="https://www.npmjs.com/package/@strands-agents/sdk"><img alt="NPM Version" src="https://img.shields.io/npm/v/@strands-agents/sdk"/></a>
|
|
22
22
|
<a href="https://discord.gg/strands"><img alt="Strands Discord" src="https://img.shields.io/badge/Discord-Strands-5865F2?logo=discord&logoColor=white"/></a>
|
|
23
23
|
</div>
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
<p>
|
|
26
26
|
<a href="https://strandsagents.com/">Documentation</a>
|
|
27
27
|
◆ <a href="https://github.com/strands-agents/samples">Samples</a>
|
|
28
|
-
◆ <a href="https://github.com/strands-agents/sdk-
|
|
28
|
+
◆ <a href="https://github.com/strands-agents/harness-sdk/tree/main/strands-py">Python SDK</a>
|
|
29
29
|
◆ <a href="https://github.com/strands-agents/tools">Tools</a>
|
|
30
30
|
◆ <a href="https://github.com/strands-agents/agent-builder">Agent Builder</a>
|
|
31
31
|
◆ <a href="https://github.com/strands-agents/mcp-server">MCP Server</a>
|
|
@@ -75,7 +75,7 @@ const result = await agent.invoke('What is the square root of 1764?')
|
|
|
75
75
|
console.log(result)
|
|
76
76
|
```
|
|
77
77
|
|
|
78
|
-
> **Note**: For the default Amazon Bedrock model provider, you'll need AWS credentials configured and model access enabled for Claude Sonnet 4 in your region.
|
|
78
|
+
> **Note**: For the default Amazon Bedrock model provider, you'll need AWS credentials configured and model access enabled for Claude Sonnet 4.6 in your region.
|
|
79
79
|
|
|
80
80
|
---
|
|
81
81
|
|
|
@@ -103,7 +103,7 @@ import { Agent, BedrockModel } from '@strands-agents/sdk'
|
|
|
103
103
|
|
|
104
104
|
const model = new BedrockModel({
|
|
105
105
|
region: 'us-east-1',
|
|
106
|
-
modelId: 'anthropic.claude-
|
|
106
|
+
modelId: 'global.anthropic.claude-sonnet-4-6',
|
|
107
107
|
maxTokens: 4096,
|
|
108
108
|
temperature: 0.7
|
|
109
109
|
})
|
|
@@ -313,13 +313,13 @@ For detailed guidance, tutorials, and concept overviews, please visit:
|
|
|
313
313
|
- **[MCP](./examples/mcp/)**: MCP integration example
|
|
314
314
|
- **[Browser Agent](./examples/browser-agent/)**: Browser-based agent with DOM manipulation
|
|
315
315
|
|
|
316
|
-
- **[Contributing Guide](https://github.com/strands-agents/sdk
|
|
316
|
+
- **[Contributing Guide](https://github.com/strands-agents/harness-sdk/blob/main/CONTRIBUTING.md)**: Development setup and guidelines
|
|
317
317
|
|
|
318
318
|
---
|
|
319
319
|
|
|
320
320
|
## Contributing ❤️
|
|
321
321
|
|
|
322
|
-
We welcome contributions! See our [Contributing Guide](https://github.com/strands-agents/sdk
|
|
322
|
+
We welcome contributions! See our [Contributing Guide](https://github.com/strands-agents/harness-sdk/blob/main/CONTRIBUTING.md) for details on:
|
|
323
323
|
|
|
324
324
|
- Development setup and environment
|
|
325
325
|
- Testing and code quality standards
|
|
@@ -336,11 +336,11 @@ Come meet the Strands team and other users on [**Discord**](https://discord.com/
|
|
|
336
336
|
|
|
337
337
|
## License
|
|
338
338
|
|
|
339
|
-
This project is licensed under the Apache License 2.0 - see the [LICENSE](https://github.com/strands-agents/sdk
|
|
339
|
+
This project is licensed under the Apache License 2.0 - see the [LICENSE](https://github.com/strands-agents/harness-sdk/blob/main/LICENSE.APACHE) file for details.
|
|
340
340
|
|
|
341
341
|
---
|
|
342
342
|
|
|
343
343
|
## Security
|
|
344
344
|
|
|
345
|
-
See [CONTRIBUTING](https://github.com/strands-agents/sdk
|
|
345
|
+
See [CONTRIBUTING](https://github.com/strands-agents/harness-sdk/blob/main/CONTRIBUTING.md#security-issue-notifications) for more information on reporting security issues.
|
|
346
346
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-helpers.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/agent-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAA6B,MAAM,mBAAmB,CAAA;AAC/F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,OAAO,EAAa,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAEhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"file":"agent-helpers.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/agent-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAA6B,MAAM,mBAAmB,CAAA;AAC/F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,OAAO,EAAa,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAEhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAG3D,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,oBAAoB,CAAA;AACpE,OAAO,KAAK,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC/E,OAAO,EAAqB,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAEjF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,EAAE,wBAAwB,CAAC,aAAa,CAAC,CAAA;IAClD,QAAQ,EAAE,YAAY,CAAC,aAAa,CAAC,CAAA;CACtC,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;IACpB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACpC;;OAEG;IACH,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG;IAAE,YAAY,EAAE,WAAW,EAAE,CAAA;CAAE,CAAA;AAE/D;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,SAAS,CA0B/D;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,SAAS,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAM1G;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,kBAAkB,EAAE,YAAY,CAAC;IAChF;;OAEG;IACH,UAAU,EAAE,UAAU,CAAA;IAEtB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC1C;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAgC1E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,gBAAgB,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAwB,GAC5E,cAAc,CA8BhB"}
|
|
@@ -6,6 +6,7 @@ import { expect } from 'vitest';
|
|
|
6
6
|
import { Message, TextBlock } from '../types/messages.js';
|
|
7
7
|
import { StateStore } from '../state-store.js';
|
|
8
8
|
import { ToolRegistry } from '../registry/tool-registry.js';
|
|
9
|
+
import { defaultSandbox } from '../sandbox/default.js';
|
|
9
10
|
import { expectLoopMetrics } from './metrics-helpers.js';
|
|
10
11
|
/**
|
|
11
12
|
* Helper to create a mock Agent for testing.
|
|
@@ -23,6 +24,11 @@ export function createMockAgent(data) {
|
|
|
23
24
|
modelState: new StateStore(),
|
|
24
25
|
toolRegistry: data?.toolRegistry ?? new ToolRegistry(),
|
|
25
26
|
cancelSignal: new AbortController().signal,
|
|
27
|
+
// Mirror the real Agent.sandbox getter: resolve the environment default lazily.
|
|
28
|
+
// An explicit `extra.sandbox` below overrides this accessor.
|
|
29
|
+
get sandbox() {
|
|
30
|
+
return defaultSandbox.get();
|
|
31
|
+
},
|
|
26
32
|
addHook: (eventType, callback) => {
|
|
27
33
|
trackedHooks.push({
|
|
28
34
|
eventType: eventType,
|
|
@@ -30,6 +36,9 @@ export function createMockAgent(data) {
|
|
|
30
36
|
});
|
|
31
37
|
return () => { };
|
|
32
38
|
},
|
|
39
|
+
// No-op so plugins that register middleware in initAgent (e.g. MemoryManager injection) work
|
|
40
|
+
// out of the box. Tests that inspect registrations override this via `extra.addMiddleware`.
|
|
41
|
+
addMiddleware: () => () => { },
|
|
33
42
|
...data?.extra,
|
|
34
43
|
trackedHooks,
|
|
35
44
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-helpers.js","sourceRoot":"","sources":["../../../src/__fixtures__/agent-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAI/B,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"file":"agent-helpers.js","sourceRoot":"","sources":["../../../src/__fixtures__/agent-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-node-defaults.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/register-node-defaults.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { defaultSandbox } from '../sandbox/default.js';
|
|
2
|
+
import { NotASandboxLocalEnvironment } from '../sandbox/not-a-sandbox-local-environment.js';
|
|
3
|
+
// In production, index.node.ts registers this on import. Tests don't go through that entry
|
|
4
|
+
// point, so this setup file does it instead.
|
|
5
|
+
defaultSandbox.set(new NotASandboxLocalEnvironment());
|
|
6
|
+
//# sourceMappingURL=register-node-defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-node-defaults.js","sourceRoot":"","sources":["../../../src/__fixtures__/register-node-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,2BAA2B,EAAE,MAAM,+CAA+C,CAAA;AAE3F,2FAA2F;AAC3F,6CAA6C;AAC7C,cAAc,CAAC,GAAG,CAAC,IAAI,2BAA2B,EAAE,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-sandbox.node.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/test-sandbox.node.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"test-sandbox.node.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/test-sandbox.node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAGlF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEvE;;;;;GAKG;AACH,qBAAa,WAAY,SAAQ,iBAAiB;IAChD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;gBAEf,UAAU,EAAE,MAAM;IAKvB,gBAAgB,CACrB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,cAAc,GACvB,cAAc,CAAC,WAAW,GAAG,eAAe,EAAE,IAAI,EAAE,SAAS,CAAC;CAMlE"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { PosixShellSandbox } from '../sandbox/posix-shell.js';
|
|
2
|
-
import { shellQuote } from '../
|
|
1
|
+
import { buildShellEnvPrefix, PosixShellSandbox } from '../sandbox/posix-shell.js';
|
|
2
|
+
import { shellQuote } from '../sandbox/constants.js';
|
|
3
3
|
import { streamProcess } from '../sandbox/stream-process.js';
|
|
4
4
|
/**
|
|
5
5
|
* Test sandbox that executes commands within a specific working directory.
|
|
@@ -15,7 +15,8 @@ export class TestSandbox extends PosixShellSandbox {
|
|
|
15
15
|
}
|
|
16
16
|
async *executeStreaming(command, options) {
|
|
17
17
|
const cwd = options?.cwd ?? this.workingDir;
|
|
18
|
-
const
|
|
18
|
+
const envPrefix = buildShellEnvPrefix(options?.env);
|
|
19
|
+
const fullCommand = `cd ${shellQuote(cwd)} && ${envPrefix}${command}`;
|
|
19
20
|
yield* streamProcess('sh', ['-c', fullCommand], { timeout: options?.timeout, signal: options?.signal });
|
|
20
21
|
}
|
|
21
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-sandbox.node.js","sourceRoot":"","sources":["../../../src/__fixtures__/test-sandbox.node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"test-sandbox.node.js","sourceRoot":"","sources":["../../../src/__fixtures__/test-sandbox.node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAI5D;;;;;GAKG;AACH,MAAM,OAAO,WAAY,SAAQ,iBAAiB;IACvC,UAAU,CAAQ;IAE3B,YAAY,UAAkB;QAC5B,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;IAED,KAAK,CAAC,CAAC,gBAAgB,CACrB,OAAe,EACf,OAAwB;QAExB,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,UAAU,CAAA;QAC3C,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;QACnD,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,OAAO,SAAS,GAAG,OAAO,EAAE,CAAA;QACrE,KAAK,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;IACzG,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-slot.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/default-slot.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { createDefaultSlot } from '../default-slot.js';
|
|
3
|
+
import { DefaultNotConfiguredError } from '../errors.js';
|
|
4
|
+
describe('createDefaultSlot', () => {
|
|
5
|
+
it('throws DefaultNotConfiguredError when read before configured', () => {
|
|
6
|
+
const slot = createDefaultSlot('not set');
|
|
7
|
+
expect(() => slot.get()).toThrow(DefaultNotConfiguredError);
|
|
8
|
+
expect(() => slot.get()).toThrow('not set');
|
|
9
|
+
});
|
|
10
|
+
it('returns the configured value after set', () => {
|
|
11
|
+
const slot = createDefaultSlot('not set');
|
|
12
|
+
slot.set('value');
|
|
13
|
+
expect(slot.get()).toBe('value');
|
|
14
|
+
});
|
|
15
|
+
it('stores falsy values that the sentinel must not confuse with unset', () => {
|
|
16
|
+
const numbers = createDefaultSlot('no number');
|
|
17
|
+
numbers.set(0);
|
|
18
|
+
expect(numbers.get()).toBe(0);
|
|
19
|
+
const nullable = createDefaultSlot('no value');
|
|
20
|
+
nullable.set(null);
|
|
21
|
+
expect(nullable.get()).toBeNull();
|
|
22
|
+
const maybe = createDefaultSlot('no value');
|
|
23
|
+
maybe.set(undefined);
|
|
24
|
+
expect(maybe.get()).toBeUndefined();
|
|
25
|
+
});
|
|
26
|
+
it('overwrites on a subsequent set', () => {
|
|
27
|
+
const slot = createDefaultSlot('not set');
|
|
28
|
+
slot.set('first');
|
|
29
|
+
slot.set('second');
|
|
30
|
+
expect(slot.get()).toBe('second');
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=default-slot.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-slot.test.js","sourceRoot":"","sources":["../../../src/__tests__/default-slot.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AAExD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,IAAI,GAAG,iBAAiB,CAAS,SAAS,CAAC,CAAA;QACjD,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAA;QAC3D,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,IAAI,GAAG,iBAAiB,CAAS,SAAS,CAAC,CAAA;QACjD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACjB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,OAAO,GAAG,iBAAiB,CAAS,WAAW,CAAC,CAAA;QACtD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACd,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAE7B,MAAM,QAAQ,GAAG,iBAAiB,CAAgB,UAAU,CAAC,CAAA;QAC7D,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAClB,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAA;QAEjC,MAAM,KAAK,GAAG,iBAAiB,CAAqB,UAAU,CAAC,CAAA;QAC/D,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACpB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,aAAa,EAAE,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,IAAI,GAAG,iBAAiB,CAAS,SAAS,CAAC,CAAA;QACjD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACjB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAClB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-lock.test.d.ts","sourceRoot":"","sources":["../../../../src/a2a/__tests__/async-lock.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
|
|
2
|
+
if (value !== null && value !== void 0) {
|
|
3
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
4
|
+
var dispose, inner;
|
|
5
|
+
if (async) {
|
|
6
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
7
|
+
dispose = value[Symbol.asyncDispose];
|
|
8
|
+
}
|
|
9
|
+
if (dispose === void 0) {
|
|
10
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
11
|
+
dispose = value[Symbol.dispose];
|
|
12
|
+
if (async) inner = dispose;
|
|
13
|
+
}
|
|
14
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
15
|
+
if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
|
|
16
|
+
env.stack.push({ value: value, dispose: dispose, async: async });
|
|
17
|
+
}
|
|
18
|
+
else if (async) {
|
|
19
|
+
env.stack.push({ async: true });
|
|
20
|
+
}
|
|
21
|
+
return value;
|
|
22
|
+
};
|
|
23
|
+
var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
|
|
24
|
+
return function (env) {
|
|
25
|
+
function fail(e) {
|
|
26
|
+
env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
|
|
27
|
+
env.hasError = true;
|
|
28
|
+
}
|
|
29
|
+
var r, s = 0;
|
|
30
|
+
function next() {
|
|
31
|
+
while (r = env.stack.pop()) {
|
|
32
|
+
try {
|
|
33
|
+
if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
|
|
34
|
+
if (r.dispose) {
|
|
35
|
+
var result = r.dispose.call(r.value);
|
|
36
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
|
|
37
|
+
}
|
|
38
|
+
else s |= 1;
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
fail(e);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
|
|
45
|
+
if (env.hasError) throw env.error;
|
|
46
|
+
}
|
|
47
|
+
return next();
|
|
48
|
+
};
|
|
49
|
+
})(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
50
|
+
var e = new Error(message);
|
|
51
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
52
|
+
});
|
|
53
|
+
import { describe, expect, it } from 'vitest';
|
|
54
|
+
import { AsyncLock } from '../async-lock.js';
|
|
55
|
+
describe('AsyncLock', () => {
|
|
56
|
+
it('serializes critical sections in FIFO order', async () => {
|
|
57
|
+
const lock = new AsyncLock();
|
|
58
|
+
const order = [];
|
|
59
|
+
async function task(id, delayMs) {
|
|
60
|
+
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
61
|
+
try {
|
|
62
|
+
const _release = __addDisposableResource(env_1, await lock.acquire(), false);
|
|
63
|
+
order.push(id);
|
|
64
|
+
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
65
|
+
}
|
|
66
|
+
catch (e_1) {
|
|
67
|
+
env_1.error = e_1;
|
|
68
|
+
env_1.hasError = true;
|
|
69
|
+
}
|
|
70
|
+
finally {
|
|
71
|
+
__disposeResources(env_1);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Start three tasks "concurrently". Despite descending delays, the lock
|
|
75
|
+
// forces them to run one at a time in acquisition order.
|
|
76
|
+
await Promise.all([task(1, 15), task(2, 10), task(3, 5)]);
|
|
77
|
+
expect(order).toStrictEqual([1, 2, 3]);
|
|
78
|
+
});
|
|
79
|
+
it('prevents overlap of holders', async () => {
|
|
80
|
+
const lock = new AsyncLock();
|
|
81
|
+
let active = 0;
|
|
82
|
+
let maxActive = 0;
|
|
83
|
+
async function task() {
|
|
84
|
+
const env_2 = { stack: [], error: void 0, hasError: false };
|
|
85
|
+
try {
|
|
86
|
+
const _release = __addDisposableResource(env_2, await lock.acquire(), false);
|
|
87
|
+
active++;
|
|
88
|
+
maxActive = Math.max(maxActive, active);
|
|
89
|
+
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
90
|
+
active--;
|
|
91
|
+
}
|
|
92
|
+
catch (e_2) {
|
|
93
|
+
env_2.error = e_2;
|
|
94
|
+
env_2.hasError = true;
|
|
95
|
+
}
|
|
96
|
+
finally {
|
|
97
|
+
__disposeResources(env_2);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
await Promise.all([task(), task(), task(), task()]);
|
|
101
|
+
expect(maxActive).toBe(1);
|
|
102
|
+
});
|
|
103
|
+
it('releases the lock even if the holder throws', async () => {
|
|
104
|
+
const env_3 = { stack: [], error: void 0, hasError: false };
|
|
105
|
+
try {
|
|
106
|
+
const lock = new AsyncLock();
|
|
107
|
+
try {
|
|
108
|
+
const env_4 = { stack: [], error: void 0, hasError: false };
|
|
109
|
+
try {
|
|
110
|
+
const _release = __addDisposableResource(env_4, await lock.acquire(), false);
|
|
111
|
+
throw new Error('boom');
|
|
112
|
+
}
|
|
113
|
+
catch (e_3) {
|
|
114
|
+
env_4.error = e_3;
|
|
115
|
+
env_4.hasError = true;
|
|
116
|
+
}
|
|
117
|
+
finally {
|
|
118
|
+
__disposeResources(env_4);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// swallow; the `using` handle is disposed as the block unwinds
|
|
123
|
+
}
|
|
124
|
+
// A subsequent acquire must resolve (would hang if the lock leaked).
|
|
125
|
+
const _release2 = __addDisposableResource(env_3, await lock.acquire(), false);
|
|
126
|
+
expect(true).toBe(true);
|
|
127
|
+
}
|
|
128
|
+
catch (e_4) {
|
|
129
|
+
env_3.error = e_4;
|
|
130
|
+
env_3.hasError = true;
|
|
131
|
+
}
|
|
132
|
+
finally {
|
|
133
|
+
__disposeResources(env_3);
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
//# sourceMappingURL=async-lock.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-lock.test.js","sourceRoot":"","sources":["../../../../src/a2a/__tests__/async-lock.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE5C,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,IAAI,GAAG,IAAI,SAAS,EAAE,CAAA;QAC5B,MAAM,KAAK,GAAa,EAAE,CAAA;QAE1B,KAAK,UAAU,IAAI,CAAC,EAAU,EAAE,OAAe;;;gBAC7C,MAAM,QAAQ,kCAAG,MAAM,IAAI,CAAC,OAAO,EAAE,QAAA,CAAA;gBACrC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBACd,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;;;;;;;;;SAC7D;QAED,wEAAwE;QACxE,yDAAyD;QACzD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAEzD,MAAM,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,IAAI,GAAG,IAAI,SAAS,EAAE,CAAA;QAC5B,IAAI,MAAM,GAAG,CAAC,CAAA;QACd,IAAI,SAAS,GAAG,CAAC,CAAA;QAEjB,KAAK,UAAU,IAAI;;;gBACjB,MAAM,QAAQ,kCAAG,MAAM,IAAI,CAAC,OAAO,EAAE,QAAA,CAAA;gBACrC,MAAM,EAAE,CAAA;gBACR,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;gBACvC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;gBACtD,MAAM,EAAE,CAAA;;;;;;;;;SACT;QAED,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QAEnD,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC3B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;;;YAC3D,MAAM,IAAI,GAAG,IAAI,SAAS,EAAE,CAAA;YAE5B,IAAI,CAAC;;;oBACH,MAAM,QAAQ,kCAAG,MAAM,IAAI,CAAC,OAAO,EAAE,QAAA,CAAA;oBACrC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAA;;;;;;;;;aACxB;YAAC,MAAM,CAAC;gBACP,+DAA+D;YACjE,CAAC;YAED,qEAAqE;YACrE,MAAM,SAAS,kCAAG,MAAM,IAAI,CAAC,OAAO,EAAE,QAAA,CAAA;YACtC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;;;;;;;;;KACxB,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -39,7 +39,7 @@ describe('A2AExecutor', () => {
|
|
|
39
39
|
it('streams text deltas as artifact chunks and publishes completed status', async () => {
|
|
40
40
|
const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Agent response' });
|
|
41
41
|
const agent = new Agent({ model, printer: false });
|
|
42
|
-
const executor = new A2AExecutor(agent);
|
|
42
|
+
const executor = new A2AExecutor({ agent });
|
|
43
43
|
const eventBus = createMockEventBus();
|
|
44
44
|
await executor.execute(createRequestContext('Hello agent'), eventBus);
|
|
45
45
|
// First event registers the task with the ResultManager
|
|
@@ -79,7 +79,7 @@ describe('A2AExecutor', () => {
|
|
|
79
79
|
{ type: 'textBlock', text: 'Second' },
|
|
80
80
|
]);
|
|
81
81
|
const agent = new Agent({ model, printer: false });
|
|
82
|
-
const executor = new A2AExecutor(agent);
|
|
82
|
+
const executor = new A2AExecutor({ agent });
|
|
83
83
|
const eventBus = createMockEventBus();
|
|
84
84
|
await executor.execute(createRequestContext('Hello'), eventBus);
|
|
85
85
|
const artifactEvents = eventBus.events.filter((e) => e.kind === 'artifact-update');
|
|
@@ -92,7 +92,7 @@ describe('A2AExecutor', () => {
|
|
|
92
92
|
const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Response' });
|
|
93
93
|
const agent = new Agent({ model, printer: false });
|
|
94
94
|
vi.spyOn(agent, 'stream');
|
|
95
|
-
const executor = new A2AExecutor(agent);
|
|
95
|
+
const executor = new A2AExecutor({ agent });
|
|
96
96
|
const eventBus = createMockEventBus();
|
|
97
97
|
const context = {
|
|
98
98
|
taskId: 'task-1',
|
|
@@ -115,7 +115,7 @@ describe('A2AExecutor', () => {
|
|
|
115
115
|
const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Response' });
|
|
116
116
|
const agent = new Agent({ model, printer: false });
|
|
117
117
|
const streamSpy = vi.spyOn(agent, 'stream');
|
|
118
|
-
const executor = new A2AExecutor(agent);
|
|
118
|
+
const executor = new A2AExecutor({ agent });
|
|
119
119
|
const eventBus = createMockEventBus();
|
|
120
120
|
const context = createRequestContext('hello', 'task-42');
|
|
121
121
|
await executor.execute(context, eventBus);
|
|
@@ -126,7 +126,7 @@ describe('A2AExecutor', () => {
|
|
|
126
126
|
it('re-throws when agent throws, publishing only the initial task event', async () => {
|
|
127
127
|
const model = new MockMessageModel().addTurn(new Error('Agent failed'));
|
|
128
128
|
const agent = new Agent({ model, printer: false });
|
|
129
|
-
const executor = new A2AExecutor(agent);
|
|
129
|
+
const executor = new A2AExecutor({ agent });
|
|
130
130
|
const eventBus = createMockEventBus();
|
|
131
131
|
await expect(executor.execute(createRequestContext('Hello'), eventBus)).rejects.toThrow('Agent failed');
|
|
132
132
|
// Only the initial task registration event is published before the error
|
|
@@ -161,7 +161,7 @@ describe('A2AExecutor', () => {
|
|
|
161
161
|
});
|
|
162
162
|
},
|
|
163
163
|
};
|
|
164
|
-
const executor = new A2AExecutor(mockAgent);
|
|
164
|
+
const executor = new A2AExecutor({ agentFactory: () => mockAgent });
|
|
165
165
|
const eventBus = createMockEventBus();
|
|
166
166
|
await executor.execute(createRequestContext('Generate an image'), eventBus);
|
|
167
167
|
const artifactEvents = eventBus.events.filter((e) => e.kind === 'artifact-update');
|
|
@@ -182,7 +182,7 @@ describe('A2AExecutor', () => {
|
|
|
182
182
|
it('throws A2AError.invalidRequest when parts produce no content blocks', async () => {
|
|
183
183
|
const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Response' });
|
|
184
184
|
const agent = new Agent({ model, printer: false });
|
|
185
|
-
const executor = new A2AExecutor(agent);
|
|
185
|
+
const executor = new A2AExecutor({ agent });
|
|
186
186
|
const eventBus = createMockEventBus();
|
|
187
187
|
const context = {
|
|
188
188
|
taskId: 'task-1',
|
|
@@ -197,11 +197,149 @@ describe('A2AExecutor', () => {
|
|
|
197
197
|
it('throws A2AError.unsupportedOperation', async () => {
|
|
198
198
|
const model = new MockMessageModel().addTurn({ type: 'textBlock', text: '' });
|
|
199
199
|
const agent = new Agent({ model, printer: false });
|
|
200
|
-
const executor = new A2AExecutor(agent);
|
|
200
|
+
const executor = new A2AExecutor({ agent });
|
|
201
201
|
const eventBus = createMockEventBus();
|
|
202
202
|
await expect(executor.cancelTask('task-1', eventBus)).rejects.toThrow('Task cancellation is not supported');
|
|
203
203
|
expect(eventBus.events).toStrictEqual([]);
|
|
204
204
|
});
|
|
205
205
|
});
|
|
206
206
|
});
|
|
207
|
+
// ============================================================================
|
|
208
|
+
// Per-context conversation isolation
|
|
209
|
+
//
|
|
210
|
+
// These tests drive a real Agent (with a deterministic echo model) through a
|
|
211
|
+
// single executor across two distinct A2A contextIds, asserting that no
|
|
212
|
+
// conversation state leaks between contexts, while a single context still
|
|
213
|
+
// accumulates its own history across turns.
|
|
214
|
+
// ============================================================================
|
|
215
|
+
/**
|
|
216
|
+
* Deterministic, network-free model that echoes the latest user text prefixed
|
|
217
|
+
* with `ECHO[<history-length>]`, so tests can observe per-context history growth.
|
|
218
|
+
*/
|
|
219
|
+
class EchoModel extends MockMessageModel {
|
|
220
|
+
async *stream(messages) {
|
|
221
|
+
const lastUser = [...messages].reverse().find((m) => m.role === 'user');
|
|
222
|
+
const lastText = lastUser?.content.find((b) => b.type === 'textBlock')?.text ?? '';
|
|
223
|
+
const reply = `ECHO[${messages.length}]: ${lastText}`;
|
|
224
|
+
yield { type: 'modelMessageStartEvent', role: 'assistant' };
|
|
225
|
+
yield { type: 'modelContentBlockStartEvent' };
|
|
226
|
+
yield { type: 'modelContentBlockDeltaEvent', delta: { type: 'textDelta', text: reply } };
|
|
227
|
+
yield { type: 'modelContentBlockStopEvent' };
|
|
228
|
+
yield { type: 'modelMessageStopEvent', stopReason: 'endTurn' };
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
function makeEchoAgent() {
|
|
232
|
+
return new Agent({ model: new EchoModel(), printer: false });
|
|
233
|
+
}
|
|
234
|
+
function ctxRequest(contextId, taskId, text) {
|
|
235
|
+
return {
|
|
236
|
+
taskId,
|
|
237
|
+
contextId,
|
|
238
|
+
userMessage: {
|
|
239
|
+
kind: 'message',
|
|
240
|
+
messageId: `msg-${taskId}`,
|
|
241
|
+
role: 'user',
|
|
242
|
+
parts: [{ kind: 'text', text }],
|
|
243
|
+
},
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
function artifactTexts(eventBus) {
|
|
247
|
+
return eventBus.events
|
|
248
|
+
.filter((e) => e.kind === 'artifact-update')
|
|
249
|
+
.flatMap((e) => e.artifact.parts)
|
|
250
|
+
.filter((p) => p.kind === 'text')
|
|
251
|
+
.map((p) => p.text);
|
|
252
|
+
}
|
|
253
|
+
describe('A2AExecutor context isolation', () => {
|
|
254
|
+
describe('constructor validation', () => {
|
|
255
|
+
it('throws when neither agent nor agentFactory is provided', () => {
|
|
256
|
+
expect(() => new A2AExecutor()).toThrow("Provide exactly one of 'agent' or 'agentFactory'.");
|
|
257
|
+
});
|
|
258
|
+
it('throws when both agent and agentFactory are provided', () => {
|
|
259
|
+
const agent = new Agent({ model: new MockMessageModel(), printer: false });
|
|
260
|
+
expect(() => new A2AExecutor({ agent, agentFactory: () => agent })).toThrow("Provide exactly one of 'agent' or 'agentFactory'.");
|
|
261
|
+
});
|
|
262
|
+
it('throws when maxContexts is less than 1', () => {
|
|
263
|
+
expect(() => new A2AExecutor({ agentFactory: makeEchoAgent, maxContexts: 0 })).toThrow('maxContexts must be at least 1');
|
|
264
|
+
});
|
|
265
|
+
});
|
|
266
|
+
describe('factory mode', () => {
|
|
267
|
+
it('builds one agent per context and reuses it within a context', async () => {
|
|
268
|
+
const built = [];
|
|
269
|
+
const agentsByContext = new Map();
|
|
270
|
+
const executor = new A2AExecutor({
|
|
271
|
+
agentFactory: (contextId) => {
|
|
272
|
+
built.push(contextId);
|
|
273
|
+
const agent = makeEchoAgent();
|
|
274
|
+
agentsByContext.set(contextId, agent);
|
|
275
|
+
return agent;
|
|
276
|
+
},
|
|
277
|
+
});
|
|
278
|
+
await executor.execute(ctxRequest('ctx-A', 'a-1', 'first'), createMockEventBus());
|
|
279
|
+
await executor.execute(ctxRequest('ctx-A', 'a-2', 'second'), createMockEventBus());
|
|
280
|
+
await executor.execute(ctxRequest('ctx-B', 'b-1', 'first'), createMockEventBus());
|
|
281
|
+
// Factory invoked once per distinct context, not per request.
|
|
282
|
+
expect(built).toStrictEqual(['ctx-A', 'ctx-B']);
|
|
283
|
+
// Distinct Agent instances per context.
|
|
284
|
+
expect(agentsByContext.get('ctx-A')).not.toBe(agentsByContext.get('ctx-B'));
|
|
285
|
+
});
|
|
286
|
+
it('isolates history across contexts and continues it within one', async () => {
|
|
287
|
+
const executor = new A2AExecutor({ agentFactory: makeEchoAgent });
|
|
288
|
+
// ctx-A turn 1: just the user message in history -> ECHO[1].
|
|
289
|
+
let bus = createMockEventBus();
|
|
290
|
+
await executor.execute(ctxRequest('ctx-A', 'a-1', 'SECRET-AAAA'), bus);
|
|
291
|
+
expect(artifactTexts(bus).some((t) => t.includes('ECHO[1]:') && t.includes('SECRET-AAAA'))).toBe(true);
|
|
292
|
+
// ctx-A turn 2: history now has user1, assistant1, user2 -> ECHO[3].
|
|
293
|
+
bus = createMockEventBus();
|
|
294
|
+
await executor.execute(ctxRequest('ctx-A', 'a-2', 'again'), bus);
|
|
295
|
+
expect(artifactTexts(bus).some((t) => t.includes('ECHO[3]:'))).toBe(true);
|
|
296
|
+
// ctx-B is independent -> starts fresh, never sees ctx-A's secret.
|
|
297
|
+
bus = createMockEventBus();
|
|
298
|
+
await executor.execute(ctxRequest('ctx-B', 'b-1', 'hello'), bus);
|
|
299
|
+
const textsB = artifactTexts(bus);
|
|
300
|
+
expect(textsB.some((t) => t.includes('ECHO[1]:'))).toBe(true);
|
|
301
|
+
expect(textsB.some((t) => t.includes('SECRET-AAAA'))).toBe(false);
|
|
302
|
+
});
|
|
303
|
+
it('evicts the least-recently-used context beyond maxContexts', async () => {
|
|
304
|
+
const built = [];
|
|
305
|
+
const executor = new A2AExecutor({
|
|
306
|
+
agentFactory: (contextId) => {
|
|
307
|
+
built.push(contextId);
|
|
308
|
+
return makeEchoAgent();
|
|
309
|
+
},
|
|
310
|
+
maxContexts: 2,
|
|
311
|
+
});
|
|
312
|
+
await executor.execute(ctxRequest('ctx-A', 'a-1', 'hi'), createMockEventBus());
|
|
313
|
+
await executor.execute(ctxRequest('ctx-B', 'b-1', 'hi'), createMockEventBus());
|
|
314
|
+
await executor.execute(ctxRequest('ctx-A', 'a-2', 'again'), createMockEventBus()); // touch A
|
|
315
|
+
await executor.execute(ctxRequest('ctx-C', 'c-1', 'hi'), createMockEventBus()); // evicts B
|
|
316
|
+
// B was evicted, so reusing it rebuilds a fresh agent (factory called again for B).
|
|
317
|
+
await executor.execute(ctxRequest('ctx-B', 'b-2', 'hi'), createMockEventBus());
|
|
318
|
+
expect(built).toStrictEqual(['ctx-A', 'ctx-B', 'ctx-C', 'ctx-B']);
|
|
319
|
+
});
|
|
320
|
+
});
|
|
321
|
+
describe('single-agent mode (deprecated)', () => {
|
|
322
|
+
it('isolates history across contexts via snapshot swapping', async () => {
|
|
323
|
+
const executor = new A2AExecutor({ agent: makeEchoAgent() });
|
|
324
|
+
let bus = createMockEventBus();
|
|
325
|
+
await executor.execute(ctxRequest('ctx-A', 'a-1', 'SECRET-AAAA'), bus);
|
|
326
|
+
expect(artifactTexts(bus).some((t) => t.includes('ECHO[1]:') && t.includes('SECRET-AAAA'))).toBe(true);
|
|
327
|
+
// ctx-A continues -> ECHO[3].
|
|
328
|
+
bus = createMockEventBus();
|
|
329
|
+
await executor.execute(ctxRequest('ctx-A', 'a-2', 'again'), bus);
|
|
330
|
+
expect(artifactTexts(bus).some((t) => t.includes('ECHO[3]:'))).toBe(true);
|
|
331
|
+
// ctx-B starts fresh and never sees ctx-A's secret.
|
|
332
|
+
bus = createMockEventBus();
|
|
333
|
+
await executor.execute(ctxRequest('ctx-B', 'b-1', 'hello'), bus);
|
|
334
|
+
const textsB = artifactTexts(bus);
|
|
335
|
+
expect(textsB.some((t) => t.includes('ECHO[1]:'))).toBe(true);
|
|
336
|
+
expect(textsB.some((t) => t.includes('SECRET-AAAA'))).toBe(false);
|
|
337
|
+
});
|
|
338
|
+
it('throws when a single agent has a sessionManager', () => {
|
|
339
|
+
const agent = makeEchoAgent();
|
|
340
|
+
agent.sessionManager = {};
|
|
341
|
+
expect(() => new A2AExecutor({ agent })).toThrow('sessionManager is not supported');
|
|
342
|
+
});
|
|
343
|
+
});
|
|
344
|
+
});
|
|
207
345
|
//# sourceMappingURL=executor.test.js.map
|