@anthropic-ai/sdk 0.70.1 → 0.71.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 (83) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +1 -1
  3. package/lib/tools/BetaToolRunner.d.mts +2 -0
  4. package/lib/tools/BetaToolRunner.d.mts.map +1 -1
  5. package/lib/tools/BetaToolRunner.d.ts +2 -0
  6. package/lib/tools/BetaToolRunner.d.ts.map +1 -1
  7. package/lib/tools/BetaToolRunner.js +88 -15
  8. package/lib/tools/BetaToolRunner.js.map +1 -1
  9. package/lib/tools/BetaToolRunner.mjs +88 -15
  10. package/lib/tools/BetaToolRunner.mjs.map +1 -1
  11. package/lib/tools/CompactionControl.d.mts +25 -0
  12. package/lib/tools/CompactionControl.d.mts.map +1 -0
  13. package/lib/tools/CompactionControl.d.ts +25 -0
  14. package/lib/tools/CompactionControl.d.ts.map +1 -0
  15. package/lib/tools/CompactionControl.js +28 -0
  16. package/lib/tools/CompactionControl.js.map +1 -0
  17. package/lib/tools/CompactionControl.mjs +25 -0
  18. package/lib/tools/CompactionControl.mjs.map +1 -0
  19. package/lib/tools/ToolRunner.js +1 -1
  20. package/lib/tools/ToolRunner.js.map +1 -1
  21. package/lib/tools/ToolRunner.mjs +1 -1
  22. package/lib/tools/ToolRunner.mjs.map +1 -1
  23. package/package.json +1 -1
  24. package/resources/beta/beta.d.mts +3 -3
  25. package/resources/beta/beta.d.mts.map +1 -1
  26. package/resources/beta/beta.d.ts +3 -3
  27. package/resources/beta/beta.d.ts.map +1 -1
  28. package/resources/beta/beta.js.map +1 -1
  29. package/resources/beta/beta.mjs.map +1 -1
  30. package/resources/beta/index.d.mts +1 -1
  31. package/resources/beta/index.d.mts.map +1 -1
  32. package/resources/beta/index.d.ts +1 -1
  33. package/resources/beta/index.d.ts.map +1 -1
  34. package/resources/beta/index.js.map +1 -1
  35. package/resources/beta/index.mjs.map +1 -1
  36. package/resources/beta/messages/batches.d.mts +288 -3
  37. package/resources/beta/messages/batches.d.mts.map +1 -1
  38. package/resources/beta/messages/batches.d.ts +288 -3
  39. package/resources/beta/messages/batches.d.ts.map +1 -1
  40. package/resources/beta/messages/batches.js.map +1 -1
  41. package/resources/beta/messages/batches.mjs.map +1 -1
  42. package/resources/beta/messages/index.d.mts +1 -1
  43. package/resources/beta/messages/index.d.mts.map +1 -1
  44. package/resources/beta/messages/index.d.ts +1 -1
  45. package/resources/beta/messages/index.d.ts.map +1 -1
  46. package/resources/beta/messages/index.js.map +1 -1
  47. package/resources/beta/messages/index.mjs.map +1 -1
  48. package/resources/beta/messages/messages.d.mts +344 -11
  49. package/resources/beta/messages/messages.d.mts.map +1 -1
  50. package/resources/beta/messages/messages.d.ts +344 -11
  51. package/resources/beta/messages/messages.d.ts.map +1 -1
  52. package/resources/beta/messages/messages.js +1 -1
  53. package/resources/beta/messages/messages.js.map +1 -1
  54. package/resources/beta/messages/messages.mjs +1 -1
  55. package/resources/beta/messages/messages.mjs.map +1 -1
  56. package/resources/completions.d.mts +1 -1
  57. package/resources/completions.d.ts +1 -1
  58. package/resources/messages/batches.d.mts +2 -2
  59. package/resources/messages/batches.d.ts +2 -2
  60. package/resources/messages/messages.d.mts +2 -2
  61. package/resources/messages/messages.d.mts.map +1 -1
  62. package/resources/messages/messages.d.ts +2 -2
  63. package/resources/messages/messages.d.ts.map +1 -1
  64. package/resources/messages/messages.js +1 -1
  65. package/resources/messages/messages.js.map +1 -1
  66. package/resources/messages/messages.mjs +1 -1
  67. package/resources/messages/messages.mjs.map +1 -1
  68. package/src/lib/tools/BetaToolRunner.ts +101 -15
  69. package/src/lib/tools/CompactionControl.ts +52 -0
  70. package/src/lib/tools/ToolRunner.ts +1 -1
  71. package/src/resources/beta/beta.ts +19 -2
  72. package/src/resources/beta/index.ts +18 -1
  73. package/src/resources/beta/messages/batches.ts +307 -3
  74. package/src/resources/beta/messages/index.ts +18 -1
  75. package/src/resources/beta/messages/messages.ts +462 -6
  76. package/src/resources/completions.ts +1 -1
  77. package/src/resources/messages/batches.ts +2 -2
  78. package/src/resources/messages/messages.ts +3 -1
  79. package/src/version.ts +1 -1
  80. package/version.d.mts +1 -1
  81. package/version.d.ts +1 -1
  82. package/version.js +1 -1
  83. package/version.mjs +1 -1
