@strands-agents/sdk 1.6.0 → 1.8.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/dist/src/agent/agent.d.ts +1 -1
- package/dist/src/agent/agent.d.ts.map +1 -1
- package/dist/src/agent/agent.js +1 -1
- package/dist/src/agent/agent.js.map +1 -1
- package/dist/src/context-manager/modes/agentic/agentic-context.d.ts +3 -3
- package/dist/src/context-manager/modes/agentic/agentic-context.d.ts.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/index.node.d.ts.map +1 -1
- package/dist/src/index.node.js +3 -0
- package/dist/src/index.node.js.map +1 -1
- package/dist/src/interventions/actions.d.ts.map +1 -1
- package/dist/src/interventions/actions.js.map +1 -1
- package/dist/src/{mcp.d.ts → mcp/client.d.ts} +13 -4
- package/dist/src/mcp/client.d.ts.map +1 -0
- package/dist/src/{mcp.js → mcp/client.js} +15 -3
- package/dist/src/mcp/client.js.map +1 -0
- package/dist/src/mcp/config.d.ts +52 -0
- package/dist/src/mcp/config.d.ts.map +1 -0
- package/dist/src/mcp/config.js +12 -0
- package/dist/src/mcp/config.js.map +1 -0
- package/dist/src/mcp/config.node.d.ts +16 -0
- package/dist/src/mcp/config.node.d.ts.map +1 -0
- package/dist/src/mcp/config.node.js +145 -0
- package/dist/src/mcp/config.node.js.map +1 -0
- package/dist/src/mcp/index.d.ts +3 -0
- package/dist/src/mcp/index.d.ts.map +1 -0
- package/dist/src/mcp/index.js +2 -0
- package/dist/src/mcp/index.js.map +1 -0
- package/dist/src/memory/extraction/coordinator.d.ts +6 -1
- package/dist/src/memory/extraction/coordinator.d.ts.map +1 -1
- package/dist/src/memory/extraction/coordinator.js +48 -10
- package/dist/src/memory/extraction/coordinator.js.map +1 -1
- package/dist/src/memory/extraction/model-extractor.d.ts.map +1 -1
- package/dist/src/memory/extraction/model-extractor.js +30 -9
- package/dist/src/memory/extraction/model-extractor.js.map +1 -1
- package/dist/src/memory/extraction/types.d.ts +7 -0
- package/dist/src/memory/extraction/types.d.ts.map +1 -1
- package/dist/src/memory/extraction/types.js.map +1 -1
- package/dist/src/memory/memory-manager.d.ts +15 -2
- package/dist/src/memory/memory-manager.d.ts.map +1 -1
- package/dist/src/memory/memory-manager.js +123 -45
- package/dist/src/memory/memory-manager.js.map +1 -1
- package/dist/src/memory/types.d.ts +7 -0
- package/dist/src/memory/types.d.ts.map +1 -1
- package/dist/src/models/google/adapters.d.ts.map +1 -1
- package/dist/src/models/google/adapters.js +21 -3
- package/dist/src/models/google/adapters.js.map +1 -1
- package/dist/src/models/model.d.ts.map +1 -1
- package/dist/src/models/model.js +2 -1
- package/dist/src/models/model.js.map +1 -1
- package/dist/src/models/openai/errors.d.ts.map +1 -1
- package/dist/src/models/openai/errors.js +4 -1
- package/dist/src/models/openai/errors.js.map +1 -1
- package/dist/src/models/openai/responses-adapter.d.ts +1 -0
- package/dist/src/models/openai/responses-adapter.d.ts.map +1 -1
- package/dist/src/models/openai/responses-adapter.js +24 -10
- package/dist/src/models/openai/responses-adapter.js.map +1 -1
- package/dist/src/multiagent/graph.d.ts +7 -0
- package/dist/src/multiagent/graph.d.ts.map +1 -1
- package/dist/src/multiagent/graph.js +26 -2
- package/dist/src/multiagent/graph.js.map +1 -1
- package/dist/src/multiagent/nodes.d.ts +5 -0
- package/dist/src/multiagent/nodes.d.ts.map +1 -1
- package/dist/src/multiagent/nodes.js +15 -0
- package/dist/src/multiagent/nodes.js.map +1 -1
- package/dist/src/multiagent/state.d.ts.map +1 -1
- package/dist/src/multiagent/state.js.map +1 -1
- package/dist/src/telemetry/tracer.d.ts +82 -2
- package/dist/src/telemetry/tracer.d.ts.map +1 -1
- package/dist/src/telemetry/tracer.js +242 -3
- package/dist/src/telemetry/tracer.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +86 -1
- package/dist/src/telemetry/types.d.ts.map +1 -1
- package/dist/src/tools/function-tool.d.ts +1 -1
- package/dist/src/tools/function-tool.d.ts.map +1 -1
- package/dist/src/tools/function-tool.js +4 -12
- package/dist/src/tools/function-tool.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +2 -1
- package/dist/src/tools/mcp-tool.d.ts.map +1 -1
- package/dist/src/tools/mcp-tool.js +1 -0
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/tool-factory.d.ts +1 -1
- package/dist/src/tools/tool-factory.d.ts.map +1 -1
- package/dist/src/tools/types.d.ts +4 -0
- package/dist/src/tools/types.d.ts.map +1 -1
- package/dist/src/tools/zod-tool.d.ts +4 -2
- package/dist/src/tools/zod-tool.d.ts.map +1 -1
- package/dist/src/tools/zod-tool.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/src/types/json.js +2 -2
- package/dist/src/types/json.js.map +1 -1
- package/dist/src/types/media.d.ts.map +1 -1
- package/dist/src/types/media.js.map +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-interventions/cedar/cedar.d.ts +12 -0
- package/dist/src/vended-interventions/cedar/cedar.d.ts.map +1 -1
- package/dist/src/vended-interventions/cedar/cedar.js +15 -4
- package/dist/src/vended-interventions/cedar/cedar.js.map +1 -1
- package/dist/src/vended-interventions/cedar/schema-generator.d.ts +1 -1
- package/dist/src/vended-interventions/cedar/schema-generator.d.ts.map +1 -1
- package/dist/src/vended-interventions/cedar/schema-generator.js +8 -3
- package/dist/src/vended-interventions/cedar/schema-generator.js.map +1 -1
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/index.d.ts +1 -1
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/index.d.ts.map +1 -1
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/index.js.map +1 -1
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.d.ts +57 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.d.ts.map +1 -1
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.js +86 -11
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.js.map +1 -1
- package/dist/src/vended-memory-stores/local/index.d.ts +2 -0
- package/dist/src/vended-memory-stores/local/index.d.ts.map +1 -0
- package/dist/src/vended-memory-stores/local/index.js +2 -0
- package/dist/src/vended-memory-stores/local/index.js.map +1 -0
- package/dist/src/vended-memory-stores/local/store.d.ts +122 -0
- package/dist/src/vended-memory-stores/local/store.d.ts.map +1 -0
- package/dist/src/vended-memory-stores/local/store.js +281 -0
- package/dist/src/vended-memory-stores/local/store.js.map +1 -0
- package/dist/src/vended-plugins/context-offloader/search.d.ts.map +1 -1
- package/dist/src/vended-plugins/context-offloader/search.js +4 -2
- package/dist/src/vended-plugins/context-offloader/search.js.map +1 -1
- package/dist/src/vended-plugins/context-offloader/storage.d.ts.map +1 -1
- package/dist/src/vended-plugins/context-offloader/storage.js +16 -3
- package/dist/src/vended-plugins/context-offloader/storage.js.map +1 -1
- package/dist/src/vended-plugins/skills/skill.d.ts.map +1 -1
- package/dist/src/vended-plugins/skills/skill.js +4 -2
- package/dist/src/vended-plugins/skills/skill.js.map +1 -1
- package/dist/src/vended-tools/http-request/http-request.js +1 -1
- package/dist/src/vended-tools/http-request/http-request.js.map +1 -1
- package/dist/src/vended-tools/notebook/notebook.d.ts +1 -1
- package/package.json +46 -39
- package/dist/src/__fixtures__/agent-helpers.d.ts +0 -136
- package/dist/src/__fixtures__/agent-helpers.d.ts.map +0 -1
- package/dist/src/__fixtures__/agent-helpers.js +0 -156
- package/dist/src/__fixtures__/agent-helpers.js.map +0 -1
- package/dist/src/__fixtures__/environment.d.ts +0 -12
- package/dist/src/__fixtures__/environment.d.ts.map +0 -1
- package/dist/src/__fixtures__/environment.js +0 -12
- package/dist/src/__fixtures__/environment.js.map +0 -1
- package/dist/src/__fixtures__/metrics-helpers.d.ts +0 -55
- package/dist/src/__fixtures__/metrics-helpers.d.ts.map +0 -1
- package/dist/src/__fixtures__/metrics-helpers.js +0 -57
- package/dist/src/__fixtures__/metrics-helpers.js.map +0 -1
- package/dist/src/__fixtures__/mock-message-model.d.ts +0 -103
- package/dist/src/__fixtures__/mock-message-model.d.ts.map +0 -1
- package/dist/src/__fixtures__/mock-message-model.js +0 -245
- package/dist/src/__fixtures__/mock-message-model.js.map +0 -1
- package/dist/src/__fixtures__/mock-meter.d.ts +0 -32
- package/dist/src/__fixtures__/mock-meter.d.ts.map +0 -1
- package/dist/src/__fixtures__/mock-meter.js +0 -47
- package/dist/src/__fixtures__/mock-meter.js.map +0 -1
- package/dist/src/__fixtures__/mock-plugin.d.ts +0 -13
- package/dist/src/__fixtures__/mock-plugin.d.ts.map +0 -1
- package/dist/src/__fixtures__/mock-plugin.js +0 -35
- package/dist/src/__fixtures__/mock-plugin.js.map +0 -1
- package/dist/src/__fixtures__/mock-span.d.ts +0 -78
- package/dist/src/__fixtures__/mock-span.d.ts.map +0 -1
- package/dist/src/__fixtures__/mock-span.js +0 -93
- package/dist/src/__fixtures__/mock-span.js.map +0 -1
- package/dist/src/__fixtures__/mock-storage-provider.d.ts +0 -42
- package/dist/src/__fixtures__/mock-storage-provider.d.ts.map +0 -1
- package/dist/src/__fixtures__/mock-storage-provider.js +0 -122
- package/dist/src/__fixtures__/mock-storage-provider.js.map +0 -1
- package/dist/src/__fixtures__/model-test-helpers.d.ts +0 -56
- package/dist/src/__fixtures__/model-test-helpers.d.ts.map +0 -1
- package/dist/src/__fixtures__/model-test-helpers.js +0 -85
- package/dist/src/__fixtures__/model-test-helpers.js.map +0 -1
- package/dist/src/__fixtures__/register-node-defaults.d.ts +0 -2
- package/dist/src/__fixtures__/register-node-defaults.d.ts.map +0 -1
- package/dist/src/__fixtures__/register-node-defaults.js +0 -6
- package/dist/src/__fixtures__/register-node-defaults.js.map +0 -1
- package/dist/src/__fixtures__/slim-types.d.ts +0 -51
- package/dist/src/__fixtures__/slim-types.d.ts.map +0 -1
- package/dist/src/__fixtures__/slim-types.js +0 -6
- package/dist/src/__fixtures__/slim-types.js.map +0 -1
- package/dist/src/__fixtures__/test-sandbox.node.d.ts +0 -15
- package/dist/src/__fixtures__/test-sandbox.node.d.ts.map +0 -1
- package/dist/src/__fixtures__/test-sandbox.node.js +0 -23
- package/dist/src/__fixtures__/test-sandbox.node.js.map +0 -1
- package/dist/src/__fixtures__/tool-helpers.d.ts +0 -45
- package/dist/src/__fixtures__/tool-helpers.d.ts.map +0 -1
- package/dist/src/__fixtures__/tool-helpers.js +0 -101
- package/dist/src/__fixtures__/tool-helpers.js.map +0 -1
- package/dist/src/__tests__/default-slot.test.d.ts +0 -2
- package/dist/src/__tests__/default-slot.test.d.ts.map +0 -1
- package/dist/src/__tests__/default-slot.test.js +0 -33
- package/dist/src/__tests__/default-slot.test.js.map +0 -1
- package/dist/src/__tests__/errors.test.d.ts +0 -2
- package/dist/src/__tests__/errors.test.d.ts.map +0 -1
- package/dist/src/__tests__/errors.test.js +0 -170
- package/dist/src/__tests__/errors.test.js.map +0 -1
- package/dist/src/__tests__/index.test.d.ts +0 -2
- package/dist/src/__tests__/index.test.d.ts.map +0 -1
- package/dist/src/__tests__/index.test.js +0 -48
- package/dist/src/__tests__/index.test.js.map +0 -1
- package/dist/src/__tests__/interrupt.test.d.ts +0 -2
- package/dist/src/__tests__/interrupt.test.d.ts.map +0 -1
- package/dist/src/__tests__/interrupt.test.js +0 -264
- package/dist/src/__tests__/interrupt.test.js.map +0 -1
- package/dist/src/__tests__/mcp.test.d.ts +0 -2
- package/dist/src/__tests__/mcp.test.d.ts.map +0 -1
- package/dist/src/__tests__/mcp.test.js +0 -1003
- package/dist/src/__tests__/mcp.test.js.map +0 -1
- package/dist/src/__tests__/mime.test.d.ts +0 -2
- package/dist/src/__tests__/mime.test.d.ts.map +0 -1
- package/dist/src/__tests__/mime.test.js +0 -83
- package/dist/src/__tests__/mime.test.js.map +0 -1
- package/dist/src/__tests__/state-store.test.d.ts +0 -2
- package/dist/src/__tests__/state-store.test.d.ts.map +0 -1
- package/dist/src/__tests__/state-store.test.js +0 -285
- package/dist/src/__tests__/state-store.test.js.map +0 -1
- package/dist/src/a2a/__tests__/a2a-agent.test.d.ts +0 -2
- package/dist/src/a2a/__tests__/a2a-agent.test.d.ts.map +0 -1
- package/dist/src/a2a/__tests__/a2a-agent.test.js +0 -383
- package/dist/src/a2a/__tests__/a2a-agent.test.js.map +0 -1
- package/dist/src/a2a/__tests__/adapters.test.d.ts +0 -2
- package/dist/src/a2a/__tests__/adapters.test.d.ts.map +0 -1
- package/dist/src/a2a/__tests__/adapters.test.js +0 -151
- package/dist/src/a2a/__tests__/adapters.test.js.map +0 -1
- package/dist/src/a2a/__tests__/async-lock.test.d.ts +0 -2
- package/dist/src/a2a/__tests__/async-lock.test.d.ts.map +0 -1
- package/dist/src/a2a/__tests__/async-lock.test.js +0 -137
- package/dist/src/a2a/__tests__/async-lock.test.js.map +0 -1
- package/dist/src/a2a/__tests__/events.test.d.ts +0 -2
- package/dist/src/a2a/__tests__/events.test.d.ts.map +0 -1
- package/dist/src/a2a/__tests__/events.test.js +0 -68
- package/dist/src/a2a/__tests__/events.test.js.map +0 -1
- package/dist/src/a2a/__tests__/executor.test.d.ts +0 -2
- package/dist/src/a2a/__tests__/executor.test.d.ts.map +0 -1
- package/dist/src/a2a/__tests__/executor.test.js +0 -345
- package/dist/src/a2a/__tests__/executor.test.js.map +0 -1
- package/dist/src/a2a/__tests__/server.test.d.ts +0 -2
- package/dist/src/a2a/__tests__/server.test.d.ts.map +0 -1
- package/dist/src/a2a/__tests__/server.test.js +0 -71
- package/dist/src/a2a/__tests__/server.test.js.map +0 -1
- package/dist/src/a2a/__tests__/server.test.node.d.ts +0 -2
- package/dist/src/a2a/__tests__/server.test.node.d.ts.map +0 -1
- package/dist/src/a2a/__tests__/server.test.node.js +0 -110
- package/dist/src/a2a/__tests__/server.test.node.js.map +0 -1
- package/dist/src/agent/__tests__/agent-as-tool.invocation-state.test.d.ts +0 -2
- package/dist/src/agent/__tests__/agent-as-tool.invocation-state.test.d.ts.map +0 -1
- package/dist/src/agent/__tests__/agent-as-tool.invocation-state.test.js +0 -23
- package/dist/src/agent/__tests__/agent-as-tool.invocation-state.test.js.map +0 -1
- package/dist/src/agent/__tests__/agent-as-tool.test.d.ts +0 -2
- package/dist/src/agent/__tests__/agent-as-tool.test.d.ts.map +0 -1
- package/dist/src/agent/__tests__/agent-as-tool.test.js +0 -347
- package/dist/src/agent/__tests__/agent-as-tool.test.js.map +0 -1
- package/dist/src/agent/__tests__/agent.cancel.test.d.ts +0 -2
- package/dist/src/agent/__tests__/agent.cancel.test.d.ts.map +0 -1
- package/dist/src/agent/__tests__/agent.cancel.test.js +0 -337
- package/dist/src/agent/__tests__/agent.cancel.test.js.map +0 -1
- package/dist/src/agent/__tests__/agent.concurrent.test.d.ts +0 -2
- package/dist/src/agent/__tests__/agent.concurrent.test.d.ts.map +0 -1
- package/dist/src/agent/__tests__/agent.concurrent.test.js +0 -488
- package/dist/src/agent/__tests__/agent.concurrent.test.js.map +0 -1
- package/dist/src/agent/__tests__/agent.context-manager.test.d.ts +0 -2
- package/dist/src/agent/__tests__/agent.context-manager.test.d.ts.map +0 -1
- package/dist/src/agent/__tests__/agent.context-manager.test.js +0 -107
- package/dist/src/agent/__tests__/agent.context-manager.test.js.map +0 -1
- package/dist/src/agent/__tests__/agent.hook.test.d.ts +0 -2
- package/dist/src/agent/__tests__/agent.hook.test.d.ts.map +0 -1
- package/dist/src/agent/__tests__/agent.hook.test.js +0 -1332
- package/dist/src/agent/__tests__/agent.hook.test.js.map +0 -1
- package/dist/src/agent/__tests__/agent.interrupt.test.d.ts +0 -2
- package/dist/src/agent/__tests__/agent.interrupt.test.d.ts.map +0 -1
- package/dist/src/agent/__tests__/agent.interrupt.test.js +0 -779
- package/dist/src/agent/__tests__/agent.interrupt.test.js.map +0 -1
- package/dist/src/agent/__tests__/agent.invocation-state.test.d.ts +0 -2
- package/dist/src/agent/__tests__/agent.invocation-state.test.d.ts.map +0 -1
- package/dist/src/agent/__tests__/agent.invocation-state.test.js +0 -219
- package/dist/src/agent/__tests__/agent.invocation-state.test.js.map +0 -1
- package/dist/src/agent/__tests__/agent.model-retry.test.d.ts +0 -2
- package/dist/src/agent/__tests__/agent.model-retry.test.d.ts.map +0 -1
- package/dist/src/agent/__tests__/agent.model-retry.test.js +0 -161
- package/dist/src/agent/__tests__/agent.model-retry.test.js.map +0 -1
- package/dist/src/agent/__tests__/agent.stateful-model.test.d.ts +0 -2
- package/dist/src/agent/__tests__/agent.stateful-model.test.d.ts.map +0 -1
- package/dist/src/agent/__tests__/agent.stateful-model.test.js +0 -169
- package/dist/src/agent/__tests__/agent.stateful-model.test.js.map +0 -1
- package/dist/src/agent/__tests__/agent.test.d.ts +0 -2
- package/dist/src/agent/__tests__/agent.test.d.ts.map +0 -1
- package/dist/src/agent/__tests__/agent.test.js +0 -1624
- package/dist/src/agent/__tests__/agent.test.js.map +0 -1
- package/dist/src/agent/__tests__/agent.tracer.test.node.d.ts +0 -2
- package/dist/src/agent/__tests__/agent.tracer.test.node.d.ts.map +0 -1
- package/dist/src/agent/__tests__/agent.tracer.test.node.js +0 -535
- package/dist/src/agent/__tests__/agent.tracer.test.node.js.map +0 -1
- package/dist/src/agent/__tests__/printer.test.d.ts +0 -2
- package/dist/src/agent/__tests__/printer.test.d.ts.map +0 -1
- package/dist/src/agent/__tests__/printer.test.js +0 -188
- package/dist/src/agent/__tests__/printer.test.js.map +0 -1
- package/dist/src/agent/__tests__/snapshot.test.d.ts +0 -2
- package/dist/src/agent/__tests__/snapshot.test.d.ts.map +0 -1
- package/dist/src/agent/__tests__/snapshot.test.js +0 -442
- package/dist/src/agent/__tests__/snapshot.test.js.map +0 -1
- package/dist/src/agent/__tests__/tool-caller.test.d.ts +0 -2
- package/dist/src/agent/__tests__/tool-caller.test.d.ts.map +0 -1
- package/dist/src/agent/__tests__/tool-caller.test.js +0 -459
- package/dist/src/agent/__tests__/tool-caller.test.js.map +0 -1
- package/dist/src/conversation-manager/__tests__/agentic-context.test.d.ts +0 -2
- package/dist/src/conversation-manager/__tests__/agentic-context.test.d.ts.map +0 -1
- package/dist/src/conversation-manager/__tests__/agentic-context.test.js +0 -332
- package/dist/src/conversation-manager/__tests__/agentic-context.test.js.map +0 -1
- package/dist/src/conversation-manager/__tests__/context-compression.test.d.ts +0 -2
- package/dist/src/conversation-manager/__tests__/context-compression.test.d.ts.map +0 -1
- package/dist/src/conversation-manager/__tests__/context-compression.test.js +0 -176
- package/dist/src/conversation-manager/__tests__/context-compression.test.js.map +0 -1
- package/dist/src/conversation-manager/__tests__/conversation-manager.test.d.ts +0 -2
- package/dist/src/conversation-manager/__tests__/conversation-manager.test.d.ts.map +0 -1
- package/dist/src/conversation-manager/__tests__/conversation-manager.test.js +0 -321
- package/dist/src/conversation-manager/__tests__/conversation-manager.test.js.map +0 -1
- package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.d.ts +0 -2
- package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.d.ts.map +0 -1
- package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js +0 -64
- package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js.map +0 -1
- package/dist/src/conversation-manager/__tests__/pin.test.d.ts +0 -2
- package/dist/src/conversation-manager/__tests__/pin.test.d.ts.map +0 -1
- package/dist/src/conversation-manager/__tests__/pin.test.js +0 -119
- package/dist/src/conversation-manager/__tests__/pin.test.js.map +0 -1
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.d.ts +0 -2
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.d.ts.map +0 -1
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js +0 -1080
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js.map +0 -1
- package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.d.ts +0 -2
- package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.d.ts.map +0 -1
- package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js +0 -400
- package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js.map +0 -1
- package/dist/src/conversation-manager/__tests__/token-usage-middleware.test.d.ts +0 -2
- package/dist/src/conversation-manager/__tests__/token-usage-middleware.test.d.ts.map +0 -1
- package/dist/src/conversation-manager/__tests__/token-usage-middleware.test.js +0 -138
- package/dist/src/conversation-manager/__tests__/token-usage-middleware.test.js.map +0 -1
- package/dist/src/hooks/__tests__/events.test.d.ts +0 -2
- package/dist/src/hooks/__tests__/events.test.d.ts.map +0 -1
- package/dist/src/hooks/__tests__/events.test.js +0 -1060
- package/dist/src/hooks/__tests__/events.test.js.map +0 -1
- package/dist/src/hooks/__tests__/registry.test.d.ts +0 -2
- package/dist/src/hooks/__tests__/registry.test.d.ts.map +0 -1
- package/dist/src/hooks/__tests__/registry.test.js +0 -325
- package/dist/src/hooks/__tests__/registry.test.js.map +0 -1
- package/dist/src/injection/__tests__/message-injection.test.d.ts +0 -2
- package/dist/src/injection/__tests__/message-injection.test.d.ts.map +0 -1
- package/dist/src/injection/__tests__/message-injection.test.js +0 -200
- package/dist/src/injection/__tests__/message-injection.test.js.map +0 -1
- package/dist/src/interventions/__tests__/handler.test.d.ts +0 -2
- package/dist/src/interventions/__tests__/handler.test.d.ts.map +0 -1
- package/dist/src/interventions/__tests__/handler.test.js +0 -35
- package/dist/src/interventions/__tests__/handler.test.js.map +0 -1
- package/dist/src/interventions/__tests__/registry.test.d.ts +0 -2
- package/dist/src/interventions/__tests__/registry.test.d.ts.map +0 -1
- package/dist/src/interventions/__tests__/registry.test.js +0 -692
- package/dist/src/interventions/__tests__/registry.test.js.map +0 -1
- package/dist/src/logging/__tests__/logger.test.d.ts +0 -2
- package/dist/src/logging/__tests__/logger.test.d.ts.map +0 -1
- package/dist/src/logging/__tests__/logger.test.js +0 -70
- package/dist/src/logging/__tests__/logger.test.js.map +0 -1
- package/dist/src/logging/__tests__/warn-once.test.d.ts +0 -2
- package/dist/src/logging/__tests__/warn-once.test.d.ts.map +0 -1
- package/dist/src/logging/__tests__/warn-once.test.js +0 -30
- package/dist/src/logging/__tests__/warn-once.test.js.map +0 -1
- package/dist/src/mcp.d.ts.map +0 -1
- package/dist/src/mcp.js.map +0 -1
- package/dist/src/memory/__tests__/memory-manager.test.d.ts +0 -2
- package/dist/src/memory/__tests__/memory-manager.test.d.ts.map +0 -1
- package/dist/src/memory/__tests__/memory-manager.test.js +0 -679
- package/dist/src/memory/__tests__/memory-manager.test.js.map +0 -1
- package/dist/src/memory/extraction/__tests__/extraction.test.d.ts +0 -2
- package/dist/src/memory/extraction/__tests__/extraction.test.d.ts.map +0 -1
- package/dist/src/memory/extraction/__tests__/extraction.test.js +0 -637
- package/dist/src/memory/extraction/__tests__/extraction.test.js.map +0 -1
- package/dist/src/memory/extraction/__tests__/model-extractor.test.d.ts +0 -2
- package/dist/src/memory/extraction/__tests__/model-extractor.test.d.ts.map +0 -1
- package/dist/src/memory/extraction/__tests__/model-extractor.test.js +0 -68
- package/dist/src/memory/extraction/__tests__/model-extractor.test.js.map +0 -1
- package/dist/src/memory/extraction/__tests__/resolve-extraction-config.test.d.ts +0 -2
- package/dist/src/memory/extraction/__tests__/resolve-extraction-config.test.d.ts.map +0 -1
- package/dist/src/memory/extraction/__tests__/resolve-extraction-config.test.js +0 -81
- package/dist/src/memory/extraction/__tests__/resolve-extraction-config.test.js.map +0 -1
- package/dist/src/middleware/__tests__/agent-middleware.test.d.ts +0 -2
- package/dist/src/middleware/__tests__/agent-middleware.test.d.ts.map +0 -1
- package/dist/src/middleware/__tests__/agent-middleware.test.js +0 -1206
- package/dist/src/middleware/__tests__/agent-middleware.test.js.map +0 -1
- package/dist/src/middleware/__tests__/copy-on-input.test.d.ts +0 -2
- package/dist/src/middleware/__tests__/copy-on-input.test.d.ts.map +0 -1
- package/dist/src/middleware/__tests__/copy-on-input.test.js +0 -379
- package/dist/src/middleware/__tests__/copy-on-input.test.js.map +0 -1
- package/dist/src/middleware/__tests__/custom-stages.test.d.ts +0 -2
- package/dist/src/middleware/__tests__/custom-stages.test.d.ts.map +0 -1
- package/dist/src/middleware/__tests__/custom-stages.test.js +0 -97
- package/dist/src/middleware/__tests__/custom-stages.test.js.map +0 -1
- package/dist/src/middleware/__tests__/middleware-interrupts.test.d.ts +0 -2
- package/dist/src/middleware/__tests__/middleware-interrupts.test.d.ts.map +0 -1
- package/dist/src/middleware/__tests__/middleware-interrupts.test.js +0 -267
- package/dist/src/middleware/__tests__/middleware-interrupts.test.js.map +0 -1
- package/dist/src/middleware/__tests__/registry.test.d.ts +0 -2
- package/dist/src/middleware/__tests__/registry.test.d.ts.map +0 -1
- package/dist/src/middleware/__tests__/registry.test.js +0 -525
- package/dist/src/middleware/__tests__/registry.test.js.map +0 -1
- package/dist/src/models/__tests__/anthropic.test.d.ts +0 -2
- package/dist/src/models/__tests__/anthropic.test.d.ts.map +0 -1
- package/dist/src/models/__tests__/anthropic.test.js +0 -793
- package/dist/src/models/__tests__/anthropic.test.js.map +0 -1
- package/dist/src/models/__tests__/bedrock.test.d.ts +0 -2
- package/dist/src/models/__tests__/bedrock.test.d.ts.map +0 -1
- package/dist/src/models/__tests__/bedrock.test.js +0 -3964
- package/dist/src/models/__tests__/bedrock.test.js.map +0 -1
- package/dist/src/models/__tests__/defaults.test.d.ts +0 -2
- package/dist/src/models/__tests__/defaults.test.d.ts.map +0 -1
- package/dist/src/models/__tests__/defaults.test.js +0 -36
- package/dist/src/models/__tests__/defaults.test.js.map +0 -1
- package/dist/src/models/__tests__/google.test.d.ts +0 -2
- package/dist/src/models/__tests__/google.test.d.ts.map +0 -1
- package/dist/src/models/__tests__/google.test.js +0 -1104
- package/dist/src/models/__tests__/google.test.js.map +0 -1
- package/dist/src/models/__tests__/model.test.d.ts +0 -2
- package/dist/src/models/__tests__/model.test.d.ts.map +0 -1
- package/dist/src/models/__tests__/model.test.js +0 -921
- package/dist/src/models/__tests__/model.test.js.map +0 -1
- package/dist/src/models/__tests__/streaming.test.d.ts +0 -2
- package/dist/src/models/__tests__/streaming.test.d.ts.map +0 -1
- package/dist/src/models/__tests__/streaming.test.js +0 -50
- package/dist/src/models/__tests__/streaming.test.js.map +0 -1
- package/dist/src/models/__tests__/test-utils.d.ts +0 -10
- package/dist/src/models/__tests__/test-utils.d.ts.map +0 -1
- package/dist/src/models/__tests__/test-utils.js +0 -17
- package/dist/src/models/__tests__/test-utils.js.map +0 -1
- package/dist/src/models/__tests__/vercel.test.d.ts +0 -2
- package/dist/src/models/__tests__/vercel.test.d.ts.map +0 -1
- package/dist/src/models/__tests__/vercel.test.js +0 -740
- package/dist/src/models/__tests__/vercel.test.js.map +0 -1
- package/dist/src/models/openai/__tests__/chat.test.d.ts +0 -2
- package/dist/src/models/openai/__tests__/chat.test.d.ts.map +0 -1
- package/dist/src/models/openai/__tests__/chat.test.js +0 -1586
- package/dist/src/models/openai/__tests__/chat.test.js.map +0 -1
- package/dist/src/models/openai/__tests__/errors.test.d.ts +0 -2
- package/dist/src/models/openai/__tests__/errors.test.d.ts.map +0 -1
- package/dist/src/models/openai/__tests__/errors.test.js +0 -30
- package/dist/src/models/openai/__tests__/errors.test.js.map +0 -1
- package/dist/src/models/openai/__tests__/mantle.test.d.ts +0 -2
- package/dist/src/models/openai/__tests__/mantle.test.d.ts.map +0 -1
- package/dist/src/models/openai/__tests__/mantle.test.js +0 -189
- package/dist/src/models/openai/__tests__/mantle.test.js.map +0 -1
- package/dist/src/models/openai/__tests__/responses.test.d.ts +0 -2
- package/dist/src/models/openai/__tests__/responses.test.d.ts.map +0 -1
- package/dist/src/models/openai/__tests__/responses.test.js +0 -662
- package/dist/src/models/openai/__tests__/responses.test.js.map +0 -1
- package/dist/src/multiagent/__tests__/events.test.d.ts +0 -2
- package/dist/src/multiagent/__tests__/events.test.d.ts.map +0 -1
- package/dist/src/multiagent/__tests__/events.test.js +0 -493
- package/dist/src/multiagent/__tests__/events.test.js.map +0 -1
- package/dist/src/multiagent/__tests__/graph.invocation-state.test.d.ts +0 -2
- package/dist/src/multiagent/__tests__/graph.invocation-state.test.d.ts.map +0 -1
- package/dist/src/multiagent/__tests__/graph.invocation-state.test.js +0 -95
- package/dist/src/multiagent/__tests__/graph.invocation-state.test.js.map +0 -1
- package/dist/src/multiagent/__tests__/graph.test.d.ts +0 -2
- package/dist/src/multiagent/__tests__/graph.test.d.ts.map +0 -1
- package/dist/src/multiagent/__tests__/graph.test.js +0 -677
- package/dist/src/multiagent/__tests__/graph.test.js.map +0 -1
- package/dist/src/multiagent/__tests__/graph.tracer.test.d.ts +0 -2
- package/dist/src/multiagent/__tests__/graph.tracer.test.d.ts.map +0 -1
- package/dist/src/multiagent/__tests__/graph.tracer.test.js +0 -218
- package/dist/src/multiagent/__tests__/graph.tracer.test.js.map +0 -1
- package/dist/src/multiagent/__tests__/interrupts.test.d.ts +0 -2
- package/dist/src/multiagent/__tests__/interrupts.test.d.ts.map +0 -1
- package/dist/src/multiagent/__tests__/interrupts.test.js +0 -390
- package/dist/src/multiagent/__tests__/interrupts.test.js.map +0 -1
- package/dist/src/multiagent/__tests__/nodes.test.d.ts +0 -2
- package/dist/src/multiagent/__tests__/nodes.test.d.ts.map +0 -1
- package/dist/src/multiagent/__tests__/nodes.test.js +0 -321
- package/dist/src/multiagent/__tests__/nodes.test.js.map +0 -1
- package/dist/src/multiagent/__tests__/queue.test.d.ts +0 -2
- package/dist/src/multiagent/__tests__/queue.test.d.ts.map +0 -1
- package/dist/src/multiagent/__tests__/queue.test.js +0 -118
- package/dist/src/multiagent/__tests__/queue.test.js.map +0 -1
- package/dist/src/multiagent/__tests__/snapshot.test.d.ts +0 -2
- package/dist/src/multiagent/__tests__/snapshot.test.d.ts.map +0 -1
- package/dist/src/multiagent/__tests__/snapshot.test.js +0 -161
- package/dist/src/multiagent/__tests__/snapshot.test.js.map +0 -1
- package/dist/src/multiagent/__tests__/state.test.d.ts +0 -2
- package/dist/src/multiagent/__tests__/state.test.d.ts.map +0 -1
- package/dist/src/multiagent/__tests__/state.test.js +0 -526
- package/dist/src/multiagent/__tests__/state.test.js.map +0 -1
- package/dist/src/multiagent/__tests__/swarm.invocation-state.test.d.ts +0 -2
- package/dist/src/multiagent/__tests__/swarm.invocation-state.test.d.ts.map +0 -1
- package/dist/src/multiagent/__tests__/swarm.invocation-state.test.js +0 -56
- package/dist/src/multiagent/__tests__/swarm.invocation-state.test.js.map +0 -1
- package/dist/src/multiagent/__tests__/swarm.test.d.ts +0 -2
- package/dist/src/multiagent/__tests__/swarm.test.d.ts.map +0 -1
- package/dist/src/multiagent/__tests__/swarm.test.js +0 -477
- package/dist/src/multiagent/__tests__/swarm.test.js.map +0 -1
- package/dist/src/multiagent/__tests__/swarm.tracer.test.d.ts +0 -2
- package/dist/src/multiagent/__tests__/swarm.tracer.test.d.ts.map +0 -1
- package/dist/src/multiagent/__tests__/swarm.tracer.test.js +0 -235
- package/dist/src/multiagent/__tests__/swarm.tracer.test.js.map +0 -1
- package/dist/src/plugins/__tests__/plugin.test.d.ts +0 -2
- package/dist/src/plugins/__tests__/plugin.test.d.ts.map +0 -1
- package/dist/src/plugins/__tests__/plugin.test.js +0 -114
- package/dist/src/plugins/__tests__/plugin.test.js.map +0 -1
- package/dist/src/plugins/__tests__/registry.test.d.ts +0 -2
- package/dist/src/plugins/__tests__/registry.test.d.ts.map +0 -1
- package/dist/src/plugins/__tests__/registry.test.js +0 -147
- package/dist/src/plugins/__tests__/registry.test.js.map +0 -1
- package/dist/src/registry/__tests__/tool-registry.test.d.ts +0 -2
- package/dist/src/registry/__tests__/tool-registry.test.d.ts.map +0 -1
- package/dist/src/registry/__tests__/tool-registry.test.js +0 -210
- package/dist/src/registry/__tests__/tool-registry.test.js.map +0 -1
- package/dist/src/retry/__tests__/backoff-strategy.test.d.ts +0 -2
- package/dist/src/retry/__tests__/backoff-strategy.test.d.ts.map +0 -1
- package/dist/src/retry/__tests__/backoff-strategy.test.js +0 -116
- package/dist/src/retry/__tests__/backoff-strategy.test.js.map +0 -1
- package/dist/src/retry/__tests__/default-model-retry-strategy.test.d.ts +0 -2
- package/dist/src/retry/__tests__/default-model-retry-strategy.test.d.ts.map +0 -1
- package/dist/src/retry/__tests__/default-model-retry-strategy.test.js +0 -225
- package/dist/src/retry/__tests__/default-model-retry-strategy.test.js.map +0 -1
- package/dist/src/sandbox/__tests__/default.test.browser.d.ts +0 -2
- package/dist/src/sandbox/__tests__/default.test.browser.d.ts.map +0 -1
- package/dist/src/sandbox/__tests__/default.test.browser.js +0 -11
- package/dist/src/sandbox/__tests__/default.test.browser.js.map +0 -1
- package/dist/src/sandbox/__tests__/default.test.node.d.ts +0 -2
- package/dist/src/sandbox/__tests__/default.test.node.d.ts.map +0 -1
- package/dist/src/sandbox/__tests__/default.test.node.js +0 -23
- package/dist/src/sandbox/__tests__/default.test.node.js.map +0 -1
- package/dist/src/sandbox/__tests__/docker.test.node.d.ts +0 -2
- package/dist/src/sandbox/__tests__/docker.test.node.d.ts.map +0 -1
- package/dist/src/sandbox/__tests__/docker.test.node.js +0 -89
- package/dist/src/sandbox/__tests__/docker.test.node.js.map +0 -1
- package/dist/src/sandbox/__tests__/errors.test.node.d.ts +0 -2
- package/dist/src/sandbox/__tests__/errors.test.node.d.ts.map +0 -1
- package/dist/src/sandbox/__tests__/errors.test.node.js +0 -33
- package/dist/src/sandbox/__tests__/errors.test.node.js.map +0 -1
- package/dist/src/sandbox/__tests__/not-a-sandbox-local-environment.test.node.d.ts +0 -2
- package/dist/src/sandbox/__tests__/not-a-sandbox-local-environment.test.node.d.ts.map +0 -1
- package/dist/src/sandbox/__tests__/not-a-sandbox-local-environment.test.node.js +0 -124
- package/dist/src/sandbox/__tests__/not-a-sandbox-local-environment.test.node.js.map +0 -1
- package/dist/src/sandbox/__tests__/posix-shell.test.node.d.ts +0 -2
- package/dist/src/sandbox/__tests__/posix-shell.test.node.d.ts.map +0 -1
- package/dist/src/sandbox/__tests__/posix-shell.test.node.js +0 -298
- package/dist/src/sandbox/__tests__/posix-shell.test.node.js.map +0 -1
- package/dist/src/sandbox/__tests__/ssh.test.node.d.ts +0 -2
- package/dist/src/sandbox/__tests__/ssh.test.node.d.ts.map +0 -1
- package/dist/src/sandbox/__tests__/ssh.test.node.js +0 -262
- package/dist/src/sandbox/__tests__/ssh.test.node.js.map +0 -1
- package/dist/src/session/__tests__/file-storage.test.node.d.ts +0 -2
- package/dist/src/session/__tests__/file-storage.test.node.d.ts.map +0 -1
- package/dist/src/session/__tests__/file-storage.test.node.js +0 -278
- package/dist/src/session/__tests__/file-storage.test.node.js.map +0 -1
- package/dist/src/session/__tests__/s3-storage.test.d.ts +0 -2
- package/dist/src/session/__tests__/s3-storage.test.d.ts.map +0 -1
- package/dist/src/session/__tests__/s3-storage.test.js +0 -461
- package/dist/src/session/__tests__/s3-storage.test.js.map +0 -1
- package/dist/src/session/__tests__/session-manager.test.d.ts +0 -2
- package/dist/src/session/__tests__/session-manager.test.d.ts.map +0 -1
- package/dist/src/session/__tests__/session-manager.test.js +0 -832
- package/dist/src/session/__tests__/session-manager.test.js.map +0 -1
- package/dist/src/session/__tests__/validation.test.d.ts +0 -2
- package/dist/src/session/__tests__/validation.test.d.ts.map +0 -1
- package/dist/src/session/__tests__/validation.test.js +0 -47
- package/dist/src/session/__tests__/validation.test.js.map +0 -1
- package/dist/src/telemetry/__tests__/config.test.d.ts +0 -2
- package/dist/src/telemetry/__tests__/config.test.d.ts.map +0 -1
- package/dist/src/telemetry/__tests__/config.test.js +0 -64
- package/dist/src/telemetry/__tests__/config.test.js.map +0 -1
- package/dist/src/telemetry/__tests__/config.test.node.d.ts +0 -2
- package/dist/src/telemetry/__tests__/config.test.node.d.ts.map +0 -1
- package/dist/src/telemetry/__tests__/config.test.node.js +0 -164
- package/dist/src/telemetry/__tests__/config.test.node.js.map +0 -1
- package/dist/src/telemetry/__tests__/json.test.d.ts +0 -2
- package/dist/src/telemetry/__tests__/json.test.d.ts.map +0 -1
- package/dist/src/telemetry/__tests__/json.test.js +0 -89
- package/dist/src/telemetry/__tests__/json.test.js.map +0 -1
- package/dist/src/telemetry/__tests__/local-trace.test.d.ts +0 -2
- package/dist/src/telemetry/__tests__/local-trace.test.d.ts.map +0 -1
- package/dist/src/telemetry/__tests__/local-trace.test.js +0 -158
- package/dist/src/telemetry/__tests__/local-trace.test.js.map +0 -1
- package/dist/src/telemetry/__tests__/meter.test.d.ts +0 -2
- package/dist/src/telemetry/__tests__/meter.test.d.ts.map +0 -1
- package/dist/src/telemetry/__tests__/meter.test.js +0 -695
- package/dist/src/telemetry/__tests__/meter.test.js.map +0 -1
- package/dist/src/telemetry/__tests__/tracer.test.node.d.ts +0 -2
- package/dist/src/telemetry/__tests__/tracer.test.node.d.ts.map +0 -1
- package/dist/src/telemetry/__tests__/tracer.test.node.js +0 -760
- package/dist/src/telemetry/__tests__/tracer.test.node.js.map +0 -1
- package/dist/src/tools/__tests__/structured-output-tool.test.d.ts +0 -2
- package/dist/src/tools/__tests__/structured-output-tool.test.d.ts.map +0 -1
- package/dist/src/tools/__tests__/structured-output-tool.test.js +0 -84
- package/dist/src/tools/__tests__/structured-output-tool.test.js.map +0 -1
- package/dist/src/tools/__tests__/tool-factory.test.d.ts +0 -2
- package/dist/src/tools/__tests__/tool-factory.test.d.ts.map +0 -1
- package/dist/src/tools/__tests__/tool-factory.test.js +0 -98
- package/dist/src/tools/__tests__/tool-factory.test.js.map +0 -1
- package/dist/src/tools/__tests__/tool.test.d.ts +0 -2
- package/dist/src/tools/__tests__/tool.test.d.ts.map +0 -1
- package/dist/src/tools/__tests__/tool.test.js +0 -1043
- package/dist/src/tools/__tests__/tool.test.js.map +0 -1
- package/dist/src/tools/__tests__/zod-tool.test-d.d.ts +0 -2
- package/dist/src/tools/__tests__/zod-tool.test-d.d.ts.map +0 -1
- package/dist/src/tools/__tests__/zod-tool.test-d.js +0 -227
- package/dist/src/tools/__tests__/zod-tool.test-d.js.map +0 -1
- package/dist/src/tools/__tests__/zod-tool.test.d.ts +0 -2
- package/dist/src/tools/__tests__/zod-tool.test.d.ts.map +0 -1
- package/dist/src/tools/__tests__/zod-tool.test.js +0 -563
- package/dist/src/tools/__tests__/zod-tool.test.js.map +0 -1
- package/dist/src/types/__tests__/agent.test.d.ts +0 -2
- package/dist/src/types/__tests__/agent.test.d.ts.map +0 -1
- package/dist/src/types/__tests__/agent.test.js +0 -476
- package/dist/src/types/__tests__/agent.test.js.map +0 -1
- package/dist/src/types/__tests__/citations.test.d.ts +0 -2
- package/dist/src/types/__tests__/citations.test.d.ts.map +0 -1
- package/dist/src/types/__tests__/citations.test.js +0 -104
- package/dist/src/types/__tests__/citations.test.js.map +0 -1
- package/dist/src/types/__tests__/json.test.d.ts +0 -2
- package/dist/src/types/__tests__/json.test.d.ts.map +0 -1
- package/dist/src/types/__tests__/json.test.js +0 -298
- package/dist/src/types/__tests__/json.test.js.map +0 -1
- package/dist/src/types/__tests__/media.test.d.ts +0 -2
- package/dist/src/types/__tests__/media.test.d.ts.map +0 -1
- package/dist/src/types/__tests__/media.test.js +0 -478
- package/dist/src/types/__tests__/media.test.js.map +0 -1
- package/dist/src/types/__tests__/messages.test.d.ts +0 -2
- package/dist/src/types/__tests__/messages.test.d.ts.map +0 -1
- package/dist/src/types/__tests__/messages.test.js +0 -681
- package/dist/src/types/__tests__/messages.test.js.map +0 -1
- package/dist/src/types/__tests__/validation.test.d.ts +0 -2
- package/dist/src/types/__tests__/validation.test.d.ts.map +0 -1
- package/dist/src/types/__tests__/validation.test.js +0 -30
- package/dist/src/types/__tests__/validation.test.js.map +0 -1
- package/dist/src/vended-interventions/cedar/__tests__/cedar.test.node.d.ts +0 -2
- package/dist/src/vended-interventions/cedar/__tests__/cedar.test.node.d.ts.map +0 -1
- package/dist/src/vended-interventions/cedar/__tests__/cedar.test.node.js +0 -675
- package/dist/src/vended-interventions/cedar/__tests__/cedar.test.node.js.map +0 -1
- package/dist/src/vended-interventions/hitl/__tests__/hitl.test.d.ts +0 -2
- package/dist/src/vended-interventions/hitl/__tests__/hitl.test.d.ts.map +0 -1
- package/dist/src/vended-interventions/hitl/__tests__/hitl.test.js +0 -358
- package/dist/src/vended-interventions/hitl/__tests__/hitl.test.js.map +0 -1
- package/dist/src/vended-interventions/steering/__tests__/handler.test.d.ts +0 -2
- package/dist/src/vended-interventions/steering/__tests__/handler.test.d.ts.map +0 -1
- package/dist/src/vended-interventions/steering/__tests__/handler.test.js +0 -163
- package/dist/src/vended-interventions/steering/__tests__/handler.test.js.map +0 -1
- package/dist/src/vended-interventions/steering/__tests__/llm.test.d.ts +0 -2
- package/dist/src/vended-interventions/steering/__tests__/llm.test.d.ts.map +0 -1
- package/dist/src/vended-interventions/steering/__tests__/llm.test.js +0 -60
- package/dist/src/vended-interventions/steering/__tests__/llm.test.js.map +0 -1
- package/dist/src/vended-interventions/steering/__tests__/tool-ledger.test.d.ts +0 -2
- package/dist/src/vended-interventions/steering/__tests__/tool-ledger.test.d.ts.map +0 -1
- package/dist/src/vended-interventions/steering/__tests__/tool-ledger.test.js +0 -94
- package/dist/src/vended-interventions/steering/__tests__/tool-ledger.test.js.map +0 -1
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.d.ts +0 -2
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.d.ts.map +0 -1
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.js +0 -611
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.js.map +0 -1
- package/dist/src/vended-plugins/context-injector/__tests__/plugin.test.d.ts +0 -2
- package/dist/src/vended-plugins/context-injector/__tests__/plugin.test.d.ts.map +0 -1
- package/dist/src/vended-plugins/context-injector/__tests__/plugin.test.js +0 -96
- package/dist/src/vended-plugins/context-injector/__tests__/plugin.test.js.map +0 -1
- package/dist/src/vended-plugins/context-offloader/__tests__/file-storage-sandbox.test.node.d.ts +0 -2
- package/dist/src/vended-plugins/context-offloader/__tests__/file-storage-sandbox.test.node.d.ts.map +0 -1
- package/dist/src/vended-plugins/context-offloader/__tests__/file-storage-sandbox.test.node.js +0 -68
- package/dist/src/vended-plugins/context-offloader/__tests__/file-storage-sandbox.test.node.js.map +0 -1
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.d.ts +0 -2
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.d.ts.map +0 -1
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.js +0 -539
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.js.map +0 -1
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.node.d.ts +0 -2
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.node.d.ts.map +0 -1
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.node.js +0 -93
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.node.js.map +0 -1
- package/dist/src/vended-plugins/context-offloader/__tests__/search.test.d.ts +0 -2
- package/dist/src/vended-plugins/context-offloader/__tests__/search.test.d.ts.map +0 -1
- package/dist/src/vended-plugins/context-offloader/__tests__/search.test.js +0 -149
- package/dist/src/vended-plugins/context-offloader/__tests__/search.test.js.map +0 -1
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.d.ts +0 -2
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.d.ts.map +0 -1
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.js +0 -216
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.js.map +0 -1
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.node.d.ts +0 -2
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.node.d.ts.map +0 -1
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.node.js +0 -78
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.node.js.map +0 -1
- package/dist/src/vended-plugins/goal/__tests__/plugin.test.d.ts +0 -2
- package/dist/src/vended-plugins/goal/__tests__/plugin.test.d.ts.map +0 -1
- package/dist/src/vended-plugins/goal/__tests__/plugin.test.js +0 -736
- package/dist/src/vended-plugins/goal/__tests__/plugin.test.js.map +0 -1
- package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.d.ts +0 -2
- package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.d.ts.map +0 -1
- package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.js +0 -482
- package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.js.map +0 -1
- package/dist/src/vended-plugins/skills/__tests__/skill.test.node.d.ts +0 -2
- package/dist/src/vended-plugins/skills/__tests__/skill.test.node.d.ts.map +0 -1
- package/dist/src/vended-plugins/skills/__tests__/skill.test.node.js +0 -476
- package/dist/src/vended-plugins/skills/__tests__/skill.test.node.js.map +0 -1
- package/dist/src/vended-tools/bash/__tests__/bash.test.node.d.ts +0 -2
- package/dist/src/vended-tools/bash/__tests__/bash.test.node.d.ts.map +0 -1
- package/dist/src/vended-tools/bash/__tests__/bash.test.node.js +0 -390
- package/dist/src/vended-tools/bash/__tests__/bash.test.node.js.map +0 -1
- package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.d.ts +0 -2
- package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.d.ts.map +0 -1
- package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.js +0 -452
- package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.js.map +0 -1
- package/dist/src/vended-tools/http-request/__tests__/http-request.test.d.ts +0 -2
- package/dist/src/vended-tools/http-request/__tests__/http-request.test.d.ts.map +0 -1
- package/dist/src/vended-tools/http-request/__tests__/http-request.test.js +0 -189
- package/dist/src/vended-tools/http-request/__tests__/http-request.test.js.map +0 -1
- package/dist/src/vended-tools/notebook/__tests__/notebook.test.d.ts +0 -2
- package/dist/src/vended-tools/notebook/__tests__/notebook.test.d.ts.map +0 -1
- package/dist/src/vended-tools/notebook/__tests__/notebook.test.js +0 -388
- package/dist/src/vended-tools/notebook/__tests__/notebook.test.js.map +0 -1
|
@@ -1,832 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it, beforeEach, vi } from 'vitest';
|
|
2
|
-
import { SessionManager } from '../session-manager.js';
|
|
3
|
-
import { MockSnapshotStorage, createTestSnapshot } from '../../__fixtures__/mock-storage-provider.js';
|
|
4
|
-
import { InitializedEvent, MessageAddedEvent, AfterInvocationEvent, AfterModelCallEvent, HookableEvent, } from '../../hooks/index.js';
|
|
5
|
-
import { Agent } from '../../agent/agent.js';
|
|
6
|
-
import { Message, TextBlock } from '../../types/messages.js';
|
|
7
|
-
import { createMockAgent as createMockAgentWithHooks, invokeTrackedHook, } from '../../__fixtures__/agent-helpers.js';
|
|
8
|
-
import { loadStateFromJSONSymbol, stateToJSONSymbol } from '../../types/serializable.js';
|
|
9
|
-
import { StateStore } from '../../state-store.js';
|
|
10
|
-
import { logger } from '../../logging/logger.js';
|
|
11
|
-
import { AfterMultiAgentInvocationEvent, AfterNodeCallEvent, BeforeMultiAgentInvocationEvent, Graph, MultiAgentState, NodeResult, Status, } from '../../multiagent/index.js';
|
|
12
|
-
import { takeSnapshot, loadSnapshot } from '../../agent/snapshot.js';
|
|
13
|
-
// Test fixtures
|
|
14
|
-
function createMockAgent(id = 'agent') {
|
|
15
|
-
const agent = {
|
|
16
|
-
id,
|
|
17
|
-
messages: [],
|
|
18
|
-
appState: {
|
|
19
|
-
_m: new Map(),
|
|
20
|
-
get(k) {
|
|
21
|
-
return this._m.get(k);
|
|
22
|
-
},
|
|
23
|
-
set(k, v) {
|
|
24
|
-
this._m.set(k, v);
|
|
25
|
-
},
|
|
26
|
-
[stateToJSONSymbol]() {
|
|
27
|
-
return Object.fromEntries(this._m);
|
|
28
|
-
},
|
|
29
|
-
[loadStateFromJSONSymbol](json) {
|
|
30
|
-
Object.entries(json).forEach(([k, v]) => this._m.set(k, v));
|
|
31
|
-
},
|
|
32
|
-
},
|
|
33
|
-
modelState: new StateStore(),
|
|
34
|
-
systemPrompt: 'Test prompt',
|
|
35
|
-
takeSnapshot(options) {
|
|
36
|
-
return takeSnapshot(agent, options);
|
|
37
|
-
},
|
|
38
|
-
loadSnapshot(snapshot) {
|
|
39
|
-
loadSnapshot(agent, snapshot);
|
|
40
|
-
},
|
|
41
|
-
};
|
|
42
|
-
return agent;
|
|
43
|
-
}
|
|
44
|
-
const MOCK_MESSAGE = new Message({ role: 'user', content: [new TextBlock('test')] });
|
|
45
|
-
function createMockEvent(agent) {
|
|
46
|
-
return { agent, invocationState: {} };
|
|
47
|
-
}
|
|
48
|
-
function createMockMessageEvent(agent) {
|
|
49
|
-
return { agent, message: MOCK_MESSAGE, invocationState: {} };
|
|
50
|
-
}
|
|
51
|
-
async function initPluginAndInvokeHook(sessionManager, event) {
|
|
52
|
-
const pluginAgent = createMockAgentWithHooks();
|
|
53
|
-
sessionManager.initAgent(pluginAgent);
|
|
54
|
-
await invokeTrackedHook(pluginAgent, event);
|
|
55
|
-
}
|
|
56
|
-
describe('SessionManager', () => {
|
|
57
|
-
let storage;
|
|
58
|
-
let sessionManager;
|
|
59
|
-
let mockAgent;
|
|
60
|
-
beforeEach(() => {
|
|
61
|
-
storage = new MockSnapshotStorage();
|
|
62
|
-
mockAgent = createMockAgent();
|
|
63
|
-
});
|
|
64
|
-
describe('constructor', () => {
|
|
65
|
-
it('defaults saveLatestOn to invocation', async () => {
|
|
66
|
-
sessionManager = new SessionManager({ sessionId: 'test-default', storage: { snapshot: storage } });
|
|
67
|
-
await initPluginAndInvokeHook(sessionManager, new AfterInvocationEvent(createMockEvent(mockAgent)));
|
|
68
|
-
const snapshot = await storage.loadSnapshot({
|
|
69
|
-
location: { sessionId: 'test-default', scope: 'agent', scopeId: 'agent' },
|
|
70
|
-
});
|
|
71
|
-
expect(snapshot).not.toBeNull();
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
describe('saveSnapshot', () => {
|
|
75
|
-
beforeEach(() => {
|
|
76
|
-
mockAgent = createMockAgent('test-agent');
|
|
77
|
-
sessionManager = new SessionManager({
|
|
78
|
-
sessionId: 'test-session',
|
|
79
|
-
storage: { snapshot: storage },
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
it('saves snapshot_latest when isLatest is true', async () => {
|
|
83
|
-
await sessionManager.saveSnapshot({ target: mockAgent, isLatest: true });
|
|
84
|
-
const snapshot = await storage.loadSnapshot({
|
|
85
|
-
location: { sessionId: 'test-session', scope: 'agent', scopeId: 'test-agent' },
|
|
86
|
-
});
|
|
87
|
-
expect(snapshot).not.toBeNull();
|
|
88
|
-
expect(snapshot?.scope).toBe('agent');
|
|
89
|
-
});
|
|
90
|
-
it('saves immutable snapshot when isLatest is false', async () => {
|
|
91
|
-
await sessionManager.saveSnapshot({ target: mockAgent, isLatest: false });
|
|
92
|
-
const ids = await storage.listSnapshotIds({
|
|
93
|
-
location: { sessionId: 'test-session', scope: 'agent', scopeId: 'test-agent' },
|
|
94
|
-
});
|
|
95
|
-
expect(ids.length).toBeGreaterThan(0);
|
|
96
|
-
});
|
|
97
|
-
it('allocates unique snapshot IDs', async () => {
|
|
98
|
-
await sessionManager.saveSnapshot({ target: mockAgent, isLatest: false });
|
|
99
|
-
await sessionManager.saveSnapshot({ target: mockAgent, isLatest: false });
|
|
100
|
-
await sessionManager.saveSnapshot({ target: mockAgent, isLatest: false });
|
|
101
|
-
const ids = await storage.listSnapshotIds({
|
|
102
|
-
location: { sessionId: 'test-session', scope: 'agent', scopeId: 'test-agent' },
|
|
103
|
-
});
|
|
104
|
-
expect(ids.length).toBe(3);
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
describe('listSnapshotIds', () => {
|
|
108
|
-
beforeEach(() => {
|
|
109
|
-
mockAgent = createMockAgent('test-agent');
|
|
110
|
-
sessionManager = new SessionManager({
|
|
111
|
-
sessionId: 'test-session',
|
|
112
|
-
storage: { snapshot: storage },
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
it('returns empty array when no snapshots exist', async () => {
|
|
116
|
-
const ids = await sessionManager.listSnapshotIds({ target: mockAgent });
|
|
117
|
-
expect(ids).toStrictEqual([]);
|
|
118
|
-
});
|
|
119
|
-
it('returns snapshot IDs for the target agent', async () => {
|
|
120
|
-
await sessionManager.saveSnapshot({ target: mockAgent, isLatest: false });
|
|
121
|
-
await sessionManager.saveSnapshot({ target: mockAgent, isLatest: false });
|
|
122
|
-
const ids = await sessionManager.listSnapshotIds({ target: mockAgent });
|
|
123
|
-
expect(ids).toHaveLength(2);
|
|
124
|
-
});
|
|
125
|
-
it('does not return latest snapshot ID', async () => {
|
|
126
|
-
await sessionManager.saveSnapshot({ target: mockAgent, isLatest: true });
|
|
127
|
-
const ids = await sessionManager.listSnapshotIds({ target: mockAgent });
|
|
128
|
-
expect(ids).toStrictEqual([]);
|
|
129
|
-
});
|
|
130
|
-
it('forwards limit parameter', async () => {
|
|
131
|
-
await sessionManager.saveSnapshot({ target: mockAgent, isLatest: false });
|
|
132
|
-
await sessionManager.saveSnapshot({ target: mockAgent, isLatest: false });
|
|
133
|
-
await sessionManager.saveSnapshot({ target: mockAgent, isLatest: false });
|
|
134
|
-
const ids = await sessionManager.listSnapshotIds({ target: mockAgent, limit: 2 });
|
|
135
|
-
expect(ids).toHaveLength(2);
|
|
136
|
-
});
|
|
137
|
-
it('forwards startAfter parameter', async () => {
|
|
138
|
-
await sessionManager.saveSnapshot({ target: mockAgent, isLatest: false });
|
|
139
|
-
await sessionManager.saveSnapshot({ target: mockAgent, isLatest: false });
|
|
140
|
-
const allIds = await sessionManager.listSnapshotIds({ target: mockAgent });
|
|
141
|
-
const page2 = await sessionManager.listSnapshotIds({ target: mockAgent, startAfter: allIds[0] });
|
|
142
|
-
expect(page2).toHaveLength(1);
|
|
143
|
-
expect(page2[0]).toBe(allIds[1]);
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
|
-
describe('restoreSnapshot', () => {
|
|
147
|
-
beforeEach(() => {
|
|
148
|
-
mockAgent = createMockAgent('test-agent');
|
|
149
|
-
sessionManager = new SessionManager({
|
|
150
|
-
sessionId: 'test-session',
|
|
151
|
-
storage: { snapshot: storage },
|
|
152
|
-
});
|
|
153
|
-
});
|
|
154
|
-
it('restores snapshot_latest when no snapshotId provided', async () => {
|
|
155
|
-
const snapshot = createTestSnapshot();
|
|
156
|
-
await storage.saveSnapshot({
|
|
157
|
-
location: { sessionId: 'test-session', scope: 'agent', scopeId: 'test-agent' },
|
|
158
|
-
snapshotId: 'latest',
|
|
159
|
-
isLatest: true,
|
|
160
|
-
snapshot,
|
|
161
|
-
});
|
|
162
|
-
const result = await sessionManager.restoreSnapshot({ target: mockAgent });
|
|
163
|
-
expect(result).toBe(true);
|
|
164
|
-
});
|
|
165
|
-
it('restores specific snapshot by ID', async () => {
|
|
166
|
-
const snapshot = createTestSnapshot();
|
|
167
|
-
await storage.saveSnapshot({
|
|
168
|
-
location: { sessionId: 'test-session', scope: 'agent', scopeId: 'test-agent' },
|
|
169
|
-
snapshotId: '5',
|
|
170
|
-
isLatest: false,
|
|
171
|
-
snapshot,
|
|
172
|
-
});
|
|
173
|
-
const result = await sessionManager.restoreSnapshot({ target: mockAgent, snapshotId: '5' });
|
|
174
|
-
expect(result).toBe(true);
|
|
175
|
-
});
|
|
176
|
-
it('returns false when snapshot not found', async () => {
|
|
177
|
-
const result = await sessionManager.restoreSnapshot({ target: mockAgent, snapshotId: '999' });
|
|
178
|
-
expect(result).toBe(false);
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
describe('InitializedEvent handling', () => {
|
|
182
|
-
beforeEach(() => {
|
|
183
|
-
mockAgent = createMockAgent('test-agent');
|
|
184
|
-
});
|
|
185
|
-
it('loads snapshot_latest on initialization', async () => {
|
|
186
|
-
const snapshot = createTestSnapshot();
|
|
187
|
-
await storage.saveSnapshot({
|
|
188
|
-
location: { sessionId: 'test-session', scope: 'agent', scopeId: 'test-agent' },
|
|
189
|
-
snapshotId: 'latest',
|
|
190
|
-
isLatest: true,
|
|
191
|
-
snapshot,
|
|
192
|
-
});
|
|
193
|
-
sessionManager = new SessionManager({
|
|
194
|
-
sessionId: 'test-session',
|
|
195
|
-
storage: { snapshot: storage },
|
|
196
|
-
});
|
|
197
|
-
await initPluginAndInvokeHook(sessionManager, new InitializedEvent(createMockEvent(mockAgent)));
|
|
198
|
-
expect(mockAgent.messages).toEqual(snapshot.data.messages);
|
|
199
|
-
});
|
|
200
|
-
it('handles missing snapshot gracefully', async () => {
|
|
201
|
-
sessionManager = new SessionManager({
|
|
202
|
-
sessionId: 'new-session',
|
|
203
|
-
storage: { snapshot: storage },
|
|
204
|
-
});
|
|
205
|
-
await expect(initPluginAndInvokeHook(sessionManager, new InitializedEvent(createMockEvent(mockAgent)))).resolves.not.toThrow();
|
|
206
|
-
});
|
|
207
|
-
it('warns when snapshot restore overwrites existing messages', async () => {
|
|
208
|
-
const warnSpy = vi.spyOn(logger, 'warn');
|
|
209
|
-
const snapshot = createTestSnapshot();
|
|
210
|
-
await storage.saveSnapshot({
|
|
211
|
-
location: { sessionId: 'test-session', scope: 'agent', scopeId: 'test-agent' },
|
|
212
|
-
snapshotId: 'latest',
|
|
213
|
-
isLatest: true,
|
|
214
|
-
snapshot,
|
|
215
|
-
});
|
|
216
|
-
mockAgent.messages.push(MOCK_MESSAGE);
|
|
217
|
-
sessionManager = new SessionManager({
|
|
218
|
-
sessionId: 'test-session',
|
|
219
|
-
storage: { snapshot: storage },
|
|
220
|
-
});
|
|
221
|
-
await initPluginAndInvokeHook(sessionManager, new InitializedEvent(createMockEvent(mockAgent)));
|
|
222
|
-
expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining('overwritten by session restore'));
|
|
223
|
-
warnSpy.mockRestore();
|
|
224
|
-
});
|
|
225
|
-
it('does not warn when restoring into agent with no messages', async () => {
|
|
226
|
-
const warnSpy = vi.spyOn(logger, 'warn');
|
|
227
|
-
const snapshot = createTestSnapshot();
|
|
228
|
-
await storage.saveSnapshot({
|
|
229
|
-
location: { sessionId: 'test-session', scope: 'agent', scopeId: 'test-agent' },
|
|
230
|
-
snapshotId: 'latest',
|
|
231
|
-
isLatest: true,
|
|
232
|
-
snapshot,
|
|
233
|
-
});
|
|
234
|
-
sessionManager = new SessionManager({
|
|
235
|
-
sessionId: 'test-session',
|
|
236
|
-
storage: { snapshot: storage },
|
|
237
|
-
});
|
|
238
|
-
await initPluginAndInvokeHook(sessionManager, new InitializedEvent(createMockEvent(mockAgent)));
|
|
239
|
-
expect(warnSpy).not.toHaveBeenCalled();
|
|
240
|
-
warnSpy.mockRestore();
|
|
241
|
-
});
|
|
242
|
-
});
|
|
243
|
-
describe('MessageAddedEvent handling', () => {
|
|
244
|
-
beforeEach(() => {
|
|
245
|
-
mockAgent = createMockAgent('test-agent');
|
|
246
|
-
});
|
|
247
|
-
it('saves snapshot_latest when saveLatestOn is message', async () => {
|
|
248
|
-
sessionManager = new SessionManager({
|
|
249
|
-
sessionId: 'test-session',
|
|
250
|
-
storage: { snapshot: storage },
|
|
251
|
-
saveLatestOn: 'message',
|
|
252
|
-
});
|
|
253
|
-
await initPluginAndInvokeHook(sessionManager, new MessageAddedEvent(createMockMessageEvent(mockAgent)));
|
|
254
|
-
const snapshot = await storage.loadSnapshot({
|
|
255
|
-
location: { sessionId: 'test-session', scope: 'agent', scopeId: 'test-agent' },
|
|
256
|
-
});
|
|
257
|
-
expect(snapshot).not.toBeNull();
|
|
258
|
-
});
|
|
259
|
-
it('does not save when saveLatestOn is invocation', async () => {
|
|
260
|
-
sessionManager = new SessionManager({
|
|
261
|
-
sessionId: 'test-session',
|
|
262
|
-
storage: { snapshot: storage },
|
|
263
|
-
saveLatestOn: 'invocation',
|
|
264
|
-
});
|
|
265
|
-
// MessageAddedEvent is not registered when saveLatestOn is 'invocation'
|
|
266
|
-
// So we need to call initAgent and check that no hook is registered for MessageAddedEvent
|
|
267
|
-
const pluginAgent = createMockAgentWithHooks();
|
|
268
|
-
sessionManager.initAgent(pluginAgent);
|
|
269
|
-
// Verify MessageAddedEvent hook is not registered
|
|
270
|
-
const messageHook = pluginAgent.trackedHooks.find((h) => h.eventType === MessageAddedEvent);
|
|
271
|
-
expect(messageHook).toBeUndefined();
|
|
272
|
-
// Even if we try to invoke (nothing should happen)
|
|
273
|
-
const snapshot = await storage.loadSnapshot({
|
|
274
|
-
location: { sessionId: 'test-session', scope: 'agent', scopeId: 'test-agent' },
|
|
275
|
-
});
|
|
276
|
-
expect(snapshot).toBeNull();
|
|
277
|
-
});
|
|
278
|
-
});
|
|
279
|
-
describe('AfterInvocationEvent handling', () => {
|
|
280
|
-
beforeEach(() => {
|
|
281
|
-
mockAgent = createMockAgent('test-agent');
|
|
282
|
-
});
|
|
283
|
-
it('saves snapshot_latest when saveLatestOn is invocation', async () => {
|
|
284
|
-
sessionManager = new SessionManager({
|
|
285
|
-
sessionId: 'test-session',
|
|
286
|
-
storage: { snapshot: storage },
|
|
287
|
-
saveLatestOn: 'invocation',
|
|
288
|
-
});
|
|
289
|
-
await initPluginAndInvokeHook(sessionManager, new AfterInvocationEvent(createMockEvent(mockAgent)));
|
|
290
|
-
const snapshot = await storage.loadSnapshot({
|
|
291
|
-
location: { sessionId: 'test-session', scope: 'agent', scopeId: 'test-agent' },
|
|
292
|
-
});
|
|
293
|
-
expect(snapshot).not.toBeNull();
|
|
294
|
-
});
|
|
295
|
-
it('does not save snapshot_latest when saveLatestOn is trigger', async () => {
|
|
296
|
-
sessionManager = new SessionManager({
|
|
297
|
-
sessionId: 'test-session',
|
|
298
|
-
storage: { snapshot: storage },
|
|
299
|
-
saveLatestOn: 'trigger',
|
|
300
|
-
});
|
|
301
|
-
await initPluginAndInvokeHook(sessionManager, new AfterInvocationEvent(createMockEvent(mockAgent)));
|
|
302
|
-
const snapshot = await storage.loadSnapshot({
|
|
303
|
-
location: { sessionId: 'test-session', scope: 'agent', scopeId: 'test-agent' },
|
|
304
|
-
});
|
|
305
|
-
expect(snapshot).toBeNull();
|
|
306
|
-
});
|
|
307
|
-
});
|
|
308
|
-
describe('snapshotTrigger', () => {
|
|
309
|
-
beforeEach(() => {
|
|
310
|
-
mockAgent = createMockAgent('test-agent');
|
|
311
|
-
});
|
|
312
|
-
it('creates immutable snapshot when trigger returns true', async () => {
|
|
313
|
-
sessionManager = new SessionManager({
|
|
314
|
-
sessionId: 'test-session',
|
|
315
|
-
storage: { snapshot: storage },
|
|
316
|
-
saveLatestOn: 'trigger',
|
|
317
|
-
snapshotTrigger: () => true,
|
|
318
|
-
});
|
|
319
|
-
await initPluginAndInvokeHook(sessionManager, new AfterInvocationEvent(createMockEvent(mockAgent)));
|
|
320
|
-
const ids = await storage.listSnapshotIds({
|
|
321
|
-
location: { sessionId: 'test-session', scope: 'agent', scopeId: 'test-agent' },
|
|
322
|
-
});
|
|
323
|
-
expect(ids.length).toBe(1);
|
|
324
|
-
});
|
|
325
|
-
it('does not create immutable snapshot when trigger returns false', async () => {
|
|
326
|
-
sessionManager = new SessionManager({
|
|
327
|
-
sessionId: 'test-session',
|
|
328
|
-
storage: { snapshot: storage },
|
|
329
|
-
saveLatestOn: 'trigger',
|
|
330
|
-
snapshotTrigger: () => false,
|
|
331
|
-
});
|
|
332
|
-
await initPluginAndInvokeHook(sessionManager, new AfterInvocationEvent(createMockEvent(mockAgent)));
|
|
333
|
-
const ids = await storage.listSnapshotIds({
|
|
334
|
-
location: { sessionId: 'test-session', scope: 'agent', scopeId: 'test-agent' },
|
|
335
|
-
});
|
|
336
|
-
expect(ids.length).toBe(0);
|
|
337
|
-
});
|
|
338
|
-
it('provides agentData to trigger', async () => {
|
|
339
|
-
const triggerSpy = vi.fn(() => false);
|
|
340
|
-
sessionManager = new SessionManager({
|
|
341
|
-
sessionId: 'test-session',
|
|
342
|
-
storage: { snapshot: storage },
|
|
343
|
-
saveLatestOn: 'trigger',
|
|
344
|
-
snapshotTrigger: triggerSpy,
|
|
345
|
-
});
|
|
346
|
-
await initPluginAndInvokeHook(sessionManager, new AfterInvocationEvent(createMockEvent(mockAgent)));
|
|
347
|
-
expect(triggerSpy).toHaveBeenCalledWith(expect.objectContaining({
|
|
348
|
-
agentData: expect.objectContaining({
|
|
349
|
-
appState: mockAgent.appState,
|
|
350
|
-
messages: mockAgent.messages,
|
|
351
|
-
}),
|
|
352
|
-
}));
|
|
353
|
-
});
|
|
354
|
-
it('saves both immutable and latest when trigger fires', async () => {
|
|
355
|
-
sessionManager = new SessionManager({
|
|
356
|
-
sessionId: 'test-session',
|
|
357
|
-
storage: { snapshot: storage },
|
|
358
|
-
saveLatestOn: 'trigger',
|
|
359
|
-
snapshotTrigger: () => true,
|
|
360
|
-
});
|
|
361
|
-
await initPluginAndInvokeHook(sessionManager, new AfterInvocationEvent(createMockEvent(mockAgent)));
|
|
362
|
-
const immutableIds = await storage.listSnapshotIds({
|
|
363
|
-
location: { sessionId: 'test-session', scope: 'agent', scopeId: 'test-agent' },
|
|
364
|
-
});
|
|
365
|
-
const latest = await storage.loadSnapshot({
|
|
366
|
-
location: { sessionId: 'test-session', scope: 'agent', scopeId: 'test-agent' },
|
|
367
|
-
});
|
|
368
|
-
expect(immutableIds.length).toBe(1);
|
|
369
|
-
expect(latest).not.toBeNull();
|
|
370
|
-
});
|
|
371
|
-
it('trigger based on message count via agentData', async () => {
|
|
372
|
-
sessionManager = new SessionManager({
|
|
373
|
-
sessionId: 'test-session',
|
|
374
|
-
storage: { snapshot: storage },
|
|
375
|
-
saveLatestOn: 'trigger',
|
|
376
|
-
snapshotTrigger: ({ agentData }) => agentData.messages.length >= 2,
|
|
377
|
-
});
|
|
378
|
-
const pluginAgent = createMockAgentWithHooks();
|
|
379
|
-
sessionManager.initAgent(pluginAgent);
|
|
380
|
-
await invokeTrackedHook(pluginAgent, new AfterInvocationEvent(createMockEvent(mockAgent)));
|
|
381
|
-
let ids = await storage.listSnapshotIds({
|
|
382
|
-
location: { sessionId: 'test-session', scope: 'agent', scopeId: 'test-agent' },
|
|
383
|
-
});
|
|
384
|
-
expect(ids.length).toBe(0); // 0 messages — no snapshot
|
|
385
|
-
mockAgent.messages.push(MOCK_MESSAGE, MOCK_MESSAGE);
|
|
386
|
-
await invokeTrackedHook(pluginAgent, new AfterInvocationEvent(createMockEvent(mockAgent)));
|
|
387
|
-
ids = await storage.listSnapshotIds({
|
|
388
|
-
location: { sessionId: 'test-session', scope: 'agent', scopeId: 'test-agent' },
|
|
389
|
-
});
|
|
390
|
-
expect(ids.length).toBe(1); // 2 messages — snapshot taken
|
|
391
|
-
});
|
|
392
|
-
it('trigger based on agent state via agentData', async () => {
|
|
393
|
-
sessionManager = new SessionManager({
|
|
394
|
-
sessionId: 'test-session',
|
|
395
|
-
storage: { snapshot: storage },
|
|
396
|
-
saveLatestOn: 'trigger',
|
|
397
|
-
snapshotTrigger: ({ agentData }) => agentData.appState.get('checkpoint') === true,
|
|
398
|
-
});
|
|
399
|
-
const pluginAgent = createMockAgentWithHooks();
|
|
400
|
-
sessionManager.initAgent(pluginAgent);
|
|
401
|
-
await invokeTrackedHook(pluginAgent, new AfterInvocationEvent(createMockEvent(mockAgent)));
|
|
402
|
-
let ids = await storage.listSnapshotIds({
|
|
403
|
-
location: { sessionId: 'test-session', scope: 'agent', scopeId: 'test-agent' },
|
|
404
|
-
});
|
|
405
|
-
expect(ids.length).toBe(0); // state not set — no snapshot
|
|
406
|
-
mockAgent.appState.set('checkpoint', true);
|
|
407
|
-
await invokeTrackedHook(pluginAgent, new AfterInvocationEvent(createMockEvent(mockAgent)));
|
|
408
|
-
ids = await storage.listSnapshotIds({
|
|
409
|
-
location: { sessionId: 'test-session', scope: 'agent', scopeId: 'test-agent' },
|
|
410
|
-
});
|
|
411
|
-
expect(ids.length).toBe(1); // state set — snapshot taken
|
|
412
|
-
});
|
|
413
|
-
});
|
|
414
|
-
describe('integration scenarios', () => {
|
|
415
|
-
it('handles complete session lifecycle', async () => {
|
|
416
|
-
sessionManager = new SessionManager({
|
|
417
|
-
sessionId: 'lifecycle-test',
|
|
418
|
-
storage: { snapshot: storage },
|
|
419
|
-
saveLatestOn: 'invocation',
|
|
420
|
-
snapshotTrigger: () => true,
|
|
421
|
-
});
|
|
422
|
-
const pluginAgent = createMockAgentWithHooks();
|
|
423
|
-
sessionManager.initAgent(pluginAgent);
|
|
424
|
-
await invokeTrackedHook(pluginAgent, new InitializedEvent(createMockEvent(mockAgent)));
|
|
425
|
-
await invokeTrackedHook(pluginAgent, new AfterInvocationEvent(createMockEvent(mockAgent)));
|
|
426
|
-
await invokeTrackedHook(pluginAgent, new AfterInvocationEvent(createMockEvent(mockAgent)));
|
|
427
|
-
await invokeTrackedHook(pluginAgent, new AfterInvocationEvent(createMockEvent(mockAgent)));
|
|
428
|
-
const latest = await storage.loadSnapshot({
|
|
429
|
-
location: { sessionId: 'lifecycle-test', scope: 'agent', scopeId: 'agent' },
|
|
430
|
-
});
|
|
431
|
-
const immutableIds = await storage.listSnapshotIds({
|
|
432
|
-
location: { sessionId: 'lifecycle-test', scope: 'agent', scopeId: 'agent' },
|
|
433
|
-
});
|
|
434
|
-
expect(latest).not.toBeNull();
|
|
435
|
-
expect(immutableIds.length).toBe(3);
|
|
436
|
-
});
|
|
437
|
-
it('supports resuming from immutable snapshot', async () => {
|
|
438
|
-
// First session - snapshot fires when messages.length === 2 (after turn 1)
|
|
439
|
-
sessionManager = new SessionManager({
|
|
440
|
-
sessionId: 'resume-test',
|
|
441
|
-
storage: { snapshot: storage },
|
|
442
|
-
saveLatestOn: 'trigger',
|
|
443
|
-
snapshotTrigger: ({ agentData }) => agentData.messages.length === 2,
|
|
444
|
-
});
|
|
445
|
-
const pluginAgent = createMockAgentWithHooks();
|
|
446
|
-
sessionManager.initAgent(pluginAgent);
|
|
447
|
-
await invokeTrackedHook(pluginAgent, new InitializedEvent(createMockEvent(mockAgent)));
|
|
448
|
-
mockAgent.messages.push(MOCK_MESSAGE, MOCK_MESSAGE);
|
|
449
|
-
await invokeTrackedHook(pluginAgent, new AfterInvocationEvent(createMockEvent(mockAgent)));
|
|
450
|
-
const ids = await storage.listSnapshotIds({
|
|
451
|
-
location: { sessionId: 'resume-test', scope: 'agent', scopeId: 'agent' },
|
|
452
|
-
});
|
|
453
|
-
expect(ids.length).toBe(1);
|
|
454
|
-
// Second session - resume from that snapshot
|
|
455
|
-
const newAgent = createMockAgent();
|
|
456
|
-
const newSessionManager = new SessionManager({
|
|
457
|
-
sessionId: 'resume-test',
|
|
458
|
-
storage: { snapshot: storage },
|
|
459
|
-
saveLatestOn: 'invocation',
|
|
460
|
-
});
|
|
461
|
-
const newAgentData = createMockAgentWithHooks();
|
|
462
|
-
newSessionManager.initAgent(newAgentData);
|
|
463
|
-
await invokeTrackedHook(newAgentData, new InitializedEvent(createMockEvent(newAgent)));
|
|
464
|
-
await newSessionManager.restoreSnapshot({ target: newAgent, snapshotId: ids[0] });
|
|
465
|
-
expect(newAgent.messages).toEqual(mockAgent.messages);
|
|
466
|
-
});
|
|
467
|
-
});
|
|
468
|
-
describe('AfterModelCallEvent with redaction handling', () => {
|
|
469
|
-
beforeEach(() => {
|
|
470
|
-
mockAgent = createMockAgent('test-agent');
|
|
471
|
-
});
|
|
472
|
-
it('saves snapshot_latest when saveLatestOn is message and redaction occurred', async () => {
|
|
473
|
-
sessionManager = new SessionManager({
|
|
474
|
-
sessionId: 'test-session',
|
|
475
|
-
storage: { snapshot: storage },
|
|
476
|
-
saveLatestOn: 'message',
|
|
477
|
-
});
|
|
478
|
-
const assistantMessage = new Message({ role: 'assistant', content: [new TextBlock('Response')] });
|
|
479
|
-
const event = new AfterModelCallEvent({
|
|
480
|
-
agent: mockAgent,
|
|
481
|
-
model: {},
|
|
482
|
-
stopData: {
|
|
483
|
-
message: assistantMessage,
|
|
484
|
-
stopReason: 'endTurn',
|
|
485
|
-
redaction: { userMessage: '[User input redacted.]' },
|
|
486
|
-
},
|
|
487
|
-
});
|
|
488
|
-
await initPluginAndInvokeHook(sessionManager, event);
|
|
489
|
-
const snapshot = await storage.loadSnapshot({
|
|
490
|
-
location: { sessionId: 'test-session', scope: 'agent', scopeId: 'test-agent' },
|
|
491
|
-
});
|
|
492
|
-
expect(snapshot).not.toBeNull();
|
|
493
|
-
});
|
|
494
|
-
it('does not save when saveLatestOn is message but no redaction occurred', async () => {
|
|
495
|
-
sessionManager = new SessionManager({
|
|
496
|
-
sessionId: 'test-session',
|
|
497
|
-
storage: { snapshot: storage },
|
|
498
|
-
saveLatestOn: 'message',
|
|
499
|
-
});
|
|
500
|
-
const assistantMessage = new Message({ role: 'assistant', content: [new TextBlock('Response')] });
|
|
501
|
-
const event = new AfterModelCallEvent({
|
|
502
|
-
agent: mockAgent,
|
|
503
|
-
model: {},
|
|
504
|
-
stopData: { message: assistantMessage, stopReason: 'endTurn' },
|
|
505
|
-
});
|
|
506
|
-
await initPluginAndInvokeHook(sessionManager, event);
|
|
507
|
-
const snapshot = await storage.loadSnapshot({
|
|
508
|
-
location: { sessionId: 'test-session', scope: 'agent', scopeId: 'test-agent' },
|
|
509
|
-
});
|
|
510
|
-
expect(snapshot).toBeNull();
|
|
511
|
-
});
|
|
512
|
-
it.each(['invocation', 'message'])('saves snapshot_latest on redaction when saveLatestOn is %s', async (saveLatestOn) => {
|
|
513
|
-
sessionManager = new SessionManager({
|
|
514
|
-
sessionId: 'test-session',
|
|
515
|
-
storage: { snapshot: storage },
|
|
516
|
-
saveLatestOn,
|
|
517
|
-
});
|
|
518
|
-
const assistantMessage = new Message({ role: 'assistant', content: [new TextBlock('Response')] });
|
|
519
|
-
const event = new AfterModelCallEvent({
|
|
520
|
-
agent: mockAgent,
|
|
521
|
-
model: {},
|
|
522
|
-
stopData: {
|
|
523
|
-
message: assistantMessage,
|
|
524
|
-
stopReason: 'endTurn',
|
|
525
|
-
redaction: { userMessage: '[User input redacted.]' },
|
|
526
|
-
},
|
|
527
|
-
});
|
|
528
|
-
await initPluginAndInvokeHook(sessionManager, event);
|
|
529
|
-
const snapshot = await storage.loadSnapshot({
|
|
530
|
-
location: { sessionId: 'test-session', scope: 'agent', scopeId: 'test-agent' },
|
|
531
|
-
});
|
|
532
|
-
expect(snapshot).not.toBeNull();
|
|
533
|
-
});
|
|
534
|
-
it('does not register AfterModelCallEvent hook when saveLatestOn is trigger', async () => {
|
|
535
|
-
sessionManager = new SessionManager({
|
|
536
|
-
sessionId: 'test-session',
|
|
537
|
-
storage: { snapshot: storage },
|
|
538
|
-
saveLatestOn: 'trigger',
|
|
539
|
-
});
|
|
540
|
-
const pluginAgent = createMockAgentWithHooks();
|
|
541
|
-
sessionManager.initAgent(pluginAgent);
|
|
542
|
-
const afterModelHook = pluginAgent.trackedHooks.find((h) => h.eventType === AfterModelCallEvent);
|
|
543
|
-
expect(afterModelHook).toBeUndefined();
|
|
544
|
-
});
|
|
545
|
-
it('does not save on AfterModelCallEvent without redaction under saveLatestOn=invocation', async () => {
|
|
546
|
-
sessionManager = new SessionManager({
|
|
547
|
-
sessionId: 'test-session',
|
|
548
|
-
storage: { snapshot: storage },
|
|
549
|
-
saveLatestOn: 'invocation',
|
|
550
|
-
});
|
|
551
|
-
const assistantMessage = new Message({ role: 'assistant', content: [new TextBlock('Response')] });
|
|
552
|
-
const event = new AfterModelCallEvent({
|
|
553
|
-
agent: mockAgent,
|
|
554
|
-
model: {},
|
|
555
|
-
stopData: { message: assistantMessage, stopReason: 'endTurn' },
|
|
556
|
-
});
|
|
557
|
-
await initPluginAndInvokeHook(sessionManager, event);
|
|
558
|
-
const snapshot = await storage.loadSnapshot({
|
|
559
|
-
location: { sessionId: 'test-session', scope: 'agent', scopeId: 'test-agent' },
|
|
560
|
-
});
|
|
561
|
-
expect(snapshot).toBeNull();
|
|
562
|
-
});
|
|
563
|
-
});
|
|
564
|
-
});
|
|
565
|
-
function createMockOrchestrator(id = 'graph') {
|
|
566
|
-
const trackedHooks = [];
|
|
567
|
-
return {
|
|
568
|
-
id,
|
|
569
|
-
nodes: new Map(),
|
|
570
|
-
invoke: vi.fn(),
|
|
571
|
-
stream: vi.fn(),
|
|
572
|
-
addHook: (eventType, callback) => {
|
|
573
|
-
trackedHooks.push({
|
|
574
|
-
eventType: eventType,
|
|
575
|
-
callback: callback,
|
|
576
|
-
});
|
|
577
|
-
return () => { };
|
|
578
|
-
},
|
|
579
|
-
trackedHooks,
|
|
580
|
-
};
|
|
581
|
-
}
|
|
582
|
-
function invokeOrchestratorHook(orchestrator, event) {
|
|
583
|
-
const hook = orchestrator.trackedHooks.find((h) => h.eventType === event.constructor);
|
|
584
|
-
if (!hook)
|
|
585
|
-
throw new Error(`No hook registered for event type: ${event.constructor.name}`);
|
|
586
|
-
return hook.callback(event);
|
|
587
|
-
}
|
|
588
|
-
function createMultiAgentTestSnapshot(orchestratorId = 'test-graph') {
|
|
589
|
-
return createTestSnapshot({ scope: 'multiAgent', data: { orchestratorId } });
|
|
590
|
-
}
|
|
591
|
-
describe('SessionManager — multi-agent', () => {
|
|
592
|
-
let storage;
|
|
593
|
-
let sessionManager;
|
|
594
|
-
let orchestrator;
|
|
595
|
-
beforeEach(() => {
|
|
596
|
-
storage = new MockSnapshotStorage();
|
|
597
|
-
orchestrator = createMockOrchestrator('test-graph');
|
|
598
|
-
});
|
|
599
|
-
describe('initMultiAgent', () => {
|
|
600
|
-
it('registers BeforeMultiAgentInvocationEvent hook', () => {
|
|
601
|
-
sessionManager = new SessionManager({ sessionId: 'test', storage: { snapshot: storage } });
|
|
602
|
-
sessionManager.initMultiAgent(orchestrator);
|
|
603
|
-
const hook = orchestrator.trackedHooks.find((h) => h.eventType === BeforeMultiAgentInvocationEvent);
|
|
604
|
-
expect(hook).toBeDefined();
|
|
605
|
-
});
|
|
606
|
-
it('registers AfterNodeCallEvent hook by default (node strategy)', () => {
|
|
607
|
-
sessionManager = new SessionManager({ sessionId: 'test', storage: { snapshot: storage } });
|
|
608
|
-
sessionManager.initMultiAgent(orchestrator);
|
|
609
|
-
const hook = orchestrator.trackedHooks.find((h) => h.eventType === AfterNodeCallEvent);
|
|
610
|
-
expect(hook).toBeDefined();
|
|
611
|
-
});
|
|
612
|
-
it('registers AfterMultiAgentInvocationEvent hook when strategy is invocation', () => {
|
|
613
|
-
sessionManager = new SessionManager({
|
|
614
|
-
sessionId: 'test',
|
|
615
|
-
storage: { snapshot: storage },
|
|
616
|
-
multiAgentSaveLatestOn: 'invocation',
|
|
617
|
-
});
|
|
618
|
-
sessionManager.initMultiAgent(orchestrator);
|
|
619
|
-
const hook = orchestrator.trackedHooks.find((h) => h.eventType === AfterMultiAgentInvocationEvent);
|
|
620
|
-
expect(hook).toBeDefined();
|
|
621
|
-
});
|
|
622
|
-
});
|
|
623
|
-
describe('saveSnapshot — multi-agent', () => {
|
|
624
|
-
beforeEach(() => {
|
|
625
|
-
sessionManager = new SessionManager({ sessionId: 'test-session', storage: { snapshot: storage } });
|
|
626
|
-
});
|
|
627
|
-
it('saves orchestrator snapshot as latest', async () => {
|
|
628
|
-
await sessionManager.saveSnapshot({ target: orchestrator, isLatest: true });
|
|
629
|
-
const snapshot = await storage.loadSnapshot({
|
|
630
|
-
location: { sessionId: 'test-session', scope: 'multiAgent', scopeId: 'test-graph' },
|
|
631
|
-
});
|
|
632
|
-
expect(snapshot).not.toBeNull();
|
|
633
|
-
expect(snapshot?.scope).toBe('multiAgent');
|
|
634
|
-
});
|
|
635
|
-
it('saves orchestrator snapshot with state', async () => {
|
|
636
|
-
const state = new MultiAgentState({ nodeIds: ['a'] });
|
|
637
|
-
state.steps = 3;
|
|
638
|
-
await sessionManager.saveSnapshot({ target: orchestrator, state, isLatest: true });
|
|
639
|
-
const snapshot = await storage.loadSnapshot({
|
|
640
|
-
location: { sessionId: 'test-session', scope: 'multiAgent', scopeId: 'test-graph' },
|
|
641
|
-
});
|
|
642
|
-
expect(snapshot).not.toBeNull();
|
|
643
|
-
expect(snapshot?.data.state).toBeDefined();
|
|
644
|
-
});
|
|
645
|
-
it('saves immutable orchestrator snapshot', async () => {
|
|
646
|
-
await sessionManager.saveSnapshot({ target: orchestrator, isLatest: false });
|
|
647
|
-
const ids = await storage.listSnapshotIds({
|
|
648
|
-
location: { sessionId: 'test-session', scope: 'multiAgent', scopeId: 'test-graph' },
|
|
649
|
-
});
|
|
650
|
-
expect(ids.length).toBe(1);
|
|
651
|
-
});
|
|
652
|
-
});
|
|
653
|
-
describe('restoreSnapshot — multi-agent', () => {
|
|
654
|
-
beforeEach(() => {
|
|
655
|
-
sessionManager = new SessionManager({ sessionId: 'test-session', storage: { snapshot: storage } });
|
|
656
|
-
});
|
|
657
|
-
it('restores orchestrator snapshot', async () => {
|
|
658
|
-
const snapshot = createMultiAgentTestSnapshot();
|
|
659
|
-
await storage.saveSnapshot({
|
|
660
|
-
location: { sessionId: 'test-session', scope: 'multiAgent', scopeId: 'test-graph' },
|
|
661
|
-
snapshotId: 'latest',
|
|
662
|
-
isLatest: true,
|
|
663
|
-
snapshot,
|
|
664
|
-
});
|
|
665
|
-
const result = await sessionManager.restoreSnapshot({ target: orchestrator });
|
|
666
|
-
expect(result).toBe(true);
|
|
667
|
-
});
|
|
668
|
-
it('returns false when no snapshot exists', async () => {
|
|
669
|
-
const result = await sessionManager.restoreSnapshot({ target: orchestrator });
|
|
670
|
-
expect(result).toBe(false);
|
|
671
|
-
});
|
|
672
|
-
});
|
|
673
|
-
describe('AfterMultiAgentInvocationEvent handling', () => {
|
|
674
|
-
it('saves snapshot after node call when multiAgentSaveLatestOn is node (default)', async () => {
|
|
675
|
-
sessionManager = new SessionManager({
|
|
676
|
-
sessionId: 'test-session',
|
|
677
|
-
storage: { snapshot: storage },
|
|
678
|
-
});
|
|
679
|
-
sessionManager.initMultiAgent(orchestrator);
|
|
680
|
-
const state = new MultiAgentState({ nodeIds: ['a'] });
|
|
681
|
-
await invokeOrchestratorHook(orchestrator, new AfterNodeCallEvent({ orchestrator, state, nodeId: 'a', invocationState: {} }));
|
|
682
|
-
const snapshot = await storage.loadSnapshot({
|
|
683
|
-
location: { sessionId: 'test-session', scope: 'multiAgent', scopeId: 'test-graph' },
|
|
684
|
-
});
|
|
685
|
-
expect(snapshot).not.toBeNull();
|
|
686
|
-
expect(snapshot?.scope).toBe('multiAgent');
|
|
687
|
-
});
|
|
688
|
-
it('saves snapshot after invocation when multiAgentSaveLatestOn is invocation', async () => {
|
|
689
|
-
sessionManager = new SessionManager({
|
|
690
|
-
sessionId: 'test-session',
|
|
691
|
-
storage: { snapshot: storage },
|
|
692
|
-
multiAgentSaveLatestOn: 'invocation',
|
|
693
|
-
});
|
|
694
|
-
sessionManager.initMultiAgent(orchestrator);
|
|
695
|
-
const state = new MultiAgentState({ nodeIds: ['a'] });
|
|
696
|
-
await invokeOrchestratorHook(orchestrator, new AfterMultiAgentInvocationEvent({ orchestrator, state, invocationState: {} }));
|
|
697
|
-
const snapshot = await storage.loadSnapshot({
|
|
698
|
-
location: { sessionId: 'test-session', scope: 'multiAgent', scopeId: 'test-graph' },
|
|
699
|
-
});
|
|
700
|
-
expect(snapshot).not.toBeNull();
|
|
701
|
-
expect(snapshot?.scope).toBe('multiAgent');
|
|
702
|
-
});
|
|
703
|
-
it('saves snapshot independently of agent saveLatestOn setting', async () => {
|
|
704
|
-
sessionManager = new SessionManager({
|
|
705
|
-
sessionId: 'test-session',
|
|
706
|
-
storage: { snapshot: storage },
|
|
707
|
-
saveLatestOn: 'trigger',
|
|
708
|
-
multiAgentSaveLatestOn: 'invocation',
|
|
709
|
-
});
|
|
710
|
-
sessionManager.initMultiAgent(orchestrator);
|
|
711
|
-
const state = new MultiAgentState({ nodeIds: ['a'] });
|
|
712
|
-
await invokeOrchestratorHook(orchestrator, new AfterMultiAgentInvocationEvent({ orchestrator, state, invocationState: {} }));
|
|
713
|
-
const snapshot = await storage.loadSnapshot({
|
|
714
|
-
location: { sessionId: 'test-session', scope: 'multiAgent', scopeId: 'test-graph' },
|
|
715
|
-
});
|
|
716
|
-
expect(snapshot).not.toBeNull();
|
|
717
|
-
});
|
|
718
|
-
});
|
|
719
|
-
describe('scope isolation', () => {
|
|
720
|
-
it('agent and multi-agent snapshots use separate storage paths', async () => {
|
|
721
|
-
const mockAgent = createMockAgent('test-agent');
|
|
722
|
-
sessionManager = new SessionManager({
|
|
723
|
-
sessionId: 'shared-session',
|
|
724
|
-
storage: { snapshot: storage },
|
|
725
|
-
});
|
|
726
|
-
await sessionManager.saveSnapshot({ target: mockAgent, isLatest: true });
|
|
727
|
-
await sessionManager.saveSnapshot({ target: orchestrator, isLatest: true });
|
|
728
|
-
const agentSnapshot = await storage.loadSnapshot({
|
|
729
|
-
location: { sessionId: 'shared-session', scope: 'agent', scopeId: 'test-agent' },
|
|
730
|
-
});
|
|
731
|
-
const multiAgentSnapshot = await storage.loadSnapshot({
|
|
732
|
-
location: { sessionId: 'shared-session', scope: 'multiAgent', scopeId: 'test-graph' },
|
|
733
|
-
});
|
|
734
|
-
expect(agentSnapshot).not.toBeNull();
|
|
735
|
-
expect(multiAgentSnapshot).not.toBeNull();
|
|
736
|
-
expect(agentSnapshot?.scope).toBe('agent');
|
|
737
|
-
expect(multiAgentSnapshot?.scope).toBe('multiAgent');
|
|
738
|
-
});
|
|
739
|
-
});
|
|
740
|
-
describe('BeforeMultiAgentInvocationEvent — state restore', () => {
|
|
741
|
-
it('restores state into event.state when snapshot exists', async () => {
|
|
742
|
-
const snapshot = createMultiAgentTestSnapshot();
|
|
743
|
-
// Build state with a completed node and result
|
|
744
|
-
const state = new MultiAgentState({ nodeIds: ['a'] });
|
|
745
|
-
state.steps = 7;
|
|
746
|
-
const nodeState = state.node('a');
|
|
747
|
-
nodeState.status = Status.COMPLETED;
|
|
748
|
-
nodeState.results.push(new NodeResult({ nodeId: 'a', status: Status.COMPLETED, duration: 100, content: [new TextBlock('done')] }));
|
|
749
|
-
const { serializeStateSerializable } = await import('../../types/serializable.js');
|
|
750
|
-
snapshot.data.state = serializeStateSerializable(state);
|
|
751
|
-
await storage.saveSnapshot({
|
|
752
|
-
location: { sessionId: 'test-session', scope: 'multiAgent', scopeId: 'test-graph' },
|
|
753
|
-
snapshotId: 'latest',
|
|
754
|
-
isLatest: true,
|
|
755
|
-
snapshot,
|
|
756
|
-
});
|
|
757
|
-
sessionManager = new SessionManager({ sessionId: 'test-session', storage: { snapshot: storage } });
|
|
758
|
-
sessionManager.initMultiAgent(orchestrator);
|
|
759
|
-
const freshState = new MultiAgentState({ nodeIds: ['a'] });
|
|
760
|
-
await invokeOrchestratorHook(orchestrator, new BeforeMultiAgentInvocationEvent({ orchestrator, state: freshState, invocationState: {} }));
|
|
761
|
-
expect(freshState.steps).toBe(7);
|
|
762
|
-
expect(freshState.node('a')?.status).toBe(Status.COMPLETED);
|
|
763
|
-
expect(freshState.node('a')?.results).toHaveLength(1);
|
|
764
|
-
expect(freshState.node('a')?.results[0]?.nodeId).toBe('a');
|
|
765
|
-
expect(freshState.node('a')?.results[0]?.status).toBe(Status.COMPLETED);
|
|
766
|
-
expect(freshState.node('a')?.content[0]).toEqual(expect.objectContaining({ text: 'done' }));
|
|
767
|
-
});
|
|
768
|
-
it('does not modify state when no snapshot exists', async () => {
|
|
769
|
-
sessionManager = new SessionManager({ sessionId: 'empty-session', storage: { snapshot: storage } });
|
|
770
|
-
sessionManager.initMultiAgent(orchestrator);
|
|
771
|
-
const freshState = new MultiAgentState({ nodeIds: ['a'] });
|
|
772
|
-
await invokeOrchestratorHook(orchestrator, new BeforeMultiAgentInvocationEvent({ orchestrator, state: freshState, invocationState: {} }));
|
|
773
|
-
expect(freshState.steps).toBe(0);
|
|
774
|
-
});
|
|
775
|
-
it('restores state independently for two orchestrators sharing one SessionManager', async () => {
|
|
776
|
-
const { serializeStateSerializable } = await import('../../types/serializable.js');
|
|
777
|
-
// Set up snapshots for two different orchestrators
|
|
778
|
-
const orchestratorA = createMockOrchestrator('graph-a');
|
|
779
|
-
const orchestratorB = createMockOrchestrator('swarm-b');
|
|
780
|
-
for (const [orch, steps] of [
|
|
781
|
-
[orchestratorA, 3],
|
|
782
|
-
[orchestratorB, 5],
|
|
783
|
-
]) {
|
|
784
|
-
const snap = createMultiAgentTestSnapshot(orch.id);
|
|
785
|
-
const st = new MultiAgentState({ nodeIds: ['x'] });
|
|
786
|
-
st.steps = steps;
|
|
787
|
-
snap.data.state = serializeStateSerializable(st);
|
|
788
|
-
await storage.saveSnapshot({
|
|
789
|
-
location: { sessionId: 'test-session', scope: 'multiAgent', scopeId: orch.id },
|
|
790
|
-
snapshotId: 'latest',
|
|
791
|
-
isLatest: true,
|
|
792
|
-
snapshot: snap,
|
|
793
|
-
});
|
|
794
|
-
}
|
|
795
|
-
sessionManager = new SessionManager({ sessionId: 'test-session', storage: { snapshot: storage } });
|
|
796
|
-
sessionManager.initMultiAgent(orchestratorA);
|
|
797
|
-
sessionManager.initMultiAgent(orchestratorB);
|
|
798
|
-
// First orchestrator restores its own state
|
|
799
|
-
const stateA = new MultiAgentState({ nodeIds: ['x'] });
|
|
800
|
-
await invokeOrchestratorHook(orchestratorA, new BeforeMultiAgentInvocationEvent({ orchestrator: orchestratorA, state: stateA, invocationState: {} }));
|
|
801
|
-
expect(stateA.steps).toBe(3);
|
|
802
|
-
// Second orchestrator also restores — not blocked by the first
|
|
803
|
-
const stateB = new MultiAgentState({ nodeIds: ['x'] });
|
|
804
|
-
await invokeOrchestratorHook(orchestratorB, new BeforeMultiAgentInvocationEvent({ orchestrator: orchestratorB, state: stateB, invocationState: {} }));
|
|
805
|
-
expect(stateB.steps).toBe(5);
|
|
806
|
-
});
|
|
807
|
-
it('consumes snapshot once — second invocation gets fresh state', async () => {
|
|
808
|
-
const snapshot = createMultiAgentTestSnapshot();
|
|
809
|
-
const state = new MultiAgentState({ nodeIds: ['a'] });
|
|
810
|
-
state.steps = 7;
|
|
811
|
-
const { serializeStateSerializable } = await import('../../types/serializable.js');
|
|
812
|
-
snapshot.data.state = serializeStateSerializable(state);
|
|
813
|
-
await storage.saveSnapshot({
|
|
814
|
-
location: { sessionId: 'test-session', scope: 'multiAgent', scopeId: 'test-graph' },
|
|
815
|
-
snapshotId: 'latest',
|
|
816
|
-
isLatest: true,
|
|
817
|
-
snapshot,
|
|
818
|
-
});
|
|
819
|
-
sessionManager = new SessionManager({ sessionId: 'test-session', storage: { snapshot: storage } });
|
|
820
|
-
sessionManager.initMultiAgent(orchestrator);
|
|
821
|
-
// First invocation — state is restored
|
|
822
|
-
const firstState = new MultiAgentState({ nodeIds: ['a'] });
|
|
823
|
-
await invokeOrchestratorHook(orchestrator, new BeforeMultiAgentInvocationEvent({ orchestrator, state: firstState, invocationState: {} }));
|
|
824
|
-
expect(firstState.steps).toBe(7);
|
|
825
|
-
// Second invocation — snapshot already consumed
|
|
826
|
-
const secondState = new MultiAgentState({ nodeIds: ['a'] });
|
|
827
|
-
await invokeOrchestratorHook(orchestrator, new BeforeMultiAgentInvocationEvent({ orchestrator, state: secondState, invocationState: {} }));
|
|
828
|
-
expect(secondState.steps).toBe(0);
|
|
829
|
-
});
|
|
830
|
-
});
|
|
831
|
-
});
|
|
832
|
-
//# sourceMappingURL=session-manager.test.js.map
|