@strands-agents/sdk 1.4.0 → 1.5.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 +6 -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.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 +132 -2
- package/dist/src/agent/agent.d.ts.map +1 -1
- package/dist/src/agent/agent.js +478 -188
- package/dist/src/agent/agent.js.map +1 -1
- 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/pin-message.d.ts +45 -0
- package/dist/src/conversation-manager/pin-message.d.ts.map +1 -0
- package/dist/src/conversation-manager/pin-message.js +106 -0
- package/dist/src/conversation-manager/pin-message.js.map +1 -0
- 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 +27 -4
- package/dist/src/conversation-manager/sliding-window-conversation-manager.js.map +1 -1
- package/dist/src/conversation-manager/summarizing-conversation-manager.d.ts +7 -0
- package/dist/src/conversation-manager/summarizing-conversation-manager.d.ts.map +1 -1
- package/dist/src/conversation-manager/summarizing-conversation-manager.js +18 -4
- 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/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 +493 -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 +9 -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 +131 -0
- package/dist/src/memory/memory-manager.d.ts.map +1 -0
- package/dist/src/memory/memory-manager.js +404 -0
- package/dist/src/memory/memory-manager.js.map +1 -0
- package/dist/src/memory/types.d.ts +213 -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 +1207 -0
- package/dist/src/middleware/__tests__/agent-middleware.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 +138 -0
- package/dist/src/middleware/stages.d.ts.map +1 -0
- package/dist/src/middleware/stages.js +31 -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 +22 -4
- package/dist/src/sandbox/base.d.ts.map +1 -1
- package/dist/src/sandbox/base.js +15 -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 +59 -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 +119 -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 +1 -1
- package/dist/src/types/messages.d.ts.map +1 -1
- package/dist/src/types/messages.js.map +1 -1
- 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-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.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/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 +29 -7
- 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 +29 -5
- package/dist/src/vended-plugins/context-offloader/storage.d.ts.map +1 -1
- package/dist/src/vended-plugins/context-offloader/storage.js +75 -11
- 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 +2 -1
- package/dist/src/vended-plugins/index.d.ts.map +1 -1
- package/dist/src/vended-plugins/index.js +2 -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 +41 -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,525 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { MiddlewareRegistry, createStage } from '../index.js';
|
|
3
|
+
import { CancelledError } from '../../errors.js';
|
|
4
|
+
import { InterruptError, Interrupt } from '../../interrupt.js';
|
|
5
|
+
import { collectGenerator } from '../../__fixtures__/model-test-helpers.js';
|
|
6
|
+
async function collect(gen) {
|
|
7
|
+
const { items, result } = await collectGenerator(gen);
|
|
8
|
+
return { events: items, result };
|
|
9
|
+
}
|
|
10
|
+
const TestStage = createStage('test');
|
|
11
|
+
describe('MiddlewareRegistry', () => {
|
|
12
|
+
describe('add', () => {
|
|
13
|
+
it('stores handlers in registration order', () => {
|
|
14
|
+
const registry = new MiddlewareRegistry();
|
|
15
|
+
const callOrder = [];
|
|
16
|
+
const handler1 = async function* (context, next) {
|
|
17
|
+
callOrder.push(1);
|
|
18
|
+
return yield* next(context);
|
|
19
|
+
};
|
|
20
|
+
const handler2 = async function* (context, next) {
|
|
21
|
+
callOrder.push(2);
|
|
22
|
+
return yield* next(context);
|
|
23
|
+
};
|
|
24
|
+
registry.add(TestStage, handler1);
|
|
25
|
+
registry.add(TestStage, handler2);
|
|
26
|
+
// eslint-disable-next-line require-yield
|
|
27
|
+
const terminal = async function* () {
|
|
28
|
+
callOrder.push(3);
|
|
29
|
+
return { output: 'done' };
|
|
30
|
+
};
|
|
31
|
+
const chain = registry.compose(TestStage, terminal);
|
|
32
|
+
// Execute the chain to verify order
|
|
33
|
+
const gen = chain({ value: 'test' });
|
|
34
|
+
return collect(gen).then(() => {
|
|
35
|
+
expect(callOrder).toStrictEqual([1, 2, 3]);
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
describe('compose', () => {
|
|
40
|
+
it('with no handlers returns terminal-equivalent function', async () => {
|
|
41
|
+
const registry = new MiddlewareRegistry();
|
|
42
|
+
const terminal = async function* (ctx) {
|
|
43
|
+
yield { data: `event-${ctx.value}` };
|
|
44
|
+
return { output: `result-${ctx.value}` };
|
|
45
|
+
};
|
|
46
|
+
const chain = registry.compose(TestStage, terminal);
|
|
47
|
+
const { events, result } = await collect(chain({ value: 'hello' }));
|
|
48
|
+
expect(events).toStrictEqual([{ data: 'event-hello' }]);
|
|
49
|
+
expect(result).toStrictEqual({ output: 'result-hello' });
|
|
50
|
+
});
|
|
51
|
+
it('executes handlers in registration order (outermost first)', async () => {
|
|
52
|
+
const registry = new MiddlewareRegistry();
|
|
53
|
+
const callOrder = [];
|
|
54
|
+
const outer = async function* (context, next) {
|
|
55
|
+
callOrder.push('outer-before');
|
|
56
|
+
const result = yield* next(context);
|
|
57
|
+
callOrder.push('outer-after');
|
|
58
|
+
return result;
|
|
59
|
+
};
|
|
60
|
+
const inner = async function* (context, next) {
|
|
61
|
+
callOrder.push('inner-before');
|
|
62
|
+
const result = yield* next(context);
|
|
63
|
+
callOrder.push('inner-after');
|
|
64
|
+
return result;
|
|
65
|
+
};
|
|
66
|
+
registry.add(TestStage, outer);
|
|
67
|
+
registry.add(TestStage, inner);
|
|
68
|
+
// eslint-disable-next-line require-yield
|
|
69
|
+
const terminal = async function* () {
|
|
70
|
+
callOrder.push('terminal');
|
|
71
|
+
return { output: 'done' };
|
|
72
|
+
};
|
|
73
|
+
const chain = registry.compose(TestStage, terminal);
|
|
74
|
+
await collect(chain({ value: 'test' }));
|
|
75
|
+
expect(callOrder).toStrictEqual(['outer-before', 'inner-before', 'terminal', 'inner-after', 'outer-after']);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
describe('short-circuit behavior', () => {
|
|
79
|
+
it('does not call next handlers or terminal when middleware does not call next', async () => {
|
|
80
|
+
const registry = new MiddlewareRegistry();
|
|
81
|
+
let terminalCalled = false;
|
|
82
|
+
let innerCalled = false;
|
|
83
|
+
const shortCircuit = async function* () {
|
|
84
|
+
yield { data: 'synthetic' };
|
|
85
|
+
return { output: 'short-circuited' };
|
|
86
|
+
};
|
|
87
|
+
const inner = async function* (context, next) {
|
|
88
|
+
innerCalled = true;
|
|
89
|
+
return yield* next(context);
|
|
90
|
+
};
|
|
91
|
+
registry.add(TestStage, shortCircuit);
|
|
92
|
+
registry.add(TestStage, inner);
|
|
93
|
+
// eslint-disable-next-line require-yield
|
|
94
|
+
const terminal = async function* () {
|
|
95
|
+
terminalCalled = true;
|
|
96
|
+
return { output: 'terminal' };
|
|
97
|
+
};
|
|
98
|
+
const chain = registry.compose(TestStage, terminal);
|
|
99
|
+
const { events, result } = await collect(chain({ value: 'test' }));
|
|
100
|
+
expect(terminalCalled).toBe(false);
|
|
101
|
+
expect(innerCalled).toBe(false);
|
|
102
|
+
expect(events).toStrictEqual([{ data: 'synthetic' }]);
|
|
103
|
+
expect(result).toStrictEqual({ output: 'short-circuited' });
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
describe('event pass-through via yield* next(context)', () => {
|
|
107
|
+
it('forwards all events from terminal and returns terminal result', async () => {
|
|
108
|
+
const registry = new MiddlewareRegistry();
|
|
109
|
+
const passThrough = async function* (context, next) {
|
|
110
|
+
return yield* next(context);
|
|
111
|
+
};
|
|
112
|
+
registry.add(TestStage, passThrough);
|
|
113
|
+
const terminal = async function* () {
|
|
114
|
+
yield { data: 'event-1' };
|
|
115
|
+
yield { data: 'event-2' };
|
|
116
|
+
yield { data: 'event-3' };
|
|
117
|
+
return { output: 'terminal-result' };
|
|
118
|
+
};
|
|
119
|
+
const chain = registry.compose(TestStage, terminal);
|
|
120
|
+
const { events, result } = await collect(chain({ value: 'test' }));
|
|
121
|
+
expect(events).toStrictEqual([{ data: 'event-1' }, { data: 'event-2' }, { data: 'event-3' }]);
|
|
122
|
+
expect(result).toStrictEqual({ output: 'terminal-result' });
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
describe('event filtering via manual iteration', () => {
|
|
126
|
+
it('only yields events matching a predicate', async () => {
|
|
127
|
+
const registry = new MiddlewareRegistry();
|
|
128
|
+
const filter = async function* (context, next) {
|
|
129
|
+
const gen = next(context);
|
|
130
|
+
let iterResult = await gen.next();
|
|
131
|
+
while (!iterResult.done) {
|
|
132
|
+
const event = iterResult.value;
|
|
133
|
+
// Only forward events containing 'keep'
|
|
134
|
+
if (event.data.includes('keep')) {
|
|
135
|
+
yield event;
|
|
136
|
+
}
|
|
137
|
+
iterResult = await gen.next();
|
|
138
|
+
}
|
|
139
|
+
return iterResult.value;
|
|
140
|
+
};
|
|
141
|
+
registry.add(TestStage, filter);
|
|
142
|
+
const terminal = async function* () {
|
|
143
|
+
yield { data: 'keep-1' };
|
|
144
|
+
yield { data: 'drop-1' };
|
|
145
|
+
yield { data: 'keep-2' };
|
|
146
|
+
yield { data: 'drop-2' };
|
|
147
|
+
return { output: 'done' };
|
|
148
|
+
};
|
|
149
|
+
const chain = registry.compose(TestStage, terminal);
|
|
150
|
+
const { events, result } = await collect(chain({ value: 'test' }));
|
|
151
|
+
expect(events).toStrictEqual([{ data: 'keep-1' }, { data: 'keep-2' }]);
|
|
152
|
+
expect(result).toStrictEqual({ output: 'done' });
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
describe('context modification flows to terminal', () => {
|
|
156
|
+
it('terminal receives modified context', async () => {
|
|
157
|
+
const registry = new MiddlewareRegistry();
|
|
158
|
+
let receivedContext;
|
|
159
|
+
const modifier = async function* (context, next) {
|
|
160
|
+
const modified = { ...context, value: 'modified' };
|
|
161
|
+
return yield* next(modified);
|
|
162
|
+
};
|
|
163
|
+
registry.add(TestStage, modifier);
|
|
164
|
+
// eslint-disable-next-line require-yield
|
|
165
|
+
const terminal = async function* (ctx) {
|
|
166
|
+
receivedContext = ctx;
|
|
167
|
+
return { output: ctx.value };
|
|
168
|
+
};
|
|
169
|
+
const chain = registry.compose(TestStage, terminal);
|
|
170
|
+
const { result } = await collect(chain({ value: 'original' }));
|
|
171
|
+
expect(receivedContext).toStrictEqual({ value: 'modified' });
|
|
172
|
+
expect(result).toStrictEqual({ output: 'modified' });
|
|
173
|
+
});
|
|
174
|
+
it('each middleware can further modify context', async () => {
|
|
175
|
+
const registry = new MiddlewareRegistry();
|
|
176
|
+
let receivedContext;
|
|
177
|
+
const first = async function* (context, next) {
|
|
178
|
+
return yield* next({ ...context, value: context.value + '-first' });
|
|
179
|
+
};
|
|
180
|
+
const second = async function* (context, next) {
|
|
181
|
+
return yield* next({ ...context, value: context.value + '-second' });
|
|
182
|
+
};
|
|
183
|
+
registry.add(TestStage, first);
|
|
184
|
+
registry.add(TestStage, second);
|
|
185
|
+
// eslint-disable-next-line require-yield
|
|
186
|
+
const terminal = async function* (ctx) {
|
|
187
|
+
receivedContext = ctx;
|
|
188
|
+
return { output: ctx.value };
|
|
189
|
+
};
|
|
190
|
+
const chain = registry.compose(TestStage, terminal);
|
|
191
|
+
const { result } = await collect(chain({ value: 'start' }));
|
|
192
|
+
expect(receivedContext).toStrictEqual({ value: 'start-first-second' });
|
|
193
|
+
expect(result).toStrictEqual({ output: 'start-first-second' });
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
describe('error propagation through chain', () => {
|
|
197
|
+
it('errors from terminal reach middleware', async () => {
|
|
198
|
+
const registry = new MiddlewareRegistry();
|
|
199
|
+
let caughtError;
|
|
200
|
+
const catcher = async function* (context, next) {
|
|
201
|
+
try {
|
|
202
|
+
return yield* next(context);
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
caughtError = error;
|
|
206
|
+
return { output: 'recovered' };
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
registry.add(TestStage, catcher);
|
|
210
|
+
// eslint-disable-next-line require-yield
|
|
211
|
+
const terminal = async function* () {
|
|
212
|
+
throw new Error('terminal error');
|
|
213
|
+
};
|
|
214
|
+
const chain = registry.compose(TestStage, terminal);
|
|
215
|
+
const { result } = await collect(chain({ value: 'test' }));
|
|
216
|
+
expect(caughtError).toBeInstanceOf(Error);
|
|
217
|
+
expect(caughtError.message).toBe('terminal error');
|
|
218
|
+
expect(result).toStrictEqual({ output: 'recovered' });
|
|
219
|
+
});
|
|
220
|
+
it('errors from middleware reach caller', async () => {
|
|
221
|
+
const registry = new MiddlewareRegistry();
|
|
222
|
+
// eslint-disable-next-line require-yield
|
|
223
|
+
const thrower = async function* () {
|
|
224
|
+
throw new Error('middleware error');
|
|
225
|
+
};
|
|
226
|
+
registry.add(TestStage, thrower);
|
|
227
|
+
// eslint-disable-next-line require-yield
|
|
228
|
+
const terminal = async function* () {
|
|
229
|
+
return { output: 'done' };
|
|
230
|
+
};
|
|
231
|
+
const chain = registry.compose(TestStage, terminal);
|
|
232
|
+
await expect(collect(chain({ value: 'test' }))).rejects.toThrow('middleware error');
|
|
233
|
+
});
|
|
234
|
+
it('middleware can transform errors from next', async () => {
|
|
235
|
+
const registry = new MiddlewareRegistry();
|
|
236
|
+
const transformer = async function* (context, next) {
|
|
237
|
+
try {
|
|
238
|
+
return yield* next(context);
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
throw new Error('transformed error');
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
registry.add(TestStage, transformer);
|
|
245
|
+
// eslint-disable-next-line require-yield
|
|
246
|
+
const terminal = async function* () {
|
|
247
|
+
throw new Error('original error');
|
|
248
|
+
};
|
|
249
|
+
const chain = registry.compose(TestStage, terminal);
|
|
250
|
+
await expect(collect(chain({ value: 'test' }))).rejects.toThrow('transformed error');
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
describe('CancelledError and InterruptError propagation', () => {
|
|
254
|
+
it('CancelledError propagates without being swallowed', async () => {
|
|
255
|
+
const registry = new MiddlewareRegistry();
|
|
256
|
+
const passThrough = async function* (context, next) {
|
|
257
|
+
return yield* next(context);
|
|
258
|
+
};
|
|
259
|
+
registry.add(TestStage, passThrough);
|
|
260
|
+
// eslint-disable-next-line require-yield
|
|
261
|
+
const terminal = async function* () {
|
|
262
|
+
throw new CancelledError();
|
|
263
|
+
};
|
|
264
|
+
const chain = registry.compose(TestStage, terminal);
|
|
265
|
+
await expect(collect(chain({ value: 'test' }))).rejects.toThrow(CancelledError);
|
|
266
|
+
});
|
|
267
|
+
it('InterruptError propagates without being swallowed', async () => {
|
|
268
|
+
const registry = new MiddlewareRegistry();
|
|
269
|
+
const passThrough = async function* (context, next) {
|
|
270
|
+
return yield* next(context);
|
|
271
|
+
};
|
|
272
|
+
registry.add(TestStage, passThrough);
|
|
273
|
+
// eslint-disable-next-line require-yield
|
|
274
|
+
const terminal = async function* () {
|
|
275
|
+
throw new InterruptError(new Interrupt({ id: 'int-1', name: 'test_interrupt' }));
|
|
276
|
+
};
|
|
277
|
+
const chain = registry.compose(TestStage, terminal);
|
|
278
|
+
await expect(collect(chain({ value: 'test' }))).rejects.toThrow(InterruptError);
|
|
279
|
+
});
|
|
280
|
+
it('CancelledError propagates through multiple middleware layers', async () => {
|
|
281
|
+
const registry = new MiddlewareRegistry();
|
|
282
|
+
const outer = async function* (context, next) {
|
|
283
|
+
return yield* next(context);
|
|
284
|
+
};
|
|
285
|
+
const inner = async function* (context, next) {
|
|
286
|
+
return yield* next(context);
|
|
287
|
+
};
|
|
288
|
+
registry.add(TestStage, outer);
|
|
289
|
+
registry.add(TestStage, inner);
|
|
290
|
+
// eslint-disable-next-line require-yield
|
|
291
|
+
const terminal = async function* () {
|
|
292
|
+
throw new CancelledError();
|
|
293
|
+
};
|
|
294
|
+
const chain = registry.compose(TestStage, terminal);
|
|
295
|
+
await expect(collect(chain({ value: 'test' }))).rejects.toThrow(CancelledError);
|
|
296
|
+
});
|
|
297
|
+
it('InterruptError propagates through multiple middleware layers', async () => {
|
|
298
|
+
const registry = new MiddlewareRegistry();
|
|
299
|
+
const outer = async function* (context, next) {
|
|
300
|
+
return yield* next(context);
|
|
301
|
+
};
|
|
302
|
+
const inner = async function* (context, next) {
|
|
303
|
+
return yield* next(context);
|
|
304
|
+
};
|
|
305
|
+
registry.add(TestStage, outer);
|
|
306
|
+
registry.add(TestStage, inner);
|
|
307
|
+
// eslint-disable-next-line require-yield
|
|
308
|
+
const terminal = async function* () {
|
|
309
|
+
throw new InterruptError(new Interrupt({ id: 'int-1', name: 'test_interrupt' }));
|
|
310
|
+
};
|
|
311
|
+
const chain = registry.compose(TestStage, terminal);
|
|
312
|
+
await expect(collect(chain({ value: 'test' }))).rejects.toThrow(InterruptError);
|
|
313
|
+
});
|
|
314
|
+
});
|
|
315
|
+
describe('try-finally guarantees', () => {
|
|
316
|
+
it('outer finally runs when inner middleware throws', async () => {
|
|
317
|
+
const registry = new MiddlewareRegistry();
|
|
318
|
+
const order = [];
|
|
319
|
+
const outer = async function* (context, next) {
|
|
320
|
+
try {
|
|
321
|
+
return yield* next(context);
|
|
322
|
+
}
|
|
323
|
+
finally {
|
|
324
|
+
order.push('outer-finally');
|
|
325
|
+
}
|
|
326
|
+
};
|
|
327
|
+
// eslint-disable-next-line require-yield
|
|
328
|
+
const inner = async function* () {
|
|
329
|
+
order.push('inner-throw');
|
|
330
|
+
throw new Error('inner exploded');
|
|
331
|
+
};
|
|
332
|
+
registry.add(TestStage, outer);
|
|
333
|
+
registry.add(TestStage, inner);
|
|
334
|
+
// eslint-disable-next-line require-yield
|
|
335
|
+
const terminal = async function* () {
|
|
336
|
+
return { output: 'unreachable' };
|
|
337
|
+
};
|
|
338
|
+
const chain = registry.compose(TestStage, terminal);
|
|
339
|
+
await expect(collect(chain({ value: 'test' }))).rejects.toThrow('inner exploded');
|
|
340
|
+
expect(order).toStrictEqual(['inner-throw', 'outer-finally']);
|
|
341
|
+
});
|
|
342
|
+
it('inner finally runs when terminal throws', async () => {
|
|
343
|
+
const registry = new MiddlewareRegistry();
|
|
344
|
+
const order = [];
|
|
345
|
+
const outer = async function* (context, next) {
|
|
346
|
+
try {
|
|
347
|
+
return yield* next(context);
|
|
348
|
+
}
|
|
349
|
+
finally {
|
|
350
|
+
order.push('outer-finally');
|
|
351
|
+
}
|
|
352
|
+
};
|
|
353
|
+
const inner = async function* (context, next) {
|
|
354
|
+
try {
|
|
355
|
+
return yield* next(context);
|
|
356
|
+
}
|
|
357
|
+
finally {
|
|
358
|
+
order.push('inner-finally');
|
|
359
|
+
}
|
|
360
|
+
};
|
|
361
|
+
registry.add(TestStage, outer);
|
|
362
|
+
registry.add(TestStage, inner);
|
|
363
|
+
// eslint-disable-next-line require-yield
|
|
364
|
+
const terminal = async function* () {
|
|
365
|
+
order.push('terminal-throw');
|
|
366
|
+
throw new Error('terminal exploded');
|
|
367
|
+
};
|
|
368
|
+
const chain = registry.compose(TestStage, terminal);
|
|
369
|
+
await expect(collect(chain({ value: 'test' }))).rejects.toThrow('terminal exploded');
|
|
370
|
+
expect(order).toStrictEqual(['terminal-throw', 'inner-finally', 'outer-finally']);
|
|
371
|
+
});
|
|
372
|
+
it('all finally blocks run in reverse order when terminal throws', async () => {
|
|
373
|
+
const registry = new MiddlewareRegistry();
|
|
374
|
+
const order = [];
|
|
375
|
+
const a = async function* (context, next) {
|
|
376
|
+
try {
|
|
377
|
+
order.push('a-enter');
|
|
378
|
+
return yield* next(context);
|
|
379
|
+
}
|
|
380
|
+
finally {
|
|
381
|
+
order.push('a-finally');
|
|
382
|
+
}
|
|
383
|
+
};
|
|
384
|
+
const b = async function* (context, next) {
|
|
385
|
+
try {
|
|
386
|
+
order.push('b-enter');
|
|
387
|
+
return yield* next(context);
|
|
388
|
+
}
|
|
389
|
+
finally {
|
|
390
|
+
order.push('b-finally');
|
|
391
|
+
}
|
|
392
|
+
};
|
|
393
|
+
const c = async function* (context, next) {
|
|
394
|
+
try {
|
|
395
|
+
order.push('c-enter');
|
|
396
|
+
return yield* next(context);
|
|
397
|
+
}
|
|
398
|
+
finally {
|
|
399
|
+
order.push('c-finally');
|
|
400
|
+
}
|
|
401
|
+
};
|
|
402
|
+
registry.add(TestStage, a);
|
|
403
|
+
registry.add(TestStage, b);
|
|
404
|
+
registry.add(TestStage, c);
|
|
405
|
+
// eslint-disable-next-line require-yield
|
|
406
|
+
const terminal = async function* () {
|
|
407
|
+
throw new Error('boom');
|
|
408
|
+
};
|
|
409
|
+
const chain = registry.compose(TestStage, terminal);
|
|
410
|
+
await expect(collect(chain({ value: 'test' }))).rejects.toThrow('boom');
|
|
411
|
+
expect(order).toStrictEqual(['a-enter', 'b-enter', 'c-enter', 'c-finally', 'b-finally', 'a-finally']);
|
|
412
|
+
});
|
|
413
|
+
it('finally runs even when caller abandons the generator mid-stream', async () => {
|
|
414
|
+
const registry = new MiddlewareRegistry();
|
|
415
|
+
const order = [];
|
|
416
|
+
const middleware = async function* (context, next) {
|
|
417
|
+
try {
|
|
418
|
+
return yield* next(context);
|
|
419
|
+
}
|
|
420
|
+
finally {
|
|
421
|
+
order.push('middleware-finally');
|
|
422
|
+
}
|
|
423
|
+
};
|
|
424
|
+
registry.add(TestStage, middleware);
|
|
425
|
+
const terminal = async function* () {
|
|
426
|
+
yield { data: 'event-1' };
|
|
427
|
+
yield { data: 'event-2' };
|
|
428
|
+
yield { data: 'event-3' };
|
|
429
|
+
return { output: 'done' };
|
|
430
|
+
};
|
|
431
|
+
const chain = registry.compose(TestStage, terminal);
|
|
432
|
+
const gen = chain({ value: 'test' });
|
|
433
|
+
// Only consume one event then abandon (call return to close the generator)
|
|
434
|
+
await gen.next();
|
|
435
|
+
await gen.return({ output: 'abandoned' });
|
|
436
|
+
expect(order).toStrictEqual(['middleware-finally']);
|
|
437
|
+
});
|
|
438
|
+
it('finally runs in both middleware when caller abandons mid-stream', async () => {
|
|
439
|
+
const registry = new MiddlewareRegistry();
|
|
440
|
+
const order = [];
|
|
441
|
+
const outer = async function* (context, next) {
|
|
442
|
+
try {
|
|
443
|
+
return yield* next(context);
|
|
444
|
+
}
|
|
445
|
+
finally {
|
|
446
|
+
order.push('outer-finally');
|
|
447
|
+
}
|
|
448
|
+
};
|
|
449
|
+
const inner = async function* (context, next) {
|
|
450
|
+
try {
|
|
451
|
+
return yield* next(context);
|
|
452
|
+
}
|
|
453
|
+
finally {
|
|
454
|
+
order.push('inner-finally');
|
|
455
|
+
}
|
|
456
|
+
};
|
|
457
|
+
registry.add(TestStage, outer);
|
|
458
|
+
registry.add(TestStage, inner);
|
|
459
|
+
const terminal = async function* () {
|
|
460
|
+
yield { data: 'event-1' };
|
|
461
|
+
yield { data: 'event-2' };
|
|
462
|
+
return { output: 'done' };
|
|
463
|
+
};
|
|
464
|
+
const chain = registry.compose(TestStage, terminal);
|
|
465
|
+
const gen = chain({ value: 'test' });
|
|
466
|
+
await gen.next();
|
|
467
|
+
await gen.return({ output: 'abandoned' });
|
|
468
|
+
expect(order).toStrictEqual(['inner-finally', 'outer-finally']);
|
|
469
|
+
});
|
|
470
|
+
});
|
|
471
|
+
describe('remove', () => {
|
|
472
|
+
it('removes a handler so it no longer runs', async () => {
|
|
473
|
+
const registry = new MiddlewareRegistry();
|
|
474
|
+
const callOrder = [];
|
|
475
|
+
const handler = async function* (context, next) {
|
|
476
|
+
callOrder.push(1);
|
|
477
|
+
return yield* next(context);
|
|
478
|
+
};
|
|
479
|
+
registry.add(TestStage, handler);
|
|
480
|
+
registry.remove(TestStage, handler);
|
|
481
|
+
// eslint-disable-next-line require-yield
|
|
482
|
+
const terminal = async function* () {
|
|
483
|
+
callOrder.push(2);
|
|
484
|
+
return { output: 'done' };
|
|
485
|
+
};
|
|
486
|
+
await collect(registry.invoke(TestStage, { value: 'test' }, terminal));
|
|
487
|
+
expect(callOrder).toStrictEqual([2]);
|
|
488
|
+
});
|
|
489
|
+
it('only removes the first occurrence of a duplicate handler', async () => {
|
|
490
|
+
const registry = new MiddlewareRegistry();
|
|
491
|
+
let callCount = 0;
|
|
492
|
+
const handler = async function* (context, next) {
|
|
493
|
+
callCount++;
|
|
494
|
+
return yield* next(context);
|
|
495
|
+
};
|
|
496
|
+
registry.add(TestStage, handler);
|
|
497
|
+
registry.add(TestStage, handler);
|
|
498
|
+
registry.remove(TestStage, handler);
|
|
499
|
+
// eslint-disable-next-line require-yield
|
|
500
|
+
const terminal = async function* () {
|
|
501
|
+
return { output: 'done' };
|
|
502
|
+
};
|
|
503
|
+
await collect(registry.invoke(TestStage, { value: 'test' }, terminal));
|
|
504
|
+
expect(callCount).toBe(1);
|
|
505
|
+
});
|
|
506
|
+
it('is a no-op when handler was never registered', async () => {
|
|
507
|
+
const registry = new MiddlewareRegistry();
|
|
508
|
+
const handler = async function* (context, next) {
|
|
509
|
+
return yield* next(context);
|
|
510
|
+
};
|
|
511
|
+
// Should not throw
|
|
512
|
+
registry.remove(TestStage, handler);
|
|
513
|
+
});
|
|
514
|
+
it('is a no-op when stage has no handlers', () => {
|
|
515
|
+
const registry = new MiddlewareRegistry();
|
|
516
|
+
const OtherStage = createStage('other');
|
|
517
|
+
const handler = async function* (context, next) {
|
|
518
|
+
return yield* next(context);
|
|
519
|
+
};
|
|
520
|
+
// Should not throw
|
|
521
|
+
registry.remove(OtherStage, handler);
|
|
522
|
+
});
|
|
523
|
+
});
|
|
524
|
+
});
|
|
525
|
+
//# sourceMappingURL=registry.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.test.js","sourceRoot":"","sources":["../../../../src/middleware/__tests__/registry.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type { MiddlewareStage, MiddlewareNext, MiddlewareHandler, MiddlewareHandlerOf, MiddlewareNextOf, MiddlewareInputHandler, MiddlewareOutputHandler, MiddlewareInputPhase, MiddlewareWrapPhase, MiddlewareOutputPhase, MiddlewarePhase, MiddlewarePhaseKind, } from './types.js';
|
|
2
|
+
export { createStage, InvokeModelStage, ExecuteToolStage, AgentStreamStage } from './stages.js';
|
|
3
|
+
export type { InvokeModelContext, InvokeModelResult, ExecuteToolContext, ExecuteToolResult, AgentStreamContext, AgentStreamResult, MiddlewareInterruptResult, MiddlewareInterruptible, } from './stages.js';
|
|
4
|
+
export { MiddlewareRegistry } from './registry.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,GACpB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC/F,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/middleware/index.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAW/F,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { MiddlewareStage, MiddlewareHandler, MiddlewareNext, MiddlewareInputPhase, MiddlewareOutputPhase, MiddlewareInputHandler, MiddlewareOutputHandler } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Registry that stores middleware handlers keyed by stage tokens
|
|
4
|
+
* and composes them into execution chains with phase ordering.
|
|
5
|
+
*/
|
|
6
|
+
export declare class MiddlewareRegistry {
|
|
7
|
+
private readonly _handlers;
|
|
8
|
+
constructor();
|
|
9
|
+
/**
|
|
10
|
+
* Register a middleware handler for a given stage (Wrap phase).
|
|
11
|
+
* Handlers are stored in registration order within their phase.
|
|
12
|
+
*
|
|
13
|
+
* @param stage - The stage token to register the handler for
|
|
14
|
+
* @param handler - The middleware handler function
|
|
15
|
+
*/
|
|
16
|
+
add<TContext, TResult, TEvent>(stage: MiddlewareStage<TContext, TResult, TEvent>, handler: MiddlewareHandler<TContext, TResult, TEvent>): void;
|
|
17
|
+
/**
|
|
18
|
+
* Register an Input phase handler. Transforms context before the Wrap chain runs.
|
|
19
|
+
* Multiple Input handlers compose in registration order (each sees the previous handler's output).
|
|
20
|
+
* Returns the adapted handler for cleanup purposes.
|
|
21
|
+
*/
|
|
22
|
+
addInput<TContext, TResult, TEvent>(phase: MiddlewareInputPhase<TContext, TResult, TEvent>, handler: MiddlewareInputHandler<TContext>): MiddlewareHandler<TContext, TResult, TEvent>;
|
|
23
|
+
/**
|
|
24
|
+
* Register an Output phase handler. Transforms result after the Wrap chain completes.
|
|
25
|
+
* Multiple Output handlers compose in registration order (each sees the previous handler's output).
|
|
26
|
+
* Returns the adapted handler for cleanup purposes.
|
|
27
|
+
*/
|
|
28
|
+
addOutput<TContext, TResult, TEvent>(phase: MiddlewareOutputPhase<TContext, TResult, TEvent>, handler: MiddlewareOutputHandler<TResult>): MiddlewareHandler<TContext, TResult, TEvent>;
|
|
29
|
+
/**
|
|
30
|
+
* Remove a previously registered middleware handler for a given stage.
|
|
31
|
+
* Removes the first occurrence of the handler (by reference equality on the adapted handler).
|
|
32
|
+
*
|
|
33
|
+
* @param stage - The stage token to remove the handler from
|
|
34
|
+
* @param handler - The middleware handler function to remove
|
|
35
|
+
*/
|
|
36
|
+
remove<TContext, TResult, TEvent>(stage: MiddlewareStage<TContext, TResult, TEvent>, handler: MiddlewareHandler<TContext, TResult, TEvent>): void;
|
|
37
|
+
/**
|
|
38
|
+
* Compose all registered handlers for a stage into a single middleware chain.
|
|
39
|
+
* Handlers are ordered by phase (input → output → wrap), then by registration order within phase.
|
|
40
|
+
* First in the composed chain = outermost.
|
|
41
|
+
*
|
|
42
|
+
* @param stage - The stage token to compose handlers for
|
|
43
|
+
* @param terminal - The innermost function that performs actual stage execution
|
|
44
|
+
* @returns A single function representing the full middleware chain
|
|
45
|
+
*/
|
|
46
|
+
compose<TContext, TResult, TEvent>(stage: MiddlewareStage<TContext, TResult, TEvent>, terminal: MiddlewareNext<TContext, TResult, TEvent>): MiddlewareNext<TContext, TResult, TEvent>;
|
|
47
|
+
/**
|
|
48
|
+
* Compose and invoke the middleware chain for a stage in one call.
|
|
49
|
+
* Equivalent to `compose(stage, terminal)(context)` but reads more clearly at call sites.
|
|
50
|
+
*
|
|
51
|
+
* @param stage - The stage token to invoke
|
|
52
|
+
* @param context - The context to pass into the chain
|
|
53
|
+
* @param terminal - The innermost function that performs actual stage execution
|
|
54
|
+
* @returns An async generator yielding events and returning the stage result
|
|
55
|
+
*/
|
|
56
|
+
invoke<TContext, TResult, TEvent>(stage: MiddlewareStage<TContext, TResult, TEvent>, context: TContext, terminal: MiddlewareNext<TContext, TResult, TEvent>): AsyncGenerator<TEvent, TResult, undefined>;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/middleware/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,cAAc,EAEd,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,YAAY,CAAA;AAWnB;;;GAGG;AACH,qBAAa,kBAAkB;IAE7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqE;;IAM/F;;;;;;OAMG;IACH,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAC3B,KAAK,EAAE,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EACjD,OAAO,EAAE,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,GACpD,IAAI;IAMP;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAChC,KAAK,EAAE,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EACtD,OAAO,EAAE,sBAAsB,CAAC,QAAQ,CAAC,GACxC,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC;IAY/C;;;;OAIG;IACH,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EACjC,KAAK,EAAE,qBAAqB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EACvD,OAAO,EAAE,uBAAuB,CAAC,OAAO,CAAC,GACxC,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC;IAY/C;;;;;;OAMG;IACH,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAC9B,KAAK,EAAE,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EACjD,OAAO,EAAE,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,GACpD,IAAI;IAOP;;;;;;;;OAQG;IACH,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAC/B,KAAK,EAAE,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EACjD,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,GAClD,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC;IAgB5C;;;;;;;;OAQG;IACH,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAC9B,KAAK,EAAE,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EACjD,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,GAClD,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC;CAI9C"}
|