@strands-agents/sdk 1.3.0 → 1.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.
Files changed (174) hide show
  1. package/README.md +13 -13
  2. package/dist/src/__fixtures__/test-sandbox.node.d.ts +15 -0
  3. package/dist/src/__fixtures__/test-sandbox.node.d.ts.map +1 -0
  4. package/dist/src/__fixtures__/test-sandbox.node.js +22 -0
  5. package/dist/src/__fixtures__/test-sandbox.node.js.map +1 -0
  6. package/dist/src/__tests__/mcp.test.js +14 -14
  7. package/dist/src/__tests__/mcp.test.js.map +1 -1
  8. package/dist/src/agent/__tests__/agent.test.js +195 -0
  9. package/dist/src/agent/__tests__/agent.test.js.map +1 -1
  10. package/dist/src/agent/__tests__/tool-caller.test.d.ts +2 -0
  11. package/dist/src/agent/__tests__/tool-caller.test.d.ts.map +1 -0
  12. package/dist/src/agent/__tests__/tool-caller.test.js +459 -0
  13. package/dist/src/agent/__tests__/tool-caller.test.js.map +1 -0
  14. package/dist/src/agent/agent.d.ts +62 -2
  15. package/dist/src/agent/agent.d.ts.map +1 -1
  16. package/dist/src/agent/agent.js +122 -66
  17. package/dist/src/agent/agent.js.map +1 -1
  18. package/dist/src/agent/tool-caller.d.ts +149 -0
  19. package/dist/src/agent/tool-caller.d.ts.map +1 -0
  20. package/dist/src/agent/tool-caller.js +198 -0
  21. package/dist/src/agent/tool-caller.js.map +1 -0
  22. package/dist/src/errors.d.ts +17 -0
  23. package/dist/src/errors.d.ts.map +1 -1
  24. package/dist/src/errors.js +21 -0
  25. package/dist/src/errors.js.map +1 -1
  26. package/dist/src/index.d.ts +8 -3
  27. package/dist/src/index.d.ts.map +1 -1
  28. package/dist/src/index.js +4 -1
  29. package/dist/src/index.js.map +1 -1
  30. package/dist/src/interventions/handler.d.ts +1 -2
  31. package/dist/src/interventions/handler.d.ts.map +1 -1
  32. package/dist/src/interventions/registry.d.ts +2 -0
  33. package/dist/src/interventions/registry.d.ts.map +1 -1
  34. package/dist/src/interventions/registry.js +4 -0
  35. package/dist/src/interventions/registry.js.map +1 -1
  36. package/dist/src/mcp.d.ts +20 -15
  37. package/dist/src/mcp.d.ts.map +1 -1
  38. package/dist/src/mcp.js +15 -8
  39. package/dist/src/mcp.js.map +1 -1
  40. package/dist/src/models/__tests__/anthropic.test.js +21 -6
  41. package/dist/src/models/__tests__/anthropic.test.js.map +1 -1
  42. package/dist/src/models/__tests__/bedrock.test.js +142 -0
  43. package/dist/src/models/__tests__/bedrock.test.js.map +1 -1
  44. package/dist/src/models/anthropic.d.ts.map +1 -1
  45. package/dist/src/models/anthropic.js +5 -2
  46. package/dist/src/models/anthropic.js.map +1 -1
  47. package/dist/src/models/bedrock.d.ts +26 -1
  48. package/dist/src/models/bedrock.d.ts.map +1 -1
  49. package/dist/src/models/bedrock.js +22 -4
  50. package/dist/src/models/bedrock.js.map +1 -1
  51. package/dist/src/models/openai/__tests__/chat.test.js +2 -10
  52. package/dist/src/models/openai/__tests__/chat.test.js.map +1 -1
  53. package/dist/src/models/openai/__tests__/errors.test.d.ts +2 -0
  54. package/dist/src/models/openai/__tests__/errors.test.d.ts.map +1 -0
  55. package/dist/src/models/openai/__tests__/errors.test.js +30 -0
  56. package/dist/src/models/openai/__tests__/errors.test.js.map +1 -0
  57. package/dist/src/models/openai/__tests__/responses.test.js +0 -19
  58. package/dist/src/models/openai/__tests__/responses.test.js.map +1 -1
  59. package/dist/src/models/openai/errors.d.ts.map +1 -1
  60. package/dist/src/models/openai/errors.js +5 -3
  61. package/dist/src/models/openai/errors.js.map +1 -1
  62. package/dist/src/multiagent/__tests__/nodes.test.js +50 -0
  63. package/dist/src/multiagent/__tests__/nodes.test.js.map +1 -1
  64. package/dist/src/multiagent/nodes.d.ts +23 -2
  65. package/dist/src/multiagent/nodes.d.ts.map +1 -1
  66. package/dist/src/multiagent/nodes.js +18 -4
  67. package/dist/src/multiagent/nodes.js.map +1 -1
  68. package/dist/src/registry/__tests__/tool-registry.test.js +50 -1
  69. package/dist/src/registry/__tests__/tool-registry.test.js.map +1 -1
  70. package/dist/src/registry/tool-registry.d.ts +13 -0
  71. package/dist/src/registry/tool-registry.d.ts.map +1 -1
  72. package/dist/src/registry/tool-registry.js +35 -1
  73. package/dist/src/registry/tool-registry.js.map +1 -1
  74. package/dist/src/sandbox/__tests__/posix-shell.test.node.d.ts +2 -0
  75. package/dist/src/sandbox/__tests__/posix-shell.test.node.d.ts.map +1 -0
  76. package/dist/src/sandbox/__tests__/posix-shell.test.node.js +252 -0
  77. package/dist/src/sandbox/__tests__/posix-shell.test.node.js.map +1 -0
  78. package/dist/src/sandbox/base.d.ts +138 -0
  79. package/dist/src/sandbox/base.d.ts.map +1 -0
  80. package/dist/src/sandbox/base.js +84 -0
  81. package/dist/src/sandbox/base.js.map +1 -0
  82. package/dist/src/sandbox/constants.d.ts +7 -0
  83. package/dist/src/sandbox/constants.d.ts.map +1 -0
  84. package/dist/src/sandbox/constants.js +7 -0
  85. package/dist/src/sandbox/constants.js.map +1 -0
  86. package/dist/src/sandbox/posix-shell.d.ts +32 -0
  87. package/dist/src/sandbox/posix-shell.d.ts.map +1 -0
  88. package/dist/src/sandbox/posix-shell.js +78 -0
  89. package/dist/src/sandbox/posix-shell.js.map +1 -0
  90. package/dist/src/sandbox/stream-process.d.ts +32 -0
  91. package/dist/src/sandbox/stream-process.d.ts.map +1 -0
  92. package/dist/src/sandbox/stream-process.js +160 -0
  93. package/dist/src/sandbox/stream-process.js.map +1 -0
  94. package/dist/src/sandbox/types.d.ts +57 -0
  95. package/dist/src/sandbox/types.d.ts.map +1 -0
  96. package/dist/src/sandbox/types.js +8 -0
  97. package/dist/src/sandbox/types.js.map +1 -0
  98. package/dist/src/telemetry/__tests__/meter.test.js +11 -0
  99. package/dist/src/telemetry/__tests__/meter.test.js.map +1 -1
  100. package/dist/src/telemetry/meter.d.ts +10 -6
  101. package/dist/src/telemetry/meter.d.ts.map +1 -1
  102. package/dist/src/telemetry/meter.js +16 -3
  103. package/dist/src/telemetry/meter.js.map +1 -1
  104. package/dist/src/tsconfig.tsbuildinfo +1 -1
  105. package/dist/src/types/__tests__/messages.test.js +28 -0
  106. package/dist/src/types/__tests__/messages.test.js.map +1 -1
  107. package/dist/src/types/agent.d.ts +51 -0
  108. package/dist/src/types/agent.d.ts.map +1 -1
  109. package/dist/src/types/agent.js.map +1 -1
  110. package/dist/src/types/lifecycle-observer.d.ts +18 -0
  111. package/dist/src/types/lifecycle-observer.d.ts.map +1 -0
  112. package/dist/src/types/lifecycle-observer.js +2 -0
  113. package/dist/src/types/lifecycle-observer.js.map +1 -0
  114. package/dist/src/types/messages.d.ts +18 -2
  115. package/dist/src/types/messages.d.ts.map +1 -1
  116. package/dist/src/types/messages.js +9 -0
  117. package/dist/src/types/messages.js.map +1 -1
  118. package/dist/src/utils/shell-quote.d.ts +12 -0
  119. package/dist/src/utils/shell-quote.d.ts.map +1 -0
  120. package/dist/src/utils/shell-quote.js +14 -0
  121. package/dist/src/utils/shell-quote.js.map +1 -0
  122. package/dist/src/vended-interventions/hitl/__tests__/hitl.test.d.ts +2 -0
  123. package/dist/src/vended-interventions/hitl/__tests__/hitl.test.d.ts.map +1 -0
  124. package/dist/src/vended-interventions/hitl/__tests__/hitl.test.js +358 -0
  125. package/dist/src/vended-interventions/hitl/__tests__/hitl.test.js.map +1 -0
  126. package/dist/src/vended-interventions/hitl/hitl.d.ts +115 -0
  127. package/dist/src/vended-interventions/hitl/hitl.d.ts.map +1 -0
  128. package/dist/src/vended-interventions/hitl/hitl.js +138 -0
  129. package/dist/src/vended-interventions/hitl/hitl.js.map +1 -0
  130. package/dist/src/vended-interventions/hitl/index.d.ts +24 -0
  131. package/dist/src/vended-interventions/hitl/index.d.ts.map +1 -0
  132. package/dist/src/vended-interventions/hitl/index.js +23 -0
  133. package/dist/src/vended-interventions/hitl/index.js.map +1 -0
  134. package/dist/src/vended-interventions/steering/__tests__/handler.test.d.ts +2 -0
  135. package/dist/src/vended-interventions/steering/__tests__/handler.test.d.ts.map +1 -0
  136. package/dist/src/vended-interventions/steering/__tests__/handler.test.js +163 -0
  137. package/dist/src/vended-interventions/steering/__tests__/handler.test.js.map +1 -0
  138. package/dist/src/vended-interventions/steering/__tests__/llm.test.d.ts +2 -0
  139. package/dist/src/vended-interventions/steering/__tests__/llm.test.d.ts.map +1 -0
  140. package/dist/src/vended-interventions/steering/__tests__/llm.test.js +60 -0
  141. package/dist/src/vended-interventions/steering/__tests__/llm.test.js.map +1 -0
  142. package/dist/src/vended-interventions/steering/__tests__/tool-ledger.test.d.ts +2 -0
  143. package/dist/src/vended-interventions/steering/__tests__/tool-ledger.test.d.ts.map +1 -0
  144. package/dist/src/vended-interventions/steering/__tests__/tool-ledger.test.js +94 -0
  145. package/dist/src/vended-interventions/steering/__tests__/tool-ledger.test.js.map +1 -0
  146. package/dist/src/vended-interventions/steering/handlers/handler.d.ts +64 -0
  147. package/dist/src/vended-interventions/steering/handlers/handler.d.ts.map +1 -0
  148. package/dist/src/vended-interventions/steering/handlers/handler.js +71 -0
  149. package/dist/src/vended-interventions/steering/handlers/handler.js.map +1 -0
  150. package/dist/src/vended-interventions/steering/handlers/llm.d.ts +72 -0
  151. package/dist/src/vended-interventions/steering/handlers/llm.d.ts.map +1 -0
  152. package/dist/src/vended-interventions/steering/handlers/llm.js +177 -0
  153. package/dist/src/vended-interventions/steering/handlers/llm.js.map +1 -0
  154. package/dist/src/vended-interventions/steering/index.d.ts +31 -0
  155. package/dist/src/vended-interventions/steering/index.d.ts.map +1 -0
  156. package/dist/src/vended-interventions/steering/index.js +32 -0
  157. package/dist/src/vended-interventions/steering/index.js.map +1 -0
  158. package/dist/src/vended-interventions/steering/providers/context-provider.d.ts +55 -0
  159. package/dist/src/vended-interventions/steering/providers/context-provider.d.ts.map +1 -0
  160. package/dist/src/vended-interventions/steering/providers/context-provider.js +8 -0
  161. package/dist/src/vended-interventions/steering/providers/context-provider.js.map +1 -0
  162. package/dist/src/vended-interventions/steering/providers/tool-ledger.d.ts +49 -0
  163. package/dist/src/vended-interventions/steering/providers/tool-ledger.d.ts.map +1 -0
  164. package/dist/src/vended-interventions/steering/providers/tool-ledger.js +75 -0
  165. package/dist/src/vended-interventions/steering/providers/tool-ledger.js.map +1 -0
  166. package/dist/src/vended-plugins/index.d.ts +11 -0
  167. package/dist/src/vended-plugins/index.d.ts.map +1 -0
  168. package/dist/src/vended-plugins/index.js +11 -0
  169. package/dist/src/vended-plugins/index.js.map +1 -0
  170. package/dist/src/vended-tools/index.d.ts +17 -0
  171. package/dist/src/vended-tools/index.d.ts.map +1 -0
  172. package/dist/src/vended-tools/index.js +17 -0
  173. package/dist/src/vended-tools/index.js.map +1 -0
  174. package/package.json +31 -15
