@strands-agents/sdk 1.0.0-rc.5 → 1.1.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/LICENSE +175 -0
- package/README.md +340 -0
- package/dist/src/__fixtures__/agent-helpers.d.ts +22 -1
- package/dist/src/__fixtures__/agent-helpers.d.ts.map +1 -1
- package/dist/src/__fixtures__/agent-helpers.js +45 -1
- package/dist/src/__fixtures__/agent-helpers.js.map +1 -1
- package/dist/src/__fixtures__/mock-plugin.d.ts.map +1 -1
- package/dist/src/__fixtures__/mock-plugin.js +3 -1
- package/dist/src/__fixtures__/mock-plugin.js.map +1 -1
- package/dist/src/__fixtures__/tool-helpers.d.ts +5 -2
- package/dist/src/__fixtures__/tool-helpers.d.ts.map +1 -1
- package/dist/src/__fixtures__/tool-helpers.js +23 -4
- package/dist/src/__fixtures__/tool-helpers.js.map +1 -1
- package/dist/src/__tests__/interrupt.test.d.ts +2 -0
- package/dist/src/__tests__/interrupt.test.d.ts.map +1 -0
- package/dist/src/__tests__/interrupt.test.js +259 -0
- package/dist/src/__tests__/interrupt.test.js.map +1 -0
- package/dist/src/__tests__/mcp.test.js +448 -2
- package/dist/src/__tests__/mcp.test.js.map +1 -1
- package/dist/src/a2a/__tests__/events.test.js +2 -0
- package/dist/src/a2a/__tests__/events.test.js.map +1 -1
- package/dist/src/a2a/__tests__/executor.test.js +16 -5
- package/dist/src/a2a/__tests__/executor.test.js.map +1 -1
- package/dist/src/a2a/a2a-agent.d.ts +8 -3
- package/dist/src/a2a/a2a-agent.d.ts.map +1 -1
- package/dist/src/a2a/a2a-agent.js +12 -6
- package/dist/src/a2a/a2a-agent.js.map +1 -1
- package/dist/src/a2a/executor.d.ts +13 -0
- package/dist/src/a2a/executor.d.ts.map +1 -1
- package/dist/src/a2a/executor.js +19 -1
- package/dist/src/a2a/executor.js.map +1 -1
- package/dist/src/agent/__tests__/agent-as-tool.invocation-state.test.d.ts +2 -0
- package/dist/src/agent/__tests__/agent-as-tool.invocation-state.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/agent-as-tool.invocation-state.test.js +23 -0
- package/dist/src/agent/__tests__/agent-as-tool.invocation-state.test.js.map +1 -0
- package/dist/src/agent/__tests__/agent.cancel.test.js +1 -1
- package/dist/src/agent/__tests__/agent.cancel.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.concurrent.test.d.ts +2 -0
- package/dist/src/agent/__tests__/agent.concurrent.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/agent.concurrent.test.js +488 -0
- package/dist/src/agent/__tests__/agent.concurrent.test.js.map +1 -0
- package/dist/src/agent/__tests__/agent.hook.test.js +724 -12
- package/dist/src/agent/__tests__/agent.hook.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.interrupt.test.d.ts +2 -0
- package/dist/src/agent/__tests__/agent.interrupt.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/agent.interrupt.test.js +730 -0
- package/dist/src/agent/__tests__/agent.interrupt.test.js.map +1 -0
- package/dist/src/agent/__tests__/agent.invocation-state.test.d.ts +2 -0
- package/dist/src/agent/__tests__/agent.invocation-state.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/agent.invocation-state.test.js +219 -0
- package/dist/src/agent/__tests__/agent.invocation-state.test.js.map +1 -0
- package/dist/src/agent/__tests__/agent.model-retry.test.d.ts +2 -0
- package/dist/src/agent/__tests__/agent.model-retry.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/agent.model-retry.test.js +161 -0
- package/dist/src/agent/__tests__/agent.model-retry.test.js.map +1 -0
- package/dist/src/agent/__tests__/agent.stateful-model.test.d.ts +2 -0
- package/dist/src/agent/__tests__/agent.stateful-model.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/agent.stateful-model.test.js +169 -0
- package/dist/src/agent/__tests__/agent.stateful-model.test.js.map +1 -0
- package/dist/src/agent/__tests__/agent.test.js +217 -2
- package/dist/src/agent/__tests__/agent.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.tracer.test.node.js +39 -0
- package/dist/src/agent/__tests__/agent.tracer.test.node.js.map +1 -1
- package/dist/src/agent/__tests__/snapshot.test.js +51 -4
- package/dist/src/agent/__tests__/snapshot.test.js.map +1 -1
- package/dist/src/agent/agent-as-tool.d.ts.map +1 -1
- package/dist/src/agent/agent-as-tool.js +4 -2
- package/dist/src/agent/agent-as-tool.js.map +1 -1
- package/dist/src/agent/agent.d.ts +109 -4
- package/dist/src/agent/agent.d.ts.map +1 -1
- package/dist/src/agent/agent.js +790 -224
- package/dist/src/agent/agent.js.map +1 -1
- package/dist/src/agent/snapshot.d.ts +2 -2
- package/dist/src/agent/snapshot.d.ts.map +1 -1
- package/dist/src/agent/snapshot.js +20 -2
- package/dist/src/agent/snapshot.js.map +1 -1
- package/dist/src/conversation-manager/__tests__/conversation-manager.test.js +230 -9
- package/dist/src/conversation-manager/__tests__/conversation-manager.test.js.map +1 -1
- package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js +19 -6
- package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js.map +1 -1
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js +58 -4
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js.map +1 -1
- package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js +76 -1
- package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js.map +1 -1
- package/dist/src/conversation-manager/conversation-manager.d.ts +67 -22
- package/dist/src/conversation-manager/conversation-manager.d.ts.map +1 -1
- package/dist/src/conversation-manager/conversation-manager.js +65 -13
- package/dist/src/conversation-manager/conversation-manager.js.map +1 -1
- package/dist/src/conversation-manager/index.d.ts +1 -1
- package/dist/src/conversation-manager/index.d.ts.map +1 -1
- package/dist/src/conversation-manager/index.js +1 -1
- package/dist/src/conversation-manager/index.js.map +1 -1
- package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts +17 -3
- package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts.map +1 -1
- package/dist/src/conversation-manager/sliding-window-conversation-manager.js +10 -4
- package/dist/src/conversation-manager/sliding-window-conversation-manager.js.map +1 -1
- package/dist/src/conversation-manager/summarizing-conversation-manager.d.ts +23 -1
- package/dist/src/conversation-manager/summarizing-conversation-manager.d.ts.map +1 -1
- package/dist/src/conversation-manager/summarizing-conversation-manager.js +39 -17
- package/dist/src/conversation-manager/summarizing-conversation-manager.js.map +1 -1
- package/dist/src/errors.d.ts +11 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +12 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/hooks/__tests__/events.test.js +267 -73
- package/dist/src/hooks/__tests__/events.test.js.map +1 -1
- package/dist/src/hooks/__tests__/registry.test.js +182 -18
- package/dist/src/hooks/__tests__/registry.test.js.map +1 -1
- package/dist/src/hooks/events.d.ts +193 -51
- package/dist/src/hooks/events.d.ts.map +1 -1
- package/dist/src/hooks/events.js +182 -26
- package/dist/src/hooks/events.js.map +1 -1
- package/dist/src/hooks/index.d.ts +3 -2
- package/dist/src/hooks/index.d.ts.map +1 -1
- package/dist/src/hooks/index.js +1 -0
- package/dist/src/hooks/index.js.map +1 -1
- package/dist/src/hooks/registry.d.ts +12 -12
- package/dist/src/hooks/registry.d.ts.map +1 -1
- package/dist/src/hooks/registry.js +55 -15
- package/dist/src/hooks/registry.js.map +1 -1
- package/dist/src/hooks/types.d.ts +23 -0
- package/dist/src/hooks/types.d.ts.map +1 -1
- package/dist/src/hooks/types.js +17 -1
- package/dist/src/hooks/types.js.map +1 -1
- package/dist/src/index.d.ts +12 -7
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/interrupt.d.ts +220 -0
- package/dist/src/interrupt.d.ts.map +1 -0
- package/dist/src/interrupt.js +274 -0
- package/dist/src/interrupt.js.map +1 -0
- package/dist/src/logging/__tests__/warn-once.test.d.ts +2 -0
- package/dist/src/logging/__tests__/warn-once.test.d.ts.map +1 -0
- package/dist/src/logging/__tests__/warn-once.test.js +30 -0
- package/dist/src/logging/__tests__/warn-once.test.js.map +1 -0
- package/dist/src/logging/warn-once.d.ts +13 -0
- package/dist/src/logging/warn-once.d.ts.map +1 -0
- package/dist/src/logging/warn-once.js +18 -0
- package/dist/src/logging/warn-once.js.map +1 -0
- package/dist/src/mcp.d.ts +43 -3
- package/dist/src/mcp.d.ts.map +1 -1
- package/dist/src/mcp.js +85 -17
- package/dist/src/mcp.js.map +1 -1
- package/dist/src/mime.d.ts +2 -1
- package/dist/src/mime.d.ts.map +1 -1
- package/dist/src/mime.js +1 -0
- package/dist/src/mime.js.map +1 -1
- package/dist/src/models/__tests__/anthropic.test.js +147 -3
- package/dist/src/models/__tests__/anthropic.test.js.map +1 -1
- package/dist/src/models/__tests__/bedrock.test.js +228 -2
- package/dist/src/models/__tests__/bedrock.test.js.map +1 -1
- package/dist/src/models/__tests__/defaults.test.d.ts +2 -0
- package/dist/src/models/__tests__/defaults.test.d.ts.map +1 -0
- package/dist/src/models/__tests__/defaults.test.js +36 -0
- package/dist/src/models/__tests__/defaults.test.js.map +1 -0
- package/dist/src/models/__tests__/google.test.js +135 -0
- package/dist/src/models/__tests__/google.test.js.map +1 -1
- package/dist/src/models/__tests__/model.test.js +149 -1
- package/dist/src/models/__tests__/model.test.js.map +1 -1
- package/dist/src/models/anthropic.d.ts +20 -1
- package/dist/src/models/anthropic.d.ts.map +1 -1
- package/dist/src/models/anthropic.js +42 -8
- package/dist/src/models/anthropic.js.map +1 -1
- package/dist/src/models/bedrock.d.ts +27 -1
- package/dist/src/models/bedrock.d.ts.map +1 -1
- package/dist/src/models/bedrock.js +100 -12
- package/dist/src/models/bedrock.js.map +1 -1
- package/dist/src/models/defaults.d.ts +47 -0
- package/dist/src/models/defaults.d.ts.map +1 -0
- package/dist/src/models/defaults.js +170 -0
- package/dist/src/models/defaults.js.map +1 -0
- package/dist/src/models/google/model.d.ts +14 -1
- package/dist/src/models/google/model.d.ts.map +1 -1
- package/dist/src/models/google/model.js +54 -8
- package/dist/src/models/google/model.js.map +1 -1
- package/dist/src/models/google/types.d.ts +8 -0
- package/dist/src/models/google/types.d.ts.map +1 -1
- package/dist/src/models/model.d.ts +65 -0
- package/dist/src/models/model.d.ts.map +1 -1
- package/dist/src/models/model.js +138 -0
- package/dist/src/models/model.js.map +1 -1
- package/dist/src/models/openai/__tests__/chat.test.d.ts +2 -0
- package/dist/src/models/openai/__tests__/chat.test.d.ts.map +1 -0
- package/dist/src/models/{__tests__/openai.test.js → openai/__tests__/chat.test.js} +117 -7
- package/dist/src/models/openai/__tests__/chat.test.js.map +1 -0
- package/dist/src/models/openai/__tests__/responses.test.d.ts +2 -0
- package/dist/src/models/openai/__tests__/responses.test.d.ts.map +1 -0
- package/dist/src/models/openai/__tests__/responses.test.js +668 -0
- package/dist/src/models/openai/__tests__/responses.test.js.map +1 -0
- package/dist/src/models/openai/chat-adapter.d.ts +33 -0
- package/dist/src/models/openai/chat-adapter.d.ts.map +1 -0
- package/dist/src/models/openai/chat-adapter.js +383 -0
- package/dist/src/models/openai/chat-adapter.js.map +1 -0
- package/dist/src/models/openai/errors.d.ts +16 -0
- package/dist/src/models/openai/errors.d.ts.map +1 -0
- package/dist/src/models/openai/errors.js +40 -0
- package/dist/src/models/openai/errors.js.map +1 -0
- package/dist/src/models/openai/formatting.d.ts +18 -0
- package/dist/src/models/openai/formatting.d.ts.map +1 -0
- package/dist/src/models/openai/formatting.js +38 -0
- package/dist/src/models/openai/formatting.js.map +1 -0
- package/dist/src/models/openai/index.d.ts +19 -0
- package/dist/src/models/openai/index.d.ts.map +1 -0
- package/dist/src/models/openai/index.js +18 -0
- package/dist/src/models/openai/index.js.map +1 -0
- package/dist/src/models/openai/model.d.ts +77 -0
- package/dist/src/models/openai/model.d.ts.map +1 -0
- package/dist/src/models/openai/model.js +211 -0
- package/dist/src/models/openai/model.js.map +1 -0
- package/dist/src/models/openai/responses-adapter.d.ts +78 -0
- package/dist/src/models/openai/responses-adapter.d.ts.map +1 -0
- package/dist/src/models/openai/responses-adapter.js +467 -0
- package/dist/src/models/openai/responses-adapter.js.map +1 -0
- package/dist/src/models/openai/types.d.ts +131 -0
- package/dist/src/models/openai/types.d.ts.map +1 -0
- package/dist/src/models/openai/types.js +5 -0
- package/dist/src/models/openai/types.js.map +1 -0
- package/dist/src/multiagent/__tests__/events.test.js +122 -28
- package/dist/src/multiagent/__tests__/events.test.js.map +1 -1
- package/dist/src/multiagent/__tests__/graph.invocation-state.test.d.ts +2 -0
- package/dist/src/multiagent/__tests__/graph.invocation-state.test.d.ts.map +1 -0
- package/dist/src/multiagent/__tests__/graph.invocation-state.test.js +95 -0
- package/dist/src/multiagent/__tests__/graph.invocation-state.test.js.map +1 -0
- package/dist/src/multiagent/__tests__/graph.test.js +69 -0
- package/dist/src/multiagent/__tests__/graph.test.js.map +1 -1
- package/dist/src/multiagent/__tests__/nodes.test.js +18 -2
- package/dist/src/multiagent/__tests__/nodes.test.js.map +1 -1
- package/dist/src/multiagent/__tests__/swarm.invocation-state.test.d.ts +2 -0
- package/dist/src/multiagent/__tests__/swarm.invocation-state.test.d.ts.map +1 -0
- package/dist/src/multiagent/__tests__/swarm.invocation-state.test.js +56 -0
- package/dist/src/multiagent/__tests__/swarm.invocation-state.test.js.map +1 -0
- package/dist/src/multiagent/__tests__/swarm.test.js +77 -0
- package/dist/src/multiagent/__tests__/swarm.test.js.map +1 -1
- package/dist/src/multiagent/events.d.ts +19 -1
- package/dist/src/multiagent/events.d.ts.map +1 -1
- package/dist/src/multiagent/events.js +18 -0
- package/dist/src/multiagent/events.js.map +1 -1
- package/dist/src/multiagent/graph.d.ts +27 -5
- package/dist/src/multiagent/graph.d.ts.map +1 -1
- package/dist/src/multiagent/graph.js +61 -15
- package/dist/src/multiagent/graph.js.map +1 -1
- package/dist/src/multiagent/index.d.ts +1 -1
- package/dist/src/multiagent/index.d.ts.map +1 -1
- package/dist/src/multiagent/multiagent.d.ts +21 -6
- package/dist/src/multiagent/multiagent.d.ts.map +1 -1
- package/dist/src/multiagent/nodes.d.ts +28 -3
- package/dist/src/multiagent/nodes.d.ts.map +1 -1
- package/dist/src/multiagent/nodes.js +42 -7
- package/dist/src/multiagent/nodes.js.map +1 -1
- package/dist/src/multiagent/swarm.d.ts +20 -4
- package/dist/src/multiagent/swarm.d.ts.map +1 -1
- package/dist/src/multiagent/swarm.js +65 -16
- package/dist/src/multiagent/swarm.js.map +1 -1
- package/dist/src/plugins/__tests__/registry.test.js +1 -1
- package/dist/src/plugins/__tests__/registry.test.js.map +1 -1
- package/dist/src/plugins/model-plugin.d.ts +20 -0
- package/dist/src/plugins/model-plugin.d.ts.map +1 -0
- package/dist/src/plugins/model-plugin.js +29 -0
- package/dist/src/plugins/model-plugin.js.map +1 -0
- package/dist/src/registry/__tests__/tool-registry.test.js +11 -0
- package/dist/src/registry/__tests__/tool-registry.test.js.map +1 -1
- package/dist/src/registry/tool-registry.d.ts +4 -0
- package/dist/src/registry/tool-registry.d.ts.map +1 -1
- package/dist/src/registry/tool-registry.js +6 -0
- package/dist/src/registry/tool-registry.js.map +1 -1
- package/dist/src/retry/__tests__/backoff-strategy.test.d.ts +2 -0
- package/dist/src/retry/__tests__/backoff-strategy.test.d.ts.map +1 -0
- package/dist/src/retry/__tests__/backoff-strategy.test.js +116 -0
- package/dist/src/retry/__tests__/backoff-strategy.test.js.map +1 -0
- package/dist/src/retry/__tests__/default-model-retry-strategy.test.d.ts +2 -0
- package/dist/src/retry/__tests__/default-model-retry-strategy.test.d.ts.map +1 -0
- package/dist/src/retry/__tests__/default-model-retry-strategy.test.js +225 -0
- package/dist/src/retry/__tests__/default-model-retry-strategy.test.js.map +1 -0
- package/dist/src/retry/backoff-strategy.d.ts +108 -0
- package/dist/src/retry/backoff-strategy.d.ts.map +1 -0
- package/dist/src/retry/backoff-strategy.js +86 -0
- package/dist/src/retry/backoff-strategy.js.map +1 -0
- package/dist/src/retry/default-model-retry-strategy.d.ts +76 -0
- package/dist/src/retry/default-model-retry-strategy.d.ts.map +1 -0
- package/dist/src/retry/default-model-retry-strategy.js +104 -0
- package/dist/src/retry/default-model-retry-strategy.js.map +1 -0
- package/dist/src/retry/index.d.ts +8 -0
- package/dist/src/retry/index.d.ts.map +1 -0
- package/dist/src/retry/index.js +7 -0
- package/dist/src/retry/index.js.map +1 -0
- package/dist/src/retry/model-retry-strategy.d.ts +80 -0
- package/dist/src/retry/model-retry-strategy.d.ts.map +1 -0
- package/dist/src/retry/model-retry-strategy.js +85 -0
- package/dist/src/retry/model-retry-strategy.js.map +1 -0
- package/dist/src/retry/retry-strategy.d.ts +34 -0
- package/dist/src/retry/retry-strategy.d.ts.map +1 -0
- package/dist/src/retry/retry-strategy.js +25 -0
- package/dist/src/retry/retry-strategy.js.map +1 -0
- package/dist/src/session/__tests__/session-manager.test.js +52 -11
- package/dist/src/session/__tests__/session-manager.test.js.map +1 -1
- package/dist/src/session/session-manager.d.ts +6 -0
- package/dist/src/session/session-manager.d.ts.map +1 -1
- package/dist/src/session/session-manager.js +17 -0
- package/dist/src/session/session-manager.js.map +1 -1
- package/dist/src/telemetry/__tests__/meter.test.js +23 -0
- package/dist/src/telemetry/__tests__/meter.test.js.map +1 -1
- package/dist/src/telemetry/meter.d.ts +15 -0
- package/dist/src/telemetry/meter.d.ts.map +1 -1
- package/dist/src/telemetry/meter.js +14 -0
- package/dist/src/telemetry/meter.js.map +1 -1
- package/dist/src/tools/__tests__/tool.test.js +24 -1
- package/dist/src/tools/__tests__/tool.test.js.map +1 -1
- package/dist/src/tools/function-tool.d.ts.map +1 -1
- package/dist/src/tools/function-tool.js +6 -1
- package/dist/src/tools/function-tool.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +24 -3
- package/dist/src/tools/mcp-tool.d.ts.map +1 -1
- package/dist/src/tools/mcp-tool.js +103 -31
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/tool.d.ts +21 -2
- package/dist/src/tools/tool.d.ts.map +1 -1
- package/dist/src/tools/tool.js +12 -0
- package/dist/src/tools/tool.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/src/types/__tests__/agent.test.js +48 -0
- package/dist/src/types/__tests__/agent.test.js.map +1 -1
- package/dist/src/types/agent.d.ts +77 -9
- package/dist/src/types/agent.d.ts.map +1 -1
- package/dist/src/types/agent.js +30 -6
- package/dist/src/types/agent.js.map +1 -1
- package/dist/src/types/elicitation.d.ts +15 -0
- package/dist/src/types/elicitation.d.ts.map +1 -0
- package/dist/src/types/elicitation.js +2 -0
- package/dist/src/types/elicitation.js.map +1 -0
- package/dist/src/types/interrupt.d.ts +103 -0
- package/dist/src/types/interrupt.d.ts.map +1 -0
- package/dist/src/types/interrupt.js +63 -0
- package/dist/src/types/interrupt.js.map +1 -0
- package/dist/src/types/messages.d.ts +2 -1
- package/dist/src/types/messages.d.ts.map +1 -1
- package/dist/src/types/messages.js.map +1 -1
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.d.ts +2 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.d.ts.map +1 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.js +292 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.js.map +1 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.d.ts +2 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.d.ts.map +1 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.js +148 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.js.map +1 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.node.d.ts +2 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.node.d.ts.map +1 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.node.js +78 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.node.js.map +1 -0
- package/dist/src/vended-plugins/context-offloader/index.d.ts +23 -0
- package/dist/src/vended-plugins/context-offloader/index.d.ts.map +1 -0
- package/dist/src/vended-plugins/context-offloader/index.js +21 -0
- package/dist/src/vended-plugins/context-offloader/index.js.map +1 -0
- package/dist/src/vended-plugins/context-offloader/plugin.d.ts +48 -0
- package/dist/src/vended-plugins/context-offloader/plugin.d.ts.map +1 -0
- package/dist/src/vended-plugins/context-offloader/plugin.js +244 -0
- package/dist/src/vended-plugins/context-offloader/plugin.js.map +1 -0
- package/dist/src/vended-plugins/context-offloader/storage.d.ts +114 -0
- package/dist/src/vended-plugins/context-offloader/storage.d.ts.map +1 -0
- package/dist/src/vended-plugins/context-offloader/storage.js +204 -0
- package/dist/src/vended-plugins/context-offloader/storage.js.map +1 -0
- package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.js +21 -5
- package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.js.map +1 -1
- package/dist/src/vended-tools/bash/__tests__/bash.test.node.js +4 -0
- package/dist/src/vended-tools/bash/__tests__/bash.test.node.js.map +1 -1
- package/dist/src/vended-tools/bash/bash.d.ts.map +1 -1
- package/dist/src/vended-tools/bash/bash.js +0 -3
- package/dist/src/vended-tools/bash/bash.js.map +1 -1
- package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.js +4 -0
- package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.js.map +1 -1
- package/dist/src/vended-tools/notebook/__tests__/notebook.test.js +4 -0
- package/dist/src/vended-tools/notebook/__tests__/notebook.test.js.map +1 -1
- package/package.json +17 -9
- package/dist/src/models/__tests__/openai.test.d.ts +0 -2
- package/dist/src/models/__tests__/openai.test.d.ts.map +0 -1
- package/dist/src/models/__tests__/openai.test.js.map +0 -1
- package/dist/src/models/openai.d.ts +0 -312
- package/dist/src/models/openai.d.ts.map +0 -1
- package/dist/src/models/openai.js +0 -789
- package/dist/src/models/openai.js.map +0 -1
|
@@ -26,46 +26,71 @@ describe('InitializedEvent', () => {
|
|
|
26
26
|
describe('BeforeInvocationEvent', () => {
|
|
27
27
|
it('creates instance with correct properties', () => {
|
|
28
28
|
const agent = new Agent();
|
|
29
|
-
const event = new BeforeInvocationEvent({ agent });
|
|
29
|
+
const event = new BeforeInvocationEvent({ agent, invocationState: {} });
|
|
30
30
|
expect(event).toEqual({
|
|
31
31
|
type: 'beforeInvocationEvent',
|
|
32
32
|
agent: agent,
|
|
33
|
+
cancel: false,
|
|
34
|
+
invocationState: {},
|
|
33
35
|
});
|
|
34
36
|
// @ts-expect-error verifying that property is readonly
|
|
35
37
|
event.agent = new Agent();
|
|
36
38
|
});
|
|
37
39
|
it('returns false for _shouldReverseCallbacks', () => {
|
|
38
40
|
const agent = new Agent();
|
|
39
|
-
const event = new BeforeInvocationEvent({ agent });
|
|
41
|
+
const event = new BeforeInvocationEvent({ agent, invocationState: {} });
|
|
40
42
|
expect(event._shouldReverseCallbacks()).toBe(false);
|
|
41
43
|
});
|
|
44
|
+
it('allows cancel to be set to true', () => {
|
|
45
|
+
const agent = new Agent();
|
|
46
|
+
const event = new BeforeInvocationEvent({ agent, invocationState: {} });
|
|
47
|
+
expect(event.cancel).toBe(false);
|
|
48
|
+
event.cancel = true;
|
|
49
|
+
expect(event.cancel).toBe(true);
|
|
50
|
+
});
|
|
51
|
+
it('allows cancel to be set to a string message', () => {
|
|
52
|
+
const agent = new Agent();
|
|
53
|
+
const event = new BeforeInvocationEvent({ agent, invocationState: {} });
|
|
54
|
+
event.cancel = 'unauthorized';
|
|
55
|
+
expect(event.cancel).toBe('unauthorized');
|
|
56
|
+
});
|
|
42
57
|
});
|
|
43
58
|
describe('AfterInvocationEvent', () => {
|
|
44
59
|
it('creates instance with correct properties', () => {
|
|
45
60
|
const agent = new Agent();
|
|
46
|
-
const event = new AfterInvocationEvent({ agent });
|
|
61
|
+
const event = new AfterInvocationEvent({ agent, invocationState: {} });
|
|
47
62
|
expect(event).toEqual({
|
|
48
63
|
type: 'afterInvocationEvent',
|
|
49
64
|
agent: agent,
|
|
65
|
+
invocationState: {},
|
|
66
|
+
resume: undefined,
|
|
50
67
|
});
|
|
51
68
|
// @ts-expect-error verifying that property is readonly
|
|
52
69
|
event.agent = new Agent();
|
|
53
70
|
});
|
|
54
71
|
it('returns true for _shouldReverseCallbacks', () => {
|
|
55
72
|
const agent = new Agent();
|
|
56
|
-
const event = new AfterInvocationEvent({ agent });
|
|
73
|
+
const event = new AfterInvocationEvent({ agent, invocationState: {} });
|
|
57
74
|
expect(event._shouldReverseCallbacks()).toBe(true);
|
|
58
75
|
});
|
|
76
|
+
it('allows resume to be set to new input', () => {
|
|
77
|
+
const agent = new Agent();
|
|
78
|
+
const event = new AfterInvocationEvent({ agent, invocationState: {} });
|
|
79
|
+
expect(event.resume).toBeUndefined();
|
|
80
|
+
event.resume = 'follow-up prompt';
|
|
81
|
+
expect(event.resume).toBe('follow-up prompt');
|
|
82
|
+
});
|
|
59
83
|
});
|
|
60
84
|
describe('MessageAddedEvent', () => {
|
|
61
85
|
it('creates instance with correct properties', () => {
|
|
62
86
|
const agent = new Agent();
|
|
63
87
|
const message = new Message({ role: 'assistant', content: [new TextBlock('Hello')] });
|
|
64
|
-
const event = new MessageAddedEvent({ agent, message });
|
|
88
|
+
const event = new MessageAddedEvent({ agent, message, invocationState: {} });
|
|
65
89
|
expect(event).toEqual({
|
|
66
90
|
type: 'messageAddedEvent',
|
|
67
91
|
agent: agent,
|
|
68
92
|
message: message,
|
|
93
|
+
invocationState: {},
|
|
69
94
|
});
|
|
70
95
|
// @ts-expect-error verifying that property is readonly
|
|
71
96
|
event.agent = new Agent();
|
|
@@ -75,7 +100,7 @@ describe('MessageAddedEvent', () => {
|
|
|
75
100
|
it('returns false for _shouldReverseCallbacks', () => {
|
|
76
101
|
const agent = new Agent();
|
|
77
102
|
const message = new Message({ role: 'assistant', content: [] });
|
|
78
|
-
const event = new MessageAddedEvent({ agent, message });
|
|
103
|
+
const event = new MessageAddedEvent({ agent, message, invocationState: {} });
|
|
79
104
|
expect(event._shouldReverseCallbacks()).toBe(false);
|
|
80
105
|
});
|
|
81
106
|
});
|
|
@@ -93,19 +118,19 @@ describe('BeforeToolCallEvent', () => {
|
|
|
93
118
|
toolUseId: 'test-id',
|
|
94
119
|
input: { arg: 'value' },
|
|
95
120
|
};
|
|
96
|
-
const event = new BeforeToolCallEvent({ agent, toolUse, tool });
|
|
121
|
+
const event = new BeforeToolCallEvent({ agent, toolUse, tool, invocationState: {} });
|
|
97
122
|
expect(event).toEqual({
|
|
98
123
|
type: 'beforeToolCallEvent',
|
|
99
124
|
agent: agent,
|
|
100
125
|
toolUse: toolUse,
|
|
101
126
|
tool: tool,
|
|
102
127
|
cancel: false,
|
|
128
|
+
invocationState: {},
|
|
129
|
+
selectedTool: undefined,
|
|
103
130
|
});
|
|
104
131
|
// @ts-expect-error verifying that property is readonly
|
|
105
132
|
event.agent = new Agent();
|
|
106
133
|
// @ts-expect-error verifying that property is readonly
|
|
107
|
-
event.toolUse = toolUse;
|
|
108
|
-
// @ts-expect-error verifying that property is readonly
|
|
109
134
|
event.tool = tool;
|
|
110
135
|
});
|
|
111
136
|
it('creates instance with undefined tool when tool is not found', () => {
|
|
@@ -115,25 +140,27 @@ describe('BeforeToolCallEvent', () => {
|
|
|
115
140
|
toolUseId: 'test-id',
|
|
116
141
|
input: {},
|
|
117
142
|
};
|
|
118
|
-
const event = new BeforeToolCallEvent({ agent, toolUse, tool: undefined });
|
|
143
|
+
const event = new BeforeToolCallEvent({ agent, toolUse, tool: undefined, invocationState: {} });
|
|
119
144
|
expect(event).toEqual({
|
|
120
145
|
type: 'beforeToolCallEvent',
|
|
121
146
|
agent: agent,
|
|
122
147
|
toolUse: toolUse,
|
|
123
148
|
tool: undefined,
|
|
124
149
|
cancel: false,
|
|
150
|
+
invocationState: {},
|
|
151
|
+
selectedTool: undefined,
|
|
125
152
|
});
|
|
126
153
|
});
|
|
127
154
|
it('returns false for _shouldReverseCallbacks', () => {
|
|
128
155
|
const agent = new Agent();
|
|
129
156
|
const toolUse = { name: 'test', toolUseId: 'id', input: {} };
|
|
130
|
-
const event = new BeforeToolCallEvent({ agent, toolUse, tool: undefined });
|
|
157
|
+
const event = new BeforeToolCallEvent({ agent, toolUse, tool: undefined, invocationState: {} });
|
|
131
158
|
expect(event._shouldReverseCallbacks()).toBe(false);
|
|
132
159
|
});
|
|
133
160
|
it('allows cancel to be set to true', () => {
|
|
134
161
|
const agent = new Agent();
|
|
135
162
|
const toolUse = { name: 'test', toolUseId: 'id', input: {} };
|
|
136
|
-
const event = new BeforeToolCallEvent({ agent, toolUse, tool: undefined });
|
|
163
|
+
const event = new BeforeToolCallEvent({ agent, toolUse, tool: undefined, invocationState: {} });
|
|
137
164
|
expect(event.cancel).toBe(false);
|
|
138
165
|
event.cancel = true;
|
|
139
166
|
expect(event.cancel).toBe(true);
|
|
@@ -141,10 +168,39 @@ describe('BeforeToolCallEvent', () => {
|
|
|
141
168
|
it('allows cancel to be set to a string message', () => {
|
|
142
169
|
const agent = new Agent();
|
|
143
170
|
const toolUse = { name: 'test', toolUseId: 'id', input: {} };
|
|
144
|
-
const event = new BeforeToolCallEvent({ agent, toolUse, tool: undefined });
|
|
171
|
+
const event = new BeforeToolCallEvent({ agent, toolUse, tool: undefined, invocationState: {} });
|
|
145
172
|
event.cancel = 'tool not allowed';
|
|
146
173
|
expect(event.cancel).toBe('tool not allowed');
|
|
147
174
|
});
|
|
175
|
+
it('allows selectedTool to be set to a replacement tool', () => {
|
|
176
|
+
const agent = new Agent();
|
|
177
|
+
const toolUse = { name: 'test', toolUseId: 'id', input: {} };
|
|
178
|
+
const event = new BeforeToolCallEvent({ agent, toolUse, tool: undefined, invocationState: {} });
|
|
179
|
+
expect(event.selectedTool).toBeUndefined();
|
|
180
|
+
const replacement = new FunctionTool({
|
|
181
|
+
name: 'replacement',
|
|
182
|
+
description: 'Replacement',
|
|
183
|
+
inputSchema: {},
|
|
184
|
+
callback: () => 'ok',
|
|
185
|
+
});
|
|
186
|
+
event.selectedTool = replacement;
|
|
187
|
+
expect(event.selectedTool).toBe(replacement);
|
|
188
|
+
});
|
|
189
|
+
it('allows mutating toolUse fields in-place', () => {
|
|
190
|
+
const agent = new Agent();
|
|
191
|
+
const toolUse = { name: 'orig', toolUseId: 'id', input: { a: 1 } };
|
|
192
|
+
const event = new BeforeToolCallEvent({ agent, toolUse, tool: undefined, invocationState: {} });
|
|
193
|
+
event.toolUse.input = { a: 2, b: 3 };
|
|
194
|
+
event.toolUse.name = 'renamed';
|
|
195
|
+
expect(event.toolUse).toEqual({ name: 'renamed', toolUseId: 'id', input: { a: 2, b: 3 } });
|
|
196
|
+
});
|
|
197
|
+
it('allows reassigning toolUse to a new object', () => {
|
|
198
|
+
const agent = new Agent();
|
|
199
|
+
const toolUse = { name: 'orig', toolUseId: 'id', input: {} };
|
|
200
|
+
const event = new BeforeToolCallEvent({ agent, toolUse, tool: undefined, invocationState: {} });
|
|
201
|
+
event.toolUse = { name: 'new', toolUseId: 'new-id', input: { x: 1 } };
|
|
202
|
+
expect(event.toolUse).toEqual({ name: 'new', toolUseId: 'new-id', input: { x: 1 } });
|
|
203
|
+
});
|
|
148
204
|
});
|
|
149
205
|
describe('AfterToolCallEvent', () => {
|
|
150
206
|
it('creates instance with correct properties on success', () => {
|
|
@@ -165,7 +221,7 @@ describe('AfterToolCallEvent', () => {
|
|
|
165
221
|
status: 'success',
|
|
166
222
|
content: [new TextBlock('Success')],
|
|
167
223
|
});
|
|
168
|
-
const event = new AfterToolCallEvent({ agent, toolUse, tool, result });
|
|
224
|
+
const event = new AfterToolCallEvent({ agent, toolUse, tool, result, invocationState: {} });
|
|
169
225
|
expect(event).toEqual({
|
|
170
226
|
type: 'afterToolCallEvent',
|
|
171
227
|
agent: agent,
|
|
@@ -173,6 +229,7 @@ describe('AfterToolCallEvent', () => {
|
|
|
173
229
|
tool: tool,
|
|
174
230
|
result: result,
|
|
175
231
|
error: undefined,
|
|
232
|
+
invocationState: {},
|
|
176
233
|
});
|
|
177
234
|
// @ts-expect-error verifying that property is readonly
|
|
178
235
|
event.agent = new Agent();
|
|
@@ -180,8 +237,19 @@ describe('AfterToolCallEvent', () => {
|
|
|
180
237
|
event.toolUse = toolUse;
|
|
181
238
|
// @ts-expect-error verifying that property is readonly
|
|
182
239
|
event.tool = tool;
|
|
183
|
-
|
|
184
|
-
|
|
240
|
+
});
|
|
241
|
+
it('allows result to be replaced', () => {
|
|
242
|
+
const agent = new Agent();
|
|
243
|
+
const toolUse = { name: 'test', toolUseId: 'id', input: {} };
|
|
244
|
+
const result = new ToolResultBlock({ toolUseId: 'id', status: 'success', content: [new TextBlock('original')] });
|
|
245
|
+
const event = new AfterToolCallEvent({ agent, toolUse, tool: undefined, result, invocationState: {} });
|
|
246
|
+
const replacedResult = new ToolResultBlock({
|
|
247
|
+
toolUseId: 'id',
|
|
248
|
+
status: 'success',
|
|
249
|
+
content: [new TextBlock('replaced')],
|
|
250
|
+
});
|
|
251
|
+
event.result = replacedResult;
|
|
252
|
+
expect(event.result).toBe(replacedResult);
|
|
185
253
|
});
|
|
186
254
|
it('creates instance with error property when tool execution fails', () => {
|
|
187
255
|
const agent = new Agent();
|
|
@@ -192,7 +260,7 @@ describe('AfterToolCallEvent', () => {
|
|
|
192
260
|
content: [new TextBlock('Error')],
|
|
193
261
|
});
|
|
194
262
|
const error = new Error('Tool failed');
|
|
195
|
-
const event = new AfterToolCallEvent({ agent, toolUse, tool: undefined, result, error });
|
|
263
|
+
const event = new AfterToolCallEvent({ agent, toolUse, tool: undefined, result, error, invocationState: {} });
|
|
196
264
|
expect(event).toEqual({
|
|
197
265
|
type: 'afterToolCallEvent',
|
|
198
266
|
agent: agent,
|
|
@@ -200,6 +268,7 @@ describe('AfterToolCallEvent', () => {
|
|
|
200
268
|
tool: undefined,
|
|
201
269
|
result: result,
|
|
202
270
|
error: error,
|
|
271
|
+
invocationState: {},
|
|
203
272
|
});
|
|
204
273
|
});
|
|
205
274
|
it('returns true for _shouldReverseCallbacks', () => {
|
|
@@ -210,7 +279,7 @@ describe('AfterToolCallEvent', () => {
|
|
|
210
279
|
status: 'success',
|
|
211
280
|
content: [],
|
|
212
281
|
});
|
|
213
|
-
const event = new AfterToolCallEvent({ agent, toolUse, tool: undefined, result });
|
|
282
|
+
const event = new AfterToolCallEvent({ agent, toolUse, tool: undefined, result, invocationState: {} });
|
|
214
283
|
expect(event._shouldReverseCallbacks()).toBe(true);
|
|
215
284
|
});
|
|
216
285
|
it('allows retry to be set when error is present', () => {
|
|
@@ -222,7 +291,7 @@ describe('AfterToolCallEvent', () => {
|
|
|
222
291
|
content: [new TextBlock('Error')],
|
|
223
292
|
});
|
|
224
293
|
const error = new Error('Tool failed');
|
|
225
|
-
const event = new AfterToolCallEvent({ agent, toolUse, tool: undefined, result, error });
|
|
294
|
+
const event = new AfterToolCallEvent({ agent, toolUse, tool: undefined, result, error, invocationState: {} });
|
|
226
295
|
expect(event.retry).toBeUndefined();
|
|
227
296
|
event.retry = true;
|
|
228
297
|
expect(event.retry).toBe(true);
|
|
@@ -237,7 +306,7 @@ describe('AfterToolCallEvent', () => {
|
|
|
237
306
|
status: 'success',
|
|
238
307
|
content: [new TextBlock('Success')],
|
|
239
308
|
});
|
|
240
|
-
const event = new AfterToolCallEvent({ agent, toolUse, tool: undefined, result });
|
|
309
|
+
const event = new AfterToolCallEvent({ agent, toolUse, tool: undefined, result, invocationState: {} });
|
|
241
310
|
expect(event.retry).toBeUndefined();
|
|
242
311
|
event.retry = true;
|
|
243
312
|
expect(event.retry).toBe(true);
|
|
@@ -246,20 +315,62 @@ describe('AfterToolCallEvent', () => {
|
|
|
246
315
|
describe('BeforeModelCallEvent', () => {
|
|
247
316
|
it('creates instance with correct properties', () => {
|
|
248
317
|
const agent = new Agent();
|
|
249
|
-
const event = new BeforeModelCallEvent({ agent, model: agent.model });
|
|
318
|
+
const event = new BeforeModelCallEvent({ agent, model: agent.model, invocationState: {} });
|
|
250
319
|
expect(event).toEqual({
|
|
251
320
|
type: 'beforeModelCallEvent',
|
|
252
321
|
agent: agent,
|
|
253
322
|
model: agent.model,
|
|
323
|
+
cancel: false,
|
|
324
|
+
invocationState: {},
|
|
254
325
|
});
|
|
255
326
|
// @ts-expect-error verifying that property is readonly
|
|
256
327
|
event.agent = new Agent();
|
|
257
328
|
});
|
|
329
|
+
it('includes projectedInputTokens when provided', () => {
|
|
330
|
+
const agent = new Agent();
|
|
331
|
+
const event = new BeforeModelCallEvent({
|
|
332
|
+
agent,
|
|
333
|
+
model: agent.model,
|
|
334
|
+
invocationState: {},
|
|
335
|
+
projectedInputTokens: 500,
|
|
336
|
+
});
|
|
337
|
+
expect(event).toEqual({
|
|
338
|
+
type: 'beforeModelCallEvent',
|
|
339
|
+
agent,
|
|
340
|
+
model: agent.model,
|
|
341
|
+
cancel: false,
|
|
342
|
+
invocationState: {},
|
|
343
|
+
projectedInputTokens: 500,
|
|
344
|
+
});
|
|
345
|
+
expect(event.toJSON()).toStrictEqual({
|
|
346
|
+
type: 'beforeModelCallEvent',
|
|
347
|
+
projectedInputTokens: 500,
|
|
348
|
+
});
|
|
349
|
+
});
|
|
350
|
+
it('excludes projectedInputTokens from toJSON when not provided', () => {
|
|
351
|
+
const agent = new Agent();
|
|
352
|
+
const event = new BeforeModelCallEvent({ agent, model: agent.model, invocationState: {} });
|
|
353
|
+
expect(event.projectedInputTokens).toBeUndefined();
|
|
354
|
+
expect(event.toJSON()).toStrictEqual({ type: 'beforeModelCallEvent' });
|
|
355
|
+
});
|
|
258
356
|
it('returns false for _shouldReverseCallbacks', () => {
|
|
259
357
|
const agent = new Agent();
|
|
260
|
-
const event = new BeforeModelCallEvent({ agent, model: agent.model });
|
|
358
|
+
const event = new BeforeModelCallEvent({ agent, model: agent.model, invocationState: {} });
|
|
261
359
|
expect(event._shouldReverseCallbacks()).toBe(false);
|
|
262
360
|
});
|
|
361
|
+
it('allows cancel to be set to true', () => {
|
|
362
|
+
const agent = new Agent();
|
|
363
|
+
const event = new BeforeModelCallEvent({ agent, model: agent.model, invocationState: {} });
|
|
364
|
+
expect(event.cancel).toBe(false);
|
|
365
|
+
event.cancel = true;
|
|
366
|
+
expect(event.cancel).toBe(true);
|
|
367
|
+
});
|
|
368
|
+
it('allows cancel to be set to a string message', () => {
|
|
369
|
+
const agent = new Agent();
|
|
370
|
+
const event = new BeforeModelCallEvent({ agent, model: agent.model, invocationState: {} });
|
|
371
|
+
event.cancel = 'rate limited';
|
|
372
|
+
expect(event.cancel).toBe('rate limited');
|
|
373
|
+
});
|
|
263
374
|
});
|
|
264
375
|
describe('AfterModelCallEvent', () => {
|
|
265
376
|
it('creates instance with correct properties on success', () => {
|
|
@@ -267,13 +378,21 @@ describe('AfterModelCallEvent', () => {
|
|
|
267
378
|
const message = new Message({ role: 'assistant', content: [new TextBlock('Response')] });
|
|
268
379
|
const stopReason = 'endTurn';
|
|
269
380
|
const response = { message, stopReason };
|
|
270
|
-
const event = new AfterModelCallEvent({
|
|
381
|
+
const event = new AfterModelCallEvent({
|
|
382
|
+
agent,
|
|
383
|
+
model: agent.model,
|
|
384
|
+
attemptCount: 1,
|
|
385
|
+
stopData: response,
|
|
386
|
+
invocationState: {},
|
|
387
|
+
});
|
|
271
388
|
expect(event).toEqual({
|
|
272
389
|
type: 'afterModelCallEvent',
|
|
273
390
|
agent: agent,
|
|
274
391
|
model: agent.model,
|
|
392
|
+
attemptCount: 1,
|
|
275
393
|
stopData: response,
|
|
276
394
|
error: undefined,
|
|
395
|
+
invocationState: {},
|
|
277
396
|
});
|
|
278
397
|
// @ts-expect-error verifying that property is readonly
|
|
279
398
|
event.agent = new Agent();
|
|
@@ -285,26 +404,41 @@ describe('AfterModelCallEvent', () => {
|
|
|
285
404
|
const message = new Message({ role: 'assistant', content: [] });
|
|
286
405
|
const error = new Error('Model failed');
|
|
287
406
|
const response = { message, stopReason: 'error' };
|
|
288
|
-
const event = new AfterModelCallEvent({
|
|
407
|
+
const event = new AfterModelCallEvent({
|
|
408
|
+
agent,
|
|
409
|
+
model: agent.model,
|
|
410
|
+
attemptCount: 1,
|
|
411
|
+
stopData: response,
|
|
412
|
+
error,
|
|
413
|
+
invocationState: {},
|
|
414
|
+
});
|
|
289
415
|
expect(event).toEqual({
|
|
290
416
|
type: 'afterModelCallEvent',
|
|
291
417
|
agent: agent,
|
|
292
418
|
model: agent.model,
|
|
419
|
+
attemptCount: 1,
|
|
293
420
|
stopData: response,
|
|
294
421
|
error: error,
|
|
422
|
+
invocationState: {},
|
|
295
423
|
});
|
|
296
424
|
});
|
|
297
425
|
it('returns true for _shouldReverseCallbacks', () => {
|
|
298
426
|
const agent = new Agent();
|
|
299
427
|
const message = new Message({ role: 'assistant', content: [] });
|
|
300
428
|
const response = { message, stopReason: 'endTurn' };
|
|
301
|
-
const event = new AfterModelCallEvent({
|
|
429
|
+
const event = new AfterModelCallEvent({
|
|
430
|
+
agent,
|
|
431
|
+
model: agent.model,
|
|
432
|
+
attemptCount: 1,
|
|
433
|
+
stopData: response,
|
|
434
|
+
invocationState: {},
|
|
435
|
+
});
|
|
302
436
|
expect(event._shouldReverseCallbacks()).toBe(true);
|
|
303
437
|
});
|
|
304
438
|
it('allows retry to be set when error is present', () => {
|
|
305
439
|
const agent = new Agent();
|
|
306
440
|
const error = new Error('Model failed');
|
|
307
|
-
const event = new AfterModelCallEvent({ agent, model: agent.model, error });
|
|
441
|
+
const event = new AfterModelCallEvent({ agent, model: agent.model, attemptCount: 1, error, invocationState: {} });
|
|
308
442
|
// Initially undefined
|
|
309
443
|
expect(event.retry).toBeUndefined();
|
|
310
444
|
// Can be set to true
|
|
@@ -317,7 +451,7 @@ describe('AfterModelCallEvent', () => {
|
|
|
317
451
|
it('retry is optional and defaults to undefined', () => {
|
|
318
452
|
const agent = new Agent();
|
|
319
453
|
const error = new Error('Model failed');
|
|
320
|
-
const event = new AfterModelCallEvent({ agent, model: agent.model, error });
|
|
454
|
+
const event = new AfterModelCallEvent({ agent, model: agent.model, attemptCount: 1, error, invocationState: {} });
|
|
321
455
|
expect(event.retry).toBeUndefined();
|
|
322
456
|
});
|
|
323
457
|
});
|
|
@@ -328,11 +462,12 @@ describe('ModelStreamUpdateEvent', () => {
|
|
|
328
462
|
type: 'modelMessageStartEvent',
|
|
329
463
|
role: 'assistant',
|
|
330
464
|
};
|
|
331
|
-
const hookEvent = new ModelStreamUpdateEvent({ agent, event: streamEvent });
|
|
465
|
+
const hookEvent = new ModelStreamUpdateEvent({ agent, event: streamEvent, invocationState: {} });
|
|
332
466
|
expect(hookEvent).toEqual({
|
|
333
467
|
type: 'modelStreamUpdateEvent',
|
|
334
468
|
agent: agent,
|
|
335
469
|
event: streamEvent,
|
|
470
|
+
invocationState: {},
|
|
336
471
|
});
|
|
337
472
|
// @ts-expect-error verifying that property is readonly
|
|
338
473
|
hookEvent.agent = new Agent();
|
|
@@ -344,11 +479,12 @@ describe('ContentBlockEvent', () => {
|
|
|
344
479
|
it('creates instance with correct properties', () => {
|
|
345
480
|
const agent = new Agent();
|
|
346
481
|
const contentBlock = new TextBlock('Hello');
|
|
347
|
-
const event = new ContentBlockEvent({ agent, contentBlock });
|
|
482
|
+
const event = new ContentBlockEvent({ agent, contentBlock, invocationState: {} });
|
|
348
483
|
expect(event).toEqual({
|
|
349
484
|
type: 'contentBlockEvent',
|
|
350
485
|
agent: agent,
|
|
351
486
|
contentBlock: contentBlock,
|
|
487
|
+
invocationState: {},
|
|
352
488
|
});
|
|
353
489
|
// @ts-expect-error verifying that property is readonly
|
|
354
490
|
event.agent = new Agent();
|
|
@@ -360,12 +496,13 @@ describe('ModelMessageEvent', () => {
|
|
|
360
496
|
it('creates instance with correct properties', () => {
|
|
361
497
|
const agent = new Agent();
|
|
362
498
|
const message = new Message({ role: 'assistant', content: [new TextBlock('Hello')] });
|
|
363
|
-
const event = new ModelMessageEvent({ agent, message, stopReason: 'endTurn' });
|
|
499
|
+
const event = new ModelMessageEvent({ agent, message, stopReason: 'endTurn', invocationState: {} });
|
|
364
500
|
expect(event).toEqual({
|
|
365
501
|
type: 'modelMessageEvent',
|
|
366
502
|
agent: agent,
|
|
367
503
|
message: message,
|
|
368
504
|
stopReason: 'endTurn',
|
|
505
|
+
invocationState: {},
|
|
369
506
|
});
|
|
370
507
|
// @ts-expect-error verifying that property is readonly
|
|
371
508
|
event.agent = new Agent();
|
|
@@ -383,11 +520,12 @@ describe('ToolResultEvent', () => {
|
|
|
383
520
|
status: 'success',
|
|
384
521
|
content: [new TextBlock('Result')],
|
|
385
522
|
});
|
|
386
|
-
const event = new ToolResultEvent({ agent, result: toolResult });
|
|
523
|
+
const event = new ToolResultEvent({ agent, result: toolResult, invocationState: {} });
|
|
387
524
|
expect(event).toEqual({
|
|
388
525
|
type: 'toolResultEvent',
|
|
389
526
|
agent: agent,
|
|
390
527
|
result: toolResult,
|
|
528
|
+
invocationState: {},
|
|
391
529
|
});
|
|
392
530
|
// @ts-expect-error verifying that property is readonly
|
|
393
531
|
event.agent = new Agent();
|
|
@@ -399,11 +537,12 @@ describe('ToolStreamUpdateEvent', () => {
|
|
|
399
537
|
it('creates instance with correct properties', () => {
|
|
400
538
|
const agent = new Agent();
|
|
401
539
|
const toolStreamEvent = new ToolStreamEvent({ data: 'progress' });
|
|
402
|
-
const event = new ToolStreamUpdateEvent({ agent, event: toolStreamEvent });
|
|
540
|
+
const event = new ToolStreamUpdateEvent({ agent, event: toolStreamEvent, invocationState: {} });
|
|
403
541
|
expect(event).toEqual({
|
|
404
542
|
type: 'toolStreamUpdateEvent',
|
|
405
543
|
agent: agent,
|
|
406
544
|
event: toolStreamEvent,
|
|
545
|
+
invocationState: {},
|
|
407
546
|
});
|
|
408
547
|
// @ts-expect-error verifying that property is readonly
|
|
409
548
|
event.agent = new Agent();
|
|
@@ -418,12 +557,14 @@ describe('AgentResultEvent', () => {
|
|
|
418
557
|
stopReason: 'endTurn',
|
|
419
558
|
lastMessage: new Message({ role: 'assistant', content: [new TextBlock('Done')] }),
|
|
420
559
|
metrics: new AgentMetrics(),
|
|
560
|
+
invocationState: {},
|
|
421
561
|
});
|
|
422
|
-
const event = new AgentResultEvent({ agent, result });
|
|
562
|
+
const event = new AgentResultEvent({ agent, result, invocationState: {} });
|
|
423
563
|
expect(event).toEqual({
|
|
424
564
|
type: 'agentResultEvent',
|
|
425
565
|
agent: agent,
|
|
426
566
|
result: result,
|
|
567
|
+
invocationState: {},
|
|
427
568
|
});
|
|
428
569
|
// @ts-expect-error verifying that property is readonly
|
|
429
570
|
event.agent = new Agent();
|
|
@@ -444,12 +585,13 @@ describe('BeforeToolsEvent', () => {
|
|
|
444
585
|
}),
|
|
445
586
|
],
|
|
446
587
|
});
|
|
447
|
-
const event = new BeforeToolsEvent({ agent, message });
|
|
588
|
+
const event = new BeforeToolsEvent({ agent, message, invocationState: {} });
|
|
448
589
|
expect(event).toEqual({
|
|
449
590
|
type: 'beforeToolsEvent',
|
|
450
591
|
agent: agent,
|
|
451
592
|
message: message,
|
|
452
593
|
cancel: false,
|
|
594
|
+
invocationState: {},
|
|
453
595
|
});
|
|
454
596
|
// @ts-expect-error verifying that property is readonly
|
|
455
597
|
event.agent = new Agent();
|
|
@@ -459,13 +601,13 @@ describe('BeforeToolsEvent', () => {
|
|
|
459
601
|
it('returns false for _shouldReverseCallbacks', () => {
|
|
460
602
|
const agent = new Agent();
|
|
461
603
|
const message = new Message({ role: 'assistant', content: [] });
|
|
462
|
-
const event = new BeforeToolsEvent({ agent, message });
|
|
604
|
+
const event = new BeforeToolsEvent({ agent, message, invocationState: {} });
|
|
463
605
|
expect(event._shouldReverseCallbacks()).toBe(false);
|
|
464
606
|
});
|
|
465
607
|
it('allows cancel to be set to true', () => {
|
|
466
608
|
const agent = new Agent();
|
|
467
609
|
const message = new Message({ role: 'assistant', content: [] });
|
|
468
|
-
const event = new BeforeToolsEvent({ agent, message });
|
|
610
|
+
const event = new BeforeToolsEvent({ agent, message, invocationState: {} });
|
|
469
611
|
expect(event.cancel).toBe(false);
|
|
470
612
|
event.cancel = true;
|
|
471
613
|
expect(event.cancel).toBe(true);
|
|
@@ -473,7 +615,7 @@ describe('BeforeToolsEvent', () => {
|
|
|
473
615
|
it('allows cancel to be set to a string message', () => {
|
|
474
616
|
const agent = new Agent();
|
|
475
617
|
const message = new Message({ role: 'assistant', content: [] });
|
|
476
|
-
const event = new BeforeToolsEvent({ agent, message });
|
|
618
|
+
const event = new BeforeToolsEvent({ agent, message, invocationState: {} });
|
|
477
619
|
event.cancel = 'tools not allowed';
|
|
478
620
|
expect(event.cancel).toBe('tools not allowed');
|
|
479
621
|
});
|
|
@@ -491,11 +633,13 @@ describe('AfterToolsEvent', () => {
|
|
|
491
633
|
}),
|
|
492
634
|
],
|
|
493
635
|
});
|
|
494
|
-
const event = new AfterToolsEvent({ agent, message });
|
|
636
|
+
const event = new AfterToolsEvent({ agent, message, invocationState: {} });
|
|
495
637
|
expect(event).toEqual({
|
|
496
638
|
type: 'afterToolsEvent',
|
|
497
639
|
agent: agent,
|
|
498
640
|
message: message,
|
|
641
|
+
invocationState: {},
|
|
642
|
+
endTurn: false,
|
|
499
643
|
});
|
|
500
644
|
// @ts-expect-error verifying that property is readonly
|
|
501
645
|
event.agent = new Agent();
|
|
@@ -505,9 +649,19 @@ describe('AfterToolsEvent', () => {
|
|
|
505
649
|
it('returns true for _shouldReverseCallbacks', () => {
|
|
506
650
|
const agent = new Agent();
|
|
507
651
|
const message = new Message({ role: 'user', content: [] });
|
|
508
|
-
const event = new AfterToolsEvent({ agent, message });
|
|
652
|
+
const event = new AfterToolsEvent({ agent, message, invocationState: {} });
|
|
509
653
|
expect(event._shouldReverseCallbacks()).toBe(true);
|
|
510
654
|
});
|
|
655
|
+
it('defaults endTurn to false and accepts boolean or string', () => {
|
|
656
|
+
const agent = new Agent();
|
|
657
|
+
const message = new Message({ role: 'user', content: [] });
|
|
658
|
+
const event = new AfterToolsEvent({ agent, message, invocationState: {} });
|
|
659
|
+
expect(event.endTurn).toBe(false);
|
|
660
|
+
event.endTurn = true;
|
|
661
|
+
expect(event.endTurn).toBe(true);
|
|
662
|
+
event.endTurn = 'enough information gathered';
|
|
663
|
+
expect(event.endTurn).toBe('enough information gathered');
|
|
664
|
+
});
|
|
511
665
|
});
|
|
512
666
|
// ===================== toJSON serialization tests =====================
|
|
513
667
|
describe('toJSON serialization', () => {
|
|
@@ -522,7 +676,7 @@ describe('toJSON serialization', () => {
|
|
|
522
676
|
describe('BeforeInvocationEvent', () => {
|
|
523
677
|
it('excludes agent and returns only type', () => {
|
|
524
678
|
const agent = new Agent();
|
|
525
|
-
const event = new BeforeInvocationEvent({ agent });
|
|
679
|
+
const event = new BeforeInvocationEvent({ agent, invocationState: {} });
|
|
526
680
|
const json = JSON.parse(JSON.stringify(event));
|
|
527
681
|
expect(json).toStrictEqual({ type: 'beforeInvocationEvent' });
|
|
528
682
|
});
|
|
@@ -530,7 +684,7 @@ describe('toJSON serialization', () => {
|
|
|
530
684
|
describe('AfterInvocationEvent', () => {
|
|
531
685
|
it('excludes agent and returns only type', () => {
|
|
532
686
|
const agent = new Agent();
|
|
533
|
-
const event = new AfterInvocationEvent({ agent });
|
|
687
|
+
const event = new AfterInvocationEvent({ agent, invocationState: {} });
|
|
534
688
|
const json = JSON.parse(JSON.stringify(event));
|
|
535
689
|
expect(json).toStrictEqual({ type: 'afterInvocationEvent' });
|
|
536
690
|
});
|
|
@@ -538,7 +692,7 @@ describe('toJSON serialization', () => {
|
|
|
538
692
|
describe('BeforeModelCallEvent', () => {
|
|
539
693
|
it('excludes agent and model and returns only type', () => {
|
|
540
694
|
const agent = new Agent();
|
|
541
|
-
const event = new BeforeModelCallEvent({ agent, model: agent.model });
|
|
695
|
+
const event = new BeforeModelCallEvent({ agent, model: agent.model, invocationState: {} });
|
|
542
696
|
const json = JSON.parse(JSON.stringify(event));
|
|
543
697
|
expect(json).toStrictEqual({ type: 'beforeModelCallEvent' });
|
|
544
698
|
});
|
|
@@ -547,7 +701,7 @@ describe('toJSON serialization', () => {
|
|
|
547
701
|
it('includes message and excludes agent', () => {
|
|
548
702
|
const agent = new Agent();
|
|
549
703
|
const message = new Message({ role: 'assistant', content: [new TextBlock('Hello')] });
|
|
550
|
-
const event = new MessageAddedEvent({ agent, message });
|
|
704
|
+
const event = new MessageAddedEvent({ agent, message, invocationState: {} });
|
|
551
705
|
const json = JSON.parse(JSON.stringify(event));
|
|
552
706
|
expect(json).toStrictEqual({
|
|
553
707
|
type: 'messageAddedEvent',
|
|
@@ -562,7 +716,7 @@ describe('toJSON serialization', () => {
|
|
|
562
716
|
type: 'modelContentBlockDeltaEvent',
|
|
563
717
|
delta: { type: 'textDelta', text: 'Hi' },
|
|
564
718
|
};
|
|
565
|
-
const event = new ModelStreamUpdateEvent({ agent, event: streamEvent });
|
|
719
|
+
const event = new ModelStreamUpdateEvent({ agent, event: streamEvent, invocationState: {} });
|
|
566
720
|
const json = JSON.parse(JSON.stringify(event));
|
|
567
721
|
expect(json).toStrictEqual({
|
|
568
722
|
type: 'modelStreamUpdateEvent',
|
|
@@ -574,7 +728,7 @@ describe('toJSON serialization', () => {
|
|
|
574
728
|
it('includes content block and excludes agent', () => {
|
|
575
729
|
const agent = new Agent();
|
|
576
730
|
const contentBlock = new TextBlock('Hello world');
|
|
577
|
-
const event = new ContentBlockEvent({ agent, contentBlock });
|
|
731
|
+
const event = new ContentBlockEvent({ agent, contentBlock, invocationState: {} });
|
|
578
732
|
const json = JSON.parse(JSON.stringify(event));
|
|
579
733
|
expect(json).toStrictEqual({
|
|
580
734
|
type: 'contentBlockEvent',
|
|
@@ -586,7 +740,7 @@ describe('toJSON serialization', () => {
|
|
|
586
740
|
it('includes message and stopReason, excludes agent', () => {
|
|
587
741
|
const agent = new Agent();
|
|
588
742
|
const message = new Message({ role: 'assistant', content: [new TextBlock('Done')] });
|
|
589
|
-
const event = new ModelMessageEvent({ agent, message, stopReason: 'endTurn' });
|
|
743
|
+
const event = new ModelMessageEvent({ agent, message, stopReason: 'endTurn', invocationState: {} });
|
|
590
744
|
const json = JSON.parse(JSON.stringify(event));
|
|
591
745
|
expect(json).toStrictEqual({
|
|
592
746
|
type: 'modelMessageEvent',
|
|
@@ -603,7 +757,7 @@ describe('toJSON serialization', () => {
|
|
|
603
757
|
status: 'success',
|
|
604
758
|
content: [new TextBlock('42')],
|
|
605
759
|
});
|
|
606
|
-
const event = new ToolResultEvent({ agent, result });
|
|
760
|
+
const event = new ToolResultEvent({ agent, result, invocationState: {} });
|
|
607
761
|
const json = JSON.parse(JSON.stringify(event));
|
|
608
762
|
expect(json).toStrictEqual({
|
|
609
763
|
type: 'toolResultEvent',
|
|
@@ -615,7 +769,7 @@ describe('toJSON serialization', () => {
|
|
|
615
769
|
it('includes tool stream event and excludes agent', () => {
|
|
616
770
|
const agent = new Agent();
|
|
617
771
|
const toolStreamEvent = new ToolStreamEvent({ data: { progress: 50 } });
|
|
618
|
-
const event = new ToolStreamUpdateEvent({ agent, event: toolStreamEvent });
|
|
772
|
+
const event = new ToolStreamUpdateEvent({ agent, event: toolStreamEvent, invocationState: {} });
|
|
619
773
|
const json = JSON.parse(JSON.stringify(event));
|
|
620
774
|
expect(json).toStrictEqual({
|
|
621
775
|
type: 'toolStreamUpdateEvent',
|
|
@@ -630,8 +784,9 @@ describe('toJSON serialization', () => {
|
|
|
630
784
|
stopReason: 'endTurn',
|
|
631
785
|
lastMessage: new Message({ role: 'assistant', content: [new TextBlock('Done')] }),
|
|
632
786
|
metrics: new AgentMetrics(),
|
|
787
|
+
invocationState: {},
|
|
633
788
|
});
|
|
634
|
-
const event = new AgentResultEvent({ agent, result });
|
|
789
|
+
const event = new AgentResultEvent({ agent, result, invocationState: {} });
|
|
635
790
|
const json = JSON.parse(JSON.stringify(event));
|
|
636
791
|
expect(json).toStrictEqual({
|
|
637
792
|
type: 'agentResultEvent',
|
|
@@ -653,7 +808,7 @@ describe('toJSON serialization', () => {
|
|
|
653
808
|
callback: () => 'result',
|
|
654
809
|
});
|
|
655
810
|
const toolUse = { name: 'testTool', toolUseId: 'id-1', input: { query: 'hello' } };
|
|
656
|
-
const event = new BeforeToolCallEvent({ agent, toolUse, tool });
|
|
811
|
+
const event = new BeforeToolCallEvent({ agent, toolUse, tool, invocationState: {} });
|
|
657
812
|
const json = JSON.parse(JSON.stringify(event));
|
|
658
813
|
expect(json).toStrictEqual({
|
|
659
814
|
type: 'beforeToolCallEvent',
|
|
@@ -670,7 +825,7 @@ describe('toJSON serialization', () => {
|
|
|
670
825
|
status: 'success',
|
|
671
826
|
content: [new TextBlock('42')],
|
|
672
827
|
});
|
|
673
|
-
const event = new AfterToolCallEvent({ agent, toolUse, tool: undefined, result });
|
|
828
|
+
const event = new AfterToolCallEvent({ agent, toolUse, tool: undefined, result, invocationState: {} });
|
|
674
829
|
const json = JSON.parse(JSON.stringify(event));
|
|
675
830
|
expect(json).toStrictEqual({
|
|
676
831
|
type: 'afterToolCallEvent',
|
|
@@ -687,7 +842,7 @@ describe('toJSON serialization', () => {
|
|
|
687
842
|
content: [new TextBlock('Error')],
|
|
688
843
|
});
|
|
689
844
|
const error = new Error('Tool crashed');
|
|
690
|
-
const event = new AfterToolCallEvent({ agent, toolUse, tool: undefined, result, error });
|
|
845
|
+
const event = new AfterToolCallEvent({ agent, toolUse, tool: undefined, result, error, invocationState: {} });
|
|
691
846
|
event.retry = true;
|
|
692
847
|
const json = JSON.parse(JSON.stringify(event));
|
|
693
848
|
expect(json).toStrictEqual({
|
|
@@ -699,14 +854,21 @@ describe('toJSON serialization', () => {
|
|
|
699
854
|
});
|
|
700
855
|
});
|
|
701
856
|
describe('AfterModelCallEvent', () => {
|
|
702
|
-
it('includes stopData and excludes agent and model on success', () => {
|
|
857
|
+
it('includes stopData and attemptCount and excludes agent and model on success', () => {
|
|
703
858
|
const agent = new Agent();
|
|
704
859
|
const message = new Message({ role: 'assistant', content: [new TextBlock('Hi')] });
|
|
705
860
|
const stopData = { message, stopReason: 'endTurn' };
|
|
706
|
-
const event = new AfterModelCallEvent({
|
|
861
|
+
const event = new AfterModelCallEvent({
|
|
862
|
+
agent,
|
|
863
|
+
model: agent.model,
|
|
864
|
+
attemptCount: 2,
|
|
865
|
+
stopData,
|
|
866
|
+
invocationState: {},
|
|
867
|
+
});
|
|
707
868
|
const json = JSON.parse(JSON.stringify(event));
|
|
708
869
|
expect(json).toStrictEqual({
|
|
709
870
|
type: 'afterModelCallEvent',
|
|
871
|
+
attemptCount: 2,
|
|
710
872
|
stopData: {
|
|
711
873
|
message: { role: 'assistant', content: [{ text: 'Hi' }] },
|
|
712
874
|
stopReason: 'endTurn',
|
|
@@ -716,11 +878,12 @@ describe('toJSON serialization', () => {
|
|
|
716
878
|
it('converts error to message string and excludes retry', () => {
|
|
717
879
|
const agent = new Agent();
|
|
718
880
|
const error = new Error('Model failed');
|
|
719
|
-
const event = new AfterModelCallEvent({ agent, model: agent.model, error });
|
|
881
|
+
const event = new AfterModelCallEvent({ agent, model: agent.model, attemptCount: 1, error, invocationState: {} });
|
|
720
882
|
event.retry = true;
|
|
721
883
|
const json = JSON.parse(JSON.stringify(event));
|
|
722
884
|
expect(json).toStrictEqual({
|
|
723
885
|
type: 'afterModelCallEvent',
|
|
886
|
+
attemptCount: 1,
|
|
724
887
|
error: { message: 'Model failed' },
|
|
725
888
|
});
|
|
726
889
|
});
|
|
@@ -732,7 +895,7 @@ describe('toJSON serialization', () => {
|
|
|
732
895
|
role: 'assistant',
|
|
733
896
|
content: [new ToolUseBlock({ name: 'calc', toolUseId: 'id-1', input: {} })],
|
|
734
897
|
});
|
|
735
|
-
const event = new BeforeToolsEvent({ agent, message });
|
|
898
|
+
const event = new BeforeToolsEvent({ agent, message, invocationState: {} });
|
|
736
899
|
event.cancel = 'not allowed';
|
|
737
900
|
const json = JSON.parse(JSON.stringify(event));
|
|
738
901
|
expect(json).toStrictEqual({
|
|
@@ -754,7 +917,7 @@ describe('toJSON serialization', () => {
|
|
|
754
917
|
}),
|
|
755
918
|
],
|
|
756
919
|
});
|
|
757
|
-
const event = new AfterToolsEvent({ agent, message });
|
|
920
|
+
const event = new AfterToolsEvent({ agent, message, invocationState: {} });
|
|
758
921
|
const json = JSON.parse(JSON.stringify(event));
|
|
759
922
|
expect(json).toStrictEqual({
|
|
760
923
|
type: 'afterToolsEvent',
|
|
@@ -773,6 +936,7 @@ describe('toJSON serialization', () => {
|
|
|
773
936
|
const event = new ModelStreamUpdateEvent({
|
|
774
937
|
agent,
|
|
775
938
|
event: { type: 'modelContentBlockDeltaEvent', delta: { type: 'textDelta', text: 'Hi' } },
|
|
939
|
+
invocationState: {},
|
|
776
940
|
});
|
|
777
941
|
const json = JSON.stringify(event);
|
|
778
942
|
// Should be small (no agent serialized)
|
|
@@ -792,7 +956,17 @@ describe('toJSON serialization completeness', () => {
|
|
|
792
956
|
* If you add a new field to an event and it should be excluded from wire serialization,
|
|
793
957
|
* add it here. Otherwise, add it to toJSON() so it gets serialized.
|
|
794
958
|
*/
|
|
795
|
-
const EXCLUDED_FIELDS = new Set([
|
|
959
|
+
const EXCLUDED_FIELDS = new Set([
|
|
960
|
+
'agent',
|
|
961
|
+
'model',
|
|
962
|
+
'tool',
|
|
963
|
+
'cancel',
|
|
964
|
+
'retry',
|
|
965
|
+
'invocationState',
|
|
966
|
+
'selectedTool',
|
|
967
|
+
'resume',
|
|
968
|
+
'endTurn',
|
|
969
|
+
]);
|
|
796
970
|
/**
|
|
797
971
|
* Fields where toJSON() transforms the value (e.g., Error to message object).
|
|
798
972
|
* These appear in both instance and JSON but with different shapes.
|
|
@@ -817,30 +991,50 @@ describe('toJSON serialization completeness', () => {
|
|
|
817
991
|
stopReason: 'endTurn',
|
|
818
992
|
lastMessage: message,
|
|
819
993
|
metrics: new AgentMetrics(),
|
|
994
|
+
invocationState: {},
|
|
820
995
|
});
|
|
821
996
|
return [
|
|
822
997
|
{ name: 'InitializedEvent', event: new InitializedEvent({ agent }) },
|
|
823
|
-
{ name: 'BeforeInvocationEvent', event: new BeforeInvocationEvent({ agent }) },
|
|
824
|
-
{ name: 'AfterInvocationEvent', event: new AfterInvocationEvent({ agent }) },
|
|
825
|
-
{
|
|
998
|
+
{ name: 'BeforeInvocationEvent', event: new BeforeInvocationEvent({ agent, invocationState: {} }) },
|
|
999
|
+
{ name: 'AfterInvocationEvent', event: new AfterInvocationEvent({ agent, invocationState: {} }) },
|
|
1000
|
+
{
|
|
1001
|
+
name: 'BeforeModelCallEvent',
|
|
1002
|
+
event: new BeforeModelCallEvent({
|
|
1003
|
+
agent,
|
|
1004
|
+
model: agent.model,
|
|
1005
|
+
invocationState: {},
|
|
1006
|
+
projectedInputTokens: 100,
|
|
1007
|
+
}),
|
|
1008
|
+
},
|
|
826
1009
|
{
|
|
827
1010
|
name: 'AfterModelCallEvent',
|
|
828
|
-
event: Object.assign(new AfterModelCallEvent({ agent, model: agent.model, stopData, error }), { retry: true }),
|
|
1011
|
+
event: Object.assign(new AfterModelCallEvent({ agent, model: agent.model, attemptCount: 1, stopData, error, invocationState: {} }), { retry: true }),
|
|
829
1012
|
},
|
|
830
|
-
{ name: 'MessageAddedEvent', event: new MessageAddedEvent({ agent, message }) },
|
|
831
|
-
{
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
{ name: '
|
|
836
|
-
{
|
|
837
|
-
|
|
1013
|
+
{ name: 'MessageAddedEvent', event: new MessageAddedEvent({ agent, message, invocationState: {} }) },
|
|
1014
|
+
{
|
|
1015
|
+
name: 'ModelStreamUpdateEvent',
|
|
1016
|
+
event: new ModelStreamUpdateEvent({ agent, event: streamEvent, invocationState: {} }),
|
|
1017
|
+
},
|
|
1018
|
+
{ name: 'ContentBlockEvent', event: new ContentBlockEvent({ agent, contentBlock, invocationState: {} }) },
|
|
1019
|
+
{
|
|
1020
|
+
name: 'ModelMessageEvent',
|
|
1021
|
+
event: new ModelMessageEvent({ agent, message, stopReason: 'endTurn', invocationState: {} }),
|
|
1022
|
+
},
|
|
1023
|
+
{ name: 'ToolResultEvent', event: new ToolResultEvent({ agent, result, invocationState: {} }) },
|
|
1024
|
+
{
|
|
1025
|
+
name: 'ToolStreamUpdateEvent',
|
|
1026
|
+
event: new ToolStreamUpdateEvent({ agent, event: toolStreamEvent, invocationState: {} }),
|
|
1027
|
+
},
|
|
1028
|
+
{ name: 'AgentResultEvent', event: new AgentResultEvent({ agent, result: agentResult, invocationState: {} }) },
|
|
1029
|
+
{ name: 'BeforeToolCallEvent', event: new BeforeToolCallEvent({ agent, toolUse, tool, invocationState: {} }) },
|
|
838
1030
|
{
|
|
839
1031
|
name: 'AfterToolCallEvent',
|
|
840
|
-
event: Object.assign(new AfterToolCallEvent({ agent, toolUse, tool, result, error
|
|
1032
|
+
event: Object.assign(new AfterToolCallEvent({ agent, toolUse, tool, result, error, invocationState: {} }), {
|
|
1033
|
+
retry: true,
|
|
1034
|
+
}),
|
|
841
1035
|
},
|
|
842
|
-
{ name: 'BeforeToolsEvent', event: new BeforeToolsEvent({ agent, message }) },
|
|
843
|
-
{ name: 'AfterToolsEvent', event: new AfterToolsEvent({ agent, message }) },
|
|
1036
|
+
{ name: 'BeforeToolsEvent', event: new BeforeToolsEvent({ agent, message, invocationState: {} }) },
|
|
1037
|
+
{ name: 'AfterToolsEvent', event: new AfterToolsEvent({ agent, message, invocationState: {} }) },
|
|
844
1038
|
];
|
|
845
1039
|
}
|
|
846
1040
|
const eventInstances = createEventInstances();
|