@strands-agents/sdk 0.3.0 → 0.4.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__/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-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 +8 -3
- package/dist/src/__fixtures__/tool-helpers.d.ts.map +1 -1
- package/dist/src/__fixtures__/tool-helpers.js +1 -1
- package/dist/src/__fixtures__/tool-helpers.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 +124 -8
- package/dist/src/agent/__tests__/agent.test.js.map +1 -1
- 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/__tests__/state.test.js +19 -0
- package/dist/src/agent/__tests__/state.test.js.map +1 -1
- package/dist/src/agent/agent.d.ts +19 -4
- package/dist/src/agent/agent.d.ts.map +1 -1
- package/dist/src/agent/agent.js +104 -34
- 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 +14 -1
- package/dist/src/agent/state.d.ts.map +1 -1
- package/dist/src/agent/state.js +21 -0
- package/dist/src/agent/state.js.map +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 +4 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -3
- package/dist/src/index.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 +14 -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/streaming.d.ts +8 -0
- 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__/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 +98 -0
- package/dist/src/multiagent/__tests__/nodes.test.js.map +1 -0
- package/dist/src/multiagent/events.d.ts +24 -0
- package/dist/src/multiagent/events.d.ts.map +1 -0
- package/dist/src/multiagent/events.js +19 -0
- package/dist/src/multiagent/events.js.map +1 -0
- package/dist/src/multiagent/index.d.ts +11 -0
- package/dist/src/multiagent/index.d.ts.map +1 -0
- package/dist/src/multiagent/index.js +7 -0
- package/dist/src/multiagent/index.js.map +1 -0
- package/dist/src/multiagent/nodes.d.ts +75 -0
- package/dist/src/multiagent/nodes.d.ts.map +1 -0
- package/dist/src/multiagent/nodes.js +101 -0
- package/dist/src/multiagent/nodes.js.map +1 -0
- package/dist/src/multiagent/state.d.ts +55 -0
- package/dist/src/multiagent/state.d.ts.map +1 -0
- package/dist/src/multiagent/state.js +43 -0
- package/dist/src/multiagent/state.js.map +1 -0
- package/dist/src/multiagent/types.d.ts +5 -0
- package/dist/src/multiagent/types.d.ts.map +1 -0
- package/dist/src/multiagent/types.js +2 -0
- package/dist/src/multiagent/types.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/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 +13 -7
- 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 +148 -9
- package/dist/src/types/messages.d.ts.map +1 -1
- package/dist/src/types/messages.js +234 -7
- 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/package.json +7 -2
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:
|
|
@@ -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,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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slim-types.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/slim-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,OAAO,EACP,eAAe,EACf,SAAS,EACT,YAAY,EACZ,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,SAAS,EACV,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAE9E;;;;;;;;;;GAUG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;AAEzC;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB,MAAM,CAAC,SAAS,CAAC,GACjB,MAAM,CAAC,YAAY,CAAC,GACpB,MAAM,CAAC,eAAe,CAAC,GACvB,MAAM,CAAC,cAAc,CAAC,GACtB,MAAM,CAAC,eAAe,CAAC,GACvB,MAAM,CAAC,iBAAiB,CAAC,GACzB,MAAM,CAAC,SAAS,CAAC,GACjB,MAAM,CAAC,UAAU,CAAC,GAClB,MAAM,CAAC,UAAU,CAAC,GAClB,MAAM,CAAC,aAAa,CAAC,CAAA;AAEzB;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAA;AAE7G;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,eAAe,CAAC,CAAA;AAE1D;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG;IAAE,OAAO,EAAE,iBAAiB,EAAE,CAAA;CAAE,CAAA;AAE7E;;;;;;;;;;GAUG;AACH,YAAY,EAAE,OAAO,EAAE,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slim-types.js","sourceRoot":"","sources":["../../../src/__fixtures__/slim-types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* This module provides utilities for testing Tool implementations.
|
|
4
4
|
*/
|
|
5
5
|
import type { Tool, ToolContext } from '../tools/tool.js';
|
|
6
|
-
import { ToolResultBlock } from '../types/messages.js';
|
|
7
6
|
import type { JSONValue } from '../types/json.js';
|
|
7
|
+
import type { PlainToolResultBlock } from './slim-types.js';
|
|
8
8
|
/**
|
|
9
9
|
* Helper to create a mock ToolContext for testing.
|
|
10
10
|
*
|
|
@@ -17,14 +17,18 @@ export declare function createMockContext(toolUse: {
|
|
|
17
17
|
toolUseId: string;
|
|
18
18
|
input: JSONValue;
|
|
19
19
|
}, agentState?: Record<string, JSONValue>): ToolContext;
|
|
20
|
+
/**
|
|
21
|
+
* Result function type for createMockTool - accepts plain objects or class instances.
|
|
22
|
+
*/
|
|
23
|
+
type ToolResultFn = () => PlainToolResultBlock | AsyncGenerator<never, PlainToolResultBlock, never>;
|
|
20
24
|
/**
|
|
21
25
|
* Helper to create a mock tool for testing.
|
|
22
26
|
*
|
|
23
27
|
* @param name - The name of the mock tool
|
|
24
|
-
* @param resultFn - Function that returns a ToolResultBlock
|
|
28
|
+
* @param resultFn - Function that returns a ToolResultBlock (plain object or class instance) or an AsyncGenerator
|
|
25
29
|
* @returns Mock Tool object
|
|
26
30
|
*/
|
|
27
|
-
export declare function createMockTool(name: string, resultFn:
|
|
31
|
+
export declare function createMockTool(name: string, resultFn: ToolResultFn): Tool;
|
|
28
32
|
/**
|
|
29
33
|
* Helper to create a simple mock tool with minimal configuration for testing.
|
|
30
34
|
* This is a lighter-weight version of createMockTool for scenarios where the tool's
|
|
@@ -34,4 +38,5 @@ export declare function createMockTool(name: string, resultFn: () => ToolResultB
|
|
|
34
38
|
* @returns Mock Tool object
|
|
35
39
|
*/
|
|
36
40
|
export declare function createRandomTool(name?: string): Tool;
|
|
41
|
+
export {};
|
|
37
42
|
//# sourceMappingURL=tool-helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-helpers.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/tool-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"tool-helpers.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/tool-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAE3D;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,EAC9D,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GACrC,WAAW,CAQb;AAED;;GAEG;AACH,KAAK,YAAY,GAAG,MAAM,oBAAoB,GAAG,cAAc,CAAC,KAAK,EAAE,oBAAoB,EAAE,KAAK,CAAC,CAAA;AAEnG;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CA8BzE;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAWpD"}
|
|
@@ -24,7 +24,7 @@ export function createMockContext(toolUse, agentState) {
|
|
|
24
24
|
* Helper to create a mock tool for testing.
|
|
25
25
|
*
|
|
26
26
|
* @param name - The name of the mock tool
|
|
27
|
-
* @param resultFn - Function that returns a ToolResultBlock
|
|
27
|
+
* @param resultFn - Function that returns a ToolResultBlock (plain object or class instance) or an AsyncGenerator
|
|
28
28
|
* @returns Mock Tool object
|
|
29
29
|
*/
|
|
30
30
|
export function createMockTool(name, resultFn) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-helpers.js","sourceRoot":"","sources":["../../../src/__fixtures__/tool-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"tool-helpers.js","sourceRoot":"","sources":["../../../src/__fixtures__/tool-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAG9C;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAA8D,EAC9D,UAAsC;IAEtC,OAAO;QACL,OAAO;QACP,KAAK,EAAE;YACL,KAAK,EAAE,IAAI,UAAU,CAAC,UAAU,CAAC;YACjC,QAAQ,EAAE,EAAE;SACb;KACF,CAAA;AACH,CAAC;AAOD;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,QAAsB;IACjE,OAAO;QACL,IAAI;QACJ,WAAW,EAAE,aAAa,IAAI,EAAE;QAChC,QAAQ,EAAE;YACR,IAAI;YACJ,WAAW,EAAE,aAAa,IAAI,EAAE;YAChC,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;SAChD;QACD,yCAAyC;QACzC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ;YACpB,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAA;YACzB,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,aAAa,IAAI,MAAM,EAAE,CAAC;gBACpF,mCAAmC;gBACnC,MAAM,GAAG,GAAG,MAAuD,CAAA;gBACnE,IAAI,IAAI,GAAG,KAAK,CAAA;gBAChB,OAAO,CAAC,IAAI,EAAE,CAAC;oBACb,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;oBAChD,IAAI,GAAG,MAAM,IAAI,KAAK,CAAA;oBACtB,IAAI,IAAI,EAAE,CAAC;wBACT,OAAO,KAAK,CAAA;oBACd,CAAC;gBACH,CAAC;gBACD,6DAA6D;gBAC7D,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;YACjD,CAAC;iBAAM,CAAC;gBACN,OAAO,MAAyB,CAAA;YAClC,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAa;IAC5C,MAAM,QAAQ,GAAG,IAAI,IAAI,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAA;IACvD,OAAO,cAAc,CACnB,QAAQ,EACR,GAAG,EAAE,CACH,IAAI,eAAe,CAAC;QAClB,SAAS,EAAE,SAAS;QACpB,MAAM,EAAE,SAAkB;QAC1B,OAAO,EAAE,EAAE;KACZ,CAAC,CACL,CAAA;AACH,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { beforeEach, describe, expect, it } from 'vitest';
|
|
2
2
|
import { Agent } from '../agent.js';
|
|
3
|
-
import { AfterInvocationEvent, AfterModelCallEvent, AfterToolCallEvent, BeforeInvocationEvent, BeforeModelCallEvent, BeforeToolCallEvent, MessageAddedEvent,
|
|
3
|
+
import { AfterInvocationEvent, AfterModelCallEvent, AfterToolCallEvent, BeforeInvocationEvent, BeforeModelCallEvent, BeforeToolCallEvent, MessageAddedEvent, ModelStreamUpdateEvent, InitializedEvent, } from '../../hooks/index.js';
|
|
4
4
|
import { MockMessageModel } from '../../__fixtures__/mock-message-model.js';
|
|
5
5
|
import { MockHookProvider } from '../../__fixtures__/mock-hook-provider.js';
|
|
6
6
|
import { collectIterator } from '../../__fixtures__/model-test-helpers.js';
|
|
@@ -13,7 +13,7 @@ describe('Agent Hooks Integration', () => {
|
|
|
13
13
|
});
|
|
14
14
|
describe('invocation lifecycle', () => {
|
|
15
15
|
it('fires hooks during invoke', async () => {
|
|
16
|
-
const lifecycleProvider = new MockHookProvider(
|
|
16
|
+
const lifecycleProvider = new MockHookProvider();
|
|
17
17
|
const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
|
|
18
18
|
const agent = new Agent({ model, hooks: [lifecycleProvider] });
|
|
19
19
|
await agent.invoke('Hi');
|
|
@@ -36,7 +36,7 @@ describe('Agent Hooks Integration', () => {
|
|
|
36
36
|
expect(lifecycleProvider.invocations[6]).toEqual(new AfterInvocationEvent({ agent }));
|
|
37
37
|
});
|
|
38
38
|
it('fires hooks during stream', async () => {
|
|
39
|
-
const lifecycleProvider = new MockHookProvider(
|
|
39
|
+
const lifecycleProvider = new MockHookProvider();
|
|
40
40
|
const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
|
|
41
41
|
const agent = new Agent({ model, hooks: [lifecycleProvider] });
|
|
42
42
|
await collectIterator(agent.stream('Hi'));
|
|
@@ -64,7 +64,7 @@ describe('Agent Hooks Integration', () => {
|
|
|
64
64
|
});
|
|
65
65
|
describe('runtime hook registration', () => {
|
|
66
66
|
it('allows adding hooks after agent creation', async () => {
|
|
67
|
-
const lifecycleProvider = new MockHookProvider(
|
|
67
|
+
const lifecycleProvider = new MockHookProvider();
|
|
68
68
|
const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
|
|
69
69
|
const agent = new Agent({ model });
|
|
70
70
|
agent.hooks.addHook(lifecycleProvider);
|
|
@@ -77,7 +77,7 @@ describe('Agent Hooks Integration', () => {
|
|
|
77
77
|
});
|
|
78
78
|
describe('multi-turn conversations', () => {
|
|
79
79
|
it('fires hooks for each invoke call', async () => {
|
|
80
|
-
const lifecycleProvider = new MockHookProvider(
|
|
80
|
+
const lifecycleProvider = new MockHookProvider();
|
|
81
81
|
const model = new MockMessageModel()
|
|
82
82
|
.addTurn({ type: 'textBlock', text: 'First response' })
|
|
83
83
|
.addTurn({ type: 'textBlock', text: 'Second response' });
|
|
@@ -169,26 +169,26 @@ describe('Agent Hooks Integration', () => {
|
|
|
169
169
|
}));
|
|
170
170
|
});
|
|
171
171
|
});
|
|
172
|
-
describe('
|
|
173
|
-
it('
|
|
172
|
+
describe('ModelStreamUpdateEvent', () => {
|
|
173
|
+
it('is yielded in the stream and dispatched to hooks', async () => {
|
|
174
174
|
const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
|
|
175
|
-
const
|
|
176
|
-
|
|
177
|
-
|
|
175
|
+
const streamUpdateEvents = [];
|
|
176
|
+
const agent = new Agent({ model });
|
|
177
|
+
agent.hooks.addCallback(ModelStreamUpdateEvent, (event) => {
|
|
178
|
+
streamUpdateEvents.push(event);
|
|
178
179
|
});
|
|
179
180
|
// Collect all stream events
|
|
180
181
|
const allStreamEvents = [];
|
|
181
182
|
for await (const event of agent.stream('Test')) {
|
|
182
183
|
allStreamEvents.push(event);
|
|
183
184
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
expect(
|
|
187
|
-
//
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
}
|
|
185
|
+
// Should be yielded in the stream
|
|
186
|
+
const streamUpdates = allStreamEvents.filter((e) => e instanceof ModelStreamUpdateEvent);
|
|
187
|
+
expect(streamUpdates.length).toBeGreaterThan(0);
|
|
188
|
+
// Should also fire as hook
|
|
189
|
+
expect(streamUpdateEvents.length).toBeGreaterThan(0);
|
|
190
|
+
// Stream and hook should receive the same event instances
|
|
191
|
+
expect(streamUpdates).toStrictEqual(streamUpdateEvents);
|
|
192
192
|
});
|
|
193
193
|
});
|
|
194
194
|
describe('MessageAddedEvent', () => {
|