@@ -0,0 +1,459 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { Agent } from '../agent.js';
3
+ import { MockMessageModel } from '../../__fixtures__/mock-message-model.js';
4
+ import { createMockTool } from '../../__fixtures__/tool-helpers.js';
5
+ import { Message, ToolResultBlock, TextBlock, ToolUseBlock } from '../../types/messages.js';
6
+ import { ConcurrentInvocationError, ToolNotFoundError } from '../../errors.js';
7
+ import { ToolStreamEvent } from '../../tools/tool.js';
8
+ describe('ToolCaller', () => {
9
+ describe('basic tool calling via .invoke()', () => {
10
+ it('calls a tool by name and returns the result', async () => {
11
+ const tool = createMockTool('calculator', () => new ToolResultBlock({
12
+ toolUseId: 'test-id',
13
+ status: 'success',
14
+ content: [new TextBlock('8')],
15
+ }));
16
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
17
+ const agent = new Agent({ model, tools: [tool] });
18
+ const result = await agent.tool.calculator.invoke({ a: 5, b: 3 });
19
+ expect(result).toStrictEqual(new ToolResultBlock({
20
+ toolUseId: 'test-id',
21
+ status: 'success',
22
+ content: [new TextBlock('8')],
23
+ }));
24
+ });
25
+ it('calls a tool with empty input when no input provided', async () => {
26
+ const tool = createMockTool('ping', () => new ToolResultBlock({
27
+ toolUseId: 'test-id',
28
+ status: 'success',
29
+ content: [new TextBlock('pong')],
30
+ }));
31
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
32
+ const agent = new Agent({ model, tools: [tool] });
33
+ const result = await agent.tool.ping.invoke();
34
+ expect(result).toStrictEqual(new ToolResultBlock({
35
+ toolUseId: 'test-id',
36
+ status: 'success',
37
+ content: [new TextBlock('pong')],
38
+ }));
39
+ });
40
+ it('throws when tool is not found', async () => {
41
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
42
+ const agent = new Agent({ model, tools: [] });
43
+ await expect(agent.tool.nonexistent.invoke()).rejects.toThrow(ToolNotFoundError);
44
+ await expect(agent.tool.nonexistent.invoke()).rejects.toThrow("Tool 'nonexistent' not found");
45
+ });
46
+ });
47
+ describe('underscore-to-hyphen normalization', () => {
48
+ it('resolves underscore names to hyphenated tool names', async () => {
49
+ const tool = createMockTool('my-tool', () => new ToolResultBlock({
50
+ toolUseId: 'test-id',
51
+ status: 'success',
52
+ content: [new TextBlock('ok')],
53
+ }));
54
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
55
+ const agent = new Agent({ model, tools: [tool] });
56
+ const result = await agent.tool.my_tool.invoke();
57
+ expect(result.status).toBe('success');
58
+ });
59
+ it('prefers exact name match over normalized match', async () => {
60
+ const exactTool = createMockTool('my_tool', () => new ToolResultBlock({
61
+ toolUseId: 'test-id',
62
+ status: 'success',
63
+ content: [new TextBlock('exact')],
64
+ }));
65
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
66
+ const agent = new Agent({ model, tools: [exactTool] });
67
+ const result = await agent.tool.my_tool.invoke();
68
+ expect(result).toStrictEqual(new ToolResultBlock({
69
+ toolUseId: 'test-id',
70
+ status: 'success',
71
+ content: [new TextBlock('exact')],
72
+ }));
73
+ });
74
+ });
75
+ describe('case-insensitive name resolution', () => {
76
+ it('resolves tool names case-insensitively', async () => {
77
+ const tool = createMockTool('MyTool', () => new ToolResultBlock({
78
+ toolUseId: 'test-id',
79
+ status: 'success',
80
+ content: [new TextBlock('ok')],
81
+ }));
82
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
83
+ const agent = new Agent({ model, tools: [tool] });
84
+ const result = await agent.tool.mytool.invoke();
85
+ expect(result.status).toBe('success');
86
+ });
87
+ it('prefers exact match over case-insensitive match', async () => {
88
+ const exactTool = createMockTool('myTool', () => new ToolResultBlock({
89
+ toolUseId: 'test-id',
90
+ status: 'success',
91
+ content: [new TextBlock('exact')],
92
+ }));
93
+ const upperTool = createMockTool('MYTOOL', () => new ToolResultBlock({
94
+ toolUseId: 'test-id',
95
+ status: 'success',
96
+ content: [new TextBlock('upper')],
97
+ }));
98
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
99
+ const agent = new Agent({ model, tools: [exactTool, upperTool] });
100
+ const result = await agent.tool.myTool.invoke();
101
+ expect(result.content[0]).toStrictEqual(new TextBlock('exact'));
102
+ });
103
+ });
104
+ describe('message history recording', () => {
105
+ it('records tool call in message history by default', async () => {
106
+ const tool = createMockTool('calculator', () => new ToolResultBlock({
107
+ toolUseId: 'test-id',
108
+ status: 'success',
109
+ content: [new TextBlock('8')],
110
+ }));
111
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
112
+ const agent = new Agent({ model, tools: [tool] });
113
+ await agent.tool.calculator.invoke({ a: 5, b: 3 });
114
+ // Per TESTING.md, prefer full-object assertions over per-field checks.
115
+ // toolUseId is non-deterministic (UUID), so use expect.stringMatching.
116
+ expect(agent.messages).toEqual([
117
+ new Message({
118
+ role: 'assistant',
119
+ content: [
120
+ new ToolUseBlock({
121
+ toolUseId: expect.stringMatching(/^tooluse_/),
122
+ name: 'calculator',
123
+ input: { a: 5, b: 3 },
124
+ }),
125
+ ],
126
+ }),
127
+ new Message({
128
+ role: 'user',
129
+ content: [
130
+ new ToolResultBlock({
131
+ toolUseId: 'test-id',
132
+ status: 'success',
133
+ content: [new TextBlock('8')],
134
+ }),
135
+ ],
136
+ }),
137
+ new Message({
138
+ role: 'assistant',
139
+ content: [new TextBlock('agent.tool.calculator was called.')],
140
+ }),
141
+ ]);
142
+ });
143
+ it('does not record when recordDirectToolCall is false per-call', async () => {
144
+ const tool = createMockTool('calculator', () => new ToolResultBlock({
145
+ toolUseId: 'test-id',
146
+ status: 'success',
147
+ content: [new TextBlock('8')],
148
+ }));
149
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
150
+ const agent = new Agent({ model, tools: [tool] });
151
+ await agent.tool.calculator.invoke({ a: 5, b: 3 }, { recordDirectToolCall: false });
152
+ expect(agent.messages).toHaveLength(0);
153
+ });
154
+ it('records when explicitly set to true per-call', async () => {
155
+ const tool = createMockTool('calculator', () => new ToolResultBlock({
156
+ toolUseId: 'test-id',
157
+ status: 'success',
158
+ content: [new TextBlock('8')],
159
+ }));
160
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
161
+ const agent = new Agent({ model, tools: [tool] });
162
+ await agent.tool.calculator.invoke({ a: 5, b: 3 }, { recordDirectToolCall: true });
163
+ expect(agent.messages).toHaveLength(3);
164
+ });
165
+ it('records full input without filtering', async () => {
166
+ const tool = createMockTool('my-tool', () => new ToolResultBlock({
167
+ toolUseId: 'test-id',
168
+ status: 'success',
169
+ content: [new TextBlock('ok')],
170
+ }));
171
+ Object.defineProperty(tool, 'toolSpec', {
172
+ value: {
173
+ name: 'my-tool',
174
+ description: 'Tool with strict schema',
175
+ inputSchema: {
176
+ type: 'object',
177
+ properties: {
178
+ allowed: { type: 'string' },
179
+ },
180
+ },
181
+ },
182
+ });
183
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
184
+ const agent = new Agent({ model, tools: [tool] });
185
+ await agent.tool.my_tool.invoke({ allowed: 'yes', extra: 'also-recorded' });
186
+ // Input is recorded as-is — no filtering
187
+ const recToolUseBlock = agent.messages[0].content[0];
188
+ expect(recToolUseBlock).toBeInstanceOf(ToolUseBlock);
189
+ expect(recToolUseBlock.input).toStrictEqual({ allowed: 'yes', extra: 'also-recorded' });
190
+ });
191
+ });
192
+ describe('concurrency protection', () => {
193
+ it('throws ConcurrentInvocationError when agent is invoking and recording is enabled', async () => {
194
+ const tool = createMockTool('slow-tool', () => new ToolResultBlock({
195
+ toolUseId: 'test-id',
196
+ status: 'success',
197
+ content: [new TextBlock('done')],
198
+ }));
199
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
200
+ const agent = new Agent({ model, tools: [tool] });
201
+ // Simulate the agent being in the middle of an invocation by mocking isInvoking
202
+ Object.defineProperty(agent, 'isInvoking', { get: () => true });
203
+ await expect(agent.tool.slow_tool.invoke()).rejects.toThrow(ConcurrentInvocationError);
204
+ await expect(agent.tool.slow_tool.invoke()).rejects.toThrow('Direct tool call cannot be made while the agent is in the middle of an invocation');
205
+ });
206
+ it('allows direct tool call during invocation when recordDirectToolCall is false', async () => {
207
+ const tool = createMockTool('quick-tool', () => new ToolResultBlock({
208
+ toolUseId: 'test-id',
209
+ status: 'success',
210
+ content: [new TextBlock('ok')],
211
+ }));
212
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
213
+ const agent = new Agent({ model, tools: [tool] });
214
+ // Simulate the agent being in the middle of an invocation
215
+ Object.defineProperty(agent, 'isInvoking', { get: () => true });
216
+ // Should NOT throw when recording is disabled
217
+ const result = await agent.tool.quick_tool.invoke({}, { recordDirectToolCall: false });
218
+ expect(result.status).toBe('success');
219
+ });
220
+ it('isInvoking is false on a fresh agent', () => {
221
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
222
+ const agent = new Agent({ model });
223
+ expect(agent.isInvoking).toBe(false);
224
+ });
225
+ });
226
+ describe('tool error handling', () => {
227
+ it('propagates errors when tool throws', async () => {
228
+ const throwingTool = createMockTool('thrower', () => {
229
+ throw new Error('Boom!');
230
+ });
231
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
232
+ const agent = new Agent({ model, tools: [throwingTool] });
233
+ await expect(agent.tool.thrower.invoke()).rejects.toThrow('Boom!');
234
+ });
235
+ });
236
+ describe('agent.tool accessor', () => {
237
+ it('is accessible as a property', () => {
238
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
239
+ const agent = new Agent({ model });
240
+ expect(agent.tool).toBeDefined();
241
+ });
242
+ it('returns same instance on multiple accesses', () => {
243
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
244
+ const agent = new Agent({ model });
245
+ expect(agent.tool).toBe(agent.tool);
246
+ });
247
+ it('returns a ToolHandle with invoke and stream methods', () => {
248
+ const tool = createMockTool('calculator', () => new ToolResultBlock({
249
+ toolUseId: 'test-id',
250
+ status: 'success',
251
+ content: [new TextBlock('ok')],
252
+ }));
253
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
254
+ const agent = new Agent({ model, tools: [tool] });
255
+ const handle = agent.tool.calculator;
256
+ expect(typeof handle.invoke).toBe('function');
257
+ expect(typeof handle.stream).toBe('function');
258
+ });
259
+ });
260
+ describe('tool use ID generation', () => {
261
+ it('generates unique tool use IDs using crypto.randomUUID', async () => {
262
+ const tool = createMockTool('id-tool', () => new ToolResultBlock({
263
+ toolUseId: 'test-id',
264
+ status: 'success',
265
+ content: [new TextBlock('ok')],
266
+ }));
267
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
268
+ const agent = new Agent({ model, tools: [tool] });
269
+ await agent.tool.id_tool.invoke();
270
+ await agent.tool.id_tool.invoke();
271
+ // Each call records 3 messages: [0]=assistant(toolUse), [1]=user(toolResult), [2]=assistant(ack)
272
+ // Second call: [3]=assistant(toolUse), [4]=user(toolResult), [5]=assistant(ack)
273
+ expect(agent.messages).toHaveLength(6);
274
+ const toolUse1 = agent.messages[0].content[0];
275
+ const toolUse2 = agent.messages[3].content[0];
276
+ // Verify both are ToolUseBlocks at the correct indices
277
+ expect(toolUse1).toBeInstanceOf(ToolUseBlock);
278
+ expect(toolUse2).toBeInstanceOf(ToolUseBlock);
279
+ // Verify IDs are unique and follow the expected format
280
+ expect(toolUse1.toolUseId).toMatch(/^tooluse_/);
281
+ expect(toolUse2.toolUseId).toMatch(/^tooluse_/);
282
+ expect(toolUse1.toolUseId).not.toBe(toolUse2.toolUseId);
283
+ });
284
+ });
285
+ describe('streaming via .stream()', () => {
286
+ it('yields intermediate events and returns final result', async () => {
287
+ const yields = [];
288
+ const streamingTool = {
289
+ name: 'streamer',
290
+ description: 'A tool that yields progress events',
291
+ toolSpec: {
292
+ name: 'streamer',
293
+ description: 'A tool that yields progress events',
294
+ inputSchema: { type: 'object', properties: {} },
295
+ },
296
+ async *stream() {
297
+ yields.push('first');
298
+ yield new ToolStreamEvent({ data: 'step 1' });
299
+ yields.push('second');
300
+ yield new ToolStreamEvent({ data: 'step 2' });
301
+ yields.push('third');
302
+ yield new ToolStreamEvent({ data: 'step 3' });
303
+ return new ToolResultBlock({
304
+ toolUseId: 'stream-id',
305
+ status: 'success',
306
+ content: [new TextBlock('complete')],
307
+ });
308
+ },
309
+ };
310
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
311
+ const agent = new Agent({ model, tools: [streamingTool] });
312
+ const events = [];
313
+ const gen = agent.tool.streamer.stream();
314
+ let result = await gen.next();
315
+ while (!result.done) {
316
+ events.push(result.value);
317
+ result = await gen.next();
318
+ }
319
+ const finalResult = result.value;
320
+ expect(finalResult.status).toBe('success');
321
+ expect(finalResult.content[0]).toStrictEqual(new TextBlock('complete'));
322
+ // Verify all yields were consumed (generator fully iterated)
323
+ expect(yields).toStrictEqual(['first', 'second', 'third']);
324
+ // Verify we received all 3 stream events
325
+ expect(events).toHaveLength(3);
326
+ });
327
+ it('invoke() also fully consumes multi-yield generator', async () => {
328
+ const yields = [];
329
+ const streamingTool = {
330
+ name: 'streamer',
331
+ description: 'A tool that yields progress events',
332
+ toolSpec: {
333
+ name: 'streamer',
334
+ description: 'A tool that yields progress events',
335
+ inputSchema: { type: 'object', properties: {} },
336
+ },
337
+ async *stream() {
338
+ yields.push('first');
339
+ yield new ToolStreamEvent({ data: 'step 1' });
340
+ yields.push('second');
341
+ yield new ToolStreamEvent({ data: 'step 2' });
342
+ yields.push('third');
343
+ yield new ToolStreamEvent({ data: 'step 3' });
344
+ return new ToolResultBlock({
345
+ toolUseId: 'stream-id',
346
+ status: 'success',
347
+ content: [new TextBlock('complete')],
348
+ });
349
+ },
350
+ };
351
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
352
+ const agent = new Agent({ model, tools: [streamingTool] });
353
+ const result = await agent.tool.streamer.invoke();
354
+ expect(result.status).toBe('success');
355
+ expect(result.content[0]).toStrictEqual(new TextBlock('complete'));
356
+ // Verify all yields were consumed even when using .invoke()
357
+ expect(yields).toStrictEqual(['first', 'second', 'third']);
358
+ });
359
+ });
360
+ describe('tool input passthrough', () => {
361
+ it('passes ALL parameters to tool execution', async () => {
362
+ let receivedInput = null;
363
+ const tool = createMockTool('capture-tool', () => new ToolResultBlock({
364
+ toolUseId: 'test-id',
365
+ status: 'success',
366
+ content: [new TextBlock('captured')],
367
+ }));
368
+ // Override stream to capture input
369
+ const originalStream = tool.stream.bind(tool);
370
+ tool.stream = function (context) {
371
+ receivedInput = context.toolUse.input;
372
+ return originalStream(context);
373
+ };
374
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
375
+ const agent = new Agent({ model, tools: [tool] });
376
+ await agent.tool.capture_tool.invoke({ allowed: 'yes', extra: 'should-pass-through' });
377
+ // Tool receives ALL parameters
378
+ expect(receivedInput).toStrictEqual({ allowed: 'yes', extra: 'should-pass-through' });
379
+ });
380
+ });
381
+ describe('dynamically added tools', () => {
382
+ it('can call a tool that was added after agent creation', async () => {
383
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
384
+ const agent = new Agent({ model, tools: [] });
385
+ // Add tool after creation
386
+ const laterTool = createMockTool('later-tool', () => new ToolResultBlock({
387
+ toolUseId: 'test-id',
388
+ status: 'success',
389
+ content: [new TextBlock('dynamic')],
390
+ }));
391
+ agent.toolRegistry.add(laterTool);
392
+ const result = await agent.tool.later_tool.invoke();
393
+ expect(result.status).toBe('success');
394
+ expect(result.content[0]).toStrictEqual(new TextBlock('dynamic'));
395
+ });
396
+ });
397
+ });
398
+ describe('MessageAddedEvent hooks', () => {
399
+ it('fires MessageAddedEvent for each message recorded during direct tool call', async () => {
400
+ const { MessageAddedEvent } = await import('../../hooks/events.js');
401
+ const tool = createMockTool('calculator', () => new ToolResultBlock({
402
+ toolUseId: 'test-id',
403
+ status: 'success',
404
+ content: [new TextBlock('8')],
405
+ }));
406
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
407
+ const agent = new Agent({ model, tools: [tool] });
408
+ const firedEvents = [];
409
+ agent.addHook(MessageAddedEvent, (event) => {
410
+ firedEvents.push(event);
411
+ });
412
+ await agent.tool.calculator.invoke({ a: 5, b: 3 });
413
+ // Should fire 3 MessageAddedEvents (one per recorded message).
414
+ // Use full-object assertions per TESTING.md.
415
+ expect(firedEvents).toHaveLength(3);
416
+ expect(firedEvents[0].message).toEqual(new Message({
417
+ role: 'assistant',
418
+ content: [
419
+ new ToolUseBlock({
420
+ toolUseId: expect.stringMatching(/^tooluse_/),
421
+ name: 'calculator',
422
+ input: { a: 5, b: 3 },
423
+ }),
424
+ ],
425
+ }));
426
+ expect(firedEvents[1].message).toEqual(new Message({
427
+ role: 'user',
428
+ content: [
429
+ new ToolResultBlock({
430
+ toolUseId: 'test-id',
431
+ status: 'success',
432
+ content: [new TextBlock('8')],
433
+ }),
434
+ ],
435
+ }));
436
+ expect(firedEvents[2].message).toEqual(new Message({
437
+ role: 'assistant',
438
+ content: [new TextBlock('agent.tool.calculator was called.')],
439
+ }));
440
+ });
441
+ it('does not fire MessageAddedEvent when recordDirectToolCall is false', async () => {
442
+ const { MessageAddedEvent } = await import('../../hooks/events.js');
443
+ const tool = createMockTool('calculator', () => new ToolResultBlock({
444
+ toolUseId: 'test-id',
445
+ status: 'success',
446
+ content: [new TextBlock('8')],
447
+ }));
448
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
449
+ const agent = new Agent({ model, tools: [tool] });
450
+ const firedEvents = [];
451
+ agent.addHook(MessageAddedEvent, (event) => {
452
+ firedEvents.push(event);
453
+ });
454
+ await agent.tool.calculator.invoke({ a: 5, b: 3 }, { recordDirectToolCall: false });
455
+ // No events should fire when recording is disabled
456
+ expect(firedEvents).toHaveLength(0);
457
+ });
458
+ });
459
+ //# sourceMappingURL=tool-caller.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-caller.test.js","sourceRoot":"","sources":["../../../../src/agent/__tests__/tool-caller.test.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@ import { ConversationManager } from '../conversation-manager/conversation-manage
13
13
  import type { HookableEventConstructor, HookCallback, HookCallbackOptions, HookCleanup } from '../hooks/types.js';