@@ -5,6 +5,7 @@ import { BetaMessage, BetaMessageParam, BetaToolUnion, MessageCreateParams } fro
5
5
  import { BetaMessageStream } from '../BetaMessageStream';
6
6
  import { RequestOptions } from '../../internal/request-options';
7
7
  import { buildHeaders } from '../../internal/headers';
8
+ import { CompactionControl, DEFAULT_SUMMARY_PROMPT, DEFAULT_TOKEN_THRESHOLD } from './CompactionControl';
8
9
 
9
10
  /**
10
11
  * Just Promise.withResolvers(), which is not available in all environments.
@@ -72,6 +73,88 @@ export class BetaToolRunner<Stream extends boolean> {
72
73
  this.#completion = promiseWithResolvers();
73
74
  }
74
75
 
76
+ async #checkAndCompact(): Promise<boolean> {
77
+ const compactionControl = this.#state.params.compactionControl;
78
+ if (!compactionControl || !compactionControl.enabled) {
79
+ return false;
80
+ }
81
+
82
+ let tokensUsed = 0;
83
+ if (this.#message !== undefined) {
84
+ try {
85
+ const message = await this.#message;
86
+ const totalInputTokens =
87
+ message.usage.input_tokens +
88
+ (message.usage.cache_creation_input_tokens ?? 0) +
89
+ (message.usage.cache_read_input_tokens ?? 0);
90
+ tokensUsed = totalInputTokens + message.usage.output_tokens;
91
+ } catch {
92
+ // If we can't get the message, skip compaction
93
+ return false;
94
+ }
95
+ }
96
+
97
+ const threshold = compactionControl.contextTokenThreshold ?? DEFAULT_TOKEN_THRESHOLD;
98
+
99
+ if (tokensUsed < threshold) {
100
+ return false;
101
+ }
102
+
103
+ const model = compactionControl.model ?? this.#state.params.model;
104
+ const summaryPrompt = compactionControl.summaryPrompt ?? DEFAULT_SUMMARY_PROMPT;
105
+
106
+ const messages = this.#state.params.messages;
107
+
108
+ if (messages[messages.length - 1]!.role === 'assistant') {
109
+ // Remove tool_use blocks from the last message to avoid 400 error
110
+ // (tool_use requires tool_result, which we don't have yet)
111
+ const lastMessage = messages[messages.length - 1]!;
112
+ if (Array.isArray(lastMessage.content)) {
113
+ const nonToolBlocks = lastMessage.content.filter((block) => block.type !== 'tool_use');
114
+
115
+ if (nonToolBlocks.length === 0) {
116
+ // If all blocks were tool_use, just remove the message entirely
117
+ messages.pop();
118
+ } else {
119
+ lastMessage.content = nonToolBlocks;
120
+ }
121
+ }
122
+ }
123
+
124
+ const response = await this.client.beta.messages.create(
125
+ {
126
+ model,
127
+ messages: [
128
+ ...messages,
129
+ {
130
+ role: 'user',
131
+ content: [
132
+ {
133
+ type: 'text',
134
+ text: summaryPrompt,
135
+ },
136
+ ],
137
+ },
138
+ ],
139
+ max_tokens: this.#state.params.max_tokens,
140
+ },
141
+ {
142
+ headers: { 'x-stainless-helper': 'compaction' },
143
+ },
144
+ );
145
+
146
+ if (response.content[0]?.type !== 'text') {
147
+ throw new AnthropicError('Expected text response for compaction');
148
+ }
149
+ this.#state.params.messages = [
150
+ {
151
+ role: 'user',
152
+ content: response.content,
153
+ },
154
+ ];
155
+ return true;
156
+ }
157
+
75
158
  async *[Symbol.asyncIterator](): AsyncIterator<
76
159
  Stream extends true ? BetaMessageStream
77
160
  : Stream extends false ? BetaMessage
@@ -97,11 +180,12 @@ export class BetaToolRunner<Stream extends boolean> {
97
180
  }
98
181
 
99
182
  this.#mutated = false;
100
- this.#message = undefined;
101
183
  this.#toolResponse = undefined;
102
184
  this.#iterationCount++;
185
+ this.#message = undefined;
186
+
187
+ const { max_iterations, compactionControl, ...params } = this.#state.params;
103
188
 
104
- const { max_iterations, ...params } = this.#state.params;
105
189
  if (params.stream) {
106
190
  stream = this.client.beta.messages.stream({ ...params }, this.#options);
107
191
  this.#message = stream.finalMessage();
@@ -114,18 +198,19 @@ export class BetaToolRunner<Stream extends boolean> {
114
198
  yield this.#message as any;
115
199
  }
116
200
 
117
- if (!this.#mutated) {
118
- const { role, content } = await this.#message;
119
- this.#state.params.messages.push({ role, content });
120
- }
121
-
122
- const toolMessage = await this.#generateToolResponse(this.#state.params.messages.at(-1)!);
123
- if (toolMessage) {
124
- this.#state.params.messages.push(toolMessage);
125
- }
126
-
127
- if (!toolMessage && !this.#mutated) {
128
- break;
201
+ const isCompacted = await this.#checkAndCompact();
202
+ if (!isCompacted) {
203
+ if (!this.#mutated) {
204
+ const { role, content } = await this.#message;
205
+ this.#state.params.messages.push({ role, content });
206
+ }
207
+
208
+ const toolMessage = await this.#generateToolResponse(this.#state.params.messages.at(-1)!);
209
+ if (toolMessage) {
210
+ this.#state.params.messages.push(toolMessage);
211
+ } else if (!this.#mutated) {
212
+ break;
213
+ }
129
214
  }
130
215
  } finally {
131
216
  if (stream) {
@@ -327,7 +412,7 @@ async function generateToolResponse(
327
412
 
328
413
  const toolResults = await Promise.all(
329
414
  toolUseBlocks.map(async (toolUse) => {
330
- const tool = params.tools.find((t) => t.name === toolUse.name);
415
+ const tool = params.tools.find((t) => ('name' in t ? t.name : t.mcp_server_name) === toolUse.name);
331
416
  if (!tool || !('run' in tool)) {
332
417
  return {
333
418
  type: 'tool_result' as const,
@@ -381,6 +466,7 @@ export type BetaToolRunnerParams = Simplify<
381
466
  * When exceeded, the loop will terminate even if tools are still being requested.
382
467
  */
