@strands-agents/sdk 0.0.1
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/LICENSE +175 -0
- package/README.md +185 -0
- package/dist/__fixtures__/model-test-helpers.d.ts +56 -0
- package/dist/__fixtures__/model-test-helpers.d.ts.map +1 -0
- package/dist/__fixtures__/model-test-helpers.js +85 -0
- package/dist/__fixtures__/model-test-helpers.js.map +1 -0
- package/dist/__fixtures__/tool-helpers.d.ts +15 -0
- package/dist/__fixtures__/tool-helpers.d.ts.map +1 -0
- package/dist/__fixtures__/tool-helpers.js +22 -0
- package/dist/__fixtures__/tool-helpers.js.map +1 -0
- package/dist/__tests__/errors.test.d.ts +2 -0
- package/dist/__tests__/errors.test.d.ts.map +1 -0
- package/dist/__tests__/errors.test.js +20 -0
- package/dist/__tests__/errors.test.js.map +1 -0
- package/dist/__tests__/index.test.d.ts +2 -0
- package/dist/__tests__/index.test.d.ts.map +1 -0
- package/dist/__tests__/index.test.js +27 -0
- package/dist/__tests__/index.test.js.map +1 -0
- package/dist/errors.d.ts +22 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +25 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/models/__tests__/bedrock.test.d.ts +2 -0
- package/dist/models/__tests__/bedrock.test.d.ts.map +1 -0
- package/dist/models/__tests__/bedrock.test.js +1161 -0
- package/dist/models/__tests__/bedrock.test.js.map +1 -0
- package/dist/models/__tests__/model.test.d.ts +2 -0
- package/dist/models/__tests__/model.test.d.ts.map +1 -0
- package/dist/models/__tests__/model.test.js +297 -0
- package/dist/models/__tests__/model.test.js.map +1 -0
- package/dist/models/__tests__/openai.test.d.ts +2 -0
- package/dist/models/__tests__/openai.test.d.ts.map +1 -0
- package/dist/models/__tests__/openai.test.js +1016 -0
- package/dist/models/__tests__/openai.test.js.map +1 -0
- package/dist/models/__tests__/test-utils.d.ts +10 -0
- package/dist/models/__tests__/test-utils.d.ts.map +1 -0
- package/dist/models/__tests__/test-utils.js +17 -0
- package/dist/models/__tests__/test-utils.js.map +1 -0
- package/dist/models/bedrock.d.ts +272 -0
- package/dist/models/bedrock.d.ts.map +1 -0
- package/dist/models/bedrock.js +679 -0
- package/dist/models/bedrock.js.map +1 -0
- package/dist/models/model.d.ts +89 -0
- package/dist/models/model.d.ts.map +1 -0
- package/dist/models/model.js +122 -0
- package/dist/models/model.js.map +1 -0
- package/dist/models/openai.d.ts +262 -0
- package/dist/models/openai.d.ts.map +1 -0
- package/dist/models/openai.js +625 -0
- package/dist/models/openai.js.map +1 -0
- package/dist/models/streaming.d.ts +226 -0
- package/dist/models/streaming.d.ts.map +1 -0
- package/dist/models/streaming.js +2 -0
- package/dist/models/streaming.js.map +1 -0
- package/dist/src/__fixtures__/agent-helpers.d.ts +29 -0
- package/dist/src/__fixtures__/agent-helpers.d.ts.map +1 -0
- package/dist/src/__fixtures__/agent-helpers.js +19 -0
- package/dist/src/__fixtures__/agent-helpers.js.map +1 -0
- package/dist/src/__fixtures__/environment.d.ts +12 -0
- package/dist/src/__fixtures__/environment.d.ts.map +1 -0
- package/dist/src/__fixtures__/environment.js +12 -0
- package/dist/src/__fixtures__/environment.js.map +1 -0
- package/dist/src/__fixtures__/mock-hook-provider.d.ts +14 -0
- package/dist/src/__fixtures__/mock-hook-provider.d.ts.map +1 -0
- package/dist/src/__fixtures__/mock-hook-provider.js +33 -0
- package/dist/src/__fixtures__/mock-hook-provider.js.map +1 -0
- package/dist/src/__fixtures__/mock-message-model.d.ts +93 -0
- package/dist/src/__fixtures__/mock-message-model.d.ts.map +1 -0
- package/dist/src/__fixtures__/mock-message-model.js +226 -0
- package/dist/src/__fixtures__/mock-message-model.js.map +1 -0
- package/dist/src/__fixtures__/model-test-helpers.d.ts +56 -0
- package/dist/src/__fixtures__/model-test-helpers.d.ts.map +1 -0
- package/dist/src/__fixtures__/model-test-helpers.js +85 -0
- package/dist/src/__fixtures__/model-test-helpers.js.map +1 -0
- package/dist/src/__fixtures__/tool-helpers.d.ts +37 -0
- package/dist/src/__fixtures__/tool-helpers.d.ts.map +1 -0
- package/dist/src/__fixtures__/tool-helpers.js +78 -0
- package/dist/src/__fixtures__/tool-helpers.js.map +1 -0
- package/dist/src/__tests__/errors.test.d.ts +2 -0
- package/dist/src/__tests__/errors.test.d.ts.map +1 -0
- package/dist/src/__tests__/errors.test.js +64 -0
- package/dist/src/__tests__/errors.test.js.map +1 -0
- package/dist/src/__tests__/index.test.d.ts +2 -0
- package/dist/src/__tests__/index.test.d.ts.map +1 -0
- package/dist/src/__tests__/index.test.js +27 -0
- package/dist/src/__tests__/index.test.js.map +1 -0
- package/dist/src/__tests__/mcp.test.d.ts +2 -0
- package/dist/src/__tests__/mcp.test.d.ts.map +1 -0
- package/dist/src/__tests__/mcp.test.js +166 -0
- package/dist/src/__tests__/mcp.test.js.map +1 -0
- package/dist/src/agent/__tests__/agent.hook.test.d.ts +2 -0
- package/dist/src/agent/__tests__/agent.hook.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/agent.hook.test.js +250 -0
- package/dist/src/agent/__tests__/agent.hook.test.js.map +1 -0
- package/dist/src/agent/__tests__/agent.test.d.ts +2 -0
- package/dist/src/agent/__tests__/agent.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/agent.test.js +414 -0
- package/dist/src/agent/__tests__/agent.test.js.map +1 -0
- package/dist/src/agent/__tests__/printer.test.d.ts +2 -0
- package/dist/src/agent/__tests__/printer.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/printer.test.js +152 -0
- package/dist/src/agent/__tests__/printer.test.js.map +1 -0
- package/dist/src/agent/__tests__/state.test.d.ts +2 -0
- package/dist/src/agent/__tests__/state.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/state.test.js +231 -0
- package/dist/src/agent/__tests__/state.test.js.map +1 -0
- package/dist/src/agent/agent.d.ts +207 -0
- package/dist/src/agent/agent.d.ts.map +1 -0
- package/dist/src/agent/agent.js +481 -0
- package/dist/src/agent/agent.js.map +1 -0
- package/dist/src/agent/printer.d.ts +73 -0
- package/dist/src/agent/printer.d.ts.map +1 -0
- package/dist/src/agent/printer.js +145 -0
- package/dist/src/agent/printer.js.map +1 -0
- package/dist/src/agent/state.d.ts +102 -0
- package/dist/src/agent/state.d.ts.map +1 -0
- package/dist/src/agent/state.js +73 -0
- package/dist/src/agent/state.js.map +1 -0
- package/dist/src/agent/streaming.d.ts +91 -0
- package/dist/src/agent/streaming.d.ts.map +1 -0
- package/dist/src/agent/streaming.js +2 -0
- package/dist/src/agent/streaming.js.map +1 -0
- package/dist/src/conversation-manager/__tests__/conversation-manager.test.d.ts +2 -0
- package/dist/src/conversation-manager/__tests__/conversation-manager.test.d.ts.map +1 -0
- package/dist/src/conversation-manager/__tests__/conversation-manager.test.js +10 -0
- package/dist/src/conversation-manager/__tests__/conversation-manager.test.js.map +1 -0
- package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.d.ts +2 -0
- package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.d.ts.map +1 -0
- package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js +35 -0
- package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js.map +1 -0
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.d.ts +2 -0
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.d.ts.map +1 -0
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js +553 -0
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js.map +1 -0
- package/dist/src/conversation-manager/conversation-manager.d.ts +73 -0
- package/dist/src/conversation-manager/conversation-manager.d.ts.map +1 -0
- package/dist/src/conversation-manager/conversation-manager.js +24 -0
- package/dist/src/conversation-manager/conversation-manager.js.map +1 -0
- package/dist/src/conversation-manager/index.d.ts +8 -0
- package/dist/src/conversation-manager/index.d.ts.map +1 -0
- package/dist/src/conversation-manager/index.js +8 -0
- package/dist/src/conversation-manager/index.js.map +1 -0
- package/dist/src/conversation-manager/null-conversation-manager.d.ts +23 -0
- package/dist/src/conversation-manager/null-conversation-manager.d.ts.map +1 -0
- package/dist/src/conversation-manager/null-conversation-manager.js +23 -0
- package/dist/src/conversation-manager/null-conversation-manager.js.map +1 -0
- package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts +105 -0
- package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts.map +1 -0
- package/dist/src/conversation-manager/sliding-window-conversation-manager.js +212 -0
- package/dist/src/conversation-manager/sliding-window-conversation-manager.js.map +1 -0
- package/dist/src/errors.d.ts +83 -0
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/src/errors.js +97 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/hooks/__tests__/events.test.d.ts +2 -0
- package/dist/src/hooks/__tests__/events.test.d.ts.map +1 -0
- package/dist/src/hooks/__tests__/events.test.js +347 -0
- package/dist/src/hooks/__tests__/events.test.js.map +1 -0
- package/dist/src/hooks/__tests__/registry.test.d.ts +2 -0
- package/dist/src/hooks/__tests__/registry.test.d.ts.map +1 -0
- package/dist/src/hooks/__tests__/registry.test.js +154 -0
- package/dist/src/hooks/__tests__/registry.test.js.map +1 -0
- package/dist/src/hooks/events.d.ts +199 -0
- package/dist/src/hooks/events.d.ts.map +1 -0
- package/dist/src/hooks/events.js +191 -0
- package/dist/src/hooks/events.js.map +1 -0
- package/dist/src/hooks/index.d.ts +11 -0
- package/dist/src/hooks/index.d.ts.map +1 -0
- package/dist/src/hooks/index.js +11 -0
- package/dist/src/hooks/index.js.map +1 -0
- package/dist/src/hooks/registry.d.ts +65 -0
- package/dist/src/hooks/registry.d.ts.map +1 -0
- package/dist/src/hooks/registry.js +65 -0
- package/dist/src/hooks/registry.js.map +1 -0
- package/dist/src/hooks/types.d.ts +49 -0
- package/dist/src/hooks/types.d.ts.map +1 -0
- package/dist/src/hooks/types.js +2 -0
- package/dist/src/hooks/types.js.map +1 -0
- package/dist/src/index.d.ts +32 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +29 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/mcp.d.ts +51 -0
- package/dist/src/mcp.d.ts.map +1 -0
- package/dist/src/mcp.js +91 -0
- package/dist/src/mcp.js.map +1 -0
- package/dist/src/models/__tests__/bedrock.test.d.ts +2 -0
- package/dist/src/models/__tests__/bedrock.test.d.ts.map +1 -0
- package/dist/src/models/__tests__/bedrock.test.js +1388 -0
- package/dist/src/models/__tests__/bedrock.test.js.map +1 -0
- package/dist/src/models/__tests__/model.test.d.ts +2 -0
- package/dist/src/models/__tests__/model.test.d.ts.map +1 -0
- package/dist/src/models/__tests__/model.test.js +342 -0
- package/dist/src/models/__tests__/model.test.js.map +1 -0
- package/dist/src/models/__tests__/openai.test.d.ts +2 -0
- package/dist/src/models/__tests__/openai.test.d.ts.map +1 -0
- package/dist/src/models/__tests__/openai.test.js +1189 -0
- package/dist/src/models/__tests__/openai.test.js.map +1 -0
- package/dist/src/models/__tests__/test-utils.d.ts +10 -0
- package/dist/src/models/__tests__/test-utils.d.ts.map +1 -0
- package/dist/src/models/__tests__/test-utils.js +17 -0
- package/dist/src/models/__tests__/test-utils.js.map +1 -0
- package/dist/src/models/bedrock.d.ts +289 -0
- package/dist/src/models/bedrock.d.ts.map +1 -0
- package/dist/src/models/bedrock.js +804 -0
- package/dist/src/models/bedrock.js.map +1 -0
- package/dist/src/models/model.d.ts +99 -0
- package/dist/src/models/model.d.ts.map +1 -0
- package/dist/src/models/model.js +169 -0
- package/dist/src/models/model.js.map +1 -0
- package/dist/src/models/openai.d.ts +262 -0
- package/dist/src/models/openai.d.ts.map +1 -0
- package/dist/src/models/openai.js +752 -0
- package/dist/src/models/openai.js.map +1 -0
- package/dist/src/models/streaming.d.ts +318 -0
- package/dist/src/models/streaming.d.ts.map +1 -0
- package/dist/src/models/streaming.js +122 -0
- package/dist/src/models/streaming.js.map +1 -0
- package/dist/src/registry/registry.d.ts +117 -0
- package/dist/src/registry/registry.d.ts.map +1 -0
- package/dist/src/registry/registry.js +298 -0
- package/dist/src/registry/registry.js.map +1 -0
- package/dist/src/registry/tool-registry.d.ts +34 -0
- package/dist/src/registry/tool-registry.d.ts.map +1 -0
- package/dist/src/registry/tool-registry.js +178 -0
- package/dist/src/registry/tool-registry.js.map +1 -0
- package/dist/src/tools/__tests__/tool.test.d.ts +2 -0
- package/dist/src/tools/__tests__/tool.test.d.ts.map +1 -0
- package/dist/src/tools/__tests__/tool.test.js +877 -0
- package/dist/src/tools/__tests__/tool.test.js.map +1 -0
- package/dist/src/tools/__tests__/zod-tool.test-d.d.ts +2 -0
- package/dist/src/tools/__tests__/zod-tool.test-d.d.ts.map +1 -0
- package/dist/src/tools/__tests__/zod-tool.test-d.js +227 -0
- package/dist/src/tools/__tests__/zod-tool.test-d.js.map +1 -0
- package/dist/src/tools/__tests__/zod-tool.test.d.ts +2 -0
- package/dist/src/tools/__tests__/zod-tool.test.d.ts.map +1 -0
- package/dist/src/tools/__tests__/zod-tool.test.js +372 -0
- package/dist/src/tools/__tests__/zod-tool.test.js.map +1 -0
- package/dist/src/tools/function-tool.d.ts +146 -0
- package/dist/src/tools/function-tool.d.ts.map +1 -0
- package/dist/src/tools/function-tool.js +188 -0
- package/dist/src/tools/function-tool.js.map +1 -0
- package/dist/src/tools/mcp-tool.d.ts +36 -0
- package/dist/src/tools/mcp-tool.d.ts.map +1 -0
- package/dist/src/tools/mcp-tool.js +78 -0
- package/dist/src/tools/mcp-tool.js.map +1 -0
- package/dist/src/tools/tool.d.ts +167 -0
- package/dist/src/tools/tool.d.ts.map +1 -0
- package/dist/src/tools/tool.js +68 -0
- package/dist/src/tools/tool.js.map +1 -0
- package/dist/src/tools/types.d.ts +62 -0
- package/dist/src/tools/types.d.ts.map +1 -0
- package/dist/src/tools/types.js +2 -0
- package/dist/src/tools/types.js.map +1 -0
- package/dist/src/tools/zod-tool.d.ts +70 -0
- package/dist/src/tools/zod-tool.d.ts.map +1 -0
- package/dist/src/tools/zod-tool.js +149 -0
- package/dist/src/tools/zod-tool.js.map +1 -0
- package/dist/src/types/__tests__/agent.test.d.ts +2 -0
- package/dist/src/types/__tests__/agent.test.d.ts.map +1 -0
- package/dist/src/types/__tests__/agent.test.js +155 -0
- package/dist/src/types/__tests__/agent.test.js.map +1 -0
- package/dist/src/types/__tests__/json.test.d.ts +2 -0
- package/dist/src/types/__tests__/json.test.d.ts.map +1 -0
- package/dist/src/types/__tests__/json.test.js +298 -0
- package/dist/src/types/__tests__/json.test.js.map +1 -0
- package/dist/src/types/__tests__/media.test.d.ts +2 -0
- package/dist/src/types/__tests__/media.test.d.ts.map +1 -0
- package/dist/src/types/__tests__/media.test.js +257 -0
- package/dist/src/types/__tests__/media.test.js.map +1 -0
- package/dist/src/types/__tests__/messages.test.d.ts +2 -0
- package/dist/src/types/__tests__/messages.test.d.ts.map +1 -0
- package/dist/src/types/__tests__/messages.test.js +364 -0
- package/dist/src/types/__tests__/messages.test.js.map +1 -0
- package/dist/src/types/__tests__/validation.test.d.ts +2 -0
- package/dist/src/types/__tests__/validation.test.d.ts.map +1 -0
- package/dist/src/types/__tests__/validation.test.js +30 -0
- package/dist/src/types/__tests__/validation.test.js.map +1 -0
- package/dist/src/types/agent.d.ts +57 -0
- package/dist/src/types/agent.d.ts.map +1 -0
- package/dist/src/types/agent.js +47 -0
- package/dist/src/types/agent.js.map +1 -0
- package/dist/src/types/json.d.ts +55 -0
- package/dist/src/types/json.d.ts.map +1 -0
- package/dist/src/types/json.js +72 -0
- package/dist/src/types/json.js.map +1 -0
- package/dist/src/types/media.d.ts +249 -0
- package/dist/src/types/media.d.ts.map +1 -0
- package/dist/src/types/media.js +173 -0
- package/dist/src/types/media.js.map +1 -0
- package/dist/src/types/messages.d.ts +438 -0
- package/dist/src/types/messages.d.ts.map +1 -0
- package/dist/src/types/messages.js +286 -0
- package/dist/src/types/messages.js.map +1 -0
- package/dist/src/types/validation.d.ts +10 -0
- package/dist/src/types/validation.d.ts.map +1 -0
- package/dist/src/types/validation.js +15 -0
- package/dist/src/types/validation.js.map +1 -0
- package/dist/tools/__tests__/registry.test.d.ts +2 -0
- package/dist/tools/__tests__/registry.test.d.ts.map +1 -0
- package/dist/tools/__tests__/registry.test.js +253 -0
- package/dist/tools/__tests__/registry.test.js.map +1 -0
- package/dist/tools/__tests__/tool.test.d.ts +2 -0
- package/dist/tools/__tests__/tool.test.d.ts.map +1 -0
- package/dist/tools/__tests__/tool.test.js +761 -0
- package/dist/tools/__tests__/tool.test.js.map +1 -0
- package/dist/tools/__tests__/zod-tool.test-d.d.ts +2 -0
- package/dist/tools/__tests__/zod-tool.test-d.d.ts.map +1 -0
- package/dist/tools/__tests__/zod-tool.test-d.js +227 -0
- package/dist/tools/__tests__/zod-tool.test-d.js.map +1 -0
- package/dist/tools/__tests__/zod-tool.test.d.ts +2 -0
- package/dist/tools/__tests__/zod-tool.test.d.ts.map +1 -0
- package/dist/tools/__tests__/zod-tool.test.js +342 -0
- package/dist/tools/__tests__/zod-tool.test.js.map +1 -0
- package/dist/tools/function-tool.d.ts +156 -0
- package/dist/tools/function-tool.d.ts.map +1 -0
- package/dist/tools/function-tool.js +237 -0
- package/dist/tools/function-tool.js.map +1 -0
- package/dist/tools/registry.d.ts +43 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +82 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/tool.d.ts +157 -0
- package/dist/tools/tool.d.ts.map +1 -0
- package/dist/tools/tool.js +2 -0
- package/dist/tools/tool.js.map +1 -0
- package/dist/tools/types.d.ts +119 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +2 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/zod-tool.d.ts +70 -0
- package/dist/tools/zod-tool.d.ts.map +1 -0
- package/dist/tools/zod-tool.js +96 -0
- package/dist/tools/zod-tool.js.map +1 -0
- package/dist/types/__tests__/json.test.d.ts +2 -0
- package/dist/types/__tests__/json.test.d.ts.map +1 -0
- package/dist/types/__tests__/json.test.js +129 -0
- package/dist/types/__tests__/json.test.js.map +1 -0
- package/dist/types/__tests__/validation.test.d.ts +2 -0
- package/dist/types/__tests__/validation.test.d.ts.map +1 -0
- package/dist/types/__tests__/validation.test.js +30 -0
- package/dist/types/__tests__/validation.test.js.map +1 -0
- package/dist/types/json.d.ts +45 -0
- package/dist/types/json.d.ts.map +1 -0
- package/dist/types/json.js +17 -0
- package/dist/types/json.js.map +1 -0
- package/dist/types/messages.d.ts +160 -0
- package/dist/types/messages.d.ts.map +1 -0
- package/dist/types/messages.js +2 -0
- package/dist/types/messages.js.map +1 -0
- package/dist/types/validation.d.ts +10 -0
- package/dist/types/validation.d.ts.map +1 -0
- package/dist/types/validation.js +15 -0
- package/dist/types/validation.js.map +1 -0
- package/dist/vended_tools/bash/__tests__/bash.test.d.ts +2 -0
- package/dist/vended_tools/bash/__tests__/bash.test.d.ts.map +1 -0
- package/dist/vended_tools/bash/__tests__/bash.test.js +333 -0
- package/dist/vended_tools/bash/__tests__/bash.test.js.map +1 -0
- package/dist/vended_tools/bash/bash.d.ts +33 -0
- package/dist/vended_tools/bash/bash.d.ts.map +1 -0
- package/dist/vended_tools/bash/bash.js +264 -0
- package/dist/vended_tools/bash/bash.js.map +1 -0
- package/dist/vended_tools/bash/index.d.ts +7 -0
- package/dist/vended_tools/bash/index.d.ts.map +1 -0
- package/dist/vended_tools/bash/index.js +6 -0
- package/dist/vended_tools/bash/index.js.map +1 -0
- package/dist/vended_tools/bash/types.d.ts +65 -0
- package/dist/vended_tools/bash/types.d.ts.map +1 -0
- package/dist/vended_tools/bash/types.js +22 -0
- package/dist/vended_tools/bash/types.js.map +1 -0
- package/dist/vended_tools/file_editor/__tests__/file-editor.test.d.ts +2 -0
- package/dist/vended_tools/file_editor/__tests__/file-editor.test.d.ts.map +1 -0
- package/dist/vended_tools/file_editor/__tests__/file-editor.test.js +359 -0
- package/dist/vended_tools/file_editor/__tests__/file-editor.test.js.map +1 -0
- package/dist/vended_tools/file_editor/file-editor.d.ts +31 -0
- package/dist/vended_tools/file_editor/file-editor.d.ts.map +1 -0
- package/dist/vended_tools/file_editor/file-editor.js +353 -0
- package/dist/vended_tools/file_editor/file-editor.js.map +1 -0
- package/dist/vended_tools/file_editor/index.d.ts +6 -0
- package/dist/vended_tools/file_editor/index.d.ts.map +1 -0
- package/dist/vended_tools/file_editor/index.js +5 -0
- package/dist/vended_tools/file_editor/index.js.map +1 -0
- package/dist/vended_tools/file_editor/types.d.ts +61 -0
- package/dist/vended_tools/file_editor/types.d.ts.map +1 -0
- package/dist/vended_tools/file_editor/types.js +2 -0
- package/dist/vended_tools/file_editor/types.js.map +1 -0
- package/dist/vended_tools/http_request/__tests__/http-request.test.d.ts +2 -0
- package/dist/vended_tools/http_request/__tests__/http-request.test.d.ts.map +1 -0
- package/dist/vended_tools/http_request/__tests__/http-request.test.js +189 -0
- package/dist/vended_tools/http_request/__tests__/http-request.test.js.map +1 -0
- package/dist/vended_tools/http_request/http-request.d.ts +35 -0
- package/dist/vended_tools/http_request/http-request.d.ts.map +1 -0
- package/dist/vended_tools/http_request/http-request.js +95 -0
- package/dist/vended_tools/http_request/http-request.js.map +1 -0
- package/dist/vended_tools/http_request/index.d.ts +6 -0
- package/dist/vended_tools/http_request/index.d.ts.map +1 -0
- package/dist/vended_tools/http_request/index.js +5 -0
- package/dist/vended_tools/http_request/index.js.map +1 -0
- package/dist/vended_tools/http_request/types.d.ts +47 -0
- package/dist/vended_tools/http_request/types.d.ts.map +1 -0
- package/dist/vended_tools/http_request/types.js +2 -0
- package/dist/vended_tools/http_request/types.js.map +1 -0
- package/dist/vended_tools/notebook/__tests__/notebook.test.d.ts +2 -0
- package/dist/vended_tools/notebook/__tests__/notebook.test.d.ts.map +1 -0
- package/dist/vended_tools/notebook/__tests__/notebook.test.js +371 -0
- package/dist/vended_tools/notebook/__tests__/notebook.test.js.map +1 -0
- package/dist/vended_tools/notebook/index.d.ts +6 -0
- package/dist/vended_tools/notebook/index.d.ts.map +1 -0
- package/dist/vended_tools/notebook/index.js +5 -0
- package/dist/vended_tools/notebook/index.js.map +1 -0
- package/dist/vended_tools/notebook/notebook.d.ts +29 -0
- package/dist/vended_tools/notebook/notebook.d.ts.map +1 -0
- package/dist/vended_tools/notebook/notebook.js +215 -0
- package/dist/vended_tools/notebook/notebook.js.map +1 -0
- package/dist/vended_tools/notebook/types.d.ts +79 -0
- package/dist/vended_tools/notebook/types.d.ts.map +1 -0
- package/dist/vended_tools/notebook/types.js +2 -0
- package/dist/vended_tools/notebook/types.js.map +1 -0
- package/package.json +112 -0
|
@@ -0,0 +1,553 @@
|
|
|
1
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
+
import { SlidingWindowConversationManager } from '../sliding-window-conversation-manager.js';
|
|
3
|
+
import { ContextWindowOverflowError, Message, TextBlock, ToolUseBlock, ToolResultBlock } from '../../index.js';
|
|
4
|
+
import { HookRegistryImplementation } from '../../hooks/registry.js';
|
|
5
|
+
import { AfterInvocationEvent, AfterModelCallEvent } from '../../hooks/events.js';
|
|
6
|
+
import { createMockAgent } from '../../__fixtures__/agent-helpers.js';
|
|
7
|
+
// Helper to trigger sliding window management through hooks
|
|
8
|
+
async function triggerSlidingWindow(manager, agent) {
|
|
9
|
+
const registry = new HookRegistryImplementation();
|
|
10
|
+
registry.addHook(manager);
|
|
11
|
+
await registry.invokeCallbacks(new AfterInvocationEvent({ agent }));
|
|
12
|
+
}
|
|
13
|
+
// Helper to trigger context overflow handling through hooks
|
|
14
|
+
async function triggerContextOverflow(manager, agent, error) {
|
|
15
|
+
const registry = new HookRegistryImplementation();
|
|
16
|
+
registry.addHook(manager);
|
|
17
|
+
return await registry.invokeCallbacks(new AfterModelCallEvent({ agent, error }));
|
|
18
|
+
}
|
|
19
|
+
describe('SlidingWindowConversationManager', () => {
|
|
20
|
+
describe('constructor', () => {
|
|
21
|
+
it('sets default windowSize to 40', () => {
|
|
22
|
+
const manager = new SlidingWindowConversationManager();
|
|
23
|
+
// Access through type assertion since these are private
|
|
24
|
+
expect(manager._windowSize).toBe(40);
|
|
25
|
+
});
|
|
26
|
+
it('sets default shouldTruncateResults to true', () => {
|
|
27
|
+
const manager = new SlidingWindowConversationManager();
|
|
28
|
+
expect(manager._shouldTruncateResults).toBe(true);
|
|
29
|
+
});
|
|
30
|
+
it('accepts custom windowSize', () => {
|
|
31
|
+
const manager = new SlidingWindowConversationManager({ windowSize: 20 });
|
|
32
|
+
expect(manager._windowSize).toBe(20);
|
|
33
|
+
});
|
|
34
|
+
it('accepts custom shouldTruncateResults', () => {
|
|
35
|
+
const manager = new SlidingWindowConversationManager({ shouldTruncateResults: false });
|
|
36
|
+
expect(manager._shouldTruncateResults).toBe(false);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
describe('applyManagement', () => {
|
|
40
|
+
it('skips reduction when message count is less than window size', async () => {
|
|
41
|
+
const manager = new SlidingWindowConversationManager({ windowSize: 10 });
|
|
42
|
+
const messages = [
|
|
43
|
+
new Message({ role: 'user', content: [new TextBlock('Message 1')] }),
|
|
44
|
+
new Message({ role: 'assistant', content: [new TextBlock('Response 1')] }),
|
|
45
|
+
];
|
|
46
|
+
const mockAgent = createMockAgent({ messages });
|
|
47
|
+
await triggerSlidingWindow(manager, mockAgent);
|
|
48
|
+
expect(mockAgent.messages).toHaveLength(2);
|
|
49
|
+
});
|
|
50
|
+
it('skips reduction when message count equals window size', async () => {
|
|
51
|
+
const manager = new SlidingWindowConversationManager({ windowSize: 2 });
|
|
52
|
+
const messages = [
|
|
53
|
+
new Message({ role: 'user', content: [new TextBlock('Message 1')] }),
|
|
54
|
+
new Message({ role: 'assistant', content: [new TextBlock('Response 1')] }),
|
|
55
|
+
];
|
|
56
|
+
const mockAgent = createMockAgent({ messages });
|
|
57
|
+
await triggerSlidingWindow(manager, mockAgent);
|
|
58
|
+
expect(mockAgent.messages).toHaveLength(2);
|
|
59
|
+
});
|
|
60
|
+
it('calls reduceContext when message count exceeds window size', async () => {
|
|
61
|
+
const manager = new SlidingWindowConversationManager({ windowSize: 2 });
|
|
62
|
+
const messages = [
|
|
63
|
+
new Message({ role: 'user', content: [new TextBlock('Message 1')] }),
|
|
64
|
+
new Message({ role: 'assistant', content: [new TextBlock('Response 1')] }),
|
|
65
|
+
new Message({ role: 'user', content: [new TextBlock('Message 2')] }),
|
|
66
|
+
];
|
|
67
|
+
const mockAgent = createMockAgent({ messages });
|
|
68
|
+
await triggerSlidingWindow(manager, mockAgent);
|
|
69
|
+
// Should have trimmed to window size
|
|
70
|
+
expect(mockAgent.messages).toHaveLength(2);
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
describe('reduceContext - tool result truncation', () => {
|
|
74
|
+
it('truncates tool results when shouldTruncateResults is true', async () => {
|
|
75
|
+
const manager = new SlidingWindowConversationManager({ shouldTruncateResults: true });
|
|
76
|
+
const messages = [
|
|
77
|
+
new Message({
|
|
78
|
+
role: 'user',
|
|
79
|
+
content: [
|
|
80
|
+
new ToolResultBlock({
|
|
81
|
+
toolUseId: 'tool-1',
|
|
82
|
+
status: 'success',
|
|
83
|
+
content: [new TextBlock('Large tool result content')],
|
|
84
|
+
}),
|
|
85
|
+
],
|
|
86
|
+
}),
|
|
87
|
+
];
|
|
88
|
+
const mockAgent = createMockAgent({ messages });
|
|
89
|
+
await triggerContextOverflow(manager, mockAgent, new ContextWindowOverflowError('Context overflow'));
|
|
90
|
+
const toolResult = messages[0].content[0];
|
|
91
|
+
expect(toolResult.status).toBe('error');
|
|
92
|
+
expect(toolResult.content[0]).toEqual({ type: 'textBlock', text: 'The tool result was too large!' });
|
|
93
|
+
});
|
|
94
|
+
it('finds last message with tool results', async () => {
|
|
95
|
+
const manager = new SlidingWindowConversationManager({ shouldTruncateResults: true });
|
|
96
|
+
const messages = [
|
|
97
|
+
new Message({ role: 'user', content: [new TextBlock('Message 1')] }),
|
|
98
|
+
new Message({
|
|
99
|
+
role: 'user',
|
|
100
|
+
content: [
|
|
101
|
+
new ToolResultBlock({
|
|
102
|
+
toolUseId: 'tool-1',
|
|
103
|
+
status: 'success',
|
|
104
|
+
content: [new TextBlock('First result')],
|
|
105
|
+
}),
|
|
106
|
+
],
|
|
107
|
+
}),
|
|
108
|
+
new Message({ role: 'assistant', content: [new TextBlock('Response')] }),
|
|
109
|
+
new Message({
|
|
110
|
+
role: 'user',
|
|
111
|
+
content: [
|
|
112
|
+
new ToolResultBlock({
|
|
113
|
+
toolUseId: 'tool-2',
|
|
114
|
+
status: 'success',
|
|
115
|
+
content: [new TextBlock('Second result')],
|
|
116
|
+
}),
|
|
117
|
+
],
|
|
118
|
+
}),
|
|
119
|
+
];
|
|
120
|
+
const mockAgent = createMockAgent({ messages });
|
|
121
|
+
await triggerContextOverflow(manager, mockAgent, new ContextWindowOverflowError('Context overflow'));
|
|
122
|
+
// Should truncate the last message with tool results (index 3)
|
|
123
|
+
const lastToolResult = messages[3].content[0];
|
|
124
|
+
expect(lastToolResult.status).toBe('error');
|
|
125
|
+
expect(lastToolResult.content[0]).toEqual({ type: 'textBlock', text: 'The tool result was too large!' });
|
|
126
|
+
// Earlier tool result should remain unchanged
|
|
127
|
+
const firstToolResult = messages[1].content[0];
|
|
128
|
+
expect(firstToolResult.status).toBe('success');
|
|
129
|
+
expect(firstToolResult.content[0]).toEqual({ type: 'textBlock', text: 'First result' });
|
|
130
|
+
});
|
|
131
|
+
it('returns after successful truncation without trimming messages', async () => {
|
|
132
|
+
const manager = new SlidingWindowConversationManager({ windowSize: 2, shouldTruncateResults: true });
|
|
133
|
+
const messages = [
|
|
134
|
+
new Message({ role: 'user', content: [new TextBlock('Message 1')] }),
|
|
135
|
+
new Message({ role: 'assistant', content: [new TextBlock('Response 1')] }),
|
|
136
|
+
new Message({
|
|
137
|
+
role: 'user',
|
|
138
|
+
content: [
|
|
139
|
+
new ToolResultBlock({
|
|
140
|
+
toolUseId: 'tool-1',
|
|
141
|
+
status: 'success',
|
|
142
|
+
content: [new TextBlock('Large result')],
|
|
143
|
+
}),
|
|
144
|
+
],
|
|
145
|
+
}),
|
|
146
|
+
];
|
|
147
|
+
const mockAgent = createMockAgent({ messages });
|
|
148
|
+
await triggerContextOverflow(manager, mockAgent, new ContextWindowOverflowError('Context overflow'));
|
|
149
|
+
// Should not have removed any messages, only truncated tool result
|
|
150
|
+
expect(mockAgent.messages).toHaveLength(3);
|
|
151
|
+
});
|
|
152
|
+
it('skips truncation when shouldTruncateResults is false', async () => {
|
|
153
|
+
const manager = new SlidingWindowConversationManager({ windowSize: 2, shouldTruncateResults: false });
|
|
154
|
+
const messages = [
|
|
155
|
+
new Message({ role: 'user', content: [new TextBlock('Message 1')] }),
|
|
156
|
+
new Message({ role: 'assistant', content: [new TextBlock('Response 1')] }),
|
|
157
|
+
new Message({
|
|
158
|
+
role: 'user',
|
|
159
|
+
content: [
|
|
160
|
+
new ToolResultBlock({
|
|
161
|
+
toolUseId: 'tool-1',
|
|
162
|
+
status: 'success',
|
|
163
|
+
content: [new TextBlock('Large result')],
|
|
164
|
+
}),
|
|
165
|
+
],
|
|
166
|
+
}),
|
|
167
|
+
];
|
|
168
|
+
const mockAgent = createMockAgent({ messages });
|
|
169
|
+
await triggerContextOverflow(manager, mockAgent, new ContextWindowOverflowError('Context overflow'));
|
|
170
|
+
// Should have trimmed messages instead of truncating tool result
|
|
171
|
+
expect(mockAgent.messages).toHaveLength(2);
|
|
172
|
+
// Tool result should not be truncated - it's now at index 1 after trimming
|
|
173
|
+
const toolResult = mockAgent.messages[1].content[0];
|
|
174
|
+
expect(toolResult.status).toBe('success');
|
|
175
|
+
});
|
|
176
|
+
it('does not truncate already-truncated results', async () => {
|
|
177
|
+
const manager = new SlidingWindowConversationManager({ shouldTruncateResults: true });
|
|
178
|
+
const messages = [
|
|
179
|
+
new Message({
|
|
180
|
+
role: 'user',
|
|
181
|
+
content: [
|
|
182
|
+
new ToolResultBlock({
|
|
183
|
+
toolUseId: 'tool-1',
|
|
184
|
+
status: 'error',
|
|
185
|
+
content: [new TextBlock('The tool result was too large!')],
|
|
186
|
+
}),
|
|
187
|
+
],
|
|
188
|
+
}),
|
|
189
|
+
];
|
|
190
|
+
// First call should return false (already truncated)
|
|
191
|
+
const result = manager.truncateToolResults(messages, 0);
|
|
192
|
+
expect(result).toBe(false);
|
|
193
|
+
// reduceContext should fall through to message trimming
|
|
194
|
+
const messages2 = [
|
|
195
|
+
new Message({
|
|
196
|
+
role: 'user',
|
|
197
|
+
content: [
|
|
198
|
+
new ToolResultBlock({
|
|
199
|
+
toolUseId: 'tool-1',
|
|
200
|
+
status: 'error',
|
|
201
|
+
content: [new TextBlock('The tool result was too large!')],
|
|
202
|
+
}),
|
|
203
|
+
],
|
|
204
|
+
}),
|
|
205
|
+
new Message({ role: 'assistant', content: [new TextBlock('Response')] }),
|
|
206
|
+
new Message({ role: 'user', content: [new TextBlock('Message')] }),
|
|
207
|
+
];
|
|
208
|
+
const mockAgent = { messages: messages2 };
|
|
209
|
+
await triggerContextOverflow(manager, mockAgent, new ContextWindowOverflowError('Context overflow'));
|
|
210
|
+
// Should have trimmed messages since truncation was skipped
|
|
211
|
+
expect(mockAgent.messages.length).toBeLessThan(3);
|
|
212
|
+
});
|
|
213
|
+
it('does not call truncateToolResults unless an error is passed in', async () => {
|
|
214
|
+
const manager = new SlidingWindowConversationManager({ windowSize: 1, shouldTruncateResults: true });
|
|
215
|
+
const messages = [
|
|
216
|
+
new Message({ role: 'user', content: [new TextBlock('Message 1')] }),
|
|
217
|
+
new Message({
|
|
218
|
+
role: 'assistant',
|
|
219
|
+
content: [new ToolUseBlock({ name: 'tool1', toolUseId: 'id-1', input: {} })],
|
|
220
|
+
}),
|
|
221
|
+
new Message({
|
|
222
|
+
role: 'user',
|
|
223
|
+
content: [
|
|
224
|
+
new ToolResultBlock({
|
|
225
|
+
toolUseId: 'id-1',
|
|
226
|
+
status: 'success',
|
|
227
|
+
content: [new TextBlock('Tool result content')],
|
|
228
|
+
}),
|
|
229
|
+
],
|
|
230
|
+
}),
|
|
231
|
+
new Message({ role: 'assistant', content: [new TextBlock('Response 1')] }),
|
|
232
|
+
];
|
|
233
|
+
const mockAgent = createMockAgent({ messages });
|
|
234
|
+
// Spy on truncateToolResults to verify it's NOT called
|
|
235
|
+
const truncateSpy = vi.spyOn(manager, 'truncateToolResults');
|
|
236
|
+
// Trigger window size enforcement (no error parameter)
|
|
237
|
+
await triggerSlidingWindow(manager, mockAgent);
|
|
238
|
+
// Verify truncateToolResults was NOT called during window enforcement
|
|
239
|
+
expect(truncateSpy).not.toHaveBeenCalled();
|
|
240
|
+
// Should have trimmed to window size (1 message) through message trimming instead
|
|
241
|
+
expect(mockAgent.messages).toHaveLength(1);
|
|
242
|
+
expect(mockAgent.messages[0].content[0]).toEqual({ type: 'textBlock', text: 'Response 1' });
|
|
243
|
+
truncateSpy.mockRestore();
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
describe('reduceContext - message trimming', () => {
|
|
247
|
+
it('trims oldest messages when tool results cannot be truncated', async () => {
|
|
248
|
+
const manager = new SlidingWindowConversationManager({ windowSize: 3, shouldTruncateResults: false });
|
|
249
|
+
const messages = [
|
|
250
|
+
new Message({ role: 'user', content: [new TextBlock('Message 1')] }),
|
|
251
|
+
new Message({ role: 'assistant', content: [new TextBlock('Response 1')] }),
|
|
252
|
+
new Message({ role: 'user', content: [new TextBlock('Message 2')] }),
|
|
253
|
+
new Message({ role: 'assistant', content: [new TextBlock('Response 2')] }),
|
|
254
|
+
new Message({ role: 'user', content: [new TextBlock('Message 3')] }),
|
|
255
|
+
];
|
|
256
|
+
const mockAgent = createMockAgent({ messages });
|
|
257
|
+
await triggerContextOverflow(manager, mockAgent, new ContextWindowOverflowError('Context overflow'));
|
|
258
|
+
expect(mockAgent.messages).toHaveLength(3);
|
|
259
|
+
expect(mockAgent.messages[0].content[0]).toEqual({ type: 'textBlock', text: 'Message 2' });
|
|
260
|
+
});
|
|
261
|
+
it('calculates correct trim index (messages.length - windowSize)', async () => {
|
|
262
|
+
const manager = new SlidingWindowConversationManager({ windowSize: 2 });
|
|
263
|
+
const messages = [
|
|
264
|
+
new Message({ role: 'user', content: [new TextBlock('Message 1')] }),
|
|
265
|
+
new Message({ role: 'assistant', content: [new TextBlock('Response 1')] }),
|
|
266
|
+
new Message({ role: 'user', content: [new TextBlock('Message 2')] }),
|
|
267
|
+
new Message({ role: 'assistant', content: [new TextBlock('Response 2')] }),
|
|
268
|
+
];
|
|
269
|
+
const mockAgent = createMockAgent({ messages });
|
|
270
|
+
await triggerContextOverflow(manager, mockAgent, new ContextWindowOverflowError('Context overflow'));
|
|
271
|
+
// Should remove 2 messages (4 - 2 = 2)
|
|
272
|
+
expect(mockAgent.messages).toHaveLength(2);
|
|
273
|
+
});
|
|
274
|
+
it('uses default trim index of 2 when messages <= windowSize', async () => {
|
|
275
|
+
const manager = new SlidingWindowConversationManager({ windowSize: 5 });
|
|
276
|
+
const messages = [
|
|
277
|
+
new Message({ role: 'user', content: [new TextBlock('Message 1')] }),
|
|
278
|
+
new Message({ role: 'assistant', content: [new TextBlock('Response 1')] }),
|
|
279
|
+
new Message({ role: 'user', content: [new TextBlock('Message 2')] }),
|
|
280
|
+
];
|
|
281
|
+
const mockAgent = createMockAgent({ messages });
|
|
282
|
+
await triggerContextOverflow(manager, mockAgent, new ContextWindowOverflowError('Context overflow'));
|
|
283
|
+
// Should remove 2 messages (default when count <= windowSize)
|
|
284
|
+
expect(mockAgent.messages).toHaveLength(1);
|
|
285
|
+
});
|
|
286
|
+
it('removes messages from start of array using splice', async () => {
|
|
287
|
+
const manager = new SlidingWindowConversationManager({ windowSize: 2 });
|
|
288
|
+
const messages = [
|
|
289
|
+
new Message({ role: 'user', content: [new TextBlock('Message 1')] }),
|
|
290
|
+
new Message({ role: 'assistant', content: [new TextBlock('Response 1')] }),
|
|
291
|
+
new Message({ role: 'user', content: [new TextBlock('Message 2')] }),
|
|
292
|
+
new Message({ role: 'assistant', content: [new TextBlock('Response 2')] }),
|
|
293
|
+
];
|
|
294
|
+
const mockAgent = createMockAgent({ messages });
|
|
295
|
+
await triggerContextOverflow(manager, mockAgent, new ContextWindowOverflowError('Context overflow'));
|
|
296
|
+
// Should keep last 2 messages
|
|
297
|
+
expect(mockAgent.messages).toHaveLength(2);
|
|
298
|
+
expect(mockAgent.messages[0].content[0]).toEqual({ type: 'textBlock', text: 'Message 2' });
|
|
299
|
+
expect(mockAgent.messages[1].content[0]).toEqual({ type: 'textBlock', text: 'Response 2' });
|
|
300
|
+
});
|
|
301
|
+
});
|
|
302
|
+
describe('reduceContext - tool pair validation', () => {
|
|
303
|
+
it('does not trim at index where oldest message is toolResult', async () => {
|
|
304
|
+
const manager = new SlidingWindowConversationManager({ windowSize: 2, shouldTruncateResults: false });
|
|
305
|
+
const messages = [
|
|
306
|
+
new Message({
|
|
307
|
+
role: 'assistant',
|
|
308
|
+
content: [new ToolUseBlock({ name: 'tool1', toolUseId: 'id-1', input: {} })],
|
|
309
|
+
}),
|
|
310
|
+
new Message({
|
|
311
|
+
role: 'user',
|
|
312
|
+
content: [
|
|
313
|
+
new ToolResultBlock({
|
|
314
|
+
toolUseId: 'id-1',
|
|
315
|
+
status: 'success',
|
|
316
|
+
content: [new TextBlock('Result')],
|
|
317
|
+
}),
|
|
318
|
+
],
|
|
319
|
+
}),
|
|
320
|
+
new Message({ role: 'assistant', content: [new TextBlock('Response')] }),
|
|
321
|
+
new Message({ role: 'user', content: [new TextBlock('Message')] }),
|
|
322
|
+
];
|
|
323
|
+
const mockAgent = createMockAgent({ messages });
|
|
324
|
+
await triggerContextOverflow(manager, mockAgent, new ContextWindowOverflowError('Context overflow'));
|
|
325
|
+
// Should not trim at index 1 (toolResult), should trim at index 2 instead
|
|
326
|
+
// This means keeping last 2 messages
|
|
327
|
+
expect(mockAgent.messages).toHaveLength(2);
|
|
328
|
+
expect(mockAgent.messages[0].content[0]).toEqual({ type: 'textBlock', text: 'Response' });
|
|
329
|
+
});
|
|
330
|
+
it('does not trim at index where oldest message is toolUse without following toolResult', async () => {
|
|
331
|
+
const manager = new SlidingWindowConversationManager({ windowSize: 2, shouldTruncateResults: false });
|
|
332
|
+
const messages = [
|
|
333
|
+
new Message({ role: 'user', content: [new TextBlock('Message 1')] }),
|
|
334
|
+
new Message({
|
|
335
|
+
role: 'assistant',
|
|
336
|
+
content: [new ToolUseBlock({ name: 'tool1', toolUseId: 'id-1', input: {} })],
|
|
337
|
+
}),
|
|
338
|
+
new Message({ role: 'assistant', content: [new TextBlock('Response')] }), // Not a toolResult
|
|
339
|
+
new Message({ role: 'user', content: [new TextBlock('Message 2')] }),
|
|
340
|
+
];
|
|
341
|
+
const mockAgent = createMockAgent({ messages });
|
|
342
|
+
await triggerContextOverflow(manager, mockAgent, new ContextWindowOverflowError('Context overflow'));
|
|
343
|
+
// Should skip index 1 (toolUse without following toolResult), trim at index 2
|
|
344
|
+
expect(mockAgent.messages).toHaveLength(2);
|
|
345
|
+
expect(mockAgent.messages[0].content[0]).toEqual({ type: 'textBlock', text: 'Response' });
|
|
346
|
+
});
|
|
347
|
+
it('allows trim when oldest message is toolUse with following toolResult', async () => {
|
|
348
|
+
const manager = new SlidingWindowConversationManager({ windowSize: 2, shouldTruncateResults: false });
|
|
349
|
+
const messages = [
|
|
350
|
+
new Message({ role: 'user', content: [new TextBlock('Message 1')] }),
|
|
351
|
+
new Message({
|
|
352
|
+
role: 'assistant',
|
|
353
|
+
content: [new ToolUseBlock({ name: 'tool1', toolUseId: 'id-1', input: {} })],
|
|
354
|
+
}),
|
|
355
|
+
new Message({
|
|
356
|
+
role: 'user',
|
|
357
|
+
content: [
|
|
358
|
+
new ToolResultBlock({
|
|
359
|
+
toolUseId: 'id-1',
|
|
360
|
+
status: 'success',
|
|
361
|
+
content: [new TextBlock('Result')],
|
|
362
|
+
}),
|
|
363
|
+
],
|
|
364
|
+
}),
|
|
365
|
+
new Message({ role: 'assistant', content: [new TextBlock('Response')] }),
|
|
366
|
+
new Message({ role: 'user', content: [new TextBlock('Message 2')] }),
|
|
367
|
+
];
|
|
368
|
+
const mockAgent = createMockAgent({ messages });
|
|
369
|
+
await triggerContextOverflow(manager, mockAgent, new ContextWindowOverflowError('Context overflow'));
|
|
370
|
+
// Should trim at index 3 (5 - 2 = 3)
|
|
371
|
+
// Index 1 would be toolUse (valid start since toolResult follows)
|
|
372
|
+
// Index 2 would be toolResult (invalid - no preceding toolUse)
|
|
373
|
+
// Index 3 would be Response (valid - text block)
|
|
374
|
+
// So we trim at index 3, keeping last 2 messages
|
|
375
|
+
expect(mockAgent.messages).toHaveLength(2);
|
|
376
|
+
expect(mockAgent.messages[0].content[0]).toEqual({ type: 'textBlock', text: 'Response' });
|
|
377
|
+
expect(mockAgent.messages[1].content[0]).toEqual({ type: 'textBlock', text: 'Message 2' });
|
|
378
|
+
});
|
|
379
|
+
it('allows trim at toolUse when toolResult immediately follows', async () => {
|
|
380
|
+
const manager = new SlidingWindowConversationManager({ windowSize: 3, shouldTruncateResults: false });
|
|
381
|
+
const messages = [
|
|
382
|
+
new Message({ role: 'user', content: [new TextBlock('Message 1')] }),
|
|
383
|
+
new Message({ role: 'assistant', content: [new TextBlock('Response 1')] }),
|
|
384
|
+
new Message({
|
|
385
|
+
role: 'assistant',
|
|
386
|
+
content: [new ToolUseBlock({ name: 'tool1', toolUseId: 'id-1', input: {} })],
|
|
387
|
+
}),
|
|
388
|
+
new Message({
|
|
389
|
+
role: 'user',
|
|
390
|
+
content: [
|
|
391
|
+
new ToolResultBlock({
|
|
392
|
+
toolUseId: 'id-1',
|
|
393
|
+
status: 'success',
|
|
394
|
+
content: [new TextBlock('Result')],
|
|
395
|
+
}),
|
|
396
|
+
],
|
|
397
|
+
}),
|
|
398
|
+
new Message({ role: 'assistant', content: [new TextBlock('Response 2')] }),
|
|
399
|
+
];
|
|
400
|
+
const mockAgent = createMockAgent({ messages });
|
|
401
|
+
await triggerContextOverflow(manager, mockAgent, new ContextWindowOverflowError('Context overflow'));
|
|
402
|
+
// Should trim at index 2 (5 - 3 = 2)
|
|
403
|
+
// Index 2 is toolUse with toolResult at index 3 - this is valid
|
|
404
|
+
expect(mockAgent.messages).toHaveLength(3);
|
|
405
|
+
expect(mockAgent.messages[0].content[0]).toEqual({
|
|
406
|
+
type: 'toolUseBlock',
|
|
407
|
+
name: 'tool1',
|
|
408
|
+
toolUseId: 'id-1',
|
|
409
|
+
input: {},
|
|
410
|
+
});
|
|
411
|
+
expect(mockAgent.messages[1].content[0]).toEqual({
|
|
412
|
+
type: 'toolResultBlock',
|
|
413
|
+
toolUseId: 'id-1',
|
|
414
|
+
status: 'success',
|
|
415
|
+
content: [{ type: 'textBlock', text: 'Result' }],
|
|
416
|
+
});
|
|
417
|
+
});
|
|
418
|
+
it('allows trim when oldest message is text or other non-tool content', async () => {
|
|
419
|
+
const manager = new SlidingWindowConversationManager({ windowSize: 2 });
|
|
420
|
+
const messages = [
|
|
421
|
+
new Message({ role: 'user', content: [new TextBlock('Message 1')] }),
|
|
422
|
+
new Message({ role: 'assistant', content: [new TextBlock('Response 1')] }),
|
|
423
|
+
new Message({ role: 'user', content: [new TextBlock('Message 2')] }),
|
|
424
|
+
];
|
|
425
|
+
const mockAgent = createMockAgent({ messages });
|
|
426
|
+
await triggerContextOverflow(manager, mockAgent, new ContextWindowOverflowError('Context overflow'));
|
|
427
|
+
// Should trim at index 1 (3 - 2 = 1)
|
|
428
|
+
expect(mockAgent.messages).toHaveLength(2);
|
|
429
|
+
expect(mockAgent.messages[0].content[0]).toEqual({ type: 'textBlock', text: 'Response 1' });
|
|
430
|
+
});
|
|
431
|
+
it('throws ContextWindowOverflowError when no valid trim point exists', async () => {
|
|
432
|
+
const manager = new SlidingWindowConversationManager({ windowSize: 0, shouldTruncateResults: false });
|
|
433
|
+
const messages = [
|
|
434
|
+
new Message({
|
|
435
|
+
role: 'user',
|
|
436
|
+
content: [
|
|
437
|
+
new ToolResultBlock({
|
|
438
|
+
toolUseId: 'id-1',
|
|
439
|
+
status: 'success',
|
|
440
|
+
content: [new TextBlock('Result')],
|
|
441
|
+
}),
|
|
442
|
+
],
|
|
443
|
+
}),
|
|
444
|
+
];
|
|
445
|
+
const mockAgent = createMockAgent({ messages });
|
|
446
|
+
await expect(triggerContextOverflow(manager, mockAgent, new ContextWindowOverflowError('Context overflow'))).rejects.toThrow(ContextWindowOverflowError);
|
|
447
|
+
});
|
|
448
|
+
});
|
|
449
|
+
describe('helper methods', () => {
|
|
450
|
+
describe('findLastMessageWithToolResults', () => {
|
|
451
|
+
it('returns correct index when tool results exist', () => {
|
|
452
|
+
const manager = new SlidingWindowConversationManager();
|
|
453
|
+
const messages = [
|
|
454
|
+
new Message({ role: 'user', content: [new TextBlock('Message 1')] }),
|
|
455
|
+
new Message({
|
|
456
|
+
role: 'user',
|
|
457
|
+
content: [
|
|
458
|
+
new ToolResultBlock({
|
|
459
|
+
toolUseId: 'id-1',
|
|
460
|
+
status: 'success',
|
|
461
|
+
content: [new TextBlock('Result 1')],
|
|
462
|
+
}),
|
|
463
|
+
],
|
|
464
|
+
}),
|
|
465
|
+
new Message({ role: 'assistant', content: [new TextBlock('Response')] }),
|
|
466
|
+
];
|
|
467
|
+
const index = manager.findLastMessageWithToolResults(messages);
|
|
468
|
+
expect(index).toBe(1);
|
|
469
|
+
});
|
|
470
|
+
it('returns undefined when no tool results exist', () => {
|
|
471
|
+
const manager = new SlidingWindowConversationManager();
|
|
472
|
+
const messages = [
|
|
473
|
+
new Message({ role: 'user', content: [new TextBlock('Message 1')] }),
|
|
474
|
+
new Message({ role: 'assistant', content: [new TextBlock('Response 1')] }),
|
|
475
|
+
];
|
|
476
|
+
const index = manager.findLastMessageWithToolResults(messages);
|
|
477
|
+
expect(index).toBeUndefined();
|
|
478
|
+
});
|
|
479
|
+
it('iterates backwards from end', () => {
|
|
480
|
+
const manager = new SlidingWindowConversationManager();
|
|
481
|
+
const messages = [
|
|
482
|
+
new Message({
|
|
483
|
+
role: 'user',
|
|
484
|
+
content: [
|
|
485
|
+
new ToolResultBlock({
|
|
486
|
+
toolUseId: 'id-1',
|
|
487
|
+
status: 'success',
|
|
488
|
+
content: [new TextBlock('Result 1')],
|
|
489
|
+
}),
|
|
490
|
+
],
|
|
491
|
+
}),
|
|
492
|
+
new Message({ role: 'assistant', content: [new TextBlock('Response')] }),
|
|
493
|
+
new Message({
|
|
494
|
+
role: 'user',
|
|
495
|
+
content: [
|
|
496
|
+
new ToolResultBlock({
|
|
497
|
+
toolUseId: 'id-2',
|
|
498
|
+
status: 'success',
|
|
499
|
+
content: [new TextBlock('Result 2')],
|
|
500
|
+
}),
|
|
501
|
+
],
|
|
502
|
+
}),
|
|
503
|
+
];
|
|
504
|
+
const index = manager.findLastMessageWithToolResults(messages);
|
|
505
|
+
// Should find the last one (index 2), not the first one (index 0)
|
|
506
|
+
expect(index).toBe(2);
|
|
507
|
+
});
|
|
508
|
+
});
|
|
509
|
+
describe('truncateToolResults', () => {
|
|
510
|
+
it('returns true when changes are made', () => {
|
|
511
|
+
const manager = new SlidingWindowConversationManager();
|
|
512
|
+
const messages = [
|
|
513
|
+
new Message({
|
|
514
|
+
role: 'user',
|
|
515
|
+
content: [
|
|
516
|
+
new ToolResultBlock({
|
|
517
|
+
toolUseId: 'id-1',
|
|
518
|
+
status: 'success',
|
|
519
|
+
content: [new TextBlock('Large result')],
|
|
520
|
+
}),
|
|
521
|
+
],
|
|
522
|
+
}),
|
|
523
|
+
];
|
|
524
|
+
const result = manager.truncateToolResults(messages, 0);
|
|
525
|
+
expect(result).toBe(true);
|
|
526
|
+
});
|
|
527
|
+
it('returns false when already truncated', () => {
|
|
528
|
+
const manager = new SlidingWindowConversationManager();
|
|
529
|
+
const messages = [
|
|
530
|
+
new Message({
|
|
531
|
+
role: 'user',
|
|
532
|
+
content: [
|
|
533
|
+
new ToolResultBlock({
|
|
534
|
+
toolUseId: 'id-1',
|
|
535
|
+
status: 'error',
|
|
536
|
+
content: [new TextBlock('The tool result was too large!')],
|
|
537
|
+
}),
|
|
538
|
+
],
|
|
539
|
+
}),
|
|
540
|
+
];
|
|
541
|
+
const result = manager.truncateToolResults(messages, 0);
|
|
542
|
+
expect(result).toBe(false);
|
|
543
|
+
});
|
|
544
|
+
it('returns false when no tool results found', () => {
|
|
545
|
+
const manager = new SlidingWindowConversationManager();
|
|
546
|
+
const messages = [new Message({ role: 'user', content: [new TextBlock('Message')] })];
|
|
547
|
+
const result = manager.truncateToolResults(messages, 0);
|
|
548
|
+
expect(result).toBe(false);
|
|
549
|
+
});
|
|
550
|
+
});
|
|
551
|
+
});
|
|
552
|
+
});
|
|
553
|
+
//# sourceMappingURL=sliding-window-conversation-manager.test.js.map
|
package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sliding-window-conversation-manager.test.js","sourceRoot":"","sources":["../../../../src/conversation-manager/__tests__/sliding-window-conversation-manager.test.ts"],"names":[],"mappings":"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"}
|