@lleverage-ai/agent-sdk 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +2321 -0
- package/dist/agent.d.ts +52 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +2122 -0
- package/dist/agent.js.map +1 -0
- package/dist/backend.d.ts +378 -0
- package/dist/backend.d.ts.map +1 -0
- package/dist/backend.js +71 -0
- package/dist/backend.js.map +1 -0
- package/dist/backends/composite.d.ts +258 -0
- package/dist/backends/composite.d.ts.map +1 -0
- package/dist/backends/composite.js +437 -0
- package/dist/backends/composite.js.map +1 -0
- package/dist/backends/filesystem.d.ts +268 -0
- package/dist/backends/filesystem.d.ts.map +1 -0
- package/dist/backends/filesystem.js +623 -0
- package/dist/backends/filesystem.js.map +1 -0
- package/dist/backends/index.d.ts +14 -0
- package/dist/backends/index.d.ts.map +1 -0
- package/dist/backends/index.js +14 -0
- package/dist/backends/index.js.map +1 -0
- package/dist/backends/persistent.d.ts +312 -0
- package/dist/backends/persistent.d.ts.map +1 -0
- package/dist/backends/persistent.js +519 -0
- package/dist/backends/persistent.js.map +1 -0
- package/dist/backends/sandbox.d.ts +315 -0
- package/dist/backends/sandbox.d.ts.map +1 -0
- package/dist/backends/sandbox.js +490 -0
- package/dist/backends/sandbox.js.map +1 -0
- package/dist/backends/state.d.ts +225 -0
- package/dist/backends/state.d.ts.map +1 -0
- package/dist/backends/state.js +396 -0
- package/dist/backends/state.js.map +1 -0
- package/dist/checkpointer/file-saver.d.ts +182 -0
- package/dist/checkpointer/file-saver.d.ts.map +1 -0
- package/dist/checkpointer/file-saver.js +298 -0
- package/dist/checkpointer/file-saver.js.map +1 -0
- package/dist/checkpointer/index.d.ts +40 -0
- package/dist/checkpointer/index.d.ts.map +1 -0
- package/dist/checkpointer/index.js +40 -0
- package/dist/checkpointer/index.js.map +1 -0
- package/dist/checkpointer/kv-saver.d.ts +142 -0
- package/dist/checkpointer/kv-saver.d.ts.map +1 -0
- package/dist/checkpointer/kv-saver.js +176 -0
- package/dist/checkpointer/kv-saver.js.map +1 -0
- package/dist/checkpointer/memory-saver.d.ts +158 -0
- package/dist/checkpointer/memory-saver.d.ts.map +1 -0
- package/dist/checkpointer/memory-saver.js +222 -0
- package/dist/checkpointer/memory-saver.js.map +1 -0
- package/dist/checkpointer/types.d.ts +353 -0
- package/dist/checkpointer/types.d.ts.map +1 -0
- package/dist/checkpointer/types.js +159 -0
- package/dist/checkpointer/types.js.map +1 -0
- package/dist/context-manager.d.ts +627 -0
- package/dist/context-manager.d.ts.map +1 -0
- package/dist/context-manager.js +1039 -0
- package/dist/context-manager.js.map +1 -0
- package/dist/context.d.ts +57 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +76 -0
- package/dist/context.js.map +1 -0
- package/dist/errors/index.d.ts +611 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +1023 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/generation-helpers.d.ts +126 -0
- package/dist/generation-helpers.d.ts.map +1 -0
- package/dist/generation-helpers.js +181 -0
- package/dist/generation-helpers.js.map +1 -0
- package/dist/hooks/audit.d.ts +210 -0
- package/dist/hooks/audit.d.ts.map +1 -0
- package/dist/hooks/audit.js +305 -0
- package/dist/hooks/audit.js.map +1 -0
- package/dist/hooks/cache.d.ts +180 -0
- package/dist/hooks/cache.d.ts.map +1 -0
- package/dist/hooks/cache.js +273 -0
- package/dist/hooks/cache.js.map +1 -0
- package/dist/hooks/guardrails.d.ts +145 -0
- package/dist/hooks/guardrails.d.ts.map +1 -0
- package/dist/hooks/guardrails.js +326 -0
- package/dist/hooks/guardrails.js.map +1 -0
- package/dist/hooks/index.d.ts +18 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +32 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/logging.d.ts +193 -0
- package/dist/hooks/logging.d.ts.map +1 -0
- package/dist/hooks/logging.js +345 -0
- package/dist/hooks/logging.js.map +1 -0
- package/dist/hooks/parallel-guardrails.d.ts +268 -0
- package/dist/hooks/parallel-guardrails.d.ts.map +1 -0
- package/dist/hooks/parallel-guardrails.js +416 -0
- package/dist/hooks/parallel-guardrails.js.map +1 -0
- package/dist/hooks/rate-limit.d.ts +305 -0
- package/dist/hooks/rate-limit.d.ts.map +1 -0
- package/dist/hooks/rate-limit.js +372 -0
- package/dist/hooks/rate-limit.js.map +1 -0
- package/dist/hooks/retry.d.ts +144 -0
- package/dist/hooks/retry.d.ts.map +1 -0
- package/dist/hooks/retry.js +210 -0
- package/dist/hooks/retry.js.map +1 -0
- package/dist/hooks/secrets.d.ts +174 -0
- package/dist/hooks/secrets.d.ts.map +1 -0
- package/dist/hooks/secrets.js +306 -0
- package/dist/hooks/secrets.js.map +1 -0
- package/dist/hooks.d.ts +229 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +352 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +97 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +182 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/env.d.ts +25 -0
- package/dist/mcp/env.d.ts.map +1 -0
- package/dist/mcp/env.js +18 -0
- package/dist/mcp/env.js.map +1 -0
- package/dist/mcp/index.d.ts +16 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +17 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/manager.d.ts +184 -0
- package/dist/mcp/manager.d.ts.map +1 -0
- package/dist/mcp/manager.js +446 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/mcp/types.d.ts +58 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +7 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/mcp/validation.d.ts +119 -0
- package/dist/mcp/validation.d.ts.map +1 -0
- package/dist/mcp/validation.js +407 -0
- package/dist/mcp/validation.js.map +1 -0
- package/dist/mcp/virtual-server.d.ts +78 -0
- package/dist/mcp/virtual-server.d.ts.map +1 -0
- package/dist/mcp/virtual-server.js +137 -0
- package/dist/mcp/virtual-server.js.map +1 -0
- package/dist/memory/filesystem-store.d.ts +217 -0
- package/dist/memory/filesystem-store.d.ts.map +1 -0
- package/dist/memory/filesystem-store.js +343 -0
- package/dist/memory/filesystem-store.js.map +1 -0
- package/dist/memory/index.d.ts +46 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +46 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/loader.d.ts +396 -0
- package/dist/memory/loader.d.ts.map +1 -0
- package/dist/memory/loader.js +419 -0
- package/dist/memory/loader.js.map +1 -0
- package/dist/memory/permissions.d.ts +282 -0
- package/dist/memory/permissions.d.ts.map +1 -0
- package/dist/memory/permissions.js +297 -0
- package/dist/memory/permissions.js.map +1 -0
- package/dist/memory/rules.d.ts +249 -0
- package/dist/memory/rules.d.ts.map +1 -0
- package/dist/memory/rules.js +362 -0
- package/dist/memory/rules.js.map +1 -0
- package/dist/memory/store.d.ts +286 -0
- package/dist/memory/store.d.ts.map +1 -0
- package/dist/memory/store.js +263 -0
- package/dist/memory/store.js.map +1 -0
- package/dist/middleware/apply.d.ts +73 -0
- package/dist/middleware/apply.d.ts.map +1 -0
- package/dist/middleware/apply.js +219 -0
- package/dist/middleware/apply.js.map +1 -0
- package/dist/middleware/context.d.ts +33 -0
- package/dist/middleware/context.d.ts.map +1 -0
- package/dist/middleware/context.js +176 -0
- package/dist/middleware/context.js.map +1 -0
- package/dist/middleware/index.d.ts +31 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +32 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/logging.d.ts +137 -0
- package/dist/middleware/logging.d.ts.map +1 -0
- package/dist/middleware/logging.js +374 -0
- package/dist/middleware/logging.js.map +1 -0
- package/dist/middleware/types.d.ts +183 -0
- package/dist/middleware/types.d.ts.map +1 -0
- package/dist/middleware/types.js +11 -0
- package/dist/middleware/types.js.map +1 -0
- package/dist/observability/events.d.ts +183 -0
- package/dist/observability/events.d.ts.map +1 -0
- package/dist/observability/events.js +305 -0
- package/dist/observability/events.js.map +1 -0
- package/dist/observability/index.d.ts +55 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +87 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/logger.d.ts +318 -0
- package/dist/observability/logger.d.ts.map +1 -0
- package/dist/observability/logger.js +436 -0
- package/dist/observability/logger.js.map +1 -0
- package/dist/observability/metrics.d.ts +341 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +490 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/observability/preset.d.ts +161 -0
- package/dist/observability/preset.d.ts.map +1 -0
- package/dist/observability/preset.js +133 -0
- package/dist/observability/preset.js.map +1 -0
- package/dist/observability/streaming.d.ts +113 -0
- package/dist/observability/streaming.d.ts.map +1 -0
- package/dist/observability/streaming.js +114 -0
- package/dist/observability/streaming.js.map +1 -0
- package/dist/observability/tracing.d.ts +378 -0
- package/dist/observability/tracing.d.ts.map +1 -0
- package/dist/observability/tracing.js +539 -0
- package/dist/observability/tracing.js.map +1 -0
- package/dist/plugins.d.ts +55 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/plugins.js +63 -0
- package/dist/plugins.js.map +1 -0
- package/dist/presets/index.d.ts +7 -0
- package/dist/presets/index.d.ts.map +1 -0
- package/dist/presets/index.js +7 -0
- package/dist/presets/index.js.map +1 -0
- package/dist/presets/production.d.ts +262 -0
- package/dist/presets/production.d.ts.map +1 -0
- package/dist/presets/production.js +295 -0
- package/dist/presets/production.js.map +1 -0
- package/dist/security/index.d.ts +179 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +323 -0
- package/dist/security/index.js.map +1 -0
- package/dist/subagents/advanced.d.ts +413 -0
- package/dist/subagents/advanced.d.ts.map +1 -0
- package/dist/subagents/advanced.js +396 -0
- package/dist/subagents/advanced.js.map +1 -0
- package/dist/subagents/index.d.ts +14 -0
- package/dist/subagents/index.d.ts.map +1 -0
- package/dist/subagents/index.js +15 -0
- package/dist/subagents/index.js.map +1 -0
- package/dist/subagents.d.ts +73 -0
- package/dist/subagents.d.ts.map +1 -0
- package/dist/subagents.js +213 -0
- package/dist/subagents.js.map +1 -0
- package/dist/task-store/file-store.d.ts +76 -0
- package/dist/task-store/file-store.d.ts.map +1 -0
- package/dist/task-store/file-store.js +190 -0
- package/dist/task-store/file-store.js.map +1 -0
- package/dist/task-store/index.d.ts +11 -0
- package/dist/task-store/index.d.ts.map +1 -0
- package/dist/task-store/index.js +10 -0
- package/dist/task-store/index.js.map +1 -0
- package/dist/task-store/kv-store.d.ts +140 -0
- package/dist/task-store/kv-store.d.ts.map +1 -0
- package/dist/task-store/kv-store.js +169 -0
- package/dist/task-store/kv-store.js.map +1 -0
- package/dist/task-store/memory-store.d.ts +66 -0
- package/dist/task-store/memory-store.d.ts.map +1 -0
- package/dist/task-store/memory-store.js +125 -0
- package/dist/task-store/memory-store.js.map +1 -0
- package/dist/task-store/types.d.ts +235 -0
- package/dist/task-store/types.d.ts.map +1 -0
- package/dist/task-store/types.js +110 -0
- package/dist/task-store/types.js.map +1 -0
- package/dist/testing/assertions.d.ts +401 -0
- package/dist/testing/assertions.d.ts.map +1 -0
- package/dist/testing/assertions.js +630 -0
- package/dist/testing/assertions.js.map +1 -0
- package/dist/testing/index.d.ts +343 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +360 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/mock-agent.d.ts +214 -0
- package/dist/testing/mock-agent.d.ts.map +1 -0
- package/dist/testing/mock-agent.js +448 -0
- package/dist/testing/mock-agent.js.map +1 -0
- package/dist/testing/recorder.d.ts +288 -0
- package/dist/testing/recorder.d.ts.map +1 -0
- package/dist/testing/recorder.js +499 -0
- package/dist/testing/recorder.js.map +1 -0
- package/dist/tools/execute.d.ts +104 -0
- package/dist/tools/execute.d.ts.map +1 -0
- package/dist/tools/execute.js +191 -0
- package/dist/tools/execute.js.map +1 -0
- package/dist/tools/factory.d.ts +260 -0
- package/dist/tools/factory.d.ts.map +1 -0
- package/dist/tools/factory.js +241 -0
- package/dist/tools/factory.js.map +1 -0
- package/dist/tools/filesystem.d.ts +215 -0
- package/dist/tools/filesystem.d.ts.map +1 -0
- package/dist/tools/filesystem.js +311 -0
- package/dist/tools/filesystem.js.map +1 -0
- package/dist/tools/index.d.ts +33 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +33 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/search.d.ts +59 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +94 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/skills.d.ts +354 -0
- package/dist/tools/skills.d.ts.map +1 -0
- package/dist/tools/skills.js +413 -0
- package/dist/tools/skills.js.map +1 -0
- package/dist/tools/task.d.ts +272 -0
- package/dist/tools/task.d.ts.map +1 -0
- package/dist/tools/task.js +521 -0
- package/dist/tools/task.js.map +1 -0
- package/dist/tools/todos.d.ts +131 -0
- package/dist/tools/todos.d.ts.map +1 -0
- package/dist/tools/todos.js +120 -0
- package/dist/tools/todos.js.map +1 -0
- package/dist/tools/tool-registry.d.ts +424 -0
- package/dist/tools/tool-registry.d.ts.map +1 -0
- package/dist/tools/tool-registry.js +607 -0
- package/dist/tools/tool-registry.js.map +1 -0
- package/dist/tools/user-interaction.d.ts +116 -0
- package/dist/tools/user-interaction.d.ts.map +1 -0
- package/dist/tools/user-interaction.js +147 -0
- package/dist/tools/user-interaction.js.map +1 -0
- package/dist/tools/utils.d.ts +124 -0
- package/dist/tools/utils.d.ts.map +1 -0
- package/dist/tools/utils.js +189 -0
- package/dist/tools/utils.js.map +1 -0
- package/dist/tools.d.ts +74 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +73 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +2421 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +55 -0
- package/dist/types.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1,630 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Assertion helpers for agent testing.
|
|
3
|
+
*
|
|
4
|
+
* Provides convenient assertion utilities for testing agent behavior,
|
|
5
|
+
* responses, tool calls, and state.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Ensure a GenerateResult is complete, throwing if it's interrupted.
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
function ensureComplete(result) {
|
|
14
|
+
if (result.status === "interrupted") {
|
|
15
|
+
throw new AgentAssertionError("Cannot assert on interrupted result", "complete", "interrupted", { interruptType: result.interrupt.type });
|
|
16
|
+
}
|
|
17
|
+
return result;
|
|
18
|
+
}
|
|
19
|
+
// =============================================================================
|
|
20
|
+
// Assertion Error
|
|
21
|
+
// =============================================================================
|
|
22
|
+
/**
|
|
23
|
+
* Error thrown when an agent assertion fails.
|
|
24
|
+
*
|
|
25
|
+
* @category Testing
|
|
26
|
+
*/
|
|
27
|
+
export class AgentAssertionError extends Error {
|
|
28
|
+
/** The expected value */
|
|
29
|
+
expected;
|
|
30
|
+
/** The actual value */
|
|
31
|
+
actual;
|
|
32
|
+
/** Additional context */
|
|
33
|
+
context;
|
|
34
|
+
constructor(message, expected, actual, context) {
|
|
35
|
+
super(message);
|
|
36
|
+
this.name = "AgentAssertionError";
|
|
37
|
+
this.expected = expected;
|
|
38
|
+
this.actual = actual;
|
|
39
|
+
this.context = context;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// =============================================================================
|
|
43
|
+
// Response Assertions
|
|
44
|
+
// =============================================================================
|
|
45
|
+
/**
|
|
46
|
+
* Assert that a response contains specific text.
|
|
47
|
+
*
|
|
48
|
+
* @param result - The generate result to check
|
|
49
|
+
* @param text - Text that should be present
|
|
50
|
+
* @throws AgentAssertionError if text is not found
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```typescript
|
|
54
|
+
* const result = await agent.generate({ prompt: "Say hello" });
|
|
55
|
+
* assertResponseContains(result, "hello");
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* @category Testing
|
|
59
|
+
*/
|
|
60
|
+
export function assertResponseContains(result, text) {
|
|
61
|
+
const complete = ensureComplete(result);
|
|
62
|
+
if (!complete.text.toLowerCase().includes(text.toLowerCase())) {
|
|
63
|
+
throw new AgentAssertionError(`Expected response to contain "${text}"`, text, complete.text, {
|
|
64
|
+
fullText: complete.text,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Assert that a response matches a regular expression.
|
|
70
|
+
*
|
|
71
|
+
* @param result - The generate result to check
|
|
72
|
+
* @param pattern - Pattern to match against
|
|
73
|
+
* @throws AgentAssertionError if pattern doesn't match
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```typescript
|
|
77
|
+
* assertResponseMatches(result, /hello.*world/i);
|
|
78
|
+
* ```
|
|
79
|
+
*
|
|
80
|
+
* @category Testing
|
|
81
|
+
*/
|
|
82
|
+
export function assertResponseMatches(result, pattern) {
|
|
83
|
+
const complete = ensureComplete(result);
|
|
84
|
+
if (!pattern.test(complete.text)) {
|
|
85
|
+
throw new AgentAssertionError(`Expected response to match pattern ${pattern}`, pattern.toString(), complete.text, { fullText: complete.text });
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Assert that a response has a specific finish reason.
|
|
90
|
+
*
|
|
91
|
+
* @param result - The generate result to check
|
|
92
|
+
* @param reason - Expected finish reason
|
|
93
|
+
* @throws AgentAssertionError if reason doesn't match
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```typescript
|
|
97
|
+
* assertFinishReason(result, "stop");
|
|
98
|
+
* ```
|
|
99
|
+
*
|
|
100
|
+
* @category Testing
|
|
101
|
+
*/
|
|
102
|
+
export function assertFinishReason(result, reason) {
|
|
103
|
+
const complete = ensureComplete(result);
|
|
104
|
+
if (complete.finishReason !== reason) {
|
|
105
|
+
throw new AgentAssertionError(`Expected finish reason "${reason}", got "${complete.finishReason}"`, reason, complete.finishReason);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Assert that a response has usage information.
|
|
110
|
+
*
|
|
111
|
+
* @param result - The generate result to check
|
|
112
|
+
* @throws AgentAssertionError if usage is missing
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```typescript
|
|
116
|
+
* assertHasUsage(result);
|
|
117
|
+
* console.log(result.usage.inputTokens);
|
|
118
|
+
* ```
|
|
119
|
+
*
|
|
120
|
+
* @category Testing
|
|
121
|
+
*/
|
|
122
|
+
export function assertHasUsage(result) {
|
|
123
|
+
const complete = ensureComplete(result);
|
|
124
|
+
if (!complete.usage) {
|
|
125
|
+
throw new AgentAssertionError("Expected response to have usage information", "usage object", undefined);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Assert that token usage is within expected bounds.
|
|
130
|
+
*
|
|
131
|
+
* @param result - The generate result to check
|
|
132
|
+
* @param options - Usage bounds
|
|
133
|
+
* @throws AgentAssertionError if usage is outside bounds
|
|
134
|
+
*
|
|
135
|
+
* @example
|
|
136
|
+
* ```typescript
|
|
137
|
+
* assertUsageWithin(result, {
|
|
138
|
+
* maxInputTokens: 1000,
|
|
139
|
+
* maxOutputTokens: 500,
|
|
140
|
+
* });
|
|
141
|
+
* ```
|
|
142
|
+
*
|
|
143
|
+
* @category Testing
|
|
144
|
+
*/
|
|
145
|
+
export function assertUsageWithin(result, options) {
|
|
146
|
+
const complete = ensureComplete(result);
|
|
147
|
+
if (!complete.usage) {
|
|
148
|
+
throw new AgentAssertionError("Expected response to have usage information", "usage object", undefined);
|
|
149
|
+
}
|
|
150
|
+
const inputTokens = complete.usage.inputTokens ?? 0;
|
|
151
|
+
const outputTokens = complete.usage.outputTokens ?? 0;
|
|
152
|
+
if (options.minInputTokens !== undefined && inputTokens < options.minInputTokens) {
|
|
153
|
+
throw new AgentAssertionError(`Expected at least ${options.minInputTokens} input tokens, got ${inputTokens}`, options.minInputTokens, inputTokens);
|
|
154
|
+
}
|
|
155
|
+
if (options.maxInputTokens !== undefined && inputTokens > options.maxInputTokens) {
|
|
156
|
+
throw new AgentAssertionError(`Expected at most ${options.maxInputTokens} input tokens, got ${inputTokens}`, options.maxInputTokens, inputTokens);
|
|
157
|
+
}
|
|
158
|
+
if (options.minOutputTokens !== undefined && outputTokens < options.minOutputTokens) {
|
|
159
|
+
throw new AgentAssertionError(`Expected at least ${options.minOutputTokens} output tokens, got ${outputTokens}`, options.minOutputTokens, outputTokens);
|
|
160
|
+
}
|
|
161
|
+
if (options.maxOutputTokens !== undefined && outputTokens > options.maxOutputTokens) {
|
|
162
|
+
throw new AgentAssertionError(`Expected at most ${options.maxOutputTokens} output tokens, got ${outputTokens}`, options.maxOutputTokens, outputTokens);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Assert that structured output was generated.
|
|
167
|
+
*
|
|
168
|
+
* @param result - The generate result to check
|
|
169
|
+
* @throws AgentAssertionError if output is missing
|
|
170
|
+
*
|
|
171
|
+
* @example
|
|
172
|
+
* ```typescript
|
|
173
|
+
* assertHasOutput(result);
|
|
174
|
+
* const data = result.output as MySchema;
|
|
175
|
+
* ```
|
|
176
|
+
*
|
|
177
|
+
* @category Testing
|
|
178
|
+
*/
|
|
179
|
+
export function assertHasOutput(result) {
|
|
180
|
+
const complete = ensureComplete(result);
|
|
181
|
+
if (complete.output === undefined) {
|
|
182
|
+
throw new AgentAssertionError("Expected response to have structured output", "output object", undefined);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// =============================================================================
|
|
186
|
+
// Tool Call Assertions
|
|
187
|
+
// =============================================================================
|
|
188
|
+
/**
|
|
189
|
+
* Assert that a specific tool was called.
|
|
190
|
+
*
|
|
191
|
+
* @param result - The generate result to check
|
|
192
|
+
* @param toolName - Name of the tool expected to be called
|
|
193
|
+
* @returns The matching tool call
|
|
194
|
+
* @throws AgentAssertionError if tool was not called
|
|
195
|
+
*
|
|
196
|
+
* @example
|
|
197
|
+
* ```typescript
|
|
198
|
+
* const toolCall = assertToolCalled(result, "weather");
|
|
199
|
+
* expect(toolCall.input.city).toBe("Tokyo");
|
|
200
|
+
* ```
|
|
201
|
+
*
|
|
202
|
+
* @category Testing
|
|
203
|
+
*/
|
|
204
|
+
export function assertToolCalled(result, toolName) {
|
|
205
|
+
const complete = ensureComplete(result);
|
|
206
|
+
for (const step of complete.steps) {
|
|
207
|
+
for (const toolCall of step.toolCalls) {
|
|
208
|
+
if (toolCall.toolName === toolName) {
|
|
209
|
+
return toolCall;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
const calledTools = complete.steps
|
|
214
|
+
.flatMap((s) => s.toolCalls)
|
|
215
|
+
.map((tc) => tc.toolName);
|
|
216
|
+
throw new AgentAssertionError(`Expected tool "${toolName}" to be called`, toolName, calledTools, {
|
|
217
|
+
calledTools,
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Assert that a tool was called with specific input.
|
|
222
|
+
*
|
|
223
|
+
* @param result - The generate result to check
|
|
224
|
+
* @param toolName - Name of the tool
|
|
225
|
+
* @param expectedInput - Expected input (partial match)
|
|
226
|
+
* @returns The matching tool call
|
|
227
|
+
* @throws AgentAssertionError if tool was not called with expected input
|
|
228
|
+
*
|
|
229
|
+
* @example
|
|
230
|
+
* ```typescript
|
|
231
|
+
* assertToolCalledWith(result, "weather", { city: "Tokyo" });
|
|
232
|
+
* ```
|
|
233
|
+
*
|
|
234
|
+
* @category Testing
|
|
235
|
+
*/
|
|
236
|
+
export function assertToolCalledWith(result, toolName, expectedInput) {
|
|
237
|
+
const complete = ensureComplete(result);
|
|
238
|
+
for (const step of complete.steps) {
|
|
239
|
+
for (const toolCall of step.toolCalls) {
|
|
240
|
+
if (toolCall.toolName === toolName) {
|
|
241
|
+
const input = toolCall.input;
|
|
242
|
+
let matches = true;
|
|
243
|
+
for (const [key, value] of Object.entries(expectedInput)) {
|
|
244
|
+
if (input[key] !== value) {
|
|
245
|
+
matches = false;
|
|
246
|
+
break;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
if (matches) {
|
|
250
|
+
return toolCall;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
const toolCalls = complete.steps
|
|
256
|
+
.flatMap((s) => s.toolCalls)
|
|
257
|
+
.filter((tc) => tc.toolName === toolName)
|
|
258
|
+
.map((tc) => tc.input);
|
|
259
|
+
throw new AgentAssertionError(`Expected tool "${toolName}" to be called with ${JSON.stringify(expectedInput)}`, expectedInput, toolCalls, { toolCalls });
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Assert that a tool was NOT called.
|
|
263
|
+
*
|
|
264
|
+
* @param result - The generate result to check
|
|
265
|
+
* @param toolName - Name of the tool that should not be called
|
|
266
|
+
* @throws AgentAssertionError if tool was called
|
|
267
|
+
*
|
|
268
|
+
* @example
|
|
269
|
+
* ```typescript
|
|
270
|
+
* assertToolNotCalled(result, "dangerousTool");
|
|
271
|
+
* ```
|
|
272
|
+
*
|
|
273
|
+
* @category Testing
|
|
274
|
+
*/
|
|
275
|
+
export function assertToolNotCalled(result, toolName) {
|
|
276
|
+
const complete = ensureComplete(result);
|
|
277
|
+
for (const step of complete.steps) {
|
|
278
|
+
for (const toolCall of step.toolCalls) {
|
|
279
|
+
if (toolCall.toolName === toolName) {
|
|
280
|
+
throw new AgentAssertionError(`Expected tool "${toolName}" to NOT be called`, "tool not called", toolCall, { toolCall });
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Assert the number of times a tool was called.
|
|
287
|
+
*
|
|
288
|
+
* @param result - The generate result to check
|
|
289
|
+
* @param toolName - Name of the tool
|
|
290
|
+
* @param count - Expected call count
|
|
291
|
+
* @throws AgentAssertionError if count doesn't match
|
|
292
|
+
*
|
|
293
|
+
* @example
|
|
294
|
+
* ```typescript
|
|
295
|
+
* assertToolCallCount(result, "search", 3);
|
|
296
|
+
* ```
|
|
297
|
+
*
|
|
298
|
+
* @category Testing
|
|
299
|
+
*/
|
|
300
|
+
export function assertToolCallCount(result, toolName, count) {
|
|
301
|
+
const complete = ensureComplete(result);
|
|
302
|
+
let actualCount = 0;
|
|
303
|
+
for (const step of complete.steps) {
|
|
304
|
+
for (const toolCall of step.toolCalls) {
|
|
305
|
+
if (toolCall.toolName === toolName) {
|
|
306
|
+
actualCount++;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
if (actualCount !== count) {
|
|
311
|
+
throw new AgentAssertionError(`Expected tool "${toolName}" to be called ${count} times, got ${actualCount}`, count, actualCount);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Assert that steps were executed.
|
|
316
|
+
*
|
|
317
|
+
* @param result - The generate result to check
|
|
318
|
+
* @param minSteps - Minimum expected steps
|
|
319
|
+
* @param maxSteps - Maximum expected steps (optional)
|
|
320
|
+
* @throws AgentAssertionError if step count is outside bounds
|
|
321
|
+
*
|
|
322
|
+
* @example
|
|
323
|
+
* ```typescript
|
|
324
|
+
* assertStepCount(result, 1, 5);
|
|
325
|
+
* ```
|
|
326
|
+
*
|
|
327
|
+
* @category Testing
|
|
328
|
+
*/
|
|
329
|
+
export function assertStepCount(result, minSteps, maxSteps) {
|
|
330
|
+
const complete = ensureComplete(result);
|
|
331
|
+
const stepCount = complete.steps.length;
|
|
332
|
+
if (stepCount < minSteps) {
|
|
333
|
+
throw new AgentAssertionError(`Expected at least ${minSteps} steps, got ${stepCount}`, minSteps, stepCount);
|
|
334
|
+
}
|
|
335
|
+
if (maxSteps !== undefined && stepCount > maxSteps) {
|
|
336
|
+
throw new AgentAssertionError(`Expected at most ${maxSteps} steps, got ${stepCount}`, maxSteps, stepCount);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
// =============================================================================
|
|
340
|
+
// Stream Assertions
|
|
341
|
+
// =============================================================================
|
|
342
|
+
/**
|
|
343
|
+
* Collect all chunks from a stream into an array.
|
|
344
|
+
*
|
|
345
|
+
* @param stream - The stream to collect
|
|
346
|
+
* @returns Array of all stream parts
|
|
347
|
+
*
|
|
348
|
+
* @example
|
|
349
|
+
* ```typescript
|
|
350
|
+
* const chunks = await collectStreamChunks(agent.stream({ prompt: "Hi" }));
|
|
351
|
+
* assertStreamHasText(chunks);
|
|
352
|
+
* ```
|
|
353
|
+
*
|
|
354
|
+
* @category Testing
|
|
355
|
+
*/
|
|
356
|
+
export async function collectStreamChunks(stream) {
|
|
357
|
+
const chunks = [];
|
|
358
|
+
for await (const chunk of stream) {
|
|
359
|
+
chunks.push(chunk);
|
|
360
|
+
}
|
|
361
|
+
return chunks;
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Assert that a stream contains text chunks.
|
|
365
|
+
*
|
|
366
|
+
* @param chunks - Collected stream chunks
|
|
367
|
+
* @throws AgentAssertionError if no text chunks found
|
|
368
|
+
*
|
|
369
|
+
* @category Testing
|
|
370
|
+
*/
|
|
371
|
+
export function assertStreamHasText(chunks) {
|
|
372
|
+
const hasText = chunks.some((c) => c.type === "text-delta");
|
|
373
|
+
if (!hasText) {
|
|
374
|
+
throw new AgentAssertionError("Expected stream to contain text chunks", "text-delta chunks", chunks.map((c) => c.type));
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Assert that a stream has a finish chunk.
|
|
379
|
+
*
|
|
380
|
+
* @param chunks - Collected stream chunks
|
|
381
|
+
* @param reason - Optional expected finish reason
|
|
382
|
+
* @throws AgentAssertionError if no finish chunk or wrong reason
|
|
383
|
+
*
|
|
384
|
+
* @category Testing
|
|
385
|
+
*/
|
|
386
|
+
export function assertStreamFinished(chunks, reason) {
|
|
387
|
+
const finishChunk = chunks.find((c) => c.type === "finish");
|
|
388
|
+
if (!finishChunk) {
|
|
389
|
+
throw new AgentAssertionError("Expected stream to have a finish chunk", "finish chunk", chunks.map((c) => c.type));
|
|
390
|
+
}
|
|
391
|
+
if (reason && finishChunk.type === "finish" && finishChunk.finishReason !== reason) {
|
|
392
|
+
throw new AgentAssertionError(`Expected finish reason "${reason}", got "${finishChunk.finishReason}"`, reason, finishChunk.finishReason);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Get the combined text from stream chunks.
|
|
397
|
+
*
|
|
398
|
+
* @param chunks - Collected stream chunks
|
|
399
|
+
* @returns Combined text
|
|
400
|
+
*
|
|
401
|
+
* @example
|
|
402
|
+
* ```typescript
|
|
403
|
+
* const chunks = await collectStreamChunks(stream);
|
|
404
|
+
* const text = getStreamText(chunks);
|
|
405
|
+
* expect(text).toContain("hello");
|
|
406
|
+
* ```
|
|
407
|
+
*
|
|
408
|
+
* @category Testing
|
|
409
|
+
*/
|
|
410
|
+
export function getStreamText(chunks) {
|
|
411
|
+
return chunks
|
|
412
|
+
.filter((c) => c.type === "text-delta")
|
|
413
|
+
.map((c) => c.text)
|
|
414
|
+
.join("");
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* Assert that the combined stream text contains specific content.
|
|
418
|
+
*
|
|
419
|
+
* @param chunks - Collected stream chunks
|
|
420
|
+
* @param text - Text to look for
|
|
421
|
+
* @throws AgentAssertionError if text not found
|
|
422
|
+
*
|
|
423
|
+
* @category Testing
|
|
424
|
+
*/
|
|
425
|
+
export function assertStreamTextContains(chunks, text) {
|
|
426
|
+
const fullText = getStreamText(chunks);
|
|
427
|
+
if (!fullText.toLowerCase().includes(text.toLowerCase())) {
|
|
428
|
+
throw new AgentAssertionError(`Expected stream text to contain "${text}"`, text, fullText);
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
// =============================================================================
|
|
432
|
+
// Agent State Assertions
|
|
433
|
+
// =============================================================================
|
|
434
|
+
/**
|
|
435
|
+
* Assert that agent state contains a file.
|
|
436
|
+
*
|
|
437
|
+
* @param state - The agent state to check
|
|
438
|
+
* @param path - File path
|
|
439
|
+
* @throws AgentAssertionError if file doesn't exist
|
|
440
|
+
*
|
|
441
|
+
* @example
|
|
442
|
+
* ```typescript
|
|
443
|
+
* assertStateHasFile(agent.state, "/src/index.ts");
|
|
444
|
+
* ```
|
|
445
|
+
*
|
|
446
|
+
* @category Testing
|
|
447
|
+
*/
|
|
448
|
+
export function assertStateHasFile(state, path) {
|
|
449
|
+
if (!state.files[path]) {
|
|
450
|
+
throw new AgentAssertionError(`Expected state to have file "${path}"`, path, Object.keys(state.files));
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Assert that agent state has a todo item.
|
|
455
|
+
*
|
|
456
|
+
* @param state - The agent state to check
|
|
457
|
+
* @param matcher - Todo content or partial match
|
|
458
|
+
* @returns The matching todo
|
|
459
|
+
* @throws AgentAssertionError if todo not found
|
|
460
|
+
*
|
|
461
|
+
* @example
|
|
462
|
+
* ```typescript
|
|
463
|
+
* const todo = assertStateHasTodo(agent.state, { content: "Fix bug" });
|
|
464
|
+
* expect(todo.status).toBe("completed");
|
|
465
|
+
* ```
|
|
466
|
+
*
|
|
467
|
+
* @category Testing
|
|
468
|
+
*/
|
|
469
|
+
export function assertStateHasTodo(state, matcher) {
|
|
470
|
+
const predicate = typeof matcher === "string"
|
|
471
|
+
? (t) => t.content.includes(matcher)
|
|
472
|
+
: (t) => {
|
|
473
|
+
for (const [key, value] of Object.entries(matcher)) {
|
|
474
|
+
if (t[key] !== value) {
|
|
475
|
+
return false;
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
return true;
|
|
479
|
+
};
|
|
480
|
+
const found = state.todos.find(predicate);
|
|
481
|
+
if (!found) {
|
|
482
|
+
throw new AgentAssertionError(`Expected state to have matching todo`, matcher, state.todos);
|
|
483
|
+
}
|
|
484
|
+
return found;
|
|
485
|
+
}
|
|
486
|
+
/**
|
|
487
|
+
* Assert the number of todos in a state.
|
|
488
|
+
*
|
|
489
|
+
* @param state - The agent state to check
|
|
490
|
+
* @param count - Expected todo count
|
|
491
|
+
* @param status - Optional filter by status
|
|
492
|
+
* @throws AgentAssertionError if count doesn't match
|
|
493
|
+
*
|
|
494
|
+
* @example
|
|
495
|
+
* ```typescript
|
|
496
|
+
* assertTodoCount(agent.state, 3);
|
|
497
|
+
* assertTodoCount(agent.state, 1, "completed");
|
|
498
|
+
* ```
|
|
499
|
+
*
|
|
500
|
+
* @category Testing
|
|
501
|
+
*/
|
|
502
|
+
export function assertTodoCount(state, count, status) {
|
|
503
|
+
const todos = status ? state.todos.filter((t) => t.status === status) : state.todos;
|
|
504
|
+
if (todos.length !== count) {
|
|
505
|
+
throw new AgentAssertionError(`Expected ${count} todos${status ? ` with status "${status}"` : ""}, got ${todos.length}`, count, todos.length, { todos });
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
// =============================================================================
|
|
509
|
+
// Mock Agent Assertions
|
|
510
|
+
// =============================================================================
|
|
511
|
+
/**
|
|
512
|
+
* Assert that a mock agent was called.
|
|
513
|
+
*
|
|
514
|
+
* @param agent - The mock agent
|
|
515
|
+
* @param method - Method to check ("generate" or "stream")
|
|
516
|
+
* @throws AgentAssertionError if not called
|
|
517
|
+
*
|
|
518
|
+
* @category Testing
|
|
519
|
+
*/
|
|
520
|
+
export function assertMockAgentCalled(agent, method = "generate") {
|
|
521
|
+
const calls = method === "generate" ? agent.generateCalls : agent.streamCalls;
|
|
522
|
+
if (calls.length === 0) {
|
|
523
|
+
throw new AgentAssertionError(`Expected mock agent ${method}() to be called`, "at least 1 call", 0);
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
/**
|
|
527
|
+
* Assert that a mock agent was called a specific number of times.
|
|
528
|
+
*
|
|
529
|
+
* @param agent - The mock agent
|
|
530
|
+
* @param count - Expected call count
|
|
531
|
+
* @param method - Method to check ("generate" or "stream")
|
|
532
|
+
* @throws AgentAssertionError if count doesn't match
|
|
533
|
+
*
|
|
534
|
+
* @category Testing
|
|
535
|
+
*/
|
|
536
|
+
export function assertMockAgentCallCount(agent, count, method = "generate") {
|
|
537
|
+
const calls = method === "generate" ? agent.generateCalls : agent.streamCalls;
|
|
538
|
+
if (calls.length !== count) {
|
|
539
|
+
throw new AgentAssertionError(`Expected mock agent ${method}() to be called ${count} times`, count, calls.length);
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
/**
|
|
543
|
+
* Assert that a mock agent was called with specific options.
|
|
544
|
+
*
|
|
545
|
+
* @param agent - The mock agent
|
|
546
|
+
* @param options - Expected options (partial match)
|
|
547
|
+
* @param method - Method to check
|
|
548
|
+
* @throws AgentAssertionError if not called with options
|
|
549
|
+
*
|
|
550
|
+
* @category Testing
|
|
551
|
+
*/
|
|
552
|
+
export function assertMockAgentCalledWith(agent, options, method = "generate") {
|
|
553
|
+
const calls = method === "generate" ? agent.generateCalls : agent.streamCalls;
|
|
554
|
+
const found = calls.some((call) => {
|
|
555
|
+
for (const [key, value] of Object.entries(options)) {
|
|
556
|
+
if (call[key] !== value) {
|
|
557
|
+
return false;
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
return true;
|
|
561
|
+
});
|
|
562
|
+
if (!found) {
|
|
563
|
+
throw new AgentAssertionError(`Expected mock agent ${method}() to be called with matching options`, options, calls);
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
/**
|
|
567
|
+
* Assert multiple agent behavior expectations at once.
|
|
568
|
+
*
|
|
569
|
+
* This is a convenience function that combines multiple assertions.
|
|
570
|
+
*
|
|
571
|
+
* @param result - The generate result to check
|
|
572
|
+
* @param options - Behavior expectations
|
|
573
|
+
* @throws AgentAssertionError if any expectation fails
|
|
574
|
+
*
|
|
575
|
+
* @example
|
|
576
|
+
* ```typescript
|
|
577
|
+
* assertAgentBehavior(result, {
|
|
578
|
+
* responseContains: ["hello", "world"],
|
|
579
|
+
* finishReason: "stop",
|
|
580
|
+
* toolsCalled: ["search"],
|
|
581
|
+
* toolsNotCalled: ["delete"],
|
|
582
|
+
* minSteps: 1,
|
|
583
|
+
* hasUsage: true,
|
|
584
|
+
* });
|
|
585
|
+
* ```
|
|
586
|
+
*
|
|
587
|
+
* @category Testing
|
|
588
|
+
*/
|
|
589
|
+
export function assertAgentBehavior(result, options) {
|
|
590
|
+
// Response text assertions
|
|
591
|
+
if (options.responseContains) {
|
|
592
|
+
const texts = Array.isArray(options.responseContains)
|
|
593
|
+
? options.responseContains
|
|
594
|
+
: [options.responseContains];
|
|
595
|
+
for (const text of texts) {
|
|
596
|
+
assertResponseContains(result, text);
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
if (options.responseMatches) {
|
|
600
|
+
assertResponseMatches(result, options.responseMatches);
|
|
601
|
+
}
|
|
602
|
+
// Finish reason
|
|
603
|
+
if (options.finishReason) {
|
|
604
|
+
assertFinishReason(result, options.finishReason);
|
|
605
|
+
}
|
|
606
|
+
// Tool assertions
|
|
607
|
+
if (options.toolsCalled) {
|
|
608
|
+
for (const tool of options.toolsCalled) {
|
|
609
|
+
assertToolCalled(result, tool);
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
if (options.toolsNotCalled) {
|
|
613
|
+
for (const tool of options.toolsNotCalled) {
|
|
614
|
+
assertToolNotCalled(result, tool);
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
// Step count
|
|
618
|
+
if (options.minSteps !== undefined || options.maxSteps !== undefined) {
|
|
619
|
+
assertStepCount(result, options.minSteps ?? 0, options.maxSteps);
|
|
620
|
+
}
|
|
621
|
+
// Output
|
|
622
|
+
if (options.hasOutput) {
|
|
623
|
+
assertHasOutput(result);
|
|
624
|
+
}
|
|
625
|
+
// Usage
|
|
626
|
+
if (options.hasUsage) {
|
|
627
|
+
assertHasUsage(result);
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
//# sourceMappingURL=assertions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertions.js","sourceRoot":"","sources":["../../src/testing/assertions.ts"],"names":[],"mappings":"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"}
|