@tanstack/ai-anthropic 0.16.6 → 0.16.9
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/dist/esm/adapters/text.d.ts +3 -1
- package/dist/esm/adapters/text.js +7 -4
- package/dist/esm/adapters/text.js.map +1 -1
- package/dist/esm/tools/anthropic-provider-tool.d.ts +24 -0
- package/dist/esm/tools/anthropic-provider-tool.js +50 -0
- package/dist/esm/tools/anthropic-provider-tool.js.map +1 -0
- package/dist/esm/tools/bash-tool.js +4 -4
- package/dist/esm/tools/bash-tool.js.map +1 -1
- package/dist/esm/tools/code-execution-tool.js +5 -5
- package/dist/esm/tools/code-execution-tool.js.map +1 -1
- package/dist/esm/tools/computer-use-tool.js +4 -4
- package/dist/esm/tools/computer-use-tool.js.map +1 -1
- package/dist/esm/tools/memory-tool.js +4 -4
- package/dist/esm/tools/memory-tool.js.map +1 -1
- package/dist/esm/tools/text-editor-tool.js +4 -4
- package/dist/esm/tools/text-editor-tool.js.map +1 -1
- package/dist/esm/tools/tool-converter.js +7 -4
- package/dist/esm/tools/tool-converter.js.map +1 -1
- package/dist/esm/tools/web-fetch-tool.js +4 -4
- package/dist/esm/tools/web-fetch-tool.js.map +1 -1
- package/dist/esm/tools/web-search-tool.js +9 -9
- package/dist/esm/tools/web-search-tool.js.map +1 -1
- package/package.json +3 -3
- package/src/adapters/text.ts +17 -6
- package/src/tools/anthropic-provider-tool.ts +68 -0
- package/src/tools/bash-tool.ts +13 -7
- package/src/tools/code-execution-tool.ts +22 -8
- package/src/tools/computer-use-tool.ts +15 -7
- package/src/tools/memory-tool.ts +16 -7
- package/src/tools/text-editor-tool.ts +15 -7
- package/src/tools/tool-converter.ts +7 -6
- package/src/tools/web-fetch-tool.ts +16 -7
- package/src/tools/web-search-tool.ts +27 -31
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computer-use-tool.js","names":[],"sources":["../../../src/tools/computer-use-tool.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"computer-use-tool.js","names":[],"sources":["../../../src/tools/computer-use-tool.ts"],"sourcesContent":["import {\n brandAnthropicProviderTool,\n getAnthropicProviderToolMetadata,\n} from './anthropic-provider-tool'\nimport type {\n BetaToolComputerUse20241022,\n BetaToolComputerUse20250124,\n} from '@anthropic-ai/sdk/resources/beta'\nimport type { ProviderTool, Tool } from '@tanstack/ai'\n\nexport type ComputerUseToolConfig =\n | BetaToolComputerUse20241022\n | BetaToolComputerUse20250124\n\n/** @deprecated Renamed to `ComputerUseToolConfig`. Will be removed in a future release. */\nexport type ComputerUseTool = ComputerUseToolConfig\n\nexport type AnthropicComputerUseTool = ProviderTool<'anthropic', 'computer_use'>\n\nexport function convertComputerUseToolToAdapterFormat(\n tool: Tool,\n): ComputerUseToolConfig {\n const metadata = getAnthropicProviderToolMetadata(\n tool,\n ) as ComputerUseToolConfig\n return metadata\n}\n\nexport function computerUseTool(\n config: ComputerUseToolConfig,\n): AnthropicComputerUseTool {\n return brandAnthropicProviderTool<AnthropicComputerUseTool>(\n {\n name: 'computer',\n description: '',\n metadata: config,\n },\n 'computer_use',\n )\n}\n"],"mappings":";;AAmBA,SAAgB,sCACd,MACuB;CAIvB,OAHiB,iCACf,IAEK;AACT;AAEA,SAAgB,gBACd,QAC0B;CAC1B,OAAO,2BACL;EACE,MAAM;EACN,aAAa;EACb,UAAU;CACZ,GACA,cACF;AACF"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { brandAnthropicProviderTool, getAnthropicProviderToolMetadata } from "./anthropic-provider-tool.js";
|
|
2
2
|
//#region src/tools/memory-tool.ts
|
|
3
3
|
function convertMemoryToolToAdapterFormat(tool) {
|
|
4
4
|
return {
|
|
5
5
|
type: "memory_20250818",
|
|
6
|
-
...tool
|
|
6
|
+
...getAnthropicProviderToolMetadata(tool)
|
|
7
7
|
};
|
|
8
8
|
}
|
|
9
9
|
function memoryTool(config) {
|
|
10
|
-
return
|
|
10
|
+
return brandAnthropicProviderTool({
|
|
11
11
|
name: "memory",
|
|
12
12
|
description: "",
|
|
13
13
|
metadata: config
|
|
14
|
-
});
|
|
14
|
+
}, "memory");
|
|
15
15
|
}
|
|
16
16
|
//#endregion
|
|
17
17
|
export { convertMemoryToolToAdapterFormat, memoryTool };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-tool.js","names":[],"sources":["../../../src/tools/memory-tool.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"memory-tool.js","names":[],"sources":["../../../src/tools/memory-tool.ts"],"sourcesContent":["import {\n brandAnthropicProviderTool,\n getAnthropicProviderToolMetadata,\n} from './anthropic-provider-tool'\nimport type { BetaMemoryTool20250818 } from '@anthropic-ai/sdk/resources/beta'\nimport type { ProviderTool, Tool } from '@tanstack/ai'\n\nexport type MemoryToolConfig = BetaMemoryTool20250818\n\n/** @deprecated Renamed to `MemoryToolConfig`. Will be removed in a future release. */\nexport type MemoryTool = MemoryToolConfig\n\nexport type AnthropicMemoryTool = ProviderTool<'anthropic', 'memory'>\n\nexport function convertMemoryToolToAdapterFormat(tool: Tool): MemoryToolConfig {\n const metadata = getAnthropicProviderToolMetadata(tool) as Omit<\n MemoryToolConfig,\n 'type'\n >\n return {\n type: 'memory_20250818',\n ...metadata,\n }\n}\n\nexport function memoryTool(config?: MemoryToolConfig): AnthropicMemoryTool {\n return brandAnthropicProviderTool<AnthropicMemoryTool>(\n {\n name: 'memory',\n description: '',\n metadata: config,\n },\n 'memory',\n )\n}\n"],"mappings":";;AAcA,SAAgB,iCAAiC,MAA8B;CAK7E,OAAO;EACL,MAAM;EACN,GANe,iCAAiC,IAM7C;CACL;AACF;AAEA,SAAgB,WAAW,QAAgD;CACzE,OAAO,2BACL;EACE,MAAM;EACN,aAAa;EACb,UAAU;CACZ,GACA,QACF;AACF"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { brandAnthropicProviderTool, getAnthropicProviderToolMetadata } from "./anthropic-provider-tool.js";
|
|
2
2
|
//#region src/tools/text-editor-tool.ts
|
|
3
3
|
function convertTextEditorToolToAdapterFormat(tool) {
|
|
4
|
-
return { ...tool
|
|
4
|
+
return { ...getAnthropicProviderToolMetadata(tool) };
|
|
5
5
|
}
|
|
6
6
|
function textEditorTool(config) {
|
|
7
|
-
return
|
|
7
|
+
return brandAnthropicProviderTool({
|
|
8
8
|
name: "str_replace_editor",
|
|
9
9
|
description: "",
|
|
10
10
|
metadata: config
|
|
11
|
-
});
|
|
11
|
+
}, "text_editor");
|
|
12
12
|
}
|
|
13
13
|
//#endregion
|
|
14
14
|
export { convertTextEditorToolToAdapterFormat, textEditorTool };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-editor-tool.js","names":[],"sources":["../../../src/tools/text-editor-tool.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"text-editor-tool.js","names":[],"sources":["../../../src/tools/text-editor-tool.ts"],"sourcesContent":["import {\n brandAnthropicProviderTool,\n getAnthropicProviderToolMetadata,\n} from './anthropic-provider-tool'\nimport type {\n ToolTextEditor20250124,\n ToolTextEditor20250429,\n ToolTextEditor20250728,\n} from '@anthropic-ai/sdk/resources/messages'\nimport type { ProviderTool, Tool } from '@tanstack/ai'\n\nexport type TextEditorToolConfig =\n | ToolTextEditor20250124\n | ToolTextEditor20250429\n | ToolTextEditor20250728\n\n/** @deprecated Renamed to `TextEditorToolConfig`. Will be removed in a future release. */\nexport type TextEditorTool = TextEditorToolConfig\n\nexport type AnthropicTextEditorTool = ProviderTool<'anthropic', 'text_editor'>\n\nexport function convertTextEditorToolToAdapterFormat(\n tool: Tool,\n): TextEditorToolConfig {\n const metadata = getAnthropicProviderToolMetadata(\n tool,\n ) as TextEditorToolConfig\n return {\n ...metadata,\n }\n}\n\nexport function textEditorTool<T extends TextEditorToolConfig>(\n config: T,\n): AnthropicTextEditorTool {\n return brandAnthropicProviderTool<AnthropicTextEditorTool>(\n {\n name: 'str_replace_editor',\n description: '',\n metadata: config,\n },\n 'text_editor',\n )\n}\n"],"mappings":";;AAqBA,SAAgB,qCACd,MACsB;CAItB,OAAO,EACL,GAJe,iCACf,IAGG,EACL;AACF;AAEA,SAAgB,eACd,QACyB;CACzB,OAAO,2BACL;EACE,MAAM;EACN,aAAa;EACb,UAAU;CACZ,GACA,aACF;AACF"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getAnthropicProviderToolKind } from "./anthropic-provider-tool.js";
|
|
1
2
|
import { convertBashToolToAdapterFormat } from "./bash-tool.js";
|
|
2
3
|
import { convertCodeExecutionToolToAdapterFormat } from "./code-execution-tool.js";
|
|
3
4
|
import { convertComputerUseToolToAdapterFormat } from "./computer-use-tool.js";
|
|
@@ -6,6 +7,7 @@ import { convertMemoryToolToAdapterFormat } from "./memory-tool.js";
|
|
|
6
7
|
import { convertTextEditorToolToAdapterFormat } from "./text-editor-tool.js";
|
|
7
8
|
import { convertWebFetchToolToAdapterFormat } from "./web-fetch-tool.js";
|
|
8
9
|
import { convertWebSearchToolToAdapterFormat } from "./web-search-tool.js";
|
|
10
|
+
import { assertUniqueToolNames } from "@tanstack/ai/adapter-internals";
|
|
9
11
|
//#region src/tools/tool-converter.ts
|
|
10
12
|
/**
|
|
11
13
|
* Converts standard Tool format to Anthropic-specific tool format
|
|
@@ -32,16 +34,17 @@ import { convertWebSearchToolToAdapterFormat } from "./web-search-tool.js";
|
|
|
32
34
|
* ```
|
|
33
35
|
*/
|
|
34
36
|
function convertToolsToProviderFormat(tools) {
|
|
37
|
+
assertUniqueToolNames(tools);
|
|
35
38
|
return tools.map((tool) => {
|
|
36
|
-
switch (tool
|
|
39
|
+
switch (getAnthropicProviderToolKind(tool)) {
|
|
37
40
|
case "bash": return convertBashToolToAdapterFormat(tool);
|
|
38
41
|
case "code_execution": return convertCodeExecutionToolToAdapterFormat(tool);
|
|
39
|
-
case "
|
|
42
|
+
case "computer_use": return convertComputerUseToolToAdapterFormat(tool);
|
|
40
43
|
case "memory": return convertMemoryToolToAdapterFormat(tool);
|
|
41
|
-
case "
|
|
44
|
+
case "text_editor": return convertTextEditorToolToAdapterFormat(tool);
|
|
42
45
|
case "web_fetch": return convertWebFetchToolToAdapterFormat(tool);
|
|
43
46
|
case "web_search": return convertWebSearchToolToAdapterFormat(tool);
|
|
44
|
-
|
|
47
|
+
case void 0: return convertCustomToolToAdapterFormat(tool);
|
|
45
48
|
}
|
|
46
49
|
});
|
|
47
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-converter.js","names":[],"sources":["../../../src/tools/tool-converter.ts"],"sourcesContent":["import { convertBashToolToAdapterFormat } from './bash-tool'\nimport { convertCodeExecutionToolToAdapterFormat } from './code-execution-tool'\nimport { convertComputerUseToolToAdapterFormat } from './computer-use-tool'\nimport { convertCustomToolToAdapterFormat } from './custom-tool'\nimport { convertMemoryToolToAdapterFormat } from './memory-tool'\nimport { convertTextEditorToolToAdapterFormat } from './text-editor-tool'\nimport { convertWebFetchToolToAdapterFormat } from './web-fetch-tool'\nimport { convertWebSearchToolToAdapterFormat } from './web-search-tool'\nimport type { AnthropicTool } from './index'\nimport type { Tool } from '@tanstack/ai'\n\n/**\n * Converts standard Tool format to Anthropic-specific tool format\n *\n * @param tools - Array of standard Tool objects\n * @returns Array of Anthropic-specific tool definitions\n *\n * @example\n * ```typescript\n * const tools: Tool[] = [{\n * type: \"function\",\n * function: {\n * name: \"get_weather\",\n * description: \"Get weather for a location\",\n * parameters: {\n * type: \"object\",\n * properties: { location: { type: \"string\" } },\n * required: [\"location\"]\n * }\n * }\n * }];\n *\n * const anthropicTools = convertToolsToProviderFormat(tools);\n * ```\n */\nexport function convertToolsToProviderFormat<TTool extends Tool>(\n tools: Array<TTool>,\n): Array<AnthropicTool> {\n return tools.map((tool) => {\n
|
|
1
|
+
{"version":3,"file":"tool-converter.js","names":[],"sources":["../../../src/tools/tool-converter.ts"],"sourcesContent":["import { assertUniqueToolNames } from '@tanstack/ai/adapter-internals'\nimport { getAnthropicProviderToolKind } from './anthropic-provider-tool'\nimport { convertBashToolToAdapterFormat } from './bash-tool'\nimport { convertCodeExecutionToolToAdapterFormat } from './code-execution-tool'\nimport { convertComputerUseToolToAdapterFormat } from './computer-use-tool'\nimport { convertCustomToolToAdapterFormat } from './custom-tool'\nimport { convertMemoryToolToAdapterFormat } from './memory-tool'\nimport { convertTextEditorToolToAdapterFormat } from './text-editor-tool'\nimport { convertWebFetchToolToAdapterFormat } from './web-fetch-tool'\nimport { convertWebSearchToolToAdapterFormat } from './web-search-tool'\nimport type { AnthropicTool } from './index'\nimport type { Tool } from '@tanstack/ai'\n\n/**\n * Converts standard Tool format to Anthropic-specific tool format\n *\n * @param tools - Array of standard Tool objects\n * @returns Array of Anthropic-specific tool definitions\n *\n * @example\n * ```typescript\n * const tools: Tool[] = [{\n * type: \"function\",\n * function: {\n * name: \"get_weather\",\n * description: \"Get weather for a location\",\n * parameters: {\n * type: \"object\",\n * properties: { location: { type: \"string\" } },\n * required: [\"location\"]\n * }\n * }\n * }];\n *\n * const anthropicTools = convertToolsToProviderFormat(tools);\n * ```\n */\nexport function convertToolsToProviderFormat<TTool extends Tool>(\n tools: Array<TTool>,\n): Array<AnthropicTool> {\n assertUniqueToolNames(tools)\n return tools.map((tool) => {\n switch (getAnthropicProviderToolKind(tool)) {\n case 'bash':\n return convertBashToolToAdapterFormat(tool)\n case 'code_execution':\n return convertCodeExecutionToolToAdapterFormat(tool)\n case 'computer_use':\n return convertComputerUseToolToAdapterFormat(tool)\n case 'memory':\n return convertMemoryToolToAdapterFormat(tool)\n case 'text_editor':\n return convertTextEditorToolToAdapterFormat(tool)\n case 'web_fetch':\n return convertWebFetchToolToAdapterFormat(tool)\n case 'web_search':\n return convertWebSearchToolToAdapterFormat(tool)\n case undefined:\n return convertCustomToolToAdapterFormat(tool)\n }\n })\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,SAAgB,6BACd,OACsB;CACtB,sBAAsB,KAAK;CAC3B,OAAO,MAAM,KAAK,SAAS;EACzB,QAAQ,6BAA6B,IAAI,GAAzC;GACE,KAAK,QACH,OAAO,+BAA+B,IAAI;GAC5C,KAAK,kBACH,OAAO,wCAAwC,IAAI;GACrD,KAAK,gBACH,OAAO,sCAAsC,IAAI;GACnD,KAAK,UACH,OAAO,iCAAiC,IAAI;GAC9C,KAAK,eACH,OAAO,qCAAqC,IAAI;GAClD,KAAK,aACH,OAAO,mCAAmC,IAAI;GAChD,KAAK,cACH,OAAO,oCAAoC,IAAI;GACjD,KAAK,KAAA,GACH,OAAO,iCAAiC,IAAI;EAChD;CACF,CAAC;AACH"}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { brandAnthropicProviderTool, getAnthropicProviderToolMetadata } from "./anthropic-provider-tool.js";
|
|
2
2
|
//#region src/tools/web-fetch-tool.ts
|
|
3
3
|
function convertWebFetchToolToAdapterFormat(tool) {
|
|
4
4
|
return {
|
|
5
5
|
name: "web_fetch",
|
|
6
6
|
type: "web_fetch_20250910",
|
|
7
|
-
...tool
|
|
7
|
+
...getAnthropicProviderToolMetadata(tool)
|
|
8
8
|
};
|
|
9
9
|
}
|
|
10
10
|
function webFetchTool(config) {
|
|
11
|
-
return
|
|
11
|
+
return brandAnthropicProviderTool({
|
|
12
12
|
name: "web_fetch",
|
|
13
13
|
description: "",
|
|
14
14
|
metadata: config
|
|
15
|
-
});
|
|
15
|
+
}, "web_fetch");
|
|
16
16
|
}
|
|
17
17
|
//#endregion
|
|
18
18
|
export { convertWebFetchToolToAdapterFormat, webFetchTool };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-fetch-tool.js","names":[],"sources":["../../../src/tools/web-fetch-tool.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"web-fetch-tool.js","names":[],"sources":["../../../src/tools/web-fetch-tool.ts"],"sourcesContent":["import {\n brandAnthropicProviderTool,\n getAnthropicProviderToolMetadata,\n} from './anthropic-provider-tool'\nimport type { BetaWebFetchTool20250910 } from '@anthropic-ai/sdk/resources/beta'\nimport type { ProviderTool, Tool } from '@tanstack/ai'\n\nexport type WebFetchToolConfig = BetaWebFetchTool20250910\n\n/** @deprecated Renamed to `WebFetchToolConfig`. Will be removed in a future release. */\nexport type WebFetchTool = WebFetchToolConfig\n\nexport type AnthropicWebFetchTool = ProviderTool<'anthropic', 'web_fetch'>\n\nexport function convertWebFetchToolToAdapterFormat(\n tool: Tool,\n): WebFetchToolConfig {\n const metadata = getAnthropicProviderToolMetadata(tool) as Omit<\n WebFetchToolConfig,\n 'type' | 'name'\n >\n return {\n name: 'web_fetch',\n type: 'web_fetch_20250910',\n ...metadata,\n }\n}\n\nexport function webFetchTool(\n config?: Omit<WebFetchToolConfig, 'type' | 'name'>,\n): AnthropicWebFetchTool {\n return brandAnthropicProviderTool<AnthropicWebFetchTool>(\n {\n name: 'web_fetch',\n description: '',\n metadata: config,\n },\n 'web_fetch',\n )\n}\n"],"mappings":";;AAcA,SAAgB,mCACd,MACoB;CAKpB,OAAO;EACL,MAAM;EACN,MAAM;EACN,GAPe,iCAAiC,IAO7C;CACL;AACF;AAEA,SAAgB,aACd,QACuB;CACvB,OAAO,2BACL;EACE,MAAM;EACN,aAAa;EACb,UAAU;CACZ,GACA,WACF;AACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { brandAnthropicProviderTool, getAnthropicProviderToolMetadata } from "./anthropic-provider-tool.js";
|
|
2
2
|
//#region src/tools/web-search-tool.ts
|
|
3
3
|
var validateDomains = (tool) => {
|
|
4
4
|
if (tool.allowed_domains && tool.blocked_domains) throw new Error("allowed_domains and blocked_domains cannot be used together.");
|
|
@@ -13,25 +13,25 @@ var validateUserLocation = (tool) => {
|
|
|
13
13
|
}
|
|
14
14
|
};
|
|
15
15
|
function convertWebSearchToolToAdapterFormat(tool) {
|
|
16
|
-
const metadata = tool
|
|
16
|
+
const metadata = getAnthropicProviderToolMetadata(tool);
|
|
17
17
|
return {
|
|
18
18
|
name: "web_search",
|
|
19
19
|
type: "web_search_20250305",
|
|
20
|
-
...metadata
|
|
21
|
-
...metadata
|
|
22
|
-
...metadata
|
|
23
|
-
...metadata
|
|
24
|
-
cache_control: metadata.
|
|
20
|
+
...metadata?.allowed_domains !== void 0 && { allowed_domains: metadata.allowed_domains },
|
|
21
|
+
...metadata?.blocked_domains !== void 0 && { blocked_domains: metadata.blocked_domains },
|
|
22
|
+
...metadata?.max_uses !== void 0 && { max_uses: metadata.max_uses },
|
|
23
|
+
...metadata?.user_location !== void 0 && { user_location: metadata.user_location },
|
|
24
|
+
...metadata?.cache_control !== void 0 && { cache_control: metadata.cache_control }
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
27
|
function webSearchTool(config) {
|
|
28
28
|
validateDomains(config);
|
|
29
29
|
validateUserLocation(config);
|
|
30
|
-
return
|
|
30
|
+
return brandAnthropicProviderTool({
|
|
31
31
|
name: "web_search",
|
|
32
32
|
description: "",
|
|
33
33
|
metadata: config
|
|
34
|
-
});
|
|
34
|
+
}, "web_search");
|
|
35
35
|
}
|
|
36
36
|
//#endregion
|
|
37
37
|
export { convertWebSearchToolToAdapterFormat, webSearchTool };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-search-tool.js","names":[],"sources":["../../../src/tools/web-search-tool.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"web-search-tool.js","names":[],"sources":["../../../src/tools/web-search-tool.ts"],"sourcesContent":["import {\n brandAnthropicProviderTool,\n getAnthropicProviderToolMetadata,\n} from './anthropic-provider-tool'\nimport type { WebSearchTool20250305 } from '@anthropic-ai/sdk/resources/messages'\nimport type { ProviderTool, Tool } from '@tanstack/ai'\n\nexport type WebSearchToolConfig = WebSearchTool20250305\n\n/** @deprecated Renamed to `WebSearchToolConfig`. Will be removed in a future release. */\nexport type WebSearchTool = WebSearchToolConfig\n\nexport type AnthropicWebSearchTool = ProviderTool<'anthropic', 'web_search'>\n\nconst validateDomains = (tool: WebSearchToolConfig) => {\n if (tool.allowed_domains && tool.blocked_domains) {\n throw new Error(\n 'allowed_domains and blocked_domains cannot be used together.',\n )\n }\n}\n\nconst validateUserLocation = (tool: WebSearchToolConfig) => {\n const userLocation = tool.user_location\n if (userLocation) {\n if (\n userLocation.city &&\n (userLocation.city.length < 1 || userLocation.city.length > 255)\n ) {\n throw new Error(\n 'user_location.city must be between 1 and 255 characters.',\n )\n }\n if (userLocation.country && userLocation.country.length !== 2) {\n throw new Error('user_location.country must be exactly 2 characters.')\n }\n if (\n userLocation.region &&\n (userLocation.region.length < 1 || userLocation.region.length > 255)\n ) {\n throw new Error(\n 'user_location.region must be between 1 and 255 characters.',\n )\n }\n if (\n userLocation.timezone &&\n (userLocation.timezone.length < 1 || userLocation.timezone.length > 255)\n ) {\n throw new Error(\n 'user_location.timezone must be between 1 and 255 characters.',\n )\n }\n }\n}\n\nexport function convertWebSearchToolToAdapterFormat(\n tool: Tool,\n): WebSearchToolConfig {\n // The factory stores the SDK config (`allowed_domains`, `max_uses`, …)\n // on `metadata`. Vendor `WebSearchTool20250305` declares those fields as\n // `T | null` (no `| undefined`) under exactOptionalPropertyTypes, so\n // spread them only when present rather than passing explicit `undefined`.\n const metadata = getAnthropicProviderToolMetadata(tool)\n return {\n name: 'web_search',\n type: 'web_search_20250305',\n ...(metadata?.allowed_domains !== undefined && {\n allowed_domains: metadata.allowed_domains,\n }),\n ...(metadata?.blocked_domains !== undefined && {\n blocked_domains: metadata.blocked_domains,\n }),\n ...(metadata?.max_uses !== undefined && { max_uses: metadata.max_uses }),\n ...(metadata?.user_location !== undefined && {\n user_location: metadata.user_location,\n }),\n ...(metadata?.cache_control !== undefined && {\n cache_control: metadata.cache_control,\n }),\n }\n}\n\nexport function webSearchTool(\n config: WebSearchToolConfig,\n): AnthropicWebSearchTool {\n validateDomains(config)\n validateUserLocation(config)\n return brandAnthropicProviderTool<AnthropicWebSearchTool>(\n {\n name: 'web_search',\n description: '',\n metadata: config,\n },\n 'web_search',\n )\n}\n"],"mappings":";;AAcA,IAAM,mBAAmB,SAA8B;CACrD,IAAI,KAAK,mBAAmB,KAAK,iBAC/B,MAAM,IAAI,MACR,8DACF;AAEJ;AAEA,IAAM,wBAAwB,SAA8B;CAC1D,MAAM,eAAe,KAAK;CAC1B,IAAI,cAAc;EAChB,IACE,aAAa,SACZ,aAAa,KAAK,SAAS,KAAK,aAAa,KAAK,SAAS,MAE5D,MAAM,IAAI,MACR,0DACF;EAEF,IAAI,aAAa,WAAW,aAAa,QAAQ,WAAW,GAC1D,MAAM,IAAI,MAAM,qDAAqD;EAEvE,IACE,aAAa,WACZ,aAAa,OAAO,SAAS,KAAK,aAAa,OAAO,SAAS,MAEhE,MAAM,IAAI,MACR,4DACF;EAEF,IACE,aAAa,aACZ,aAAa,SAAS,SAAS,KAAK,aAAa,SAAS,SAAS,MAEpE,MAAM,IAAI,MACR,8DACF;CAEJ;AACF;AAEA,SAAgB,oCACd,MACqB;CAKrB,MAAM,WAAW,iCAAiC,IAAI;CACtD,OAAO;EACL,MAAM;EACN,MAAM;EACN,GAAI,UAAU,oBAAoB,KAAA,KAAa,EAC7C,iBAAiB,SAAS,gBAC5B;EACA,GAAI,UAAU,oBAAoB,KAAA,KAAa,EAC7C,iBAAiB,SAAS,gBAC5B;EACA,GAAI,UAAU,aAAa,KAAA,KAAa,EAAE,UAAU,SAAS,SAAS;EACtE,GAAI,UAAU,kBAAkB,KAAA,KAAa,EAC3C,eAAe,SAAS,cAC1B;EACA,GAAI,UAAU,kBAAkB,KAAA,KAAa,EAC3C,eAAe,SAAS,cAC1B;CACF;AACF;AAEA,SAAgB,cACd,QACwB;CACxB,gBAAgB,MAAM;CACtB,qBAAqB,MAAM;CAC3B,OAAO,2BACL;EACE,MAAM;EACN,aAAa;EACb,UAAU;CACZ,GACA,YACF;AACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/ai-anthropic",
|
|
3
|
-
"version": "0.16.
|
|
3
|
+
"version": "0.16.9",
|
|
4
4
|
"description": "Anthropic Claude adapter for TanStack AI chat, tool calling, thinking, and structured outputs.",
|
|
5
5
|
"author": "Tanner Linsley",
|
|
6
6
|
"license": "MIT",
|
|
@@ -53,12 +53,12 @@
|
|
|
53
53
|
},
|
|
54
54
|
"peerDependencies": {
|
|
55
55
|
"zod": "^4.0.0",
|
|
56
|
-
"@tanstack/ai": "^0.
|
|
56
|
+
"@tanstack/ai": "^0.47.1"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
59
|
"@vitest/coverage-v8": "4.1.10",
|
|
60
60
|
"zod": "^4.2.0",
|
|
61
|
-
"@tanstack/ai": "0.
|
|
61
|
+
"@tanstack/ai": "0.47.1"
|
|
62
62
|
},
|
|
63
63
|
"scripts": {
|
|
64
64
|
"build": "vite build",
|
package/src/adapters/text.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { EventType, normalizeSystemPrompts } from '@tanstack/ai'
|
|
|
2
2
|
import { toRunErrorRawEvent } from '@tanstack/ai/adapter-internals'
|
|
3
3
|
import { BaseTextAdapter } from '@tanstack/ai/adapters'
|
|
4
4
|
import { convertToolsToProviderFormat } from '../tools/tool-converter'
|
|
5
|
+
import { getAnthropicProviderToolKind } from '../tools/anthropic-provider-tool'
|
|
5
6
|
import {
|
|
6
7
|
readCodeExecutionConfig,
|
|
7
8
|
readCodeExecutionSkills,
|
|
@@ -147,7 +148,8 @@ function buildServerToolResultBlock(
|
|
|
147
148
|
* Computes the `betas` array for a Messages request. Unions:
|
|
148
149
|
* - `interleaved-thinking-2025-05-14` when interleaved thinking is enabled,
|
|
149
150
|
* - `code-execution-2025-08-25` when a `code_execution` tool is present,
|
|
150
|
-
* - `skills-2025-10-02` when that tool carries skills
|
|
151
|
+
* - `skills-2025-10-02` when that tool carries skills,
|
|
152
|
+
* - `context-management-2025-06-27` when `context_management` is set.
|
|
151
153
|
* Returns `undefined` when none apply (so the call site omits `betas`).
|
|
152
154
|
*/
|
|
153
155
|
export function computeAnthropicBetas(
|
|
@@ -158,6 +160,7 @@ export function computeAnthropicBetas(
|
|
|
158
160
|
type?: 'enabled' | 'disabled' | 'adaptive'
|
|
159
161
|
budget_tokens?: number
|
|
160
162
|
}
|
|
163
|
+
context_management?: unknown | null
|
|
161
164
|
}
|
|
162
165
|
| undefined,
|
|
163
166
|
): Array<AnthropicBeta> | undefined {
|
|
@@ -169,9 +172,17 @@ export function computeAnthropicBetas(
|
|
|
169
172
|
modelOptions.thinking.budget_tokens > 0
|
|
170
173
|
if (useInterleavedThinking) betas.add('interleaved-thinking-2025-05-14')
|
|
171
174
|
|
|
175
|
+
// Context editing requires the beta header; the body field alone is not
|
|
176
|
+
// enough (issue #1074). `null` is a typed "unset" — do not enable the beta.
|
|
177
|
+
if (modelOptions?.context_management != null) {
|
|
178
|
+
betas.add('context-management-2025-06-27')
|
|
179
|
+
}
|
|
180
|
+
|
|
172
181
|
// Code-execution beta is version-aware: select from the FIRST code_execution
|
|
173
182
|
// tool's config type.
|
|
174
|
-
const codeExecTool = tools?.find(
|
|
183
|
+
const codeExecTool = tools?.find(
|
|
184
|
+
(tool) => getAnthropicProviderToolKind(tool) === 'code_execution',
|
|
185
|
+
)
|
|
175
186
|
if (codeExecTool) {
|
|
176
187
|
const cfgType = readCodeExecutionConfig(codeExecTool)?.type
|
|
177
188
|
// Each code_execution tool version pairs with a specific beta. Known
|
|
@@ -188,9 +199,9 @@ export function computeAnthropicBetas(
|
|
|
188
199
|
// container-lift, which lifts skills from any code_execution tool that
|
|
189
200
|
// carries them (not just the first).
|
|
190
201
|
const hasSkills = tools?.some(
|
|
191
|
-
(
|
|
192
|
-
|
|
193
|
-
(readCodeExecutionSkills(
|
|
202
|
+
(tool) =>
|
|
203
|
+
getAnthropicProviderToolKind(tool) === 'code_execution' &&
|
|
204
|
+
(readCodeExecutionSkills(tool)?.length ?? 0) > 0,
|
|
194
205
|
)
|
|
195
206
|
if (hasSkills) betas.add('skills-2025-10-02')
|
|
196
207
|
|
|
@@ -575,7 +586,7 @@ export class AnthropicTextAdapter<
|
|
|
575
586
|
// canonical path for skills; `modelOptions.container.skills` is deprecated.
|
|
576
587
|
const toolSkills = options.tools
|
|
577
588
|
?.map((tool) =>
|
|
578
|
-
tool
|
|
589
|
+
getAnthropicProviderToolKind(tool) === 'code_execution'
|
|
579
590
|
? readCodeExecutionSkills(tool)
|
|
580
591
|
: undefined,
|
|
581
592
|
)
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { brandProviderTool } from '@tanstack/ai'
|
|
2
|
+
import type { ProviderTool, Tool } from '@tanstack/ai'
|
|
3
|
+
|
|
4
|
+
const ANTHROPIC_PROVIDER_TOOL_KINDS = {
|
|
5
|
+
bash: 'anthropic.bash',
|
|
6
|
+
code_execution: 'anthropic.code_execution',
|
|
7
|
+
computer_use: 'anthropic.computer_use',
|
|
8
|
+
memory: 'anthropic.memory',
|
|
9
|
+
text_editor: 'anthropic.text_editor',
|
|
10
|
+
web_fetch: 'anthropic.web_fetch',
|
|
11
|
+
web_search: 'anthropic.web_search',
|
|
12
|
+
} as const
|
|
13
|
+
|
|
14
|
+
type AnthropicProviderToolKind = keyof typeof ANTHROPIC_PROVIDER_TOOL_KINDS
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Adds a stable runtime discriminator to an Anthropic-native tool.
|
|
18
|
+
*
|
|
19
|
+
* The core ProviderTool brand is intentionally type-only. Anthropic also needs
|
|
20
|
+
* a runtime discriminator because custom functions may use the same public
|
|
21
|
+
* names as native tools. Adapter metadata is the repository-wide extension
|
|
22
|
+
* point for this plain-data marker; converters remove it from the wire shape.
|
|
23
|
+
*/
|
|
24
|
+
export function brandAnthropicProviderTool<
|
|
25
|
+
T extends ProviderTool<'anthropic', AnthropicProviderToolKind>,
|
|
26
|
+
>(tool: Omit<T, '~provider' | '~toolKind'>, toolKind: T['~toolKind']): T {
|
|
27
|
+
return brandProviderTool<T>({
|
|
28
|
+
...tool,
|
|
29
|
+
metadata: {
|
|
30
|
+
...tool.metadata,
|
|
31
|
+
__kind: ANTHROPIC_PROVIDER_TOOL_KINDS[toolKind],
|
|
32
|
+
},
|
|
33
|
+
})
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function getAnthropicProviderToolKind(
|
|
37
|
+
tool: Tool,
|
|
38
|
+
): AnthropicProviderToolKind | undefined {
|
|
39
|
+
const toolKind = tool.metadata?.['__kind']
|
|
40
|
+
switch (toolKind) {
|
|
41
|
+
case 'anthropic.bash':
|
|
42
|
+
return 'bash'
|
|
43
|
+
case 'anthropic.code_execution':
|
|
44
|
+
return 'code_execution'
|
|
45
|
+
case 'anthropic.computer_use':
|
|
46
|
+
return 'computer_use'
|
|
47
|
+
case 'anthropic.memory':
|
|
48
|
+
return 'memory'
|
|
49
|
+
case 'anthropic.text_editor':
|
|
50
|
+
return 'text_editor'
|
|
51
|
+
case 'anthropic.web_fetch':
|
|
52
|
+
return 'web_fetch'
|
|
53
|
+
case 'anthropic.web_search':
|
|
54
|
+
return 'web_search'
|
|
55
|
+
default:
|
|
56
|
+
return undefined
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** Returns adapter metadata without the internal runtime discriminator. */
|
|
61
|
+
export function getAnthropicProviderToolMetadata(tool: Tool): Tool['metadata'] {
|
|
62
|
+
if (!tool.metadata) {
|
|
63
|
+
return undefined
|
|
64
|
+
}
|
|
65
|
+
const { __kind: _kind, ...metadata } = tool.metadata
|
|
66
|
+
void _kind
|
|
67
|
+
return metadata
|
|
68
|
+
}
|
package/src/tools/bash-tool.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
brandAnthropicProviderTool,
|
|
3
|
+
getAnthropicProviderToolMetadata,
|
|
4
|
+
} from './anthropic-provider-tool'
|
|
2
5
|
import type {
|
|
3
6
|
BetaToolBash20241022,
|
|
4
7
|
BetaToolBash20250124,
|
|
@@ -13,14 +16,17 @@ export type BashTool = BashToolConfig
|
|
|
13
16
|
export type AnthropicBashTool = ProviderTool<'anthropic', 'bash'>
|
|
14
17
|
|
|
15
18
|
export function convertBashToolToAdapterFormat(tool: Tool): BashToolConfig {
|
|
16
|
-
const metadata = tool
|
|
19
|
+
const metadata = getAnthropicProviderToolMetadata(tool) as BashToolConfig
|
|
17
20
|
return metadata
|
|
18
21
|
}
|
|
19
22
|
|
|
20
23
|
export function bashTool(config: BashToolConfig): AnthropicBashTool {
|
|
21
|
-
return
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
return brandAnthropicProviderTool<AnthropicBashTool>(
|
|
25
|
+
{
|
|
26
|
+
name: 'bash',
|
|
27
|
+
description: '',
|
|
28
|
+
metadata: config,
|
|
29
|
+
},
|
|
30
|
+
'bash',
|
|
31
|
+
)
|
|
26
32
|
}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
brandAnthropicProviderTool,
|
|
3
|
+
getAnthropicProviderToolMetadata,
|
|
4
|
+
} from './anthropic-provider-tool'
|
|
2
5
|
import type {
|
|
3
6
|
BetaCodeExecutionTool20250522,
|
|
4
7
|
BetaCodeExecutionTool20250825,
|
|
@@ -56,7 +59,11 @@ export function convertCodeExecutionToolToAdapterFormat(
|
|
|
56
59
|
export function readCodeExecutionConfig(
|
|
57
60
|
tool: Tool,
|
|
58
61
|
): CodeExecutionToolConfig | undefined {
|
|
59
|
-
return (
|
|
62
|
+
return (
|
|
63
|
+
getAnthropicProviderToolMetadata(tool) as
|
|
64
|
+
| CodeExecutionToolMetadata
|
|
65
|
+
| undefined
|
|
66
|
+
)?.config
|
|
60
67
|
}
|
|
61
68
|
|
|
62
69
|
/**
|
|
@@ -66,7 +73,11 @@ export function readCodeExecutionConfig(
|
|
|
66
73
|
export function readCodeExecutionSkills(
|
|
67
74
|
tool: Tool,
|
|
68
75
|
): Array<AnthropicContainerSkill> | undefined {
|
|
69
|
-
return (
|
|
76
|
+
return (
|
|
77
|
+
getAnthropicProviderToolMetadata(tool) as
|
|
78
|
+
| CodeExecutionToolMetadata
|
|
79
|
+
| undefined
|
|
80
|
+
)?.skills
|
|
70
81
|
}
|
|
71
82
|
|
|
72
83
|
export function codeExecutionTool(
|
|
@@ -88,9 +99,12 @@ export function codeExecutionTool(
|
|
|
88
99
|
config,
|
|
89
100
|
...(skills && { skills }),
|
|
90
101
|
}
|
|
91
|
-
return
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
102
|
+
return brandAnthropicProviderTool<AnthropicCodeExecutionTool>(
|
|
103
|
+
{
|
|
104
|
+
name: 'code_execution',
|
|
105
|
+
description: '',
|
|
106
|
+
metadata,
|
|
107
|
+
},
|
|
108
|
+
'code_execution',
|
|
109
|
+
)
|
|
96
110
|
}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
brandAnthropicProviderTool,
|
|
3
|
+
getAnthropicProviderToolMetadata,
|
|
4
|
+
} from './anthropic-provider-tool'
|
|
2
5
|
import type {
|
|
3
6
|
BetaToolComputerUse20241022,
|
|
4
7
|
BetaToolComputerUse20250124,
|
|
@@ -17,16 +20,21 @@ export type AnthropicComputerUseTool = ProviderTool<'anthropic', 'computer_use'>
|
|
|
17
20
|
export function convertComputerUseToolToAdapterFormat(
|
|
18
21
|
tool: Tool,
|
|
19
22
|
): ComputerUseToolConfig {
|
|
20
|
-
const metadata =
|
|
23
|
+
const metadata = getAnthropicProviderToolMetadata(
|
|
24
|
+
tool,
|
|
25
|
+
) as ComputerUseToolConfig
|
|
21
26
|
return metadata
|
|
22
27
|
}
|
|
23
28
|
|
|
24
29
|
export function computerUseTool(
|
|
25
30
|
config: ComputerUseToolConfig,
|
|
26
31
|
): AnthropicComputerUseTool {
|
|
27
|
-
return
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
+
return brandAnthropicProviderTool<AnthropicComputerUseTool>(
|
|
33
|
+
{
|
|
34
|
+
name: 'computer',
|
|
35
|
+
description: '',
|
|
36
|
+
metadata: config,
|
|
37
|
+
},
|
|
38
|
+
'computer_use',
|
|
39
|
+
)
|
|
32
40
|
}
|
package/src/tools/memory-tool.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
brandAnthropicProviderTool,
|
|
3
|
+
getAnthropicProviderToolMetadata,
|
|
4
|
+
} from './anthropic-provider-tool'
|
|
2
5
|
import type { BetaMemoryTool20250818 } from '@anthropic-ai/sdk/resources/beta'
|
|
3
6
|
import type { ProviderTool, Tool } from '@tanstack/ai'
|
|
4
7
|
|
|
@@ -10,7 +13,10 @@ export type MemoryTool = MemoryToolConfig
|
|
|
10
13
|
export type AnthropicMemoryTool = ProviderTool<'anthropic', 'memory'>
|
|
11
14
|
|
|
12
15
|
export function convertMemoryToolToAdapterFormat(tool: Tool): MemoryToolConfig {
|
|
13
|
-
const metadata = tool
|
|
16
|
+
const metadata = getAnthropicProviderToolMetadata(tool) as Omit<
|
|
17
|
+
MemoryToolConfig,
|
|
18
|
+
'type'
|
|
19
|
+
>
|
|
14
20
|
return {
|
|
15
21
|
type: 'memory_20250818',
|
|
16
22
|
...metadata,
|
|
@@ -18,9 +24,12 @@ export function convertMemoryToolToAdapterFormat(tool: Tool): MemoryToolConfig {
|
|
|
18
24
|
}
|
|
19
25
|
|
|
20
26
|
export function memoryTool(config?: MemoryToolConfig): AnthropicMemoryTool {
|
|
21
|
-
return
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
27
|
+
return brandAnthropicProviderTool<AnthropicMemoryTool>(
|
|
28
|
+
{
|
|
29
|
+
name: 'memory',
|
|
30
|
+
description: '',
|
|
31
|
+
metadata: config,
|
|
32
|
+
},
|
|
33
|
+
'memory',
|
|
34
|
+
)
|
|
26
35
|
}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
brandAnthropicProviderTool,
|
|
3
|
+
getAnthropicProviderToolMetadata,
|
|
4
|
+
} from './anthropic-provider-tool'
|
|
2
5
|
import type {
|
|
3
6
|
ToolTextEditor20250124,
|
|
4
7
|
ToolTextEditor20250429,
|
|
@@ -19,7 +22,9 @@ export type AnthropicTextEditorTool = ProviderTool<'anthropic', 'text_editor'>
|
|
|
19
22
|
export function convertTextEditorToolToAdapterFormat(
|
|
20
23
|
tool: Tool,
|
|
21
24
|
): TextEditorToolConfig {
|
|
22
|
-
const metadata =
|
|
25
|
+
const metadata = getAnthropicProviderToolMetadata(
|
|
26
|
+
tool,
|
|
27
|
+
) as TextEditorToolConfig
|
|
23
28
|
return {
|
|
24
29
|
...metadata,
|
|
25
30
|
}
|
|
@@ -28,9 +33,12 @@ export function convertTextEditorToolToAdapterFormat(
|
|
|
28
33
|
export function textEditorTool<T extends TextEditorToolConfig>(
|
|
29
34
|
config: T,
|
|
30
35
|
): AnthropicTextEditorTool {
|
|
31
|
-
return
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
+
return brandAnthropicProviderTool<AnthropicTextEditorTool>(
|
|
37
|
+
{
|
|
38
|
+
name: 'str_replace_editor',
|
|
39
|
+
description: '',
|
|
40
|
+
metadata: config,
|
|
41
|
+
},
|
|
42
|
+
'text_editor',
|
|
43
|
+
)
|
|
36
44
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { assertUniqueToolNames } from '@tanstack/ai/adapter-internals'
|
|
2
|
+
import { getAnthropicProviderToolKind } from './anthropic-provider-tool'
|
|
1
3
|
import { convertBashToolToAdapterFormat } from './bash-tool'
|
|
2
4
|
import { convertCodeExecutionToolToAdapterFormat } from './code-execution-tool'
|
|
3
5
|
import { convertComputerUseToolToAdapterFormat } from './computer-use-tool'
|
|
@@ -36,25 +38,24 @@ import type { Tool } from '@tanstack/ai'
|
|
|
36
38
|
export function convertToolsToProviderFormat<TTool extends Tool>(
|
|
37
39
|
tools: Array<TTool>,
|
|
38
40
|
): Array<AnthropicTool> {
|
|
41
|
+
assertUniqueToolNames(tools)
|
|
39
42
|
return tools.map((tool) => {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
switch (name) {
|
|
43
|
+
switch (getAnthropicProviderToolKind(tool)) {
|
|
43
44
|
case 'bash':
|
|
44
45
|
return convertBashToolToAdapterFormat(tool)
|
|
45
46
|
case 'code_execution':
|
|
46
47
|
return convertCodeExecutionToolToAdapterFormat(tool)
|
|
47
|
-
case '
|
|
48
|
+
case 'computer_use':
|
|
48
49
|
return convertComputerUseToolToAdapterFormat(tool)
|
|
49
50
|
case 'memory':
|
|
50
51
|
return convertMemoryToolToAdapterFormat(tool)
|
|
51
|
-
case '
|
|
52
|
+
case 'text_editor':
|
|
52
53
|
return convertTextEditorToolToAdapterFormat(tool)
|
|
53
54
|
case 'web_fetch':
|
|
54
55
|
return convertWebFetchToolToAdapterFormat(tool)
|
|
55
56
|
case 'web_search':
|
|
56
57
|
return convertWebSearchToolToAdapterFormat(tool)
|
|
57
|
-
|
|
58
|
+
case undefined:
|
|
58
59
|
return convertCustomToolToAdapterFormat(tool)
|
|
59
60
|
}
|
|
60
61
|
})
|