14
14
  import { HookableEvent } from '../hooks/events.js';
15
15
  import type { AgentAsToolOptions } from './agent-as-tool.js';
16
+ import type { ToolCallerProxy } from './tool-caller.js';
16
17
  import type { z } from 'zod';
17
18
  import { SessionManager } from '../session/session-manager.js';
18
19
  import type { AttributeValue } from '@opentelemetry/api';
@@ -218,6 +219,8 @@ export declare class Agent implements LocalAgent, InvokableAgent {
218
219
  _interruptState: InterruptState;
219
220
  /** Strategy for executing tool calls from a single assistant turn. */
220
221
  private readonly _toolExecutor;
222
+ /** Direct tool caller — created via {@link ToolCaller.create} factory. */
223
+ private readonly _toolCaller;
221
224
  /**
222
225
  * Creates an instance of the Agent.
223
226
  * @param config - The configuration for the agent.
@@ -246,8 +249,8 @@ export declare class Agent implements LocalAgent, InvokableAgent {
246
249
  addHook<T extends HookableEvent>(eventType: HookableEventConstructor<T>, callback: HookCallback<T>, options?: HookCallbackOptions): HookCleanup;
247
250
  initialize(): Promise<void>;
248
251
  /**
249
- * Acquires a lock to prevent concurrent invocations.
250
- * Returns a Disposable that releases the lock when disposed.
252
+ * Acquires the invocation lock. Throws if an invocation is already in progress.
253
+ * Callers must release via try/finally with `this._isInvoking = false`.
251
254
  */
252
255
  private acquireLock;
253
256
  /**
@@ -255,6 +258,33 @@ export declare class Agent implements LocalAgent, InvokableAgent {
255
258
  * Called at cancellation checkpoints within the agent loop.
256
259
  */
257
260
  private _throwIfCancelled;
261
+ /**
262
+ * Validates the per-invocation budget caps in {@link InvokeOptions.limits}.
263
+ * Called once at the top of `_stream` so bad inputs fail fast with a clear
264
+ * error instead of silently no-op'ing (`NaN`, `Infinity`) or tripping
265
+ * pathologically (zero swallows the user input; negative trips immediately).
266
+ *
267
+ * Each cap, when set, must be a positive finite number. Fractional values
268
+ * are accepted — harmless, and useful for token budgets derived from
269
+ * arithmetic.
270
+ */
271
+ private _validateLimits;
272
+ /**
273
+ * Evaluates the per-invocation budget caps in {@link InvokeOptions.limits}
274
+ * against the current invocation's metrics. Called at the top of each
275
+ * agent-loop iteration, after `_throwIfCancelled` and before `startCycle`.
276
+ *
277
+ * Reads from {@link AgentMetrics.latestAgentInvocation} (scoped to the
278
+ * current invocation) — not `cycleCount` / `accumulatedUsage`, which are
279
+ * lifetime accumulators that would cause caps to fire prematurely on the
280
+ * second `invoke()` call against a reused agent.
281
+ *
282
+ * Priority on simultaneous trip: turns → totalTokens → outputTokens.
283
+ *
284
+ * Returns the {@link StopReason} the loop should terminate with, or
285
+ * `undefined` if every configured cap is still within budget.
286
+ */
287
+ private _checkLimits;
258
288
  /**
259
289
  * The tools this agent can use.
260
290
  */
@@ -263,6 +293,28 @@ export declare class Agent implements LocalAgent, InvokableAgent {
263
293
  * The tool registry for managing the agent's tools.
264
294
  */
265
295
  get toolRegistry(): ToolRegistry;
296
+ /**
297
+ * Whether the agent is currently processing an invocation.
298
+ */
299
+ get isInvoking(): boolean;
300
+ /**
301
+ * Direct tool calling accessor.
302
+ *
303
+ * Returns a proxy where each property is a {@link ToolHandle} with
304
+ * `.invoke()` and `.stream()` methods:
305
+ * ```typescript
306
+ * const result = await agent.tool.calculator!.invoke({ a: 5, b: 3 })
307
+ *
308
+ * for await (const event of agent.tool.calculator!.stream({ a: 5, b: 3 })) {
309
+ * console.log('progress:', event)
310
+ * }
311
+ * ```
312
+ *
313
+ * Supports underscore-to-hyphen and case-insensitive name resolution.
314
+ * Results are recorded in message history by default (pass
315
+ * `{ recordDirectToolCall: false }` to skip).
316
+ */
317
+ get tool(): ToolCallerProxy;
266
318
  /**
267
319
  * The cancellation signal for the current invocation.
268
320
  *
@@ -582,6 +634,14 @@ export declare class Agent implements LocalAgent, InvokableAgent {
582
634
  * @returns Estimated input token count
583
635
  */
584
636
  private _estimateInputTokens;
637
+ /**
638
+ * Appends a message to the conversation history and fires MessageAddedEvent hooks.
639
+ *
640
+ * Used by {@link ToolCaller} (via the helper passed to `ToolCaller.create`) for
641
+ * direct tool calls that cannot yield events into the agent stream. This stays
642
+ * private — callers outside the agent should never directly mutate messages.
643
+ */
644
+ private _appendMessageAndFireHooks;
585
645
  /**
586
646
  * Appends a message to the conversation history and returns the event for yielding.
587
647
  *
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/agent/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/agent/agent.ts"],"names":[],"mappings":"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"}