@strands-agents/sdk 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +43 -0
- package/dist/src/__fixtures__/agent-helpers.d.ts +10 -1
- package/dist/src/__fixtures__/agent-helpers.d.ts.map +1 -1
- package/dist/src/__fixtures__/agent-helpers.js +13 -2
- package/dist/src/__fixtures__/agent-helpers.js.map +1 -1
- package/dist/src/__fixtures__/mock-hook-provider.d.ts +3 -7
- package/dist/src/__fixtures__/mock-hook-provider.d.ts.map +1 -1
- package/dist/src/__fixtures__/mock-hook-provider.js +3 -9
- package/dist/src/__fixtures__/mock-hook-provider.js.map +1 -1
- package/dist/src/__fixtures__/mock-message-model.d.ts +8 -2
- package/dist/src/__fixtures__/mock-message-model.d.ts.map +1 -1
- package/dist/src/__fixtures__/mock-message-model.js +1 -0
- package/dist/src/__fixtures__/mock-message-model.js.map +1 -1
- package/dist/src/__fixtures__/mock-span.d.ts +78 -0
- package/dist/src/__fixtures__/mock-span.d.ts.map +1 -0
- package/dist/src/__fixtures__/mock-span.js +93 -0
- package/dist/src/__fixtures__/mock-span.js.map +1 -0
- package/dist/src/__fixtures__/mock-storage-provider.d.ts +37 -0
- package/dist/src/__fixtures__/mock-storage-provider.d.ts.map +1 -0
- package/dist/src/__fixtures__/mock-storage-provider.js +105 -0
- package/dist/src/__fixtures__/mock-storage-provider.js.map +1 -0
- package/dist/src/__fixtures__/slim-types.d.ts +50 -0
- package/dist/src/__fixtures__/slim-types.d.ts.map +1 -0
- package/dist/src/__fixtures__/slim-types.js +6 -0
- package/dist/src/__fixtures__/slim-types.js.map +1 -0
- package/dist/src/__fixtures__/tool-helpers.d.ts +10 -5
- package/dist/src/__fixtures__/tool-helpers.d.ts.map +1 -1
- package/dist/src/__fixtures__/tool-helpers.js +5 -5
- package/dist/src/__fixtures__/tool-helpers.js.map +1 -1
- package/dist/src/__tests__/app-state.test.d.ts +2 -0
- package/dist/src/__tests__/app-state.test.d.ts.map +1 -0
- package/dist/src/{agent/__tests__/state.test.js → __tests__/app-state.test.js} +62 -43
- package/dist/src/__tests__/app-state.test.js.map +1 -0
- package/dist/src/__tests__/mcp.test.js +96 -15
- package/dist/src/__tests__/mcp.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.hook.test.js +18 -18
- package/dist/src/agent/__tests__/agent.hook.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.test.js +234 -8
- package/dist/src/agent/__tests__/agent.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.tracer.test.d.ts +2 -0
- package/dist/src/agent/__tests__/agent.tracer.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/agent.tracer.test.js +470 -0
- package/dist/src/agent/__tests__/agent.tracer.test.js.map +1 -0
- package/dist/src/agent/__tests__/printer.test.js +5 -9
- package/dist/src/agent/__tests__/printer.test.js.map +1 -1
- package/dist/src/agent/__tests__/snapshot.test.d.ts +2 -0
- package/dist/src/agent/__tests__/snapshot.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/snapshot.test.js +249 -0
- package/dist/src/agent/__tests__/snapshot.test.js.map +1 -0
- package/dist/src/agent/agent.d.ts +78 -10
- package/dist/src/agent/agent.d.ts.map +1 -1
- package/dist/src/agent/agent.js +252 -55
- package/dist/src/agent/agent.js.map +1 -1
- package/dist/src/agent/printer.d.ts +4 -0
- package/dist/src/agent/printer.d.ts.map +1 -1
- package/dist/src/agent/printer.js +18 -6
- package/dist/src/agent/printer.js.map +1 -1
- package/dist/src/agent/snapshot.d.ts +132 -0
- package/dist/src/agent/snapshot.d.ts.map +1 -0
- package/dist/src/agent/snapshot.js +151 -0
- package/dist/src/agent/snapshot.js.map +1 -0
- package/dist/src/{agent/state.d.ts → app-state.d.ts} +19 -6
- package/dist/src/app-state.d.ts.map +1 -0
- package/dist/src/{agent/state.js → app-state.js} +27 -6
- package/dist/src/app-state.js.map +1 -0
- package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts +1 -1
- package/dist/src/conversation-manager/sliding-window-conversation-manager.js +1 -1
- package/dist/src/errors.d.ts +15 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +18 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/hooks/__tests__/events.test.js +102 -21
- package/dist/src/hooks/__tests__/events.test.js.map +1 -1
- package/dist/src/hooks/events.d.ts +156 -22
- package/dist/src/hooks/events.d.ts.map +1 -1
- package/dist/src/hooks/events.js +158 -18
- package/dist/src/hooks/events.js.map +1 -1
- package/dist/src/hooks/index.d.ts +12 -4
- package/dist/src/hooks/index.d.ts.map +1 -1
- package/dist/src/hooks/index.js +11 -3
- package/dist/src/hooks/index.js.map +1 -1
- package/dist/src/hooks/registry.d.ts +5 -5
- package/dist/src/hooks/registry.d.ts.map +1 -1
- package/dist/src/hooks/registry.js.map +1 -1
- package/dist/src/hooks/types.d.ts +5 -5
- package/dist/src/hooks/types.d.ts.map +1 -1
- package/dist/src/index.d.ts +6 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +8 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp.d.ts +3 -0
- package/dist/src/mcp.d.ts.map +1 -1
- package/dist/src/mcp.js +38 -1
- package/dist/src/mcp.js.map +1 -1
- package/dist/src/models/__tests__/anthropic.test.js +31 -42
- package/dist/src/models/__tests__/anthropic.test.js.map +1 -1
- package/dist/src/models/__tests__/bedrock.test.js +70 -107
- package/dist/src/models/__tests__/bedrock.test.js.map +1 -1
- package/dist/src/models/__tests__/gemini.test.js +18 -18
- package/dist/src/models/__tests__/gemini.test.js.map +1 -1
- package/dist/src/models/__tests__/model.test.js +21 -13
- package/dist/src/models/__tests__/model.test.js.map +1 -1
- package/dist/src/models/__tests__/openai.test.js +73 -83
- package/dist/src/models/__tests__/openai.test.js.map +1 -1
- package/dist/src/models/model.d.ts +4 -0
- package/dist/src/models/model.d.ts.map +1 -1
- package/dist/src/models/model.js +6 -0
- package/dist/src/models/model.js.map +1 -1
- package/dist/src/models/streaming.d.ts +9 -1
- package/dist/src/models/streaming.d.ts.map +1 -1
- package/dist/src/models/streaming.js +17 -0
- package/dist/src/models/streaming.js.map +1 -1
- package/dist/src/multiagent/__tests__/events.test.d.ts +2 -0
- package/dist/src/multiagent/__tests__/events.test.d.ts.map +1 -0
- package/dist/src/multiagent/__tests__/events.test.js +189 -0
- package/dist/src/multiagent/__tests__/events.test.js.map +1 -0
- package/dist/src/multiagent/__tests__/nodes.test.d.ts +2 -0
- package/dist/src/multiagent/__tests__/nodes.test.d.ts.map +1 -0
- package/dist/src/multiagent/__tests__/nodes.test.js +194 -0
- package/dist/src/multiagent/__tests__/nodes.test.js.map +1 -0
- package/dist/src/multiagent/__tests__/queue.test.d.ts +2 -0
- package/dist/src/multiagent/__tests__/queue.test.d.ts.map +1 -0
- package/dist/src/multiagent/__tests__/queue.test.js +96 -0
- package/dist/src/multiagent/__tests__/queue.test.js.map +1 -0
- package/dist/src/multiagent/base.d.ts +25 -0
- package/dist/src/multiagent/base.d.ts.map +1 -0
- package/dist/src/multiagent/base.js +2 -0
- package/dist/src/multiagent/base.js.map +1 -0
- package/dist/src/multiagent/edge.d.ts +29 -0
- package/dist/src/multiagent/edge.d.ts.map +1 -0
- package/dist/src/multiagent/edge.js +15 -0
- package/dist/src/multiagent/edge.js.map +1 -0
- package/dist/src/multiagent/events.d.ts +135 -0
- package/dist/src/multiagent/events.d.ts.map +1 -0
- package/dist/src/multiagent/events.js +140 -0
- package/dist/src/multiagent/events.js.map +1 -0
- package/dist/src/multiagent/index.d.ts +13 -0
- package/dist/src/multiagent/index.d.ts.map +1 -0
- package/dist/src/multiagent/index.js +8 -0
- package/dist/src/multiagent/index.js.map +1 -0
- package/dist/src/multiagent/nodes.d.ts +123 -0
- package/dist/src/multiagent/nodes.d.ts.map +1 -0
- package/dist/src/multiagent/nodes.js +148 -0
- package/dist/src/multiagent/nodes.js.map +1 -0
- package/dist/src/multiagent/queue.d.ts +67 -0
- package/dist/src/multiagent/queue.d.ts.map +1 -0
- package/dist/src/multiagent/queue.js +59 -0
- package/dist/src/multiagent/queue.js.map +1 -0
- package/dist/src/multiagent/state.d.ts +122 -0
- package/dist/src/multiagent/state.d.ts.map +1 -0
- package/dist/src/multiagent/state.js +132 -0
- package/dist/src/multiagent/state.js.map +1 -0
- package/dist/src/registry/tool-registry.d.ts +2 -1
- package/dist/src/registry/tool-registry.d.ts.map +1 -1
- package/dist/src/registry/tool-registry.js +4 -2
- package/dist/src/registry/tool-registry.js.map +1 -1
- package/dist/src/session/__tests__/file-storage.test.node.d.ts +2 -0
- package/dist/src/session/__tests__/file-storage.test.node.d.ts.map +1 -0
- package/dist/src/session/__tests__/file-storage.test.node.js +218 -0
- package/dist/src/session/__tests__/file-storage.test.node.js.map +1 -0
- package/dist/src/session/__tests__/s3-storage.test.node.d.ts +2 -0
- package/dist/src/session/__tests__/s3-storage.test.node.d.ts.map +1 -0
- package/dist/src/session/__tests__/s3-storage.test.node.js +375 -0
- package/dist/src/session/__tests__/s3-storage.test.node.js.map +1 -0
- package/dist/src/session/__tests__/validation.test.d.ts +2 -0
- package/dist/src/session/__tests__/validation.test.d.ts.map +1 -0
- package/dist/src/session/__tests__/validation.test.js +20 -0
- package/dist/src/session/__tests__/validation.test.js.map +1 -0
- package/dist/src/session/file-storage.d.ts +79 -0
- package/dist/src/session/file-storage.d.ts.map +1 -0
- package/dist/src/session/file-storage.js +144 -0
- package/dist/src/session/file-storage.js.map +1 -0
- package/dist/src/session/index.d.ts +19 -0
- package/dist/src/session/index.d.ts.map +1 -0
- package/dist/src/session/index.js +18 -0
- package/dist/src/session/index.js.map +1 -0
- package/dist/src/session/s3-storage.d.ts +93 -0
- package/dist/src/session/s3-storage.d.ts.map +1 -0
- package/dist/src/session/s3-storage.js +150 -0
- package/dist/src/session/s3-storage.js.map +1 -0
- package/dist/src/session/storage.d.ts +91 -0
- package/dist/src/session/storage.d.ts.map +1 -0
- package/dist/src/session/storage.js +2 -0
- package/dist/src/session/storage.js.map +1 -0
- package/dist/src/session/types.d.ts +49 -0
- package/dist/src/session/types.d.ts.map +1 -0
- package/dist/src/session/types.js +2 -0
- package/dist/src/session/types.js.map +1 -0
- package/dist/src/session/validation.d.ts +10 -0
- package/dist/src/session/validation.d.ts.map +1 -0
- package/dist/src/session/validation.js +16 -0
- package/dist/src/session/validation.js.map +1 -0
- package/dist/src/structured-output/__tests__/context.test.d.ts +2 -0
- package/dist/src/structured-output/__tests__/context.test.d.ts.map +1 -0
- package/dist/src/structured-output/__tests__/context.test.js +201 -0
- package/dist/src/structured-output/__tests__/context.test.js.map +1 -0
- package/dist/src/structured-output/__tests__/exceptions.test.d.ts +2 -0
- package/dist/src/structured-output/__tests__/exceptions.test.d.ts.map +1 -0
- package/dist/src/structured-output/__tests__/exceptions.test.js +103 -0
- package/dist/src/structured-output/__tests__/exceptions.test.js.map +1 -0
- package/dist/src/structured-output/__tests__/tool.test.d.ts +2 -0
- package/dist/src/structured-output/__tests__/tool.test.d.ts.map +1 -0
- package/dist/src/structured-output/__tests__/tool.test.js +256 -0
- package/dist/src/structured-output/__tests__/tool.test.js.map +1 -0
- package/dist/src/structured-output/__tests__/utils.test.d.ts +2 -0
- package/dist/src/structured-output/__tests__/utils.test.d.ts.map +1 -0
- package/dist/src/structured-output/__tests__/utils.test.js +183 -0
- package/dist/src/structured-output/__tests__/utils.test.js.map +1 -0
- package/dist/src/structured-output/context.d.ts +91 -0
- package/dist/src/structured-output/context.d.ts.map +1 -0
- package/dist/src/structured-output/context.js +112 -0
- package/dist/src/structured-output/context.js.map +1 -0
- package/dist/src/structured-output/exceptions.d.ts +18 -0
- package/dist/src/structured-output/exceptions.d.ts.map +1 -0
- package/dist/src/structured-output/exceptions.js +28 -0
- package/dist/src/structured-output/exceptions.js.map +1 -0
- package/dist/src/structured-output/tool.d.ts +33 -0
- package/dist/src/structured-output/tool.d.ts.map +1 -0
- package/dist/src/structured-output/tool.js +73 -0
- package/dist/src/structured-output/tool.js.map +1 -0
- package/dist/src/structured-output/utils.d.ts +23 -0
- package/dist/src/structured-output/utils.d.ts.map +1 -0
- package/dist/src/structured-output/utils.js +104 -0
- package/dist/src/structured-output/utils.js.map +1 -0
- package/dist/src/telemetry/__tests__/config.test.node.d.ts +2 -0
- package/dist/src/telemetry/__tests__/config.test.node.d.ts.map +1 -0
- package/dist/src/telemetry/__tests__/config.test.node.js +129 -0
- package/dist/src/telemetry/__tests__/config.test.node.js.map +1 -0
- package/dist/src/telemetry/__tests__/json.test.d.ts +2 -0
- package/dist/src/telemetry/__tests__/json.test.d.ts.map +1 -0
- package/dist/src/telemetry/__tests__/json.test.js +89 -0
- package/dist/src/telemetry/__tests__/json.test.js.map +1 -0
- package/dist/src/telemetry/__tests__/tracer.test.node.d.ts +2 -0
- package/dist/src/telemetry/__tests__/tracer.test.node.d.ts.map +1 -0
- package/dist/src/telemetry/__tests__/tracer.test.node.js +611 -0
- package/dist/src/telemetry/__tests__/tracer.test.node.js.map +1 -0
- package/dist/src/telemetry/config.d.ts +61 -0
- package/dist/src/telemetry/config.d.ts.map +1 -0
- package/dist/src/telemetry/config.js +101 -0
- package/dist/src/telemetry/config.js.map +1 -0
- package/dist/src/telemetry/index.d.ts +34 -0
- package/dist/src/telemetry/index.d.ts.map +1 -0
- package/dist/src/telemetry/index.js +33 -0
- package/dist/src/telemetry/index.js.map +1 -0
- package/dist/src/telemetry/json.d.ts +11 -0
- package/dist/src/telemetry/json.d.ts.map +1 -0
- package/dist/src/telemetry/json.js +25 -0
- package/dist/src/telemetry/json.js.map +1 -0
- package/dist/src/telemetry/tracer.d.ts +219 -0
- package/dist/src/telemetry/tracer.d.ts.map +1 -0
- package/dist/src/telemetry/tracer.js +610 -0
- package/dist/src/telemetry/tracer.js.map +1 -0
- package/dist/src/telemetry/types.d.ts +101 -0
- package/dist/src/telemetry/types.d.ts.map +1 -0
- package/dist/src/telemetry/types.js +5 -0
- package/dist/src/telemetry/types.js.map +1 -0
- package/dist/src/tools/tool.d.ts +1 -1
- package/dist/src/tools/tool.js +1 -1
- package/dist/src/tools/zod-tool.d.ts.map +1 -1
- package/dist/src/tools/zod-tool.js +2 -5
- package/dist/src/tools/zod-tool.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/src/types/__tests__/media.test.js +216 -1
- package/dist/src/types/__tests__/media.test.js.map +1 -1
- package/dist/src/types/__tests__/messages.test.js +193 -4
- package/dist/src/types/__tests__/messages.test.js.map +1 -1
- package/dist/src/types/agent.d.ts +16 -10
- package/dist/src/types/agent.d.ts.map +1 -1
- package/dist/src/types/agent.js +8 -1
- package/dist/src/types/agent.js.map +1 -1
- package/dist/src/types/json.d.ts +61 -0
- package/dist/src/types/json.d.ts.map +1 -1
- package/dist/src/types/json.js +24 -0
- package/dist/src/types/json.js.map +1 -1
- package/dist/src/types/media.d.ts +84 -4
- package/dist/src/types/media.d.ts.map +1 -1
- package/dist/src/types/media.js +194 -0
- package/dist/src/types/media.js.map +1 -1
- package/dist/src/types/messages.d.ts +152 -13
- package/dist/src/types/messages.d.ts.map +1 -1
- package/dist/src/types/messages.js +235 -8
- package/dist/src/types/messages.js.map +1 -1
- package/dist/src/types/serializable.d.ts +31 -0
- package/dist/src/types/serializable.d.ts.map +1 -0
- package/dist/src/types/serializable.js +19 -0
- package/dist/src/types/serializable.js.map +1 -0
- package/dist/src/utils/zod.d.ts +11 -0
- package/dist/src/utils/zod.d.ts.map +1 -0
- package/dist/src/utils/zod.js +14 -0
- package/dist/src/utils/zod.js.map +1 -0
- package/dist/src/vended-tools/bash/__tests__/bash.test.node.js +2 -2
- package/dist/src/vended-tools/bash/__tests__/bash.test.node.js.map +1 -1
- package/dist/src/vended-tools/file_editor/__tests__/file-editor.test.node.js +4 -4
- 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 +2 -2
- package/dist/src/vended-tools/notebook/__tests__/notebook.test.js.map +1 -1
- package/package.json +17 -3
- package/dist/src/agent/__tests__/state.test.d.ts +0 -2
- package/dist/src/agent/__tests__/state.test.d.ts.map +0 -1
- package/dist/src/agent/__tests__/state.test.js.map +0 -1
- package/dist/src/agent/state.d.ts.map +0 -1
- package/dist/src/agent/state.js.map +0 -1
package/README.md
CHANGED
|
@@ -41,6 +41,7 @@ Strands Agents is a simple yet powerful SDK that takes a model-driven approach t
|
|
|
41
41
|
|
|
42
42
|
- **🪶 Lightweight & Flexible**: Simple agent loop that works seamlessly in Node.js and browser environments
|
|
43
43
|
- **🔒 Type-Safe Tools**: Define tools easily using Zod schemas for robust input validation and type inference
|
|
44
|
+
- **📋 Structured Output**: Get type-safe, validated responses from LLMs using Zod schemas with automatic retry on validation errors
|
|
44
45
|
- **🔌 Model Agnostic**: First-class support for Amazon Bedrock and OpenAI, with extensible architecture for custom providers
|
|
45
46
|
- **🔗 Built-in MCP**: Native support for Model Context Protocol (MCP) clients, enabling access to external tools and servers
|
|
46
47
|
- **⚡ Streaming Support**: Real-time response streaming for better user experience
|
|
@@ -166,6 +167,48 @@ await agent.invoke('What is the weather in San Francisco?')
|
|
|
166
167
|
- **HTTP Request Tool**: Make HTTP requests to external APIs
|
|
167
168
|
|
|
168
169
|
|
|
170
|
+
### Structured Output
|
|
171
|
+
|
|
172
|
+
Get type-safe, validated responses from LLMs by defining the expected output structure with Zod schemas. The agent automatically validates the LLM's response and retries on validation errors:
|
|
173
|
+
|
|
174
|
+
```typescript
|
|
175
|
+
import { Agent } from '@strands-agents/sdk'
|
|
176
|
+
import { z } from 'zod'
|
|
177
|
+
|
|
178
|
+
const PersonSchema = z.object({
|
|
179
|
+
name: z.string().describe('Name of the person'),
|
|
180
|
+
age: z.number().describe('Age of the person'),
|
|
181
|
+
occupation: z.string().describe('Occupation of the person')
|
|
182
|
+
})
|
|
183
|
+
|
|
184
|
+
// Configure structured output at the agent level
|
|
185
|
+
const agent = new Agent({
|
|
186
|
+
structuredOutputSchema: PersonSchema
|
|
187
|
+
})
|
|
188
|
+
|
|
189
|
+
const result = await agent.invoke('John Smith is a 30 year-old software engineer')
|
|
190
|
+
|
|
191
|
+
// result.structuredOutput is fully typed based on the schema
|
|
192
|
+
console.log(result.structuredOutput.name) // "John Smith"
|
|
193
|
+
console.log(result.structuredOutput.age) // 30
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
**Error handling**: The agent automatically retries with validation feedback when the LLM provides invalid output. If validation ultimately fails, a `StructuredOutputException` is thrown:
|
|
197
|
+
|
|
198
|
+
```typescript
|
|
199
|
+
import { StructuredOutputException } from '@strands-agents/sdk'
|
|
200
|
+
|
|
201
|
+
try {
|
|
202
|
+
const result = await agent.invoke('Extract person info...')
|
|
203
|
+
console.log(result.structuredOutput)
|
|
204
|
+
} catch (error) {
|
|
205
|
+
if (error instanceof StructuredOutputException) {
|
|
206
|
+
console.error('Validation failed:', error.message)
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
|
|
169
212
|
### MCP Integration
|
|
170
213
|
|
|
171
214
|
Seamlessly integrate Model Context Protocol (MCP) servers:
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* This module provides utilities for testing Agent-related implementations.
|
|
4
4
|
*/
|
|
5
5
|
import type { Agent } from '../agent/agent.js';
|
|
6
|
-
import
|
|
6
|
+
import { Message } from '../types/messages.js';
|
|
7
|
+
import type { Role } from '../types/messages.js';
|
|
7
8
|
import type { JSONValue } from '../types/json.js';
|
|
8
9
|
/**
|
|
9
10
|
* Data for creating a mock Agent.
|
|
@@ -26,4 +27,12 @@ export interface MockAgentData {
|
|
|
26
27
|
* @returns Mock Agent object
|
|
27
28
|
*/
|
|
28
29
|
export declare function createMockAgent(data?: MockAgentData): Agent;
|
|
30
|
+
/**
|
|
31
|
+
* Creates a Message with the given role containing a single TextBlock.
|
|
32
|
+
*
|
|
33
|
+
* @param role - The message role
|
|
34
|
+
* @param text - The text content
|
|
35
|
+
* @returns A Message with the specified role
|
|
36
|
+
*/
|
|
37
|
+
export declare function textMessage(role: Role, text: string): Message;
|
|
29
38
|
//# sourceMappingURL=agent-helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-helpers.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/agent-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"agent-helpers.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/agent-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAa,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAEhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;IACpB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;CAClC;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,KAAK,CAK3D;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D"}
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* Test fixtures and helpers for Agent testing.
|
|
3
3
|
* This module provides utilities for testing Agent-related implementations.
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
5
|
+
import { Message, TextBlock } from '../types/messages.js';
|
|
6
|
+
import { AppState } from '../app-state.js';
|
|
6
7
|
/**
|
|
7
8
|
* Helper to create a mock Agent for testing.
|
|
8
9
|
* Provides minimal Agent interface with messages and state.
|
|
@@ -13,7 +14,17 @@ import { AgentState } from '../agent/state.js';
|
|
|
13
14
|
export function createMockAgent(data) {
|
|
14
15
|
return {
|
|
15
16
|
messages: data?.messages ?? [],
|
|
16
|
-
state: new
|
|
17
|
+
state: new AppState(data?.state ?? {}),
|
|
17
18
|
};
|
|
18
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Creates a Message with the given role containing a single TextBlock.
|
|
22
|
+
*
|
|
23
|
+
* @param role - The message role
|
|
24
|
+
* @param text - The text content
|
|
25
|
+
* @returns A Message with the specified role
|
|
26
|
+
*/
|
|
27
|
+
export function textMessage(role, text) {
|
|
28
|
+
return new Message({ role, content: [new TextBlock(text)] });
|
|
29
|
+
}
|
|
19
30
|
//# sourceMappingURL=agent-helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-helpers.js","sourceRoot":"","sources":["../../../src/__fixtures__/agent-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"agent-helpers.js","sourceRoot":"","sources":["../../../src/__fixtures__/agent-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAEzD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAiB1C;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,IAAoB;IAClD,OAAO;QACL,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI,EAAE;QAC9B,KAAK,EAAE,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;KACnB,CAAA;AACvB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,IAAU,EAAE,IAAY;IAClD,OAAO,IAAI,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAA;AAC9D,CAAC"}
|
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { HookableEvent, HookProvider, HookRegistry } from '../hooks/index.js';
|
|
2
2
|
/**
|
|
3
|
-
* Mock hook provider that records all
|
|
3
|
+
* Mock hook provider that records all hookable event invocations for testing.
|
|
4
4
|
*/
|
|
5
5
|
export declare class MockHookProvider implements HookProvider {
|
|
6
|
-
invocations:
|
|
7
|
-
private includeModelEvents;
|
|
8
|
-
constructor(options?: {
|
|
9
|
-
includeModelEvents?: boolean;
|
|
10
|
-
});
|
|
6
|
+
invocations: HookableEvent[];
|
|
11
7
|
registerCallbacks(registry: HookRegistry): void;
|
|
12
8
|
reset(): void;
|
|
13
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-hook-provider.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/mock-hook-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"mock-hook-provider.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/mock-hook-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAalF;;GAEG;AACH,qBAAa,gBAAiB,YAAW,YAAY;IACnD,WAAW,EAAE,aAAa,EAAE,CAAK;IAEjC,iBAAiB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAmB/C,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -1,15 +1,11 @@
|
|
|
1
|
-
import { InitializedEvent, BeforeInvocationEvent, AfterInvocationEvent, MessageAddedEvent, BeforeToolCallEvent, AfterToolCallEvent, BeforeModelCallEvent, AfterModelCallEvent,
|
|
1
|
+
import { InitializedEvent, BeforeInvocationEvent, AfterInvocationEvent, MessageAddedEvent, BeforeToolCallEvent, AfterToolCallEvent, BeforeModelCallEvent, AfterModelCallEvent, } from '../hooks/index.js';
|
|
2
2
|
/**
|
|
3
|
-
* Mock hook provider that records all
|
|
3
|
+
* Mock hook provider that records all hookable event invocations for testing.
|
|
4
4
|
*/
|
|
5
5
|
export class MockHookProvider {
|
|
6
6
|
invocations = [];
|
|
7
|
-
includeModelEvents;
|
|
8
|
-
constructor(options = {}) {
|
|
9
|
-
this.includeModelEvents = options.includeModelEvents ?? true;
|
|
10
|
-
}
|
|
11
7
|
registerCallbacks(registry) {
|
|
12
|
-
const
|
|
8
|
+
const eventTypes = [
|
|
13
9
|
InitializedEvent,
|
|
14
10
|
BeforeInvocationEvent,
|
|
15
11
|
AfterInvocationEvent,
|
|
@@ -19,8 +15,6 @@ export class MockHookProvider {
|
|
|
19
15
|
BeforeModelCallEvent,
|
|
20
16
|
AfterModelCallEvent,
|
|
21
17
|
];
|
|
22
|
-
const modelEvents = [ModelStreamEventHook];
|
|
23
|
-
const eventTypes = this.includeModelEvents ? [...lifecycleEvents, ...modelEvents] : lifecycleEvents;
|
|
24
18
|
for (const eventType of eventTypes) {
|
|
25
19
|
registry.addCallback(eventType, (e) => {
|
|
26
20
|
this.invocations.push(e);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-hook-provider.js","sourceRoot":"","sources":["../../../src/__fixtures__/mock-hook-provider.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"mock-hook-provider.js","sourceRoot":"","sources":["../../../src/__fixtures__/mock-hook-provider.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,mBAAmB,CAAA;AAG1B;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAC3B,WAAW,GAAoB,EAAE,CAAA;IAEjC,iBAAiB,CAAC,QAAsB;QACtC,MAAM,UAAU,GAA+B;YAC7C,gBAAgB;YAChB,qBAAqB;YACrB,oBAAoB;YACpB,iBAAiB;YACjB,mBAAmB;YACnB,kBAAkB;YAClB,oBAAoB;YACpB,mBAAmB;SACpB,CAAA;QAED,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;gBACpC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAC1B,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;IACvB,CAAC;CACF"}
|
|
@@ -5,9 +5,14 @@
|
|
|
5
5
|
* construct events in tests.
|
|
6
6
|
*/
|
|
7
7
|
import { Model } from '../models/model.js';
|
|
8
|
-
import type { Message,
|
|
8
|
+
import type { Message, StopReason } from '../types/messages.js';
|
|
9
9
|
import type { ModelStreamEvent } from '../models/streaming.js';
|
|
10
10
|
import type { BaseModelConfig, StreamOptions } from '../models/model.js';
|
|
11
|
+
import type { PlainContentBlock } from './slim-types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Input type for addTurn - accepts plain objects or class instances.
|
|
14
|
+
*/
|
|
15
|
+
type ContentBlockInput = PlainContentBlock | PlainContentBlock[] | Error;
|
|
11
16
|
/**
|
|
12
17
|
* Test model provider that operates at the content block level.
|
|
13
18
|
* Simplifies agent loop tests by allowing specification of content blocks
|
|
@@ -42,7 +47,7 @@ export declare class MockMessageModel extends Model<BaseModelConfig> {
|
|
|
42
47
|
* .addTurn(new Error('Failed')) // Error turn
|
|
43
48
|
* ```
|
|
44
49
|
*/
|
|
45
|
-
addTurn(turn:
|
|
50
|
+
addTurn(turn: ContentBlockInput, stopReason?: StopReason): this;
|
|
46
51
|
/**
|
|
47
52
|
* Updates the model configuration.
|
|
48
53
|
*
|
|
@@ -90,4 +95,5 @@ export declare class MockMessageModel extends Model<BaseModelConfig> {
|
|
|
90
95
|
*/
|
|
91
96
|
private _generateEventsForBlock;
|
|
92
97
|
}
|
|
98
|
+
export {};
|
|
93
99
|
//# sourceMappingURL=mock-message-model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-message-model.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/mock-message-model.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,KAAK,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"mock-message-model.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/mock-message-model.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAExD;;GAEG;AACH,KAAK,iBAAiB,GAAG,iBAAiB,GAAG,iBAAiB,EAAE,GAAG,KAAK,CAAA;AAQxE;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,KAAK,CAAC,eAAe,CAAC;IAC1D,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,iBAAiB,CAAQ;IACjC,OAAO,CAAC,OAAO,CAAiB;IAEhC;;OAEG;;IAQH;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,IAAI,EAAE,iBAAiB,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI;IAK/D;;;;OAIG;IACH,YAAY,CAAC,WAAW,EAAE,eAAe,GAAG,IAAI;IAIhD;;;;OAIG;IACH,SAAS,IAAI,eAAe;IAI5B;;;;;;;;;;OAUG;IACI,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,EAAE,aAAa,GAAG,cAAc,CAAC,gBAAgB,CAAC;IA4B/F;;;OAGG;YACY,yBAAyB;IAiBxC;;OAEG;IACH,OAAO,CAAC,WAAW;IAenB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;OAEG;YACY,yBAAyB;IAcxC;;OAEG;YACY,uBAAuB;CAiFvC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-message-model.js","sourceRoot":"","sources":["../../../src/__fixtures__/mock-message-model.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"mock-message-model.js","sourceRoot":"","sources":["../../../src/__fixtures__/mock-message-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mock OpenTelemetry Span for testing tracer functionality.
|
|
3
|
+
* Implements the full Span interface and records all calls for assertion.
|
|
4
|
+
*/
|
|
5
|
+
import type { Span, SpanContext, SpanStatus, SpanAttributes, SpanAttributeValue, TimeInput, Exception, Link } from '@opentelemetry/api';
|
|
6
|
+
/**
|
|
7
|
+
* Concrete mock implementing the Span interface.
|
|
8
|
+
* Chainable methods return `this` to satisfy the `Span` contract.
|
|
9
|
+
*/
|
|
10
|
+
export declare class MockSpan implements Span {
|
|
11
|
+
readonly calls: {
|
|
12
|
+
setAttribute: Array<{
|
|
13
|
+
key: string;
|
|
14
|
+
value: SpanAttributeValue;
|
|
15
|
+
}>;
|
|
16
|
+
setAttributes: Array<{
|
|
17
|
+
attributes: SpanAttributes;
|
|
18
|
+
}>;
|
|
19
|
+
addEvent: Array<{
|
|
20
|
+
name: string;
|
|
21
|
+
attributes: SpanAttributes | TimeInput | undefined;
|
|
22
|
+
startTime: TimeInput | undefined;
|
|
23
|
+
}>;
|
|
24
|
+
setStatus: Array<{
|
|
25
|
+
status: SpanStatus;
|
|
26
|
+
}>;
|
|
27
|
+
updateName: Array<{
|
|
28
|
+
name: string;
|
|
29
|
+
}>;
|
|
30
|
+
end: Array<{
|
|
31
|
+
endTime: TimeInput | undefined;
|
|
32
|
+
}>;
|
|
33
|
+
recordException: Array<{
|
|
34
|
+
exception: Exception;
|
|
35
|
+
time: TimeInput | undefined;
|
|
36
|
+
}>;
|
|
37
|
+
};
|
|
38
|
+
/** @returns A fixed span context for test assertions. */
|
|
39
|
+
spanContext(): SpanContext;
|
|
40
|
+
/** Records a single attribute. */
|
|
41
|
+
setAttribute(key: string, value: SpanAttributeValue): this;
|
|
42
|
+
/** Records a batch of attributes. */
|
|
43
|
+
setAttributes(attributes: SpanAttributes): this;
|
|
44
|
+
/** Records a span event with optional attributes. */
|
|
45
|
+
addEvent(name: string, attributesOrStartTime?: SpanAttributes | TimeInput, startTime?: TimeInput): this;
|
|
46
|
+
/** No-op link addition. */
|
|
47
|
+
addLink(_link: Link): this;
|
|
48
|
+
/** No-op batch link addition. */
|
|
49
|
+
addLinks(_links: Link[]): this;
|
|
50
|
+
/** Records a status change. */
|
|
51
|
+
setStatus(status: SpanStatus): this;
|
|
52
|
+
/** Records a name update. */
|
|
53
|
+
updateName(name: string): this;
|
|
54
|
+
/** Records span end. */
|
|
55
|
+
end(endTime?: TimeInput): void;
|
|
56
|
+
/** Always returns true for mock spans. */
|
|
57
|
+
isRecording(): boolean;
|
|
58
|
+
/** Records an exception. */
|
|
59
|
+
recordException(exception: Exception, time?: TimeInput): void;
|
|
60
|
+
/**
|
|
61
|
+
* Get the value of a specific attribute set via setAttribute.
|
|
62
|
+
*/
|
|
63
|
+
getAttributeValue(key: string): SpanAttributeValue | undefined;
|
|
64
|
+
/**
|
|
65
|
+
* Get all events with a given name.
|
|
66
|
+
*/
|
|
67
|
+
getEvents(name: string): Array<{
|
|
68
|
+
name: string;
|
|
69
|
+
attributes: SpanAttributes | TimeInput | undefined;
|
|
70
|
+
}>;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Extract a string attribute from a mock span event's attributes.
|
|
74
|
+
*/
|
|
75
|
+
export declare function eventAttr(event: {
|
|
76
|
+
attributes: SpanAttributes | TimeInput | undefined;
|
|
77
|
+
}, key: string): string;
|
|
78
|
+
//# sourceMappingURL=mock-span.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-span.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/mock-span.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,IAAI,EACJ,WAAW,EACX,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,SAAS,EACT,SAAS,EACT,IAAI,EACL,MAAM,oBAAoB,CAAA;AAE3B;;;GAGG;AACH,qBAAa,QAAS,YAAW,IAAI;IACnC,QAAQ,CAAC,KAAK;sBACQ,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,kBAAkB,CAAA;SAAE,CAAC;uBAChD,KAAK,CAAC;YAAE,UAAU,EAAE,cAAc,CAAA;SAAE,CAAC;kBAC1C,KAAK,CAAC;YACpB,IAAI,EAAE,MAAM,CAAA;YACZ,UAAU,EAAE,cAAc,GAAG,SAAS,GAAG,SAAS,CAAA;YAClD,SAAS,EAAE,SAAS,GAAG,SAAS,CAAA;SACjC,CAAC;mBACe,KAAK,CAAC;YAAE,MAAM,EAAE,UAAU,CAAA;SAAE,CAAC;oBAC5B,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;aAC9B,KAAK,CAAC;YAAE,OAAO,EAAE,SAAS,GAAG,SAAS,CAAA;SAAE,CAAC;yBAC7B,KAAK,CAAC;YAAE,SAAS,EAAE,SAAS,CAAC;YAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAA;SAAE,CAAC;MACpF;IAED,yDAAyD;IACzD,WAAW,IAAI,WAAW;IAI1B,kCAAkC;IAClC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAK1D,qCAAqC;IACrC,aAAa,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI;IAQ/C,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,qBAAqB,CAAC,EAAE,cAAc,GAAG,SAAS,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI;IAKvG,2BAA2B;IAC3B,OAAO,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI;IAI1B,iCAAiC;IACjC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI;IAI9B,+BAA+B;IAC/B,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAKnC,6BAA6B;IAC7B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK9B,wBAAwB;IACxB,GAAG,CAAC,OAAO,CAAC,EAAE,SAAS,GAAG,IAAI;IAI9B,0CAA0C;IAC1C,WAAW,IAAI,OAAO;IAItB,4BAA4B;IAC5B,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI;IAI7D;;OAEG;IACH,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAK9D;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,cAAc,GAAG,SAAS,GAAG,SAAS,CAAA;KAAE,CAAC;CAGrG;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE;IAAE,UAAU,EAAE,cAAc,GAAG,SAAS,GAAG,SAAS,CAAA;CAAE,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAG5G"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mock OpenTelemetry Span for testing tracer functionality.
|
|
3
|
+
* Implements the full Span interface and records all calls for assertion.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Concrete mock implementing the Span interface.
|
|
7
|
+
* Chainable methods return `this` to satisfy the `Span` contract.
|
|
8
|
+
*/
|
|
9
|
+
export class MockSpan {
|
|
10
|
+
calls = {
|
|
11
|
+
setAttribute: [],
|
|
12
|
+
setAttributes: [],
|
|
13
|
+
addEvent: [],
|
|
14
|
+
setStatus: [],
|
|
15
|
+
updateName: [],
|
|
16
|
+
end: [],
|
|
17
|
+
recordException: [],
|
|
18
|
+
};
|
|
19
|
+
/** @returns A fixed span context for test assertions. */
|
|
20
|
+
spanContext() {
|
|
21
|
+
return { traceId: 'trace-1', spanId: 'span-1', traceFlags: 1 };
|
|
22
|
+
}
|
|
23
|
+
/** Records a single attribute. */
|
|
24
|
+
setAttribute(key, value) {
|
|
25
|
+
this.calls.setAttribute.push({ key, value });
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
/** Records a batch of attributes. */
|
|
29
|
+
setAttributes(attributes) {
|
|
30
|
+
this.calls.setAttributes.push({ attributes });
|
|
31
|
+
for (const [key, value] of Object.entries(attributes)) {
|
|
32
|
+
if (value !== undefined)
|
|
33
|
+
this.setAttribute(key, value);
|
|
34
|
+
}
|
|
35
|
+
return this;
|
|
36
|
+
}
|
|
37
|
+
/** Records a span event with optional attributes. */
|
|
38
|
+
addEvent(name, attributesOrStartTime, startTime) {
|
|
39
|
+
this.calls.addEvent.push({ name, attributes: attributesOrStartTime, startTime });
|
|
40
|
+
return this;
|
|
41
|
+
}
|
|
42
|
+
/** No-op link addition. */
|
|
43
|
+
addLink(_link) {
|
|
44
|
+
return this;
|
|
45
|
+
}
|
|
46
|
+
/** No-op batch link addition. */
|
|
47
|
+
addLinks(_links) {
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
/** Records a status change. */
|
|
51
|
+
setStatus(status) {
|
|
52
|
+
this.calls.setStatus.push({ status });
|
|
53
|
+
return this;
|
|
54
|
+
}
|
|
55
|
+
/** Records a name update. */
|
|
56
|
+
updateName(name) {
|
|
57
|
+
this.calls.updateName.push({ name });
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
60
|
+
/** Records span end. */
|
|
61
|
+
end(endTime) {
|
|
62
|
+
this.calls.end.push({ endTime });
|
|
63
|
+
}
|
|
64
|
+
/** Always returns true for mock spans. */
|
|
65
|
+
isRecording() {
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
/** Records an exception. */
|
|
69
|
+
recordException(exception, time) {
|
|
70
|
+
this.calls.recordException.push({ exception, time });
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get the value of a specific attribute set via setAttribute.
|
|
74
|
+
*/
|
|
75
|
+
getAttributeValue(key) {
|
|
76
|
+
const entry = this.calls.setAttribute.find((c) => c.key === key);
|
|
77
|
+
return entry?.value;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get all events with a given name.
|
|
81
|
+
*/
|
|
82
|
+
getEvents(name) {
|
|
83
|
+
return this.calls.addEvent.filter((c) => c.name === name);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Extract a string attribute from a mock span event's attributes.
|
|
88
|
+
*/
|
|
89
|
+
export function eventAttr(event, key) {
|
|
90
|
+
const attrs = event.attributes;
|
|
91
|
+
return attrs[key];
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=mock-span.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-span.js","sourceRoot":"","sources":["../../../src/__fixtures__/mock-span.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Scope, Snapshot, SnapshotManifest } from '../session/types.js';
|
|
2
|
+
import type { SnapshotStorage, SnapshotLocation } from '../session/index.js';
|
|
3
|
+
export declare function createTestSnapshot(overrides?: Partial<Snapshot>): Snapshot;
|
|
4
|
+
export declare function createTestManifest(overrides?: Partial<SnapshotManifest>): SnapshotManifest;
|
|
5
|
+
export declare function createTestScope(kind?: 'agent' | 'multiAgent'): Scope;
|
|
6
|
+
export declare function createTestSnapshots(count: number, baseSnapshot?: Partial<Snapshot>): Snapshot[];
|
|
7
|
+
/**
|
|
8
|
+
* Mock storage implementation for testing that stores data in memory
|
|
9
|
+
*/
|
|
10
|
+
export declare class MockSnapshotStorage implements SnapshotStorage {
|
|
11
|
+
private snapshots;
|
|
12
|
+
private manifests;
|
|
13
|
+
shouldThrowErrors: boolean;
|
|
14
|
+
saveSnapshot(params: {
|
|
15
|
+
location: SnapshotLocation;
|
|
16
|
+
snapshotId: string;
|
|
17
|
+
isLatest: boolean;
|
|
18
|
+
snapshot: Snapshot;
|
|
19
|
+
}): Promise<void>;
|
|
20
|
+
loadSnapshot(params: {
|
|
21
|
+
location: SnapshotLocation;
|
|
22
|
+
snapshotId?: string;
|
|
23
|
+
}): Promise<Snapshot | null>;
|
|
24
|
+
listSnapshotIds(params: {
|
|
25
|
+
location: SnapshotLocation;
|
|
26
|
+
}): Promise<string[]>;
|
|
27
|
+
loadManifest(params: {
|
|
28
|
+
location: SnapshotLocation;
|
|
29
|
+
}): Promise<SnapshotManifest>;
|
|
30
|
+
saveManifest(params: {
|
|
31
|
+
location: SnapshotLocation;
|
|
32
|
+
manifest: SnapshotManifest;
|
|
33
|
+
}): Promise<void>;
|
|
34
|
+
private getKey;
|
|
35
|
+
private getManifestKey;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=mock-storage-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-storage-provider.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/mock-storage-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAE5E,wBAAgB,kBAAkB,CAAC,SAAS,GAAE,OAAO,CAAC,QAAQ,CAAM,GAAG,QAAQ,CAa9E;AAED,wBAAgB,kBAAkB,CAAC,SAAS,GAAE,OAAO,CAAC,gBAAgB,CAAM,GAAG,gBAAgB,CAO9F;AAED,wBAAgB,eAAe,CAAC,IAAI,GAAE,OAAO,GAAG,YAAsB,GAAG,KAAK,CAE7E;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,EAAE,CAO/F;AAED;;GAEG;AACH,qBAAa,mBAAoB,YAAW,eAAe;IACzD,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,SAAS,CAAsC;IAChD,iBAAiB,UAAQ;IAE1B,YAAY,CAAC,MAAM,EAAE;QACzB,QAAQ,EAAE,gBAAgB,CAAA;QAC1B,UAAU,EAAE,MAAM,CAAA;QAClB,QAAQ,EAAE,OAAO,CAAA;QACjB,QAAQ,EAAE,QAAQ,CAAA;KACnB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYX,YAAY,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,gBAAgB,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IASnG,eAAe,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,gBAAgB,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAe1E,YAAY,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,gBAAgB,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAkB/E,YAAY,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,gBAAgB,CAAC;QAAC,QAAQ,EAAE,gBAAgB,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrG,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,cAAc;CAMvB"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
export function createTestSnapshot(overrides = {}) {
|
|
2
|
+
return {
|
|
3
|
+
schemaVersion: '1.0',
|
|
4
|
+
scope: 'agent',
|
|
5
|
+
createdAt: '2024-01-01T00:00:00.000Z',
|
|
6
|
+
data: {
|
|
7
|
+
messages: [],
|
|
8
|
+
state: { testKey: 'testValue' },
|
|
9
|
+
systemPrompt: 'You are a test assistant',
|
|
10
|
+
},
|
|
11
|
+
appData: {},
|
|
12
|
+
...overrides,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export function createTestManifest(overrides = {}) {
|
|
16
|
+
return {
|
|
17
|
+
schemaVersion: '1.0',
|
|
18
|
+
nextSnapshotId: '2',
|
|
19
|
+
updatedAt: '2024-01-01T00:00:00.000Z',
|
|
20
|
+
...overrides,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export function createTestScope(kind = 'agent') {
|
|
24
|
+
return kind;
|
|
25
|
+
}
|
|
26
|
+
export function createTestSnapshots(count, baseSnapshot) {
|
|
27
|
+
return Array.from({ length: count }, (_, i) => createTestSnapshot({
|
|
28
|
+
...baseSnapshot,
|
|
29
|
+
createdAt: new Date(2024, 0, 1, 0, i).toISOString(),
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Mock storage implementation for testing that stores data in memory
|
|
34
|
+
*/
|
|
35
|
+
export class MockSnapshotStorage {
|
|
36
|
+
snapshots = new Map();
|
|
37
|
+
manifests = new Map();
|
|
38
|
+
shouldThrowErrors = false;
|
|
39
|
+
async saveSnapshot(params) {
|
|
40
|
+
if (this.shouldThrowErrors)
|
|
41
|
+
throw new Error('Mock save error');
|
|
42
|
+
const { location, snapshotId, isLatest, snapshot } = params;
|
|
43
|
+
const key = this.getKey(location, snapshotId);
|
|
44
|
+
this.snapshots.set(key, snapshot);
|
|
45
|
+
if (isLatest) {
|
|
46
|
+
this.snapshots.set(this.getKey(location, 'latest'), snapshot);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async loadSnapshot(params) {
|
|
50
|
+
if (this.shouldThrowErrors)
|
|
51
|
+
throw new Error('Mock load error');
|
|
52
|
+
if (params.snapshotId === undefined) {
|
|
53
|
+
return this.snapshots.get(this.getKey(params.location, 'latest')) ?? null;
|
|
54
|
+
}
|
|
55
|
+
return this.snapshots.get(this.getKey(params.location, params.snapshotId)) ?? null;
|
|
56
|
+
}
|
|
57
|
+
async listSnapshotIds(params) {
|
|
58
|
+
if (this.shouldThrowErrors)
|
|
59
|
+
throw new Error('Mock list error');
|
|
60
|
+
const prefix = `${params.location.sessionId}::${params.location.scope}::${params.location.scopeId}::`;
|
|
61
|
+
const ids = [];
|
|
62
|
+
for (const [key, _snapshot] of this.snapshots) {
|
|
63
|
+
if (key.startsWith(prefix) && !key.endsWith('::latest')) {
|
|
64
|
+
ids.push(key.slice(prefix.length));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return ids.sort();
|
|
68
|
+
}
|
|
69
|
+
async loadManifest(params) {
|
|
70
|
+
if (this.shouldThrowErrors)
|
|
71
|
+
throw new Error('Mock manifest load error');
|
|
72
|
+
const { sessionId } = params.location;
|
|
73
|
+
if (!sessionId) {
|
|
74
|
+
throw new Error('Invalid sessionId: cannot be empty or undefined');
|
|
75
|
+
}
|
|
76
|
+
const key = this.getManifestKey(params.location);
|
|
77
|
+
return (this.manifests.get(key) ?? {
|
|
78
|
+
schemaVersion: '1',
|
|
79
|
+
nextSnapshotId: '1',
|
|
80
|
+
updatedAt: new Date().toISOString(),
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
async saveManifest(params) {
|
|
84
|
+
if (this.shouldThrowErrors)
|
|
85
|
+
throw new Error('Mock manifest save error');
|
|
86
|
+
const { sessionId } = params.location;
|
|
87
|
+
if (!sessionId) {
|
|
88
|
+
throw new Error('Invalid sessionId: cannot be empty or undefined');
|
|
89
|
+
}
|
|
90
|
+
this.manifests.set(this.getManifestKey(params.location), params.manifest);
|
|
91
|
+
}
|
|
92
|
+
getKey(location, snapshotId) {
|
|
93
|
+
if (!location.sessionId) {
|
|
94
|
+
throw new Error('Invalid sessionId: cannot be empty or undefined');
|
|
95
|
+
}
|
|
96
|
+
return `${location.sessionId}::${location.scope}::${location.scopeId}::${snapshotId}`;
|
|
97
|
+
}
|
|
98
|
+
getManifestKey(location) {
|
|
99
|
+
if (!location.sessionId) {
|
|
100
|
+
throw new Error('Invalid sessionId: cannot be empty or undefined');
|
|
101
|
+
}
|
|
102
|
+
return `${location.sessionId}::${location.scope}::${location.scopeId}::manifest`;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=mock-storage-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-storage-provider.js","sourceRoot":"","sources":["../../../src/__fixtures__/mock-storage-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility types for testing that strip methods from classes.
|
|
3
|
+
* Allows tests to use plain objects without needing to construct class instances.
|
|
4
|
+
*/
|
|
5
|
+
import type { Message, ToolResultBlock, TextBlock, ToolUseBlock, ReasoningBlock, CachePointBlock, GuardContentBlock, JsonBlock } from '../types/messages.js';
|
|
6
|
+
import type { ImageBlock, VideoBlock, DocumentBlock } from '../types/media.js';
|
|
7
|
+
/**
|
|
8
|
+
* Strips the toJSON method from a type, allowing plain objects to be used in tests.
|
|
9
|
+
* This is useful when you want to pass plain object literals where class instances are expected.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const messages: NoJSON<Message>[] = [
|
|
14
|
+
* { type: 'message', role: 'user', content: [{ type: 'textBlock', text: 'Hello' }] }
|
|
15
|
+
* ]
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export type NoJSON<T> = Omit<T, 'toJSON'>;
|
|
19
|
+
/**
|
|
20
|
+
* Plain content block without toJSON method - preserves discriminated union.
|
|
21
|
+
*/
|
|
22
|
+
export type PlainContentBlock = NoJSON<TextBlock> | NoJSON<ToolUseBlock> | NoJSON<ToolResultBlock> | NoJSON<ReasoningBlock> | NoJSON<CachePointBlock> | NoJSON<GuardContentBlock> | NoJSON<JsonBlock> | NoJSON<ImageBlock> | NoJSON<VideoBlock> | NoJSON<DocumentBlock>;
|
|
23
|
+
/**
|
|
24
|
+
* Plain system content block without toJSON method.
|
|
25
|
+
*/
|
|
26
|
+
export type PlainSystemContentBlock = NoJSON<TextBlock> | NoJSON<CachePointBlock> | NoJSON<GuardContentBlock>;
|
|
27
|
+
/**
|
|
28
|
+
* Plain tool result block without toJSON method.
|
|
29
|
+
*/
|
|
30
|
+
export type PlainToolResultBlock = NoJSON<ToolResultBlock>;
|
|
31
|
+
/**
|
|
32
|
+
* Recursively strips toJSON from a type and its nested content.
|
|
33
|
+
* Use this for Message which contains ContentBlock arrays.
|
|
34
|
+
*/
|
|
35
|
+
export type PlainMessage = NoJSON<Message> & {
|
|
36
|
+
content: PlainContentBlock[];
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Type assertion helper for using plain message objects where Message[] is expected.
|
|
40
|
+
* Use this when calling model.stream() with plain objects in tests.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* const messages = [
|
|
45
|
+
* { type: 'message', role: 'user', content: [{ type: 'textBlock', text: 'Hello' }] }
|
|
46
|
+
* ] as PlainMessage[] as Message[]
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export type { Message };
|
|
50
|
+
//# sourceMappingURL=slim-types.d.ts.map
|