383
468
  max_iterations?: number;
469
+ compactionControl?: CompactionControl;
384
470
  }
385
471
  >;
386
472
 
@@ -0,0 +1,52 @@
1
+ import { Model } from '../../resources';
2
+
3
+ export const DEFAULT_TOKEN_THRESHOLD = 100_000;
4
+
5
+ export const DEFAULT_SUMMARY_PROMPT = `You have been working on the task described above but have not yet completed it. Write a continuation summary that will allow you (or another instance of yourself) to resume work efficiently in a future context window where the conversation history will be replaced with this summary. Your summary should be structured, concise, and actionable. Include:
6
+ 1. Task Overview
7
+ The user's core request and success criteria
8
+ Any clarifications or constraints they specified
9
+ 2. Current State
10
+ What has been completed so far
11
+ Files created, modified, or analyzed (with paths if relevant)
12
+ Key outputs or artifacts produced
13
+ 3. Important Discoveries
14
+ Technical constraints or requirements uncovered
15
+ Decisions made and their rationale
16
+ Errors encountered and how they were resolved
17
+ What approaches were tried that didn't work (and why)
18
+ 4. Next Steps
19
+ Specific actions needed to complete the task
20
+ Any blockers or open questions to resolve
21
+ Priority order if multiple steps remain
22
+ 5. Context to Preserve
23
+ User preferences or style requirements
24
+ Domain-specific details that aren't obvious
25
+ Any promises made to the user
26
+ Be concise but complete—err on the side of including information that would prevent duplicate work or repeated mistakes. Write in a way that enables immediate resumption of the task.
27
+ Wrap your summary in <summary></summary> tags.`;
28
+
29
+ export interface CompactionControl {
30
+ /**
31
+ * The context token threshold at which to trigger compaction.
32
+ *
33
+ * When the cumulative token count (input + output) across all messages exceeds this threshold,
34
+ * the message history will be automatically summarized and compressed.
35
+ *
36
+ * @default 100000
37
+ */
38
+ contextTokenThreshold?: number;
39
+
40
+ /**
41
+ * The model to use for generating the compaction summary.
42
+ * If not specified, defaults to the same model used for the tool runner.
43
+ */
44
+ model?: Model;
45
+
46
+ /**
47
+ * The prompt used to instruct the model on how to generate the summary.
48
+ */
49
+ summaryPrompt?: string;
50
+
51
+ enabled: boolean;
52
+ }
@@ -319,7 +319,7 @@ async function generateToolResponse(
319
319
 
320
320
  const toolResults = await Promise.all(
321
321
  toolUseBlocks.map(async (toolUse) => {
322
- const tool = params.tools.find((t) => t.name === toolUse.name);
322
+ const tool = params.tools.find((t) => ('name' in t ? t.name : t.mcp_server_name) === toolUse.name);
323
323
  if (!tool || !('run' in tool)) {
324
324
  return {
325
325
  type: 'tool_result' as const,
@@ -72,6 +72,7 @@ import {
72
72
  BetaContextManagementConfig,
73
73
  BetaContextManagementResponse,
74
74
  BetaCountTokensContextManagementResponse,
75
+ BetaDirectCaller,
75
76
  BetaDocumentBlock,
76
77
  BetaFileDocumentSource,
77
78
  BetaFileImageSource,
@@ -83,6 +84,7 @@ import {
83
84
  BetaMCPToolResultBlock,
84
85
  BetaMCPToolUseBlock,
85
86
  BetaMCPToolUseBlockParam,
87
+ BetaMCPToolset,
86
88
  BetaMemoryTool20250818,
87
89
  BetaMemoryTool20250818Command,
88
90
  BetaMemoryTool20250818CreateCommand,
@@ -96,6 +98,7 @@ import {
96
98
  BetaMessageParam,
97
99
  BetaMessageTokensCount,
98
100
  BetaMetadata,
101
+ BetaOutputConfig,
99
102
  BetaPlainTextSource,
100
103
  BetaRawContentBlockDelta,
101
104
  BetaRawContentBlockDeltaEvent,
@@ -112,6 +115,7 @@ import {
112
115
  BetaRequestMCPServerURLDefinition,
113
116
  BetaRequestMCPToolResultBlockParam,
114
117
  BetaSearchResultBlockParam,
118
+ BetaServerToolCaller,
115
119
  BetaServerToolUsage,
116
120
  BetaServerToolUseBlock,
117
121
  BetaServerToolUseBlockParam,
@@ -151,8 +155,10 @@ import {
151
155
  BetaToolChoiceTool,
152
156
  BetaToolComputerUse20241022,
153
157
  BetaToolComputerUse20250124,
158
+ BetaToolComputerUse20251124,
159
+ BetaToolReferenceBlock,
160
+ BetaToolReferenceBlockParam,
154
161
  BetaToolResultBlockParam,
155
- BetaToolResultContentBlockParam,
156
162
  BetaToolTextEditor20241022,
157
163
  BetaToolTextEditor20250124,
158
164
  BetaToolTextEditor20250429,
@@ -188,6 +194,8 @@ import {
188
194
  MessageCreateParamsNonStreaming,
189
195
  MessageCreateParamsStreaming,
190
196
  Messages,
197
+ BetaMCPToolConfig,
198
+ BetaMCPToolDefaultConfig,
191
199
  } from './messages/messages';
192
200
  import * as SkillsAPI from './skills/skills';
193
201
  import {
@@ -222,6 +230,7 @@ export type AnthropicBeta =
222
230
  | 'output-128k-2025-02-19'
223
231
  | 'files-api-2025-04-14'
224
232
  | 'mcp-client-2025-04-04'
233
+ | 'mcp-client-2025-11-20'
225
234
  | 'dev-full-thinking-2025-05-14'
226
235
  | 'interleaved-thinking-2025-05-14'
227
236
  | 'code-execution-2025-05-22'
@@ -389,6 +398,7 @@ export declare namespace Beta {
389
398
  type BetaContextManagementConfig as BetaContextManagementConfig,
390
399
  type BetaContextManagementResponse as BetaContextManagementResponse,
391
400
  type BetaCountTokensContextManagementResponse as BetaCountTokensContextManagementResponse,
401
+ type BetaDirectCaller as BetaDirectCaller,
392
402
  type BetaDocumentBlock as BetaDocumentBlock,
393
403
  type BetaFileDocumentSource as BetaFileDocumentSource,
394
404
  type BetaFileImageSource as BetaFileImageSource,
@@ -397,9 +407,12 @@ export declare namespace Beta {
397
407
  type BetaJSONOutputFormat as BetaJSONOutputFormat,
398
408
  type BetaInputTokensClearAtLeast as BetaInputTokensClearAtLeast,
399
409
  type BetaInputTokensTrigger as BetaInputTokensTrigger,
410
+ type BetaMCPToolConfig as BetaMCPToolConfig,
411
+ type BetaMCPToolDefaultConfig as BetaMCPToolDefaultConfig,
400
412
  type BetaMCPToolResultBlock as BetaMCPToolResultBlock,
401
413
  type BetaMCPToolUseBlock as BetaMCPToolUseBlock,
402
414
  type BetaMCPToolUseBlockParam as BetaMCPToolUseBlockParam,
415
+ type BetaMCPToolset as BetaMCPToolset,
403
416
  type BetaMemoryTool20250818 as BetaMemoryTool20250818,
404
417
  type BetaMemoryTool20250818Command as BetaMemoryTool20250818Command,
405
418
  type BetaMemoryTool20250818CreateCommand as BetaMemoryTool20250818CreateCommand,
@@ -413,6 +426,7 @@ export declare namespace Beta {
413
426
  type BetaMessageParam as BetaMessageParam,
414
427
  type BetaMessageTokensCount as BetaMessageTokensCount,
415
428
  type BetaMetadata as BetaMetadata,
429
+ type BetaOutputConfig as BetaOutputConfig,
416
430
  type BetaPlainTextSource as BetaPlainTextSource,
417
431
  type BetaRawContentBlockDelta as BetaRawContentBlockDelta,
418
432
  type BetaRawContentBlockDeltaEvent as BetaRawContentBlockDeltaEvent,
@@ -429,6 +443,7 @@ export declare namespace Beta {
429
443
  type BetaRequestMCPServerURLDefinition as BetaRequestMCPServerURLDefinition,
430
444
  type BetaRequestMCPToolResultBlockParam as BetaRequestMCPToolResultBlockParam,
431
445
  type BetaSearchResultBlockParam as BetaSearchResultBlockParam,
446
+ type BetaServerToolCaller as BetaServerToolCaller,
432
447
  type BetaServerToolUsage as BetaServerToolUsage,
433
448
  type BetaServerToolUseBlock as BetaServerToolUseBlock,
434
449
  type BetaServerToolUseBlockParam as BetaServerToolUseBlockParam,
@@ -468,8 +483,10 @@ export declare namespace Beta {
468
483
  type BetaToolChoiceTool as BetaToolChoiceTool,
469
484
  type BetaToolComputerUse20241022 as BetaToolComputerUse20241022,
470
485
  type BetaToolComputerUse20250124 as BetaToolComputerUse20250124,
486
+ type BetaToolComputerUse20251124 as BetaToolComputerUse20251124,
487
+ type BetaToolReferenceBlock as BetaToolReferenceBlock,
488
+ type BetaToolReferenceBlockParam as BetaToolReferenceBlockParam,
471
489
  type BetaToolResultBlockParam as BetaToolResultBlockParam,
472
- type BetaToolResultContentBlockParam as BetaToolResultContentBlockParam,
473
490
  type BetaToolTextEditor20241022 as BetaToolTextEditor20241022,
474
491
  type BetaToolTextEditor20250124 as BetaToolTextEditor20250124,
475
492
  type BetaToolTextEditor20250429 as BetaToolTextEditor20250429,
@@ -82,6 +82,7 @@ export {
82
82
  type BetaContextManagementConfig,
83
83
  type BetaContextManagementResponse,
84
84
  type BetaCountTokensContextManagementResponse,
85
+ type BetaDirectCaller,
85
86
  type BetaDocumentBlock,
86
87
  type BetaFileDocumentSource,
87
88
  type BetaFileImageSource,
@@ -90,9 +91,12 @@ export {
90
91
  type BetaJSONOutputFormat,
91
92
  type BetaInputTokensClearAtLeast,
92
93
  type BetaInputTokensTrigger,
94
+ type BetaMCPToolConfig,
95
+ type BetaMCPToolDefaultConfig,
93
96
  type BetaMCPToolResultBlock,
94
97
  type BetaMCPToolUseBlock,
95
98
  type BetaMCPToolUseBlockParam,
99
+ type BetaMCPToolset,
96
100
  type BetaMemoryTool20250818,
97
101
  type BetaMemoryTool20250818Command,
98
102
  type BetaMemoryTool20250818CreateCommand,
@@ -106,6 +110,7 @@ export {
106
110
  type BetaMessageParam,
107
111
  type BetaMessageTokensCount,
108
112
  type BetaMetadata,
113
+ type BetaOutputConfig,
109
114
  type BetaPlainTextSource,
110
115
  type BetaRawContentBlockDelta,
111
116
  type BetaRawContentBlockDeltaEvent,
@@ -122,6 +127,7 @@ export {
122
127
  type BetaRequestMCPServerURLDefinition,
123
128
  type BetaRequestMCPToolResultBlockParam,
124
129
  type BetaSearchResultBlockParam,
130
+ type BetaServerToolCaller,
125
131
  type BetaServerToolUsage,
126
132
  type BetaServerToolUseBlock,
127
133
  type BetaServerToolUseBlockParam,
@@ -161,8 +167,18 @@ export {
161
167
  type BetaToolChoiceTool,
162
168
  type BetaToolComputerUse20241022,
163
169
  type BetaToolComputerUse20250124,
170
+ type BetaToolComputerUse20251124,
171
+ type BetaToolReferenceBlock,
172
+ type BetaToolReferenceBlockParam,
164
173
  type BetaToolResultBlockParam,
165
- type BetaToolResultContentBlockParam,
174
+ type BetaToolSearchToolBm25_20251119,
175
+ type BetaToolSearchToolRegex20251119,
176
+ type BetaToolSearchToolResultBlock,
177
+ type BetaToolSearchToolResultBlockParam,
178
+ type BetaToolSearchToolResultError,
179
+ type BetaToolSearchToolResultErrorParam,
180
+ type BetaToolSearchToolSearchResultBlock,
181
+ type BetaToolSearchToolSearchResultBlockParam,
166
182
  type BetaToolTextEditor20241022,
167
183
  type BetaToolTextEditor20250124,
168
184
  type BetaToolTextEditor20250429,
@@ -198,6 +214,7 @@ export {
198
214
  type MessageCreateParamsNonStreaming,
199
215
  type MessageCreateParamsStreaming,
200
216
  type MessageCountTokensParams,
217
+ type BetaToolResultContentBlockParam,
201
218
  } from './messages/index';
202
219
  export {
203
220
  Models,