@yourgpt/copilot-sdk 2.0.1 → 2.0.2-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -0
- package/dist/{ThreadManager-JT0sqSSD.d.ts → ThreadManager-Dkp_eLty.d.ts} +1 -1
- package/dist/{ThreadManager-CUq5Ocu2.d.cts → ThreadManager-LfFRhr4e.d.cts} +1 -1
- package/dist/anthropic-6F5GRE3B.js +4 -0
- package/dist/anthropic-6F5GRE3B.js.map +1 -0
- package/dist/anthropic-DGalr_Fw.d.cts +17 -0
- package/dist/anthropic-DkCEDYOt.d.ts +17 -0
- package/dist/anthropic-NMTRABEH.cjs +21 -0
- package/dist/anthropic-NMTRABEH.cjs.map +1 -0
- package/dist/brave-DdnWb7Gb.d.cts +17 -0
- package/dist/brave-DsI9n7Wr.d.ts +17 -0
- package/dist/brave-OYKCOZEM.cjs +21 -0
- package/dist/brave-OYKCOZEM.cjs.map +1 -0
- package/dist/brave-XSASGGH2.js +4 -0
- package/dist/brave-XSASGGH2.js.map +1 -0
- package/dist/chunk-2FAWEBZS.cjs +88 -0
- package/dist/chunk-2FAWEBZS.cjs.map +1 -0
- package/dist/chunk-53UGJNHN.js +92 -0
- package/dist/chunk-53UGJNHN.js.map +1 -0
- package/dist/chunk-6T5XXJEP.cjs +80 -0
- package/dist/chunk-6T5XXJEP.cjs.map +1 -0
- package/dist/chunk-7K7HZMP4.cjs +1170 -0
- package/dist/chunk-7K7HZMP4.cjs.map +1 -0
- package/dist/chunk-7W7QLZNC.js +72 -0
- package/dist/chunk-7W7QLZNC.js.map +1 -0
- package/dist/{chunk-JM7PB2LP.js → chunk-7XFFRV7D.js} +10 -66
- package/dist/chunk-7XFFRV7D.js.map +1 -0
- package/dist/chunk-ASV6JLYG.cjs +99 -0
- package/dist/chunk-ASV6JLYG.cjs.map +1 -0
- package/dist/chunk-BH7MNDWW.js +1152 -0
- package/dist/chunk-BH7MNDWW.js.map +1 -0
- package/dist/chunk-BKO7DSPU.js +67 -0
- package/dist/chunk-BKO7DSPU.js.map +1 -0
- package/dist/chunk-CBAHCI4R.cjs +76 -0
- package/dist/chunk-CBAHCI4R.cjs.map +1 -0
- package/dist/chunk-CEKAYA2Q.cjs +74 -0
- package/dist/chunk-CEKAYA2Q.cjs.map +1 -0
- package/dist/chunk-CEOMTQTP.js +85 -0
- package/dist/chunk-CEOMTQTP.js.map +1 -0
- package/dist/chunk-DABZYCVX.js +84 -0
- package/dist/chunk-DABZYCVX.js.map +1 -0
- package/dist/chunk-DGUM43GV.js +10 -0
- package/dist/chunk-DGUM43GV.js.map +1 -0
- package/dist/chunk-G4SF2PNQ.js +33 -0
- package/dist/chunk-G4SF2PNQ.js.map +1 -0
- package/dist/chunk-GANCV72Z.cjs +110 -0
- package/dist/chunk-GANCV72Z.cjs.map +1 -0
- package/dist/{chunk-BLSI67J6.cjs → chunk-H5XMKBBA.cjs} +425 -30
- package/dist/chunk-H5XMKBBA.cjs.map +1 -0
- package/dist/{chunk-CJ7UWN2Y.js → chunk-IXFV6AW6.js} +397 -7
- package/dist/chunk-IXFV6AW6.js.map +1 -0
- package/dist/chunk-JEQ2X3Z6.cjs +12 -0
- package/dist/chunk-JEQ2X3Z6.cjs.map +1 -0
- package/dist/chunk-JO4BHPAD.cjs +40 -0
- package/dist/chunk-JO4BHPAD.cjs.map +1 -0
- package/dist/chunk-MEBXW75C.cjs +89 -0
- package/dist/chunk-MEBXW75C.cjs.map +1 -0
- package/dist/chunk-MNDGIW47.js +76 -0
- package/dist/chunk-MNDGIW47.js.map +1 -0
- package/dist/chunk-PPFHA6IL.js +83 -0
- package/dist/chunk-PPFHA6IL.js.map +1 -0
- package/dist/chunk-RQ74USYU.js +128 -0
- package/dist/chunk-RQ74USYU.js.map +1 -0
- package/dist/chunk-TXLIY7GF.cjs +132 -0
- package/dist/chunk-TXLIY7GF.cjs.map +1 -0
- package/dist/chunk-UIWFYMAO.cjs +82 -0
- package/dist/chunk-UIWFYMAO.cjs.map +1 -0
- package/dist/{chunk-4PRWNAXQ.cjs → chunk-UOWLKFXK.cjs} +27 -89
- package/dist/chunk-UOWLKFXK.cjs.map +1 -0
- package/dist/chunk-VD74IPKB.js +106 -0
- package/dist/chunk-VD74IPKB.js.map +1 -0
- package/dist/chunk-W73FBYIH.cjs +87 -0
- package/dist/chunk-W73FBYIH.cjs.map +1 -0
- package/dist/chunk-XGITAEXU.js +93 -0
- package/dist/chunk-XGITAEXU.js.map +1 -0
- package/dist/chunk-XWOHNY3F.cjs +96 -0
- package/dist/chunk-XWOHNY3F.cjs.map +1 -0
- package/dist/chunk-ZPYQDMUX.js +79 -0
- package/dist/chunk-ZPYQDMUX.js.map +1 -0
- package/dist/core/index.cjs +156 -84
- package/dist/core/index.d.cts +16 -4
- package/dist/core/index.d.ts +16 -4
- package/dist/core/index.js +13 -1
- package/dist/exa-72KFY5A7.cjs +21 -0
- package/dist/exa-72KFY5A7.cjs.map +1 -0
- package/dist/exa-Dp9U-WTc.d.ts +17 -0
- package/dist/exa-NNVPBC2M.js +4 -0
- package/dist/exa-NNVPBC2M.js.map +1 -0
- package/dist/exa-jJSPhyUW.d.cts +17 -0
- package/dist/google-CHU2yycE.d.cts +17 -0
- package/dist/google-CTEK6SV2.js +4 -0
- package/dist/google-CTEK6SV2.js.map +1 -0
- package/dist/google-Da8IQxaI.d.ts +17 -0
- package/dist/google-IIUXFFVF.cjs +21 -0
- package/dist/google-IIUXFFVF.cjs.map +1 -0
- package/dist/index-2VtgKM8S.d.cts +206 -0
- package/dist/index-pWEH7pUE.d.ts +206 -0
- package/dist/mcp/index.cjs +670 -0
- package/dist/mcp/index.cjs.map +1 -0
- package/dist/mcp/index.d.cts +779 -0
- package/dist/mcp/index.d.ts +779 -0
- package/dist/mcp/index.js +574 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/openai-6KTCQ7PZ.cjs +21 -0
- package/dist/openai-6KTCQ7PZ.cjs.map +1 -0
- package/dist/openai-7W2PCNW5.js +4 -0
- package/dist/openai-7W2PCNW5.js.map +1 -0
- package/dist/openai-Cam8hF4f.d.ts +17 -0
- package/dist/openai-HVSCuXgO.d.cts +17 -0
- package/dist/react/index.cjs +75 -42
- package/dist/react/index.d.cts +270 -45
- package/dist/react/index.d.ts +270 -45
- package/dist/react/index.js +15 -2
- package/dist/searxng-AXLVGY7Z.js +4 -0
- package/dist/searxng-AXLVGY7Z.js.map +1 -0
- package/dist/searxng-EJKNY236.cjs +21 -0
- package/dist/searxng-EJKNY236.cjs.map +1 -0
- package/dist/searxng-K0qtY9vp.d.ts +17 -0
- package/dist/searxng-QGOte_Gq.d.cts +17 -0
- package/dist/serper-3JYJHJX6.js +4 -0
- package/dist/serper-3JYJHJX6.js.map +1 -0
- package/dist/serper-63FT4AOL.cjs +21 -0
- package/dist/serper-63FT4AOL.cjs.map +1 -0
- package/dist/serper-7Czya3PW.d.ts +17 -0
- package/dist/serper-JzdaSnS9.d.cts +17 -0
- package/dist/styles.css +38 -0
- package/dist/tavily-AWFP4RM7.cjs +21 -0
- package/dist/tavily-AWFP4RM7.cjs.map +1 -0
- package/dist/tavily-C8cXXojE.d.cts +17 -0
- package/dist/tavily-CIWAAZPH.js +4 -0
- package/dist/tavily-CIWAAZPH.js.map +1 -0
- package/dist/tavily-DdSGVgkE.d.ts +17 -0
- package/dist/themes/catppuccin.css +2 -0
- package/dist/themes/claude.css +2 -0
- package/dist/themes/linear.css +2 -0
- package/dist/themes/modern-minimal.css +2 -0
- package/dist/themes/posthog.css +2 -0
- package/dist/themes/supabase.css +2 -0
- package/dist/themes/twitter.css +2 -0
- package/dist/themes/vercel.css +2 -0
- package/dist/tools/anthropic/index.cjs +61 -0
- package/dist/tools/anthropic/index.cjs.map +1 -0
- package/dist/tools/anthropic/index.d.cts +67 -0
- package/dist/tools/anthropic/index.d.ts +67 -0
- package/dist/tools/anthropic/index.js +56 -0
- package/dist/tools/anthropic/index.js.map +1 -0
- package/dist/tools/brave/index.cjs +85 -0
- package/dist/tools/brave/index.cjs.map +1 -0
- package/dist/tools/brave/index.d.cts +91 -0
- package/dist/tools/brave/index.d.ts +91 -0
- package/dist/tools/brave/index.js +80 -0
- package/dist/tools/brave/index.js.map +1 -0
- package/dist/tools/exa/index.cjs +90 -0
- package/dist/tools/exa/index.cjs.map +1 -0
- package/dist/tools/exa/index.d.cts +92 -0
- package/dist/tools/exa/index.d.ts +92 -0
- package/dist/tools/exa/index.js +85 -0
- package/dist/tools/exa/index.js.map +1 -0
- package/dist/tools/google/index.cjs +81 -0
- package/dist/tools/google/index.cjs.map +1 -0
- package/dist/tools/google/index.d.cts +81 -0
- package/dist/tools/google/index.d.ts +81 -0
- package/dist/tools/google/index.js +76 -0
- package/dist/tools/google/index.js.map +1 -0
- package/dist/tools/openai/index.cjs +83 -0
- package/dist/tools/openai/index.cjs.map +1 -0
- package/dist/tools/openai/index.d.cts +84 -0
- package/dist/tools/openai/index.d.ts +84 -0
- package/dist/tools/openai/index.js +78 -0
- package/dist/tools/openai/index.js.map +1 -0
- package/dist/tools/searxng/index.cjs +85 -0
- package/dist/tools/searxng/index.cjs.map +1 -0
- package/dist/tools/searxng/index.d.cts +91 -0
- package/dist/tools/searxng/index.d.ts +91 -0
- package/dist/tools/searxng/index.js +80 -0
- package/dist/tools/searxng/index.js.map +1 -0
- package/dist/tools/serper/index.cjs +85 -0
- package/dist/tools/serper/index.cjs.map +1 -0
- package/dist/tools/serper/index.d.cts +91 -0
- package/dist/tools/serper/index.d.ts +91 -0
- package/dist/tools/serper/index.js +80 -0
- package/dist/tools/serper/index.js.map +1 -0
- package/dist/tools/tavily/index.cjs +91 -0
- package/dist/tools/tavily/index.cjs.map +1 -0
- package/dist/tools/tavily/index.d.cts +95 -0
- package/dist/tools/tavily/index.d.ts +95 -0
- package/dist/tools/tavily/index.js +86 -0
- package/dist/tools/tavily/index.js.map +1 -0
- package/dist/tools/web-search/index.cjs +31 -0
- package/dist/tools/web-search/index.cjs.map +1 -0
- package/dist/tools/web-search/index.d.cts +3 -0
- package/dist/tools/web-search/index.d.ts +3 -0
- package/dist/tools/web-search/index.js +14 -0
- package/dist/tools/web-search/index.js.map +1 -0
- package/dist/{types-BtAaOV07.d.cts → tools-DDWrco4h.d.cts} +43 -367
- package/dist/{types-BtAaOV07.d.ts → tools-DDWrco4h.d.ts} +43 -367
- package/dist/types-B20VCJXL.d.cts +347 -0
- package/dist/types-B20VCJXL.d.ts +347 -0
- package/dist/types-Cizh9K_f.d.ts +441 -0
- package/dist/types-DG2ya08y.d.cts +367 -0
- package/dist/types-DG2ya08y.d.ts +367 -0
- package/dist/types-DjSfYNKj.d.cts +441 -0
- package/dist/types-ZguuKEs_.d.cts +127 -0
- package/dist/types-ZguuKEs_.d.ts +127 -0
- package/dist/ui/index.cjs +1075 -148
- package/dist/ui/index.cjs.map +1 -1
- package/dist/ui/index.d.cts +410 -4
- package/dist/ui/index.d.ts +410 -4
- package/dist/ui/index.js +1007 -96
- package/dist/ui/index.js.map +1 -1
- package/package.json +52 -2
- package/dist/chunk-4PRWNAXQ.cjs.map +0 -1
- package/dist/chunk-BLSI67J6.cjs.map +0 -1
- package/dist/chunk-CJ7UWN2Y.js.map +0 -1
- package/dist/chunk-JM7PB2LP.js.map +0 -1
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/core/tools/webSearch/providers/anthropic.ts
|
|
4
|
+
var ANTHROPIC_API_URL = "https://api.anthropic.com/v1/messages";
|
|
5
|
+
function validateAnthropicConfig(config) {
|
|
6
|
+
if (!config.apiKey) {
|
|
7
|
+
throw new Error(
|
|
8
|
+
"Anthropic API key is required for native web search. Pass apiKey or set ANTHROPIC_API_KEY environment variable."
|
|
9
|
+
);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
async function searchAnthropic(params, config) {
|
|
13
|
+
validateAnthropicConfig(config);
|
|
14
|
+
const startTime = Date.now();
|
|
15
|
+
const apiKey = config.apiKey || process.env.ANTHROPIC_API_KEY;
|
|
16
|
+
const webSearchTool = {
|
|
17
|
+
type: "web_search_20250305",
|
|
18
|
+
// Use stable version
|
|
19
|
+
name: "web_search",
|
|
20
|
+
max_uses: config.maxResults ?? 5
|
|
21
|
+
};
|
|
22
|
+
if (config.includeDomains?.length) {
|
|
23
|
+
webSearchTool.allowed_domains = config.includeDomains;
|
|
24
|
+
}
|
|
25
|
+
if (config.excludeDomains?.length) {
|
|
26
|
+
webSearchTool.blocked_domains = config.excludeDomains;
|
|
27
|
+
}
|
|
28
|
+
if (config.country) {
|
|
29
|
+
webSearchTool.user_location = {
|
|
30
|
+
type: "approximate",
|
|
31
|
+
country: config.country.toUpperCase()
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const response = await fetch(ANTHROPIC_API_URL, {
|
|
35
|
+
method: "POST",
|
|
36
|
+
headers: {
|
|
37
|
+
"Content-Type": "application/json",
|
|
38
|
+
"x-api-key": apiKey,
|
|
39
|
+
"anthropic-version": "2023-06-01"
|
|
40
|
+
},
|
|
41
|
+
body: JSON.stringify({
|
|
42
|
+
model: "claude-sonnet-4-20250514",
|
|
43
|
+
// Use Sonnet 4 for balance of speed/quality
|
|
44
|
+
max_tokens: 2048,
|
|
45
|
+
tools: [webSearchTool],
|
|
46
|
+
messages: [
|
|
47
|
+
{
|
|
48
|
+
role: "user",
|
|
49
|
+
content: params.query
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
}),
|
|
53
|
+
signal: config.timeout ? AbortSignal.timeout(config.timeout) : void 0
|
|
54
|
+
});
|
|
55
|
+
if (!response.ok) {
|
|
56
|
+
const errorText = await response.text().catch(() => "Unknown error");
|
|
57
|
+
console.error(
|
|
58
|
+
"[Anthropic Native Search] API error:",
|
|
59
|
+
response.status,
|
|
60
|
+
errorText
|
|
61
|
+
);
|
|
62
|
+
throw new Error(
|
|
63
|
+
`Anthropic Messages API error (${response.status}): ${errorText}`
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
const data = await response.json();
|
|
67
|
+
const searchTime = Date.now() - startTime;
|
|
68
|
+
let outputText = "";
|
|
69
|
+
const sources = [];
|
|
70
|
+
const searchResults = [];
|
|
71
|
+
if (data.content && Array.isArray(data.content)) {
|
|
72
|
+
for (const block of data.content) {
|
|
73
|
+
if (block.type === "text" && block.text) {
|
|
74
|
+
outputText += block.text;
|
|
75
|
+
if (block.citations && Array.isArray(block.citations)) {
|
|
76
|
+
for (const citation of block.citations) {
|
|
77
|
+
if (citation.url && !sources.find((s) => s.url === citation.url)) {
|
|
78
|
+
sources.push({
|
|
79
|
+
url: citation.url,
|
|
80
|
+
title: citation.title || extractDomain(citation.url),
|
|
81
|
+
cited_text: citation.cited_text
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (block.type === "web_search_tool_result" && block.content) {
|
|
88
|
+
for (const result of block.content) {
|
|
89
|
+
if (result.type === "web_search_result" && result.url) {
|
|
90
|
+
searchResults.push({
|
|
91
|
+
url: result.url,
|
|
92
|
+
title: result.title || extractDomain(result.url),
|
|
93
|
+
page_age: result.page_age
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
const finalSources = sources.length > 0 ? sources : searchResults;
|
|
101
|
+
return {
|
|
102
|
+
query: params.query,
|
|
103
|
+
answer: outputText,
|
|
104
|
+
results: finalSources.slice(0, params.maxResults ?? config.maxResults ?? 5).map((source, i) => ({
|
|
105
|
+
title: source.title,
|
|
106
|
+
url: source.url,
|
|
107
|
+
content: "cited_text" in source ? source.cited_text || "" : "",
|
|
108
|
+
score: 1 - i * 0.1,
|
|
109
|
+
domain: extractDomain(source.url)
|
|
110
|
+
})),
|
|
111
|
+
provider: "anthropic",
|
|
112
|
+
totalResults: finalSources.length,
|
|
113
|
+
searchTime
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
function extractDomain(url) {
|
|
117
|
+
try {
|
|
118
|
+
return new URL(url).hostname.replace("www.", "");
|
|
119
|
+
} catch {
|
|
120
|
+
return url;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
var anthropicProvider = {
|
|
124
|
+
search: searchAnthropic,
|
|
125
|
+
validateConfig: validateAnthropicConfig
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
exports.anthropicProvider = anthropicProvider;
|
|
129
|
+
exports.searchAnthropic = searchAnthropic;
|
|
130
|
+
exports.validateAnthropicConfig = validateAnthropicConfig;
|
|
131
|
+
//# sourceMappingURL=chunk-TXLIY7GF.cjs.map
|
|
132
|
+
//# sourceMappingURL=chunk-TXLIY7GF.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/tools/webSearch/providers/anthropic.ts"],"names":[],"mappings":"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","file":"chunk-TXLIY7GF.cjs","sourcesContent":["/**\n * Anthropic Web Search Provider\n *\n * Uses Anthropic's built-in web_search tool via the Messages API.\n * Returns reliable citations with cited_text, url, and title.\n *\n * @see https://docs.anthropic.com/en/docs/build-with-claude/tool-use/web-search-tool\n */\n\nimport type {\n WebSearchConfig,\n WebSearchParams,\n WebSearchResponse,\n WebSearchProviderInterface,\n} from \"../types\";\n\nconst ANTHROPIC_API_URL = \"https://api.anthropic.com/v1/messages\";\n\n/**\n * Validate Anthropic native search configuration\n */\nexport function validateAnthropicConfig(config: WebSearchConfig): void {\n if (!config.apiKey) {\n throw new Error(\n \"Anthropic API key is required for native web search. \" +\n \"Pass apiKey or set ANTHROPIC_API_KEY environment variable.\",\n );\n }\n}\n\n// Type definitions for Anthropic response\ninterface AnthropicWebSearchResult {\n type: \"web_search_result\";\n url: string;\n title: string;\n encrypted_content?: string;\n page_age?: string;\n}\n\ninterface AnthropicCitation {\n type: \"web_search_result_location\";\n url: string;\n title: string;\n encrypted_index?: string;\n cited_text?: string;\n}\n\ninterface AnthropicContentBlock {\n type: string;\n text?: string;\n tool_use_id?: string;\n content?: AnthropicWebSearchResult[];\n citations?: AnthropicCitation[];\n}\n\ninterface AnthropicMessagesResponse {\n id: string;\n content: AnthropicContentBlock[];\n usage?: {\n input_tokens: number;\n output_tokens: number;\n server_tool_use?: {\n web_search_requests?: number;\n };\n };\n}\n\n/**\n * Search using Anthropic's native web_search tool\n */\nexport async function searchAnthropic(\n params: WebSearchParams,\n config: WebSearchConfig,\n): Promise<WebSearchResponse> {\n validateAnthropicConfig(config);\n\n const startTime = Date.now();\n const apiKey = config.apiKey || process.env.ANTHROPIC_API_KEY;\n\n // Build web search tool configuration\n const webSearchTool: Record<string, unknown> = {\n type: \"web_search_20250305\", // Use stable version\n name: \"web_search\",\n max_uses: config.maxResults ?? 5,\n };\n\n // Add domain filtering if provided\n if (config.includeDomains?.length) {\n webSearchTool.allowed_domains = config.includeDomains;\n }\n if (config.excludeDomains?.length) {\n webSearchTool.blocked_domains = config.excludeDomains;\n }\n\n // Add user location if country is set\n if (config.country) {\n webSearchTool.user_location = {\n type: \"approximate\",\n country: config.country.toUpperCase(),\n };\n }\n\n // Call Anthropic Messages API\n const response = await fetch(ANTHROPIC_API_URL, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-api-key\": apiKey!,\n \"anthropic-version\": \"2023-06-01\",\n },\n body: JSON.stringify({\n model: \"claude-sonnet-4-20250514\", // Use Sonnet 4 for balance of speed/quality\n max_tokens: 2048,\n tools: [webSearchTool],\n messages: [\n {\n role: \"user\",\n content: params.query,\n },\n ],\n }),\n signal: config.timeout ? AbortSignal.timeout(config.timeout) : undefined,\n });\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => \"Unknown error\");\n console.error(\n \"[Anthropic Native Search] API error:\",\n response.status,\n errorText,\n );\n throw new Error(\n `Anthropic Messages API error (${response.status}): ${errorText}`,\n );\n }\n\n const data: AnthropicMessagesResponse = await response.json();\n const searchTime = Date.now() - startTime;\n\n // Extract answer text and citations\n let outputText = \"\";\n const sources: Array<{ url: string; title: string; cited_text?: string }> =\n [];\n const searchResults: Array<{\n url: string;\n title: string;\n page_age?: string;\n }> = [];\n\n if (data.content && Array.isArray(data.content)) {\n for (const block of data.content) {\n // Extract text blocks\n if (block.type === \"text\" && block.text) {\n outputText += block.text;\n\n // Extract citations from text blocks\n if (block.citations && Array.isArray(block.citations)) {\n for (const citation of block.citations) {\n if (citation.url && !sources.find((s) => s.url === citation.url)) {\n sources.push({\n url: citation.url,\n title: citation.title || extractDomain(citation.url),\n cited_text: citation.cited_text,\n });\n }\n }\n }\n }\n\n // Extract search results from web_search_tool_result\n if (block.type === \"web_search_tool_result\" && block.content) {\n for (const result of block.content) {\n if (result.type === \"web_search_result\" && result.url) {\n searchResults.push({\n url: result.url,\n title: result.title || extractDomain(result.url),\n page_age: result.page_age,\n });\n }\n }\n }\n }\n }\n\n // Prefer citations (have cited_text) over raw search results\n const finalSources = sources.length > 0 ? sources : searchResults;\n\n return {\n query: params.query,\n answer: outputText,\n results: finalSources\n .slice(0, params.maxResults ?? config.maxResults ?? 5)\n .map((source, i) => ({\n title: source.title,\n url: source.url,\n content: \"cited_text\" in source ? source.cited_text || \"\" : \"\",\n score: 1 - i * 0.1,\n domain: extractDomain(source.url),\n })),\n provider: \"anthropic\",\n totalResults: finalSources.length,\n searchTime,\n };\n}\n\n/**\n * Extract domain from URL\n */\nfunction extractDomain(url: string): string {\n try {\n return new URL(url).hostname.replace(\"www.\", \"\");\n } catch {\n return url;\n }\n}\n\n/**\n * Anthropic native search provider implementation\n */\nexport const anthropicProvider: WebSearchProviderInterface = {\n search: searchAnthropic,\n validateConfig: validateAnthropicConfig,\n};\n"]}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkCEKAYA2Q_cjs = require('./chunk-CEKAYA2Q.cjs');
|
|
4
|
+
var chunkASV6JLYG_cjs = require('./chunk-ASV6JLYG.cjs');
|
|
5
|
+
|
|
6
|
+
// src/core/tools/builtin/webSearch.ts
|
|
7
|
+
var webSearchTool = chunkCEKAYA2Q_cjs.tool({
|
|
8
|
+
description: `Search the web for current information. Use this when the user asks about:
|
|
9
|
+
- Recent events, news, or current affairs
|
|
10
|
+
- Real-time data (prices, weather, stocks, sports scores)
|
|
11
|
+
- Information that might have changed after your training cutoff
|
|
12
|
+
- Facts that need verification with current sources
|
|
13
|
+
- Research topics that require up-to-date information`,
|
|
14
|
+
location: "server",
|
|
15
|
+
// Runs on server to protect API keys
|
|
16
|
+
title: (args) => `Searching for "${args.query}"`,
|
|
17
|
+
executingTitle: (args) => `Searching the web for "${args.query}"...`,
|
|
18
|
+
completedTitle: (args) => `Found results for "${args.query}"`,
|
|
19
|
+
inputSchema: {
|
|
20
|
+
type: "object",
|
|
21
|
+
properties: {
|
|
22
|
+
query: {
|
|
23
|
+
type: "string",
|
|
24
|
+
description: "The search query to find relevant information"
|
|
25
|
+
},
|
|
26
|
+
maxResults: {
|
|
27
|
+
type: "number",
|
|
28
|
+
description: "Maximum number of results to return (default: 5, max: 10)",
|
|
29
|
+
minimum: 1,
|
|
30
|
+
maximum: 10
|
|
31
|
+
},
|
|
32
|
+
searchDepth: {
|
|
33
|
+
type: "string",
|
|
34
|
+
enum: ["basic", "advanced"],
|
|
35
|
+
description: "Search depth - 'advanced' provides more thorough results but may be slower"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
required: ["query"]
|
|
39
|
+
},
|
|
40
|
+
needsApproval: false,
|
|
41
|
+
// No user data exposed, just searching
|
|
42
|
+
// Control what AI sees from results
|
|
43
|
+
aiResponseMode: "full",
|
|
44
|
+
aiContext: (result, args) => {
|
|
45
|
+
if (!result.success) return `Search failed: ${result.error}`;
|
|
46
|
+
const data = result.data;
|
|
47
|
+
return chunkASV6JLYG_cjs.formatSearchResultsForAI(data);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
function createWebSearchTool(config) {
|
|
51
|
+
return {
|
|
52
|
+
name: "web_search",
|
|
53
|
+
...webSearchTool,
|
|
54
|
+
handler: async (params) => {
|
|
55
|
+
try {
|
|
56
|
+
const response = await chunkASV6JLYG_cjs.executeWebSearch(
|
|
57
|
+
{
|
|
58
|
+
query: params.query,
|
|
59
|
+
maxResults: params.maxResults ?? config.maxResults ?? 5,
|
|
60
|
+
searchDepth: params.searchDepth ?? config.searchDepth ?? "basic"
|
|
61
|
+
},
|
|
62
|
+
config
|
|
63
|
+
);
|
|
64
|
+
const aiContext = chunkASV6JLYG_cjs.formatSearchResultsForAI(response);
|
|
65
|
+
return {
|
|
66
|
+
success: true,
|
|
67
|
+
message: chunkASV6JLYG_cjs.summarizeSearchResults(response),
|
|
68
|
+
data: response,
|
|
69
|
+
_aiContext: aiContext
|
|
70
|
+
};
|
|
71
|
+
} catch (error) {
|
|
72
|
+
const errorMessage = error instanceof Error ? error.message : "Web search failed";
|
|
73
|
+
return chunkCEKAYA2Q_cjs.failure(errorMessage);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
exports.createWebSearchTool = createWebSearchTool;
|
|
80
|
+
exports.webSearchTool = webSearchTool;
|
|
81
|
+
//# sourceMappingURL=chunk-UIWFYMAO.cjs.map
|
|
82
|
+
//# sourceMappingURL=chunk-UIWFYMAO.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/tools/builtin/webSearch.ts"],"names":["tool","formatSearchResultsForAI","executeWebSearch","summarizeSearchResults","failure"],"mappings":";;;;;;AAoDO,IAAM,gBAAgBA,sBAAA,CAAsB;AAAA,EACjD,WAAA,EAAa,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qDAAA,CAAA;AAAA,EAOb,QAAA,EAAU,QAAA;AAAA;AAAA,EAEV,KAAA,EAAO,CAAC,IAAA,KAAS,CAAA,eAAA,EAAkB,KAAK,KAAK,CAAA,CAAA,CAAA;AAAA,EAC7C,cAAA,EAAgB,CAAC,IAAA,KAAS,CAAA,uBAAA,EAA0B,KAAK,KAAK,CAAA,IAAA,CAAA;AAAA,EAC9D,cAAA,EAAgB,CAAC,IAAA,KAAS,CAAA,mBAAA,EAAsB,KAAK,KAAK,CAAA,CAAA,CAAA;AAAA,EAE1D,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACV,KAAA,EAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACf;AAAA,MACA,UAAA,EAAY;AAAA,QACV,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EACE,2DAAA;AAAA,QACF,OAAA,EAAS,CAAA;AAAA,QACT,OAAA,EAAS;AAAA,OACX;AAAA,MACA,WAAA,EAAa;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,IAAA,EAAM,CAAC,OAAA,EAAS,UAAU,CAAA;AAAA,QAC1B,WAAA,EACE;AAAA;AACJ,KACF;AAAA,IACA,QAAA,EAAU,CAAC,OAAO;AAAA,GACpB;AAAA,EAEA,aAAA,EAAe,KAAA;AAAA;AAAA;AAAA,EAGf,cAAA,EAAgB,MAAA;AAAA,EAChB,SAAA,EAAW,CAAC,MAAA,EAAQ,IAAA,KAAS;AAC3B,IAAA,IAAI,CAAC,MAAA,CAAO,OAAA,EAAS,OAAO,CAAA,eAAA,EAAkB,OAAO,KAAK,CAAA,CAAA;AAC1D,IAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AACpB,IAAA,OAAOC,2CAAyB,IAAI,CAAA;AAAA,EACtC;AACF,CAAC;AAoEM,SAAS,oBACd,MAAA,EACiC;AACjC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,YAAA;AAAA,IACN,GAAG,aAAA;AAAA,IACH,OAAA,EAAS,OAAO,MAAA,KAA4B;AAC1C,MAAA,IAAI;AACF,QAAA,MAAM,WAAW,MAAMC,kCAAA;AAAA,UACrB;AAAA,YACE,OAAO,MAAA,CAAO,KAAA;AAAA,YACd,UAAA,EAAY,MAAA,CAAO,UAAA,IAAc,MAAA,CAAO,UAAA,IAAc,CAAA;AAAA,YACtD,WAAA,EAAa,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,WAAA,IAAe;AAAA,WAC3D;AAAA,UACA;AAAA,SACF;AAGA,QAAA,MAAM,SAAA,GAAYD,2CAAyB,QAAQ,CAAA;AAEnD,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,IAAA;AAAA,UACT,OAAA,EAASE,yCAAuB,QAAQ,CAAA;AAAA,UACxC,IAAA,EAAM,QAAA;AAAA,UACN,UAAA,EAAY;AAAA,SACd;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,YAAA,GACJ,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,mBAAA;AAC3C,QAAA,OAAOC,0BAAQ,YAAY,CAAA;AAAA,MAC7B;AAAA,IACF;AAAA,GACF;AACF","file":"chunk-UIWFYMAO.cjs","sourcesContent":["/**\n * Built-in Web Search Tool\n *\n * A pre-configured tool for searching the web with multiple provider support.\n * Runs on the server to protect API keys.\n *\n * Supports tree-shaking - import providers directly for smaller bundles.\n *\n * @example\n * ```typescript\n * // Option 1: String provider (lazy loaded at runtime)\n * import { createWebSearchTool } from '@yourgpt/copilot-sdk';\n * const webSearch = createWebSearchTool({\n * provider: 'tavily',\n * apiKey: process.env.TAVILY_API_KEY,\n * });\n *\n * // Option 2: Direct provider import (best for tree-shaking)\n * import { createWebSearchTool, tavilyProvider } from '@yourgpt/copilot-sdk';\n * const webSearch = createWebSearchTool({\n * provider: tavilyProvider,\n * apiKey: process.env.TAVILY_API_KEY,\n * });\n *\n * // Add to your runtime\n * const runtime = createRuntime({\n * tools: [webSearch],\n * });\n * ```\n */\n\nimport { tool, success, failure } from \"../../types/tools\";\nimport type { ToolDefinition } from \"../../types/tools\";\nimport {\n executeWebSearch,\n formatSearchResultsForAI,\n summarizeSearchResults,\n type WebSearchConfigExtended,\n} from \"../webSearch\";\nimport type {\n WebSearchConfig,\n WebSearchParams,\n WebSearchResponse,\n WebSearchProviderInterface,\n} from \"../webSearch/types\";\n\n/**\n * Base web search tool definition\n *\n * This is the core tool definition. Use `createWebSearchTool()` to create\n * a configured instance with your provider settings.\n */\nexport const webSearchTool = tool<WebSearchParams>({\n description: `Search the web for current information. Use this when the user asks about:\n- Recent events, news, or current affairs\n- Real-time data (prices, weather, stocks, sports scores)\n- Information that might have changed after your training cutoff\n- Facts that need verification with current sources\n- Research topics that require up-to-date information`,\n\n location: \"server\", // Runs on server to protect API keys\n\n title: (args) => `Searching for \"${args.query}\"`,\n executingTitle: (args) => `Searching the web for \"${args.query}\"...`,\n completedTitle: (args) => `Found results for \"${args.query}\"`,\n\n inputSchema: {\n type: \"object\",\n properties: {\n query: {\n type: \"string\",\n description: \"The search query to find relevant information\",\n },\n maxResults: {\n type: \"number\",\n description:\n \"Maximum number of results to return (default: 5, max: 10)\",\n minimum: 1,\n maximum: 10,\n },\n searchDepth: {\n type: \"string\",\n enum: [\"basic\", \"advanced\"],\n description:\n \"Search depth - 'advanced' provides more thorough results but may be slower\",\n },\n },\n required: [\"query\"],\n },\n\n needsApproval: false, // No user data exposed, just searching\n\n // Control what AI sees from results\n aiResponseMode: \"full\",\n aiContext: (result, args) => {\n if (!result.success) return `Search failed: ${result.error}`;\n const data = result.data as WebSearchResponse;\n return formatSearchResultsForAI(data);\n },\n});\n\n/**\n * Create a configured web search tool\n *\n * Supports both string provider names (lazy loaded) and direct provider imports (tree-shakeable).\n *\n * @param config - Web search configuration including provider and API key\n * @returns A configured tool definition ready to use\n *\n * @example\n * ```typescript\n * // ===== BEST FOR TREE-SHAKING: Direct provider import =====\n * import { createWebSearchTool, openaiProvider } from '@yourgpt/copilot-sdk/core';\n *\n * const webSearch = createWebSearchTool({\n * provider: openaiProvider, // Only this provider in bundle\n * apiKey: process.env.OPENAI_API_KEY,\n * });\n *\n * // ===== STRING PROVIDERS (Lazy loaded at runtime) =====\n *\n * // OpenAI (uses your OpenAI API key)\n * const webSearch = createWebSearchTool({\n * provider: 'openai',\n * apiKey: process.env.OPENAI_API_KEY,\n * });\n *\n * // Google (uses your Google/Gemini API key)\n * const webSearch = createWebSearchTool({\n * provider: 'google',\n * apiKey: process.env.GOOGLE_API_KEY,\n * });\n *\n * // Tavily (AI-optimized search with answer generation)\n * const webSearch = createWebSearchTool({\n * provider: 'tavily',\n * apiKey: process.env.TAVILY_API_KEY,\n * includeAnswer: true,\n * maxResults: 5,\n * });\n *\n * // Serper (Google results)\n * const webSearch = createWebSearchTool({\n * provider: 'serper',\n * apiKey: process.env.SERPER_API_KEY,\n * });\n *\n * // Brave Search (privacy-focused)\n * const webSearch = createWebSearchTool({\n * provider: 'brave',\n * apiKey: process.env.BRAVE_API_KEY,\n * });\n *\n * // Self-hosted SearXNG (no API key needed)\n * const webSearch = createWebSearchTool({\n * provider: 'searxng',\n * baseUrl: 'https://your-searxng-instance.com',\n * });\n *\n * // Exa (AI-optimized semantic search)\n * const webSearch = createWebSearchTool({\n * provider: 'exa',\n * apiKey: process.env.EXA_API_KEY,\n * searchDepth: 'advanced',\n * });\n * ```\n */\nexport function createWebSearchTool(\n config: WebSearchConfigExtended,\n): ToolDefinition<WebSearchParams> {\n return {\n name: \"web_search\",\n ...webSearchTool,\n handler: async (params: WebSearchParams) => {\n try {\n const response = await executeWebSearch(\n {\n query: params.query,\n maxResults: params.maxResults ?? config.maxResults ?? 5,\n searchDepth: params.searchDepth ?? config.searchDepth ?? \"basic\",\n },\n config,\n );\n\n // Build the AI context string\n const aiContext = formatSearchResultsForAI(response);\n\n return {\n success: true,\n message: summarizeSearchResults(response),\n data: response,\n _aiContext: aiContext,\n };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : \"Web search failed\";\n return failure(errorMessage);\n }\n },\n };\n}\n\n/**\n * Utility types for web search tool configuration\n */\nexport type {\n WebSearchConfig,\n WebSearchParams,\n WebSearchResponse,\n WebSearchProviderInterface,\n};\nexport type { WebSearchConfigExtended };\n"]}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var chunkUIWFYMAO_cjs = require('./chunk-UIWFYMAO.cjs');
|
|
4
|
+
var chunkCEKAYA2Q_cjs = require('./chunk-CEKAYA2Q.cjs');
|
|
5
|
+
|
|
3
6
|
// src/core/tools/screenshot.ts
|
|
4
7
|
var isBrowser = typeof window !== "undefined" && typeof document !== "undefined";
|
|
5
8
|
var DEFAULT_OPTIONS = {
|
|
@@ -1032,71 +1035,8 @@ function createCustomDetector(customKeywords) {
|
|
|
1032
1035
|
};
|
|
1033
1036
|
}
|
|
1034
1037
|
|
|
1035
|
-
// src/core/types/tools.ts
|
|
1036
|
-
function tool(config) {
|
|
1037
|
-
return {
|
|
1038
|
-
description: config.description,
|
|
1039
|
-
location: config.location ?? "client",
|
|
1040
|
-
// Display configuration
|
|
1041
|
-
title: config.title,
|
|
1042
|
-
executingTitle: config.executingTitle,
|
|
1043
|
-
completedTitle: config.completedTitle,
|
|
1044
|
-
// Schema and handlers
|
|
1045
|
-
inputSchema: config.inputSchema ?? {
|
|
1046
|
-
type: "object",
|
|
1047
|
-
properties: {},
|
|
1048
|
-
required: []
|
|
1049
|
-
},
|
|
1050
|
-
handler: config.handler,
|
|
1051
|
-
render: config.render,
|
|
1052
|
-
available: config.available,
|
|
1053
|
-
needsApproval: config.needsApproval,
|
|
1054
|
-
approvalMessage: config.approvalMessage,
|
|
1055
|
-
aiResponseMode: config.aiResponseMode,
|
|
1056
|
-
aiContext: config.aiContext
|
|
1057
|
-
};
|
|
1058
|
-
}
|
|
1059
|
-
function toolToOpenAIFormat(tool2) {
|
|
1060
|
-
return {
|
|
1061
|
-
type: "function",
|
|
1062
|
-
function: {
|
|
1063
|
-
name: tool2.name,
|
|
1064
|
-
description: tool2.description,
|
|
1065
|
-
parameters: tool2.inputSchema
|
|
1066
|
-
}
|
|
1067
|
-
};
|
|
1068
|
-
}
|
|
1069
|
-
function toolToAnthropicFormat(tool2) {
|
|
1070
|
-
return {
|
|
1071
|
-
name: tool2.name,
|
|
1072
|
-
description: tool2.description,
|
|
1073
|
-
input_schema: tool2.inputSchema
|
|
1074
|
-
};
|
|
1075
|
-
}
|
|
1076
|
-
function createToolResult(toolCallId, response) {
|
|
1077
|
-
return {
|
|
1078
|
-
toolCallId,
|
|
1079
|
-
content: JSON.stringify(response),
|
|
1080
|
-
success: response.success,
|
|
1081
|
-
error: response.error
|
|
1082
|
-
};
|
|
1083
|
-
}
|
|
1084
|
-
function success(data, message) {
|
|
1085
|
-
return {
|
|
1086
|
-
success: true,
|
|
1087
|
-
data,
|
|
1088
|
-
message
|
|
1089
|
-
};
|
|
1090
|
-
}
|
|
1091
|
-
function failure(error) {
|
|
1092
|
-
return {
|
|
1093
|
-
success: false,
|
|
1094
|
-
error
|
|
1095
|
-
};
|
|
1096
|
-
}
|
|
1097
|
-
|
|
1098
1038
|
// src/core/tools/builtin/screenshot.ts
|
|
1099
|
-
var screenshotTool = tool({
|
|
1039
|
+
var screenshotTool = chunkCEKAYA2Q_cjs.tool({
|
|
1100
1040
|
description: "Capture a screenshot of the user's current screen/viewport. Use this when the user asks you to look at their screen, see what they're seeing, help with visual issues, or debug UI problems.",
|
|
1101
1041
|
location: "client",
|
|
1102
1042
|
inputSchema: {
|
|
@@ -1115,7 +1055,7 @@ var screenshotTool = tool({
|
|
|
1115
1055
|
approvalMessage: "Allow AI to capture a screenshot of your screen?",
|
|
1116
1056
|
handler: async (params) => {
|
|
1117
1057
|
if (!isScreenshotSupported()) {
|
|
1118
|
-
return failure("Screenshot capture is not supported in this environment");
|
|
1058
|
+
return chunkCEKAYA2Q_cjs.failure("Screenshot capture is not supported in this environment");
|
|
1119
1059
|
}
|
|
1120
1060
|
try {
|
|
1121
1061
|
const options = {};
|
|
@@ -1141,20 +1081,20 @@ var screenshotTool = tool({
|
|
|
1141
1081
|
}
|
|
1142
1082
|
};
|
|
1143
1083
|
} catch (error) {
|
|
1144
|
-
return failure(
|
|
1084
|
+
return chunkCEKAYA2Q_cjs.failure(
|
|
1145
1085
|
error instanceof Error ? error.message : "Screenshot capture failed"
|
|
1146
1086
|
);
|
|
1147
1087
|
}
|
|
1148
1088
|
}
|
|
1149
1089
|
});
|
|
1150
1090
|
function createScreenshotTool(options) {
|
|
1151
|
-
return tool({
|
|
1091
|
+
return chunkCEKAYA2Q_cjs.tool({
|
|
1152
1092
|
...screenshotTool,
|
|
1153
1093
|
needsApproval: options?.needsApproval ?? true,
|
|
1154
1094
|
approvalMessage: options?.approvalMessage ?? "Allow AI to capture a screenshot of your screen?",
|
|
1155
1095
|
handler: async (params) => {
|
|
1156
1096
|
if (!isScreenshotSupported()) {
|
|
1157
|
-
return failure(
|
|
1097
|
+
return chunkCEKAYA2Q_cjs.failure(
|
|
1158
1098
|
"Screenshot capture is not supported in this environment"
|
|
1159
1099
|
);
|
|
1160
1100
|
}
|
|
@@ -1180,7 +1120,7 @@ function createScreenshotTool(options) {
|
|
|
1180
1120
|
}
|
|
1181
1121
|
};
|
|
1182
1122
|
} catch (error) {
|
|
1183
|
-
return failure(
|
|
1123
|
+
return chunkCEKAYA2Q_cjs.failure(
|
|
1184
1124
|
error instanceof Error ? error.message : "Screenshot capture failed"
|
|
1185
1125
|
);
|
|
1186
1126
|
}
|
|
@@ -1193,7 +1133,7 @@ var isBrowser4 = typeof window !== "undefined" && typeof console !== "undefined"
|
|
|
1193
1133
|
if (isBrowser4 && !isConsoleCaptureActive()) {
|
|
1194
1134
|
startConsoleCapture();
|
|
1195
1135
|
}
|
|
1196
|
-
var consoleLogsTool = tool({
|
|
1136
|
+
var consoleLogsTool = chunkCEKAYA2Q_cjs.tool({
|
|
1197
1137
|
description: "Get recent console logs from the browser. Use this when debugging JavaScript errors, checking for warnings, or understanding what's happening in the application.",
|
|
1198
1138
|
location: "client",
|
|
1199
1139
|
inputSchema: {
|
|
@@ -1226,7 +1166,7 @@ var consoleLogsTool = tool({
|
|
|
1226
1166
|
types: params.types
|
|
1227
1167
|
});
|
|
1228
1168
|
const formattedLogs = formatLogsForAI(logs.logs);
|
|
1229
|
-
return success(
|
|
1169
|
+
return chunkCEKAYA2Q_cjs.success(
|
|
1230
1170
|
{
|
|
1231
1171
|
logs: formattedLogs,
|
|
1232
1172
|
count: logs.logs.length,
|
|
@@ -1235,14 +1175,14 @@ var consoleLogsTool = tool({
|
|
|
1235
1175
|
`Retrieved ${logs.logs.length} console logs`
|
|
1236
1176
|
);
|
|
1237
1177
|
} catch (error) {
|
|
1238
|
-
return failure(
|
|
1178
|
+
return chunkCEKAYA2Q_cjs.failure(
|
|
1239
1179
|
error instanceof Error ? error.message : "Failed to get console logs"
|
|
1240
1180
|
);
|
|
1241
1181
|
}
|
|
1242
1182
|
}
|
|
1243
1183
|
});
|
|
1244
1184
|
function createConsoleLogsTool(options) {
|
|
1245
|
-
return tool({
|
|
1185
|
+
return chunkCEKAYA2Q_cjs.tool({
|
|
1246
1186
|
...consoleLogsTool,
|
|
1247
1187
|
needsApproval: options?.needsApproval ?? true,
|
|
1248
1188
|
approvalMessage: options?.approvalMessage ?? "Allow AI to access browser console logs?",
|
|
@@ -1256,7 +1196,7 @@ function createConsoleLogsTool(options) {
|
|
|
1256
1196
|
types: params.types
|
|
1257
1197
|
});
|
|
1258
1198
|
const formattedLogs = formatLogsForAI(logs.logs);
|
|
1259
|
-
return success(
|
|
1199
|
+
return chunkCEKAYA2Q_cjs.success(
|
|
1260
1200
|
{
|
|
1261
1201
|
logs: formattedLogs,
|
|
1262
1202
|
count: logs.logs.length,
|
|
@@ -1265,7 +1205,7 @@ function createConsoleLogsTool(options) {
|
|
|
1265
1205
|
`Retrieved ${logs.logs.length} console logs`
|
|
1266
1206
|
);
|
|
1267
1207
|
} catch (error) {
|
|
1268
|
-
return failure(
|
|
1208
|
+
return chunkCEKAYA2Q_cjs.failure(
|
|
1269
1209
|
error instanceof Error ? error.message : "Failed to get console logs"
|
|
1270
1210
|
);
|
|
1271
1211
|
}
|
|
@@ -1274,7 +1214,7 @@ function createConsoleLogsTool(options) {
|
|
|
1274
1214
|
}
|
|
1275
1215
|
|
|
1276
1216
|
// src/core/tools/builtin/network.ts
|
|
1277
|
-
var networkRequestsTool = tool({
|
|
1217
|
+
var networkRequestsTool = chunkCEKAYA2Q_cjs.tool({
|
|
1278
1218
|
description: "Get recent network requests from the browser. Use this when debugging API calls, checking for failed requests, analyzing network activity, or troubleshooting connectivity issues.",
|
|
1279
1219
|
location: "client",
|
|
1280
1220
|
inputSchema: {
|
|
@@ -1303,7 +1243,7 @@ var networkRequestsTool = tool({
|
|
|
1303
1243
|
failedOnly: params.failedOnly
|
|
1304
1244
|
});
|
|
1305
1245
|
const formattedRequests = formatRequestsForAI(requests.requests);
|
|
1306
|
-
return success(
|
|
1246
|
+
return chunkCEKAYA2Q_cjs.success(
|
|
1307
1247
|
{
|
|
1308
1248
|
requests: formattedRequests,
|
|
1309
1249
|
count: requests.requests.length,
|
|
@@ -1312,14 +1252,14 @@ var networkRequestsTool = tool({
|
|
|
1312
1252
|
`Retrieved ${requests.requests.length} network requests`
|
|
1313
1253
|
);
|
|
1314
1254
|
} catch (error) {
|
|
1315
|
-
return failure(
|
|
1255
|
+
return chunkCEKAYA2Q_cjs.failure(
|
|
1316
1256
|
error instanceof Error ? error.message : "Failed to get network requests"
|
|
1317
1257
|
);
|
|
1318
1258
|
}
|
|
1319
1259
|
}
|
|
1320
1260
|
});
|
|
1321
1261
|
function createNetworkRequestsTool(options) {
|
|
1322
|
-
return tool({
|
|
1262
|
+
return chunkCEKAYA2Q_cjs.tool({
|
|
1323
1263
|
...networkRequestsTool,
|
|
1324
1264
|
needsApproval: options?.needsApproval ?? true,
|
|
1325
1265
|
approvalMessage: options?.approvalMessage ?? "Allow AI to access network request history?",
|
|
@@ -1333,7 +1273,7 @@ function createNetworkRequestsTool(options) {
|
|
|
1333
1273
|
failedOnly: params.failedOnly
|
|
1334
1274
|
});
|
|
1335
1275
|
const formattedRequests = formatRequestsForAI(requests.requests);
|
|
1336
|
-
return success(
|
|
1276
|
+
return chunkCEKAYA2Q_cjs.success(
|
|
1337
1277
|
{
|
|
1338
1278
|
requests: formattedRequests,
|
|
1339
1279
|
count: requests.requests.length,
|
|
@@ -1342,7 +1282,7 @@ function createNetworkRequestsTool(options) {
|
|
|
1342
1282
|
`Retrieved ${requests.requests.length} network requests`
|
|
1343
1283
|
);
|
|
1344
1284
|
} catch (error) {
|
|
1345
|
-
return failure(
|
|
1285
|
+
return chunkCEKAYA2Q_cjs.failure(
|
|
1346
1286
|
error instanceof Error ? error.message : "Failed to get network requests"
|
|
1347
1287
|
);
|
|
1348
1288
|
}
|
|
@@ -1363,6 +1303,10 @@ var builtinTools = {
|
|
|
1363
1303
|
get_network_requests: {
|
|
1364
1304
|
name: "get_network_requests",
|
|
1365
1305
|
...networkRequestsTool
|
|
1306
|
+
},
|
|
1307
|
+
web_search: {
|
|
1308
|
+
name: "web_search",
|
|
1309
|
+
...chunkUIWFYMAO_cjs.webSearchTool
|
|
1366
1310
|
}
|
|
1367
1311
|
};
|
|
1368
1312
|
|
|
@@ -2900,14 +2844,12 @@ exports.createServerAdapter = createServerAdapter;
|
|
|
2900
2844
|
exports.createThreadManager = createThreadManager;
|
|
2901
2845
|
exports.createToolCall = createToolCall;
|
|
2902
2846
|
exports.createToolMessage = createToolMessage;
|
|
2903
|
-
exports.createToolResult = createToolResult;
|
|
2904
2847
|
exports.createUserMessage = createUserMessage;
|
|
2905
2848
|
exports.defaultSystemMessage = defaultSystemMessage;
|
|
2906
2849
|
exports.defineClientTool = defineClientTool;
|
|
2907
2850
|
exports.defineServerTool = defineServerTool;
|
|
2908
2851
|
exports.defineTool = defineTool;
|
|
2909
2852
|
exports.detectIntent = detectIntent;
|
|
2910
|
-
exports.failure = failure;
|
|
2911
2853
|
exports.formatLogsForAI = formatLogsForAI;
|
|
2912
2854
|
exports.formatRequestsForAI = formatRequestsForAI;
|
|
2913
2855
|
exports.formatSSE = formatSSE;
|
|
@@ -2945,11 +2887,7 @@ exports.startNetworkCapture = startNetworkCapture;
|
|
|
2945
2887
|
exports.stopConsoleCapture = stopConsoleCapture;
|
|
2946
2888
|
exports.stopNetworkCapture = stopNetworkCapture;
|
|
2947
2889
|
exports.streamSSE = streamSSE;
|
|
2948
|
-
exports.success = success;
|
|
2949
|
-
exports.tool = tool;
|
|
2950
|
-
exports.toolToAnthropicFormat = toolToAnthropicFormat;
|
|
2951
|
-
exports.toolToOpenAIFormat = toolToOpenAIFormat;
|
|
2952
2890
|
exports.zodObjectToInputSchema = zodObjectToInputSchema;
|
|
2953
2891
|
exports.zodToJsonSchema = zodToJsonSchema;
|
|
2954
|
-
//# sourceMappingURL=chunk-
|
|
2955
|
-
//# sourceMappingURL=chunk-
|
|
2892
|
+
//# sourceMappingURL=chunk-UOWLKFXK.cjs.map
|
|
2893
|
+
//# sourceMappingURL=chunk-UOWLKFXK.cjs.map
|