@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,91 @@
|
|
|
1
|
+
import { T as ToolDefinition } from '../../tools-DDWrco4h.cjs';
|
|
2
|
+
export { s as searxngProvider } from '../../searxng-QGOte_Gq.cjs';
|
|
3
|
+
import '../../types-ZguuKEs_.cjs';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* SearXNG Search Tool
|
|
7
|
+
*
|
|
8
|
+
* Tree-shakeable import for SearXNG web search provider.
|
|
9
|
+
* Only imports SearXNG code - no other providers bundled.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { searxngSearch } from '@yourgpt/copilot-sdk/tools/searxng';
|
|
14
|
+
*
|
|
15
|
+
* const webSearch = searxngSearch({
|
|
16
|
+
* baseUrl: 'https://your-searxng-instance.com',
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* const runtime = createRuntime({
|
|
20
|
+
* tools: [webSearch],
|
|
21
|
+
* });
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* @see https://docs.searxng.org/
|
|
25
|
+
* @module @yourgpt/copilot-sdk/tools/searxng
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* SearXNG search configuration
|
|
30
|
+
*/
|
|
31
|
+
interface SearxngSearchConfig {
|
|
32
|
+
/** Base URL of your SearXNG instance (e.g., 'https://searx.example.com') */
|
|
33
|
+
baseUrl: string;
|
|
34
|
+
/** Optional API key if your instance requires authentication */
|
|
35
|
+
apiKey?: string;
|
|
36
|
+
/** Maximum number of results (default: 5) */
|
|
37
|
+
maxResults?: number;
|
|
38
|
+
/** Language code for results (e.g., 'en', 'es', 'fr') */
|
|
39
|
+
language?: string;
|
|
40
|
+
/** Only include results from these domains */
|
|
41
|
+
includeDomains?: string[];
|
|
42
|
+
/** Exclude results from these domains */
|
|
43
|
+
excludeDomains?: string[];
|
|
44
|
+
/** Request timeout in milliseconds */
|
|
45
|
+
timeout?: number;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Search parameters passed to the tool
|
|
49
|
+
*/
|
|
50
|
+
interface SearxngSearchParams {
|
|
51
|
+
/** The search query */
|
|
52
|
+
query: string;
|
|
53
|
+
/** Maximum number of results (overrides config) */
|
|
54
|
+
maxResults?: number;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Create a SearXNG web search tool
|
|
58
|
+
*
|
|
59
|
+
* SearXNG is a privacy-respecting, self-hostable metasearch engine.
|
|
60
|
+
* It aggregates results from multiple search engines without tracking.
|
|
61
|
+
*
|
|
62
|
+
* @param config - SearXNG configuration including instance URL
|
|
63
|
+
* @returns A configured tool definition ready to use
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* import { searxngSearch } from '@yourgpt/copilot-sdk/tools/searxng';
|
|
68
|
+
*
|
|
69
|
+
* // Basic usage with self-hosted instance
|
|
70
|
+
* const webSearch = searxngSearch({
|
|
71
|
+
* baseUrl: 'https://your-searxng-instance.com',
|
|
72
|
+
* });
|
|
73
|
+
*
|
|
74
|
+
* // With authentication
|
|
75
|
+
* const webSearch = searxngSearch({
|
|
76
|
+
* baseUrl: 'https://your-searxng-instance.com',
|
|
77
|
+
* apiKey: process.env.SEARXNG_API_KEY,
|
|
78
|
+
* language: 'en',
|
|
79
|
+
* maxResults: 10,
|
|
80
|
+
* });
|
|
81
|
+
*
|
|
82
|
+
* const runtime = createRuntime({
|
|
83
|
+
* provider: openai,
|
|
84
|
+
* model: 'gpt-4o',
|
|
85
|
+
* tools: [webSearch],
|
|
86
|
+
* });
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
declare function searxngSearch(config: SearxngSearchConfig): ToolDefinition<SearxngSearchParams>;
|
|
90
|
+
|
|
91
|
+
export { type SearxngSearchConfig, searxngSearch };
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { T as ToolDefinition } from '../../tools-DDWrco4h.js';
|
|
2
|
+
export { s as searxngProvider } from '../../searxng-K0qtY9vp.js';
|
|
3
|
+
import '../../types-ZguuKEs_.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* SearXNG Search Tool
|
|
7
|
+
*
|
|
8
|
+
* Tree-shakeable import for SearXNG web search provider.
|
|
9
|
+
* Only imports SearXNG code - no other providers bundled.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { searxngSearch } from '@yourgpt/copilot-sdk/tools/searxng';
|
|
14
|
+
*
|
|
15
|
+
* const webSearch = searxngSearch({
|
|
16
|
+
* baseUrl: 'https://your-searxng-instance.com',
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* const runtime = createRuntime({
|
|
20
|
+
* tools: [webSearch],
|
|
21
|
+
* });
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* @see https://docs.searxng.org/
|
|
25
|
+
* @module @yourgpt/copilot-sdk/tools/searxng
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* SearXNG search configuration
|
|
30
|
+
*/
|
|
31
|
+
interface SearxngSearchConfig {
|
|
32
|
+
/** Base URL of your SearXNG instance (e.g., 'https://searx.example.com') */
|
|
33
|
+
baseUrl: string;
|
|
34
|
+
/** Optional API key if your instance requires authentication */
|
|
35
|
+
apiKey?: string;
|
|
36
|
+
/** Maximum number of results (default: 5) */
|
|
37
|
+
maxResults?: number;
|
|
38
|
+
/** Language code for results (e.g., 'en', 'es', 'fr') */
|
|
39
|
+
language?: string;
|
|
40
|
+
/** Only include results from these domains */
|
|
41
|
+
includeDomains?: string[];
|
|
42
|
+
/** Exclude results from these domains */
|
|
43
|
+
excludeDomains?: string[];
|
|
44
|
+
/** Request timeout in milliseconds */
|
|
45
|
+
timeout?: number;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Search parameters passed to the tool
|
|
49
|
+
*/
|
|
50
|
+
interface SearxngSearchParams {
|
|
51
|
+
/** The search query */
|
|
52
|
+
query: string;
|
|
53
|
+
/** Maximum number of results (overrides config) */
|
|
54
|
+
maxResults?: number;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Create a SearXNG web search tool
|
|
58
|
+
*
|
|
59
|
+
* SearXNG is a privacy-respecting, self-hostable metasearch engine.
|
|
60
|
+
* It aggregates results from multiple search engines without tracking.
|
|
61
|
+
*
|
|
62
|
+
* @param config - SearXNG configuration including instance URL
|
|
63
|
+
* @returns A configured tool definition ready to use
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* import { searxngSearch } from '@yourgpt/copilot-sdk/tools/searxng';
|
|
68
|
+
*
|
|
69
|
+
* // Basic usage with self-hosted instance
|
|
70
|
+
* const webSearch = searxngSearch({
|
|
71
|
+
* baseUrl: 'https://your-searxng-instance.com',
|
|
72
|
+
* });
|
|
73
|
+
*
|
|
74
|
+
* // With authentication
|
|
75
|
+
* const webSearch = searxngSearch({
|
|
76
|
+
* baseUrl: 'https://your-searxng-instance.com',
|
|
77
|
+
* apiKey: process.env.SEARXNG_API_KEY,
|
|
78
|
+
* language: 'en',
|
|
79
|
+
* maxResults: 10,
|
|
80
|
+
* });
|
|
81
|
+
*
|
|
82
|
+
* const runtime = createRuntime({
|
|
83
|
+
* provider: openai,
|
|
84
|
+
* model: 'gpt-4o',
|
|
85
|
+
* tools: [webSearch],
|
|
86
|
+
* });
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
declare function searxngSearch(config: SearxngSearchConfig): ToolDefinition<SearxngSearchParams>;
|
|
90
|
+
|
|
91
|
+
export { type SearxngSearchConfig, searxngSearch };
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { failure } from '../../chunk-BKO7DSPU.js';
|
|
2
|
+
import { formatSearchResultsForAI, summarizeSearchResults } from '../../chunk-XGITAEXU.js';
|
|
3
|
+
import '../../chunk-7W7QLZNC.js';
|
|
4
|
+
import '../../chunk-CEOMTQTP.js';
|
|
5
|
+
import '../../chunk-PPFHA6IL.js';
|
|
6
|
+
import { searchSearxng } from '../../chunk-DABZYCVX.js';
|
|
7
|
+
export { searxngProvider } from '../../chunk-DABZYCVX.js';
|
|
8
|
+
import '../../chunk-MNDGIW47.js';
|
|
9
|
+
import '../../chunk-VD74IPKB.js';
|
|
10
|
+
import '../../chunk-53UGJNHN.js';
|
|
11
|
+
import '../../chunk-RQ74USYU.js';
|
|
12
|
+
import '../../chunk-DGUM43GV.js';
|
|
13
|
+
|
|
14
|
+
// src/tools/searxng/index.ts
|
|
15
|
+
function searxngSearch(config) {
|
|
16
|
+
return {
|
|
17
|
+
name: "web_search",
|
|
18
|
+
description: `Search the web using SearXNG for current information. Use this when the user asks about:
|
|
19
|
+
- Recent events, news, or current affairs
|
|
20
|
+
- Real-time data (prices, weather, stocks, sports scores)
|
|
21
|
+
- Information that might have changed after your training cutoff
|
|
22
|
+
- Facts that need verification with current sources
|
|
23
|
+
- Research topics that require up-to-date information`,
|
|
24
|
+
location: "server",
|
|
25
|
+
title: (args) => `Searching for "${args.query}"`,
|
|
26
|
+
executingTitle: (args) => `Searching the web for "${args.query}"...`,
|
|
27
|
+
completedTitle: (args) => `Found results for "${args.query}"`,
|
|
28
|
+
inputSchema: {
|
|
29
|
+
type: "object",
|
|
30
|
+
properties: {
|
|
31
|
+
query: {
|
|
32
|
+
type: "string",
|
|
33
|
+
description: "The search query to find relevant information"
|
|
34
|
+
},
|
|
35
|
+
maxResults: {
|
|
36
|
+
type: "number",
|
|
37
|
+
description: "Maximum number of results to return (default: 5, max: 10)",
|
|
38
|
+
minimum: 1,
|
|
39
|
+
maximum: 10
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
required: ["query"]
|
|
43
|
+
},
|
|
44
|
+
needsApproval: false,
|
|
45
|
+
aiResponseMode: "full",
|
|
46
|
+
handler: async (params) => {
|
|
47
|
+
try {
|
|
48
|
+
const response = await searchSearxng(
|
|
49
|
+
{
|
|
50
|
+
query: params.query,
|
|
51
|
+
maxResults: params.maxResults ?? config.maxResults ?? 5
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
provider: "searxng",
|
|
55
|
+
baseUrl: config.baseUrl,
|
|
56
|
+
apiKey: config.apiKey,
|
|
57
|
+
language: config.language,
|
|
58
|
+
includeDomains: config.includeDomains,
|
|
59
|
+
excludeDomains: config.excludeDomains,
|
|
60
|
+
timeout: config.timeout
|
|
61
|
+
}
|
|
62
|
+
);
|
|
63
|
+
const aiContext = formatSearchResultsForAI(response);
|
|
64
|
+
return {
|
|
65
|
+
success: true,
|
|
66
|
+
message: summarizeSearchResults(response),
|
|
67
|
+
data: response,
|
|
68
|
+
_aiContext: aiContext
|
|
69
|
+
};
|
|
70
|
+
} catch (error) {
|
|
71
|
+
const errorMessage = error instanceof Error ? error.message : "Web search failed";
|
|
72
|
+
return failure(errorMessage);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export { searxngSearch };
|
|
79
|
+
//# sourceMappingURL=index.js.map
|
|
80
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/tools/searxng/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAqGO,SAAS,cACd,MAAA,EACqC;AACrC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,YAAA;AAAA,IACN,WAAA,EAAa,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qDAAA,CAAA;AAAA,IAOb,QAAA,EAAU,QAAA;AAAA,IAEV,KAAA,EAAO,CAAC,IAAA,KAAS,CAAA,eAAA,EAAkB,KAAK,KAAK,CAAA,CAAA,CAAA;AAAA,IAC7C,cAAA,EAAgB,CAAC,IAAA,KAAS,CAAA,uBAAA,EAA0B,KAAK,KAAK,CAAA,IAAA,CAAA;AAAA,IAC9D,cAAA,EAAgB,CAAC,IAAA,KAAS,CAAA,mBAAA,EAAsB,KAAK,KAAK,CAAA,CAAA,CAAA;AAAA,IAE1D,WAAA,EAAa;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAY;AAAA,QACV,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,QAAA;AAAA,UACN,WAAA,EAAa;AAAA,SACf;AAAA,QACA,UAAA,EAAY;AAAA,UACV,IAAA,EAAM,QAAA;AAAA,UACN,WAAA,EACE,2DAAA;AAAA,UACF,OAAA,EAAS,CAAA;AAAA,UACT,OAAA,EAAS;AAAA;AACX,OACF;AAAA,MACA,QAAA,EAAU,CAAC,OAAO;AAAA,KACpB;AAAA,IAEA,aAAA,EAAe,KAAA;AAAA,IACf,cAAA,EAAgB,MAAA;AAAA,IAEhB,OAAA,EAAS,OAAO,MAAA,KAAW;AACzB,MAAA,IAAI;AACF,QAAA,MAAM,WAA8B,MAAM,aAAA;AAAA,UACxC;AAAA,YACE,OAAO,MAAA,CAAO,KAAA;AAAA,YACd,UAAA,EAAY,MAAA,CAAO,UAAA,IAAc,MAAA,CAAO,UAAA,IAAc;AAAA,WACxD;AAAA,UACA;AAAA,YACE,QAAA,EAAU,SAAA;AAAA,YACV,SAAS,MAAA,CAAO,OAAA;AAAA,YAChB,QAAQ,MAAA,CAAO,MAAA;AAAA,YACf,UAAU,MAAA,CAAO,QAAA;AAAA,YACjB,gBAAgB,MAAA,CAAO,cAAA;AAAA,YACvB,gBAAgB,MAAA,CAAO,cAAA;AAAA,YACvB,SAAS,MAAA,CAAO;AAAA;AAClB,SACF;AAEA,QAAA,MAAM,SAAA,GAAY,yBAAyB,QAAQ,CAAA;AAEnD,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,IAAA;AAAA,UACT,OAAA,EAAS,uBAAuB,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,OAAO,QAAQ,YAAY,CAAA;AAAA,MAC7B;AAAA,IACF;AAAA,GACF;AACF","file":"index.js","sourcesContent":["/**\n * SearXNG Search Tool\n *\n * Tree-shakeable import for SearXNG web search provider.\n * Only imports SearXNG code - no other providers bundled.\n *\n * @example\n * ```typescript\n * import { searxngSearch } from '@yourgpt/copilot-sdk/tools/searxng';\n *\n * const webSearch = searxngSearch({\n * baseUrl: 'https://your-searxng-instance.com',\n * });\n *\n * const runtime = createRuntime({\n * tools: [webSearch],\n * });\n * ```\n *\n * @see https://docs.searxng.org/\n * @module @yourgpt/copilot-sdk/tools/searxng\n */\n\nimport type { ToolDefinition } from \"../../core/types/tools\";\nimport { failure } from \"../../core/types/tools\";\nimport {\n searchSearxng,\n searxngProvider,\n} from \"../../core/tools/webSearch/providers/searxng\";\nimport {\n formatSearchResultsForAI,\n summarizeSearchResults,\n} from \"../../core/tools/webSearch\";\nimport type { WebSearchResponse } from \"../../core/tools/webSearch/types\";\n\n// Re-export provider for direct access\nexport { searxngProvider };\n\n/**\n * SearXNG search configuration\n */\nexport interface SearxngSearchConfig {\n /** Base URL of your SearXNG instance (e.g., 'https://searx.example.com') */\n baseUrl: string;\n /** Optional API key if your instance requires authentication */\n apiKey?: string;\n /** Maximum number of results (default: 5) */\n maxResults?: number;\n /** Language code for results (e.g., 'en', 'es', 'fr') */\n language?: string;\n /** Only include results from these domains */\n includeDomains?: string[];\n /** Exclude results from these domains */\n excludeDomains?: string[];\n /** Request timeout in milliseconds */\n timeout?: number;\n}\n\n/**\n * Search parameters passed to the tool\n */\ninterface SearxngSearchParams {\n /** The search query */\n query: string;\n /** Maximum number of results (overrides config) */\n maxResults?: number;\n}\n\n/**\n * Create a SearXNG web search tool\n *\n * SearXNG is a privacy-respecting, self-hostable metasearch engine.\n * It aggregates results from multiple search engines without tracking.\n *\n * @param config - SearXNG configuration including instance URL\n * @returns A configured tool definition ready to use\n *\n * @example\n * ```typescript\n * import { searxngSearch } from '@yourgpt/copilot-sdk/tools/searxng';\n *\n * // Basic usage with self-hosted instance\n * const webSearch = searxngSearch({\n * baseUrl: 'https://your-searxng-instance.com',\n * });\n *\n * // With authentication\n * const webSearch = searxngSearch({\n * baseUrl: 'https://your-searxng-instance.com',\n * apiKey: process.env.SEARXNG_API_KEY,\n * language: 'en',\n * maxResults: 10,\n * });\n *\n * const runtime = createRuntime({\n * provider: openai,\n * model: 'gpt-4o',\n * tools: [webSearch],\n * });\n * ```\n */\nexport function searxngSearch(\n config: SearxngSearchConfig,\n): ToolDefinition<SearxngSearchParams> {\n return {\n name: \"web_search\",\n description: `Search the web using SearXNG 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\",\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 },\n required: [\"query\"],\n },\n\n needsApproval: false,\n aiResponseMode: \"full\",\n\n handler: async (params) => {\n try {\n const response: WebSearchResponse = await searchSearxng(\n {\n query: params.query,\n maxResults: params.maxResults ?? config.maxResults ?? 5,\n },\n {\n provider: \"searxng\",\n baseUrl: config.baseUrl,\n apiKey: config.apiKey,\n language: config.language,\n includeDomains: config.includeDomains,\n excludeDomains: config.excludeDomains,\n timeout: config.timeout,\n },\n );\n\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"]}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkCEKAYA2Q_cjs = require('../../chunk-CEKAYA2Q.cjs');
|
|
4
|
+
var chunkASV6JLYG_cjs = require('../../chunk-ASV6JLYG.cjs');
|
|
5
|
+
require('../../chunk-CBAHCI4R.cjs');
|
|
6
|
+
var chunkMEBXW75C_cjs = require('../../chunk-MEBXW75C.cjs');
|
|
7
|
+
require('../../chunk-W73FBYIH.cjs');
|
|
8
|
+
require('../../chunk-2FAWEBZS.cjs');
|
|
9
|
+
require('../../chunk-6T5XXJEP.cjs');
|
|
10
|
+
require('../../chunk-GANCV72Z.cjs');
|
|
11
|
+
require('../../chunk-XWOHNY3F.cjs');
|
|
12
|
+
require('../../chunk-TXLIY7GF.cjs');
|
|
13
|
+
require('../../chunk-JEQ2X3Z6.cjs');
|
|
14
|
+
|
|
15
|
+
// src/tools/serper/index.ts
|
|
16
|
+
function serperSearch(config) {
|
|
17
|
+
return {
|
|
18
|
+
name: "web_search",
|
|
19
|
+
description: `Search the web using Serper (Google results) for current information. Use this when the user asks about:
|
|
20
|
+
- Recent events, news, or current affairs
|
|
21
|
+
- Real-time data (prices, weather, stocks, sports scores)
|
|
22
|
+
- Information that might have changed after your training cutoff
|
|
23
|
+
- Facts that need verification with current sources
|
|
24
|
+
- Research topics that require up-to-date information`,
|
|
25
|
+
location: "server",
|
|
26
|
+
title: (args) => `Searching for "${args.query}"`,
|
|
27
|
+
executingTitle: (args) => `Searching the web for "${args.query}"...`,
|
|
28
|
+
completedTitle: (args) => `Found results for "${args.query}"`,
|
|
29
|
+
inputSchema: {
|
|
30
|
+
type: "object",
|
|
31
|
+
properties: {
|
|
32
|
+
query: {
|
|
33
|
+
type: "string",
|
|
34
|
+
description: "The search query to find relevant information"
|
|
35
|
+
},
|
|
36
|
+
maxResults: {
|
|
37
|
+
type: "number",
|
|
38
|
+
description: "Maximum number of results to return (default: 5, max: 10)",
|
|
39
|
+
minimum: 1,
|
|
40
|
+
maximum: 10
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
required: ["query"]
|
|
44
|
+
},
|
|
45
|
+
needsApproval: false,
|
|
46
|
+
aiResponseMode: "full",
|
|
47
|
+
handler: async (params) => {
|
|
48
|
+
try {
|
|
49
|
+
const response = await chunkMEBXW75C_cjs.searchSerper(
|
|
50
|
+
{
|
|
51
|
+
query: params.query,
|
|
52
|
+
maxResults: params.maxResults ?? config.maxResults ?? 5
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
provider: "serper",
|
|
56
|
+
apiKey: config.apiKey,
|
|
57
|
+
country: config.country,
|
|
58
|
+
language: config.language,
|
|
59
|
+
includeDomains: config.includeDomains,
|
|
60
|
+
excludeDomains: config.excludeDomains,
|
|
61
|
+
timeout: config.timeout
|
|
62
|
+
}
|
|
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
|
+
Object.defineProperty(exports, "serperProvider", {
|
|
80
|
+
enumerable: true,
|
|
81
|
+
get: function () { return chunkMEBXW75C_cjs.serperProvider; }
|
|
82
|
+
});
|
|
83
|
+
exports.serperSearch = serperSearch;
|
|
84
|
+
//# sourceMappingURL=index.cjs.map
|
|
85
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/tools/serper/index.ts"],"names":["searchSerper","formatSearchResultsForAI","summarizeSearchResults","failure"],"mappings":";;;;;;;;;;;;;;;AAqGO,SAAS,aACd,MAAA,EACoC;AACpC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,YAAA;AAAA,IACN,WAAA,EAAa,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qDAAA,CAAA;AAAA,IAOb,QAAA,EAAU,QAAA;AAAA,IAEV,KAAA,EAAO,CAAC,IAAA,KAAS,CAAA,eAAA,EAAkB,KAAK,KAAK,CAAA,CAAA,CAAA;AAAA,IAC7C,cAAA,EAAgB,CAAC,IAAA,KAAS,CAAA,uBAAA,EAA0B,KAAK,KAAK,CAAA,IAAA,CAAA;AAAA,IAC9D,cAAA,EAAgB,CAAC,IAAA,KAAS,CAAA,mBAAA,EAAsB,KAAK,KAAK,CAAA,CAAA,CAAA;AAAA,IAE1D,WAAA,EAAa;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAY;AAAA,QACV,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,QAAA;AAAA,UACN,WAAA,EAAa;AAAA,SACf;AAAA,QACA,UAAA,EAAY;AAAA,UACV,IAAA,EAAM,QAAA;AAAA,UACN,WAAA,EACE,2DAAA;AAAA,UACF,OAAA,EAAS,CAAA;AAAA,UACT,OAAA,EAAS;AAAA;AACX,OACF;AAAA,MACA,QAAA,EAAU,CAAC,OAAO;AAAA,KACpB;AAAA,IAEA,aAAA,EAAe,KAAA;AAAA,IACf,cAAA,EAAgB,MAAA;AAAA,IAEhB,OAAA,EAAS,OAAO,MAAA,KAAW;AACzB,MAAA,IAAI;AACF,QAAA,MAAM,WAA8B,MAAMA,8BAAA;AAAA,UACxC;AAAA,YACE,OAAO,MAAA,CAAO,KAAA;AAAA,YACd,UAAA,EAAY,MAAA,CAAO,UAAA,IAAc,MAAA,CAAO,UAAA,IAAc;AAAA,WACxD;AAAA,UACA;AAAA,YACE,QAAA,EAAU,QAAA;AAAA,YACV,QAAQ,MAAA,CAAO,MAAA;AAAA,YACf,SAAS,MAAA,CAAO,OAAA;AAAA,YAChB,UAAU,MAAA,CAAO,QAAA;AAAA,YACjB,gBAAgB,MAAA,CAAO,cAAA;AAAA,YACvB,gBAAgB,MAAA,CAAO,cAAA;AAAA,YACvB,SAAS,MAAA,CAAO;AAAA;AAClB,SACF;AAEA,QAAA,MAAM,SAAA,GAAYC,2CAAyB,QAAQ,CAAA;AAEnD,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,IAAA;AAAA,UACT,OAAA,EAASC,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":"index.cjs","sourcesContent":["/**\n * Serper Search Tool\n *\n * Tree-shakeable import for Serper web search provider.\n * Only imports Serper code - no other providers bundled.\n *\n * @example\n * ```typescript\n * import { serperSearch } from '@yourgpt/copilot-sdk/tools/serper';\n *\n * const webSearch = serperSearch({\n * apiKey: process.env.SERPER_API_KEY,\n * });\n *\n * const runtime = createRuntime({\n * tools: [webSearch],\n * });\n * ```\n *\n * @see https://serper.dev/\n * @module @yourgpt/copilot-sdk/tools/serper\n */\n\nimport type { ToolDefinition } from \"../../core/types/tools\";\nimport { failure } from \"../../core/types/tools\";\nimport {\n searchSerper,\n serperProvider,\n} from \"../../core/tools/webSearch/providers/serper\";\nimport {\n formatSearchResultsForAI,\n summarizeSearchResults,\n} from \"../../core/tools/webSearch\";\nimport type { WebSearchResponse } from \"../../core/tools/webSearch/types\";\n\n// Re-export provider for direct access\nexport { serperProvider };\n\n/**\n * Serper search configuration\n */\nexport interface SerperSearchConfig {\n /** Serper API key - get one at https://serper.dev/ */\n apiKey: string;\n /** Maximum number of results (default: 5) */\n maxResults?: number;\n /** Country code for localized results (e.g., 'us', 'gb', 'de') */\n country?: string;\n /** Language code for results (e.g., 'en', 'es', 'fr') */\n language?: string;\n /** Only include results from these domains */\n includeDomains?: string[];\n /** Exclude results from these domains */\n excludeDomains?: string[];\n /** Request timeout in milliseconds */\n timeout?: number;\n}\n\n/**\n * Search parameters passed to the tool\n */\ninterface SerperSearchParams {\n /** The search query */\n query: string;\n /** Maximum number of results (overrides config) */\n maxResults?: number;\n}\n\n/**\n * Create a Serper web search tool\n *\n * Serper is a Google Search API that provides SERP data.\n * Fast and cost-effective for real-time Google results.\n *\n * @param config - Serper configuration including API key\n * @returns A configured tool definition ready to use\n *\n * @example\n * ```typescript\n * import { serperSearch } from '@yourgpt/copilot-sdk/tools/serper';\n *\n * // Basic usage\n * const webSearch = serperSearch({\n * apiKey: process.env.SERPER_API_KEY,\n * });\n *\n * // With locale settings\n * const webSearch = serperSearch({\n * apiKey: process.env.SERPER_API_KEY,\n * country: 'us',\n * language: 'en',\n * maxResults: 10,\n * });\n *\n * const runtime = createRuntime({\n * provider: openai,\n * model: 'gpt-4o',\n * tools: [webSearch],\n * });\n * ```\n */\nexport function serperSearch(\n config: SerperSearchConfig,\n): ToolDefinition<SerperSearchParams> {\n return {\n name: \"web_search\",\n description: `Search the web using Serper (Google results) 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\",\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 },\n required: [\"query\"],\n },\n\n needsApproval: false,\n aiResponseMode: \"full\",\n\n handler: async (params) => {\n try {\n const response: WebSearchResponse = await searchSerper(\n {\n query: params.query,\n maxResults: params.maxResults ?? config.maxResults ?? 5,\n },\n {\n provider: \"serper\",\n apiKey: config.apiKey,\n country: config.country,\n language: config.language,\n includeDomains: config.includeDomains,\n excludeDomains: config.excludeDomains,\n timeout: config.timeout,\n },\n );\n\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"]}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { T as ToolDefinition } from '../../tools-DDWrco4h.cjs';
|
|
2
|
+
export { s as serperProvider } from '../../serper-JzdaSnS9.cjs';
|
|
3
|
+
import '../../types-ZguuKEs_.cjs';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Serper Search Tool
|
|
7
|
+
*
|
|
8
|
+
* Tree-shakeable import for Serper web search provider.
|
|
9
|
+
* Only imports Serper code - no other providers bundled.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { serperSearch } from '@yourgpt/copilot-sdk/tools/serper';
|
|
14
|
+
*
|
|
15
|
+
* const webSearch = serperSearch({
|
|
16
|
+
* apiKey: process.env.SERPER_API_KEY,
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* const runtime = createRuntime({
|
|
20
|
+
* tools: [webSearch],
|
|
21
|
+
* });
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* @see https://serper.dev/
|
|
25
|
+
* @module @yourgpt/copilot-sdk/tools/serper
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Serper search configuration
|
|
30
|
+
*/
|
|
31
|
+
interface SerperSearchConfig {
|
|
32
|
+
/** Serper API key - get one at https://serper.dev/ */
|
|
33
|
+
apiKey: string;
|
|
34
|
+
/** Maximum number of results (default: 5) */
|
|
35
|
+
maxResults?: number;
|
|
36
|
+
/** Country code for localized results (e.g., 'us', 'gb', 'de') */
|
|
37
|
+
country?: string;
|
|
38
|
+
/** Language code for results (e.g., 'en', 'es', 'fr') */
|
|
39
|
+
language?: string;
|
|
40
|
+
/** Only include results from these domains */
|
|
41
|
+
includeDomains?: string[];
|
|
42
|
+
/** Exclude results from these domains */
|
|
43
|
+
excludeDomains?: string[];
|
|
44
|
+
/** Request timeout in milliseconds */
|
|
45
|
+
timeout?: number;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Search parameters passed to the tool
|
|
49
|
+
*/
|
|
50
|
+
interface SerperSearchParams {
|
|
51
|
+
/** The search query */
|
|
52
|
+
query: string;
|
|
53
|
+
/** Maximum number of results (overrides config) */
|
|
54
|
+
maxResults?: number;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Create a Serper web search tool
|
|
58
|
+
*
|
|
59
|
+
* Serper is a Google Search API that provides SERP data.
|
|
60
|
+
* Fast and cost-effective for real-time Google results.
|
|
61
|
+
*
|
|
62
|
+
* @param config - Serper configuration including API key
|
|
63
|
+
* @returns A configured tool definition ready to use
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* import { serperSearch } from '@yourgpt/copilot-sdk/tools/serper';
|
|
68
|
+
*
|
|
69
|
+
* // Basic usage
|
|
70
|
+
* const webSearch = serperSearch({
|
|
71
|
+
* apiKey: process.env.SERPER_API_KEY,
|
|
72
|
+
* });
|
|
73
|
+
*
|
|
74
|
+
* // With locale settings
|
|
75
|
+
* const webSearch = serperSearch({
|
|
76
|
+
* apiKey: process.env.SERPER_API_KEY,
|
|
77
|
+
* country: 'us',
|
|
78
|
+
* language: 'en',
|
|
79
|
+
* maxResults: 10,
|
|
80
|
+
* });
|
|
81
|
+
*
|
|
82
|
+
* const runtime = createRuntime({
|
|
83
|
+
* provider: openai,
|
|
84
|
+
* model: 'gpt-4o',
|
|
85
|
+
* tools: [webSearch],
|
|
86
|
+
* });
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
declare function serperSearch(config: SerperSearchConfig): ToolDefinition<SerperSearchParams>;
|
|
90
|
+
|
|
91
|
+
export { type SerperSearchConfig, serperSearch };
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { T as ToolDefinition } from '../../tools-DDWrco4h.js';
|
|
2
|
+
export { s as serperProvider } from '../../serper-7Czya3PW.js';
|
|
3
|
+
import '../../types-ZguuKEs_.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Serper Search Tool
|
|
7
|
+
*
|
|
8
|
+
* Tree-shakeable import for Serper web search provider.
|
|
9
|
+
* Only imports Serper code - no other providers bundled.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { serperSearch } from '@yourgpt/copilot-sdk/tools/serper';
|
|
14
|
+
*
|
|
15
|
+
* const webSearch = serperSearch({
|
|
16
|
+
* apiKey: process.env.SERPER_API_KEY,
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* const runtime = createRuntime({
|
|
20
|
+
* tools: [webSearch],
|
|
21
|
+
* });
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* @see https://serper.dev/
|
|
25
|
+
* @module @yourgpt/copilot-sdk/tools/serper
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Serper search configuration
|
|
30
|
+
*/
|
|
31
|
+
interface SerperSearchConfig {
|
|
32
|
+
/** Serper API key - get one at https://serper.dev/ */
|
|
33
|
+
apiKey: string;
|
|
34
|
+
/** Maximum number of results (default: 5) */
|
|
35
|
+
maxResults?: number;
|
|
36
|
+
/** Country code for localized results (e.g., 'us', 'gb', 'de') */
|
|
37
|
+
country?: string;
|
|
38
|
+
/** Language code for results (e.g., 'en', 'es', 'fr') */
|
|
39
|
+
language?: string;
|
|
40
|
+
/** Only include results from these domains */
|
|
41
|
+
includeDomains?: string[];
|
|
42
|
+
/** Exclude results from these domains */
|
|
43
|
+
excludeDomains?: string[];
|
|
44
|
+
/** Request timeout in milliseconds */
|
|
45
|
+
timeout?: number;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Search parameters passed to the tool
|
|
49
|
+
*/
|
|
50
|
+
interface SerperSearchParams {
|
|
51
|
+
/** The search query */
|
|
52
|
+
query: string;
|
|
53
|
+
/** Maximum number of results (overrides config) */
|
|
54
|
+
maxResults?: number;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Create a Serper web search tool
|
|
58
|
+
*
|
|
59
|
+
* Serper is a Google Search API that provides SERP data.
|
|
60
|
+
* Fast and cost-effective for real-time Google results.
|
|
61
|
+
*
|
|
62
|
+
* @param config - Serper configuration including API key
|
|
63
|
+
* @returns A configured tool definition ready to use
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* import { serperSearch } from '@yourgpt/copilot-sdk/tools/serper';
|
|
68
|
+
*
|
|
69
|
+
* // Basic usage
|
|
70
|
+
* const webSearch = serperSearch({
|
|
71
|
+
* apiKey: process.env.SERPER_API_KEY,
|
|
72
|
+
* });
|
|
73
|
+
*
|
|
74
|
+
* // With locale settings
|
|
75
|
+
* const webSearch = serperSearch({
|
|
76
|
+
* apiKey: process.env.SERPER_API_KEY,
|
|
77
|
+
* country: 'us',
|
|
78
|
+
* language: 'en',
|
|
79
|
+
* maxResults: 10,
|
|
80
|
+
* });
|
|
81
|
+
*
|
|
82
|
+
* const runtime = createRuntime({
|
|
83
|
+
* provider: openai,
|
|
84
|
+
* model: 'gpt-4o',
|
|
85
|
+
* tools: [webSearch],
|
|
86
|
+
* });
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
declare function serperSearch(config: SerperSearchConfig): ToolDefinition<SerperSearchParams>;
|
|
90
|
+
|
|
91
|
+
export { type SerperSearchConfig, serperSearch };
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { failure } from '../../chunk-BKO7DSPU.js';
|
|
2
|
+
import { formatSearchResultsForAI, summarizeSearchResults } from '../../chunk-XGITAEXU.js';
|
|
3
|
+
import '../../chunk-7W7QLZNC.js';
|
|
4
|
+
import { searchSerper } from '../../chunk-CEOMTQTP.js';
|
|
5
|
+
export { serperProvider } from '../../chunk-CEOMTQTP.js';
|
|
6
|
+
import '../../chunk-PPFHA6IL.js';
|
|
7
|
+
import '../../chunk-DABZYCVX.js';
|
|
8
|
+
import '../../chunk-MNDGIW47.js';
|
|
9
|
+
import '../../chunk-VD74IPKB.js';
|
|
10
|
+
import '../../chunk-53UGJNHN.js';
|
|
11
|
+
import '../../chunk-RQ74USYU.js';
|
|
12
|
+
import '../../chunk-DGUM43GV.js';
|
|
13
|
+
|
|
14
|
+
// src/tools/serper/index.ts
|
|
15
|
+
function serperSearch(config) {
|
|
16
|
+
return {
|
|
17
|
+
name: "web_search",
|
|
18
|
+
description: `Search the web using Serper (Google results) for current information. Use this when the user asks about:
|
|
19
|
+
- Recent events, news, or current affairs
|
|
20
|
+
- Real-time data (prices, weather, stocks, sports scores)
|
|
21
|
+
- Information that might have changed after your training cutoff
|
|
22
|
+
- Facts that need verification with current sources
|
|
23
|
+
- Research topics that require up-to-date information`,
|
|
24
|
+
location: "server",
|
|
25
|
+
title: (args) => `Searching for "${args.query}"`,
|
|
26
|
+
executingTitle: (args) => `Searching the web for "${args.query}"...`,
|
|
27
|
+
completedTitle: (args) => `Found results for "${args.query}"`,
|
|
28
|
+
inputSchema: {
|
|
29
|
+
type: "object",
|
|
30
|
+
properties: {
|
|
31
|
+
query: {
|
|
32
|
+
type: "string",
|
|
33
|
+
description: "The search query to find relevant information"
|
|
34
|
+
},
|
|
35
|
+
maxResults: {
|
|
36
|
+
type: "number",
|
|
37
|
+
description: "Maximum number of results to return (default: 5, max: 10)",
|
|
38
|
+
minimum: 1,
|
|
39
|
+
maximum: 10
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
required: ["query"]
|
|
43
|
+
},
|
|
44
|
+
needsApproval: false,
|
|
45
|
+
aiResponseMode: "full",
|
|
46
|
+
handler: async (params) => {
|
|
47
|
+
try {
|
|
48
|
+
const response = await searchSerper(
|
|
49
|
+
{
|
|
50
|
+
query: params.query,
|
|
51
|
+
maxResults: params.maxResults ?? config.maxResults ?? 5
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
provider: "serper",
|
|
55
|
+
apiKey: config.apiKey,
|
|
56
|
+
country: config.country,
|
|
57
|
+
language: config.language,
|
|
58
|
+
includeDomains: config.includeDomains,
|
|
59
|
+
excludeDomains: config.excludeDomains,
|
|
60
|
+
timeout: config.timeout
|
|
61
|
+
}
|
|
62
|
+
);
|
|
63
|
+
const aiContext = formatSearchResultsForAI(response);
|
|
64
|
+
return {
|
|
65
|
+
success: true,
|
|
66
|
+
message: summarizeSearchResults(response),
|
|
67
|
+
data: response,
|
|
68
|
+
_aiContext: aiContext
|
|
69
|
+
};
|
|
70
|
+
} catch (error) {
|
|
71
|
+
const errorMessage = error instanceof Error ? error.message : "Web search failed";
|
|
72
|
+
return failure(errorMessage);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export { serperSearch };
|
|
79
|
+
//# sourceMappingURL=index.js.map
|
|
80
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/tools/serper/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAqGO,SAAS,aACd,MAAA,EACoC;AACpC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,YAAA;AAAA,IACN,WAAA,EAAa,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qDAAA,CAAA;AAAA,IAOb,QAAA,EAAU,QAAA;AAAA,IAEV,KAAA,EAAO,CAAC,IAAA,KAAS,CAAA,eAAA,EAAkB,KAAK,KAAK,CAAA,CAAA,CAAA;AAAA,IAC7C,cAAA,EAAgB,CAAC,IAAA,KAAS,CAAA,uBAAA,EAA0B,KAAK,KAAK,CAAA,IAAA,CAAA;AAAA,IAC9D,cAAA,EAAgB,CAAC,IAAA,KAAS,CAAA,mBAAA,EAAsB,KAAK,KAAK,CAAA,CAAA,CAAA;AAAA,IAE1D,WAAA,EAAa;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAY;AAAA,QACV,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,QAAA;AAAA,UACN,WAAA,EAAa;AAAA,SACf;AAAA,QACA,UAAA,EAAY;AAAA,UACV,IAAA,EAAM,QAAA;AAAA,UACN,WAAA,EACE,2DAAA;AAAA,UACF,OAAA,EAAS,CAAA;AAAA,UACT,OAAA,EAAS;AAAA;AACX,OACF;AAAA,MACA,QAAA,EAAU,CAAC,OAAO;AAAA,KACpB;AAAA,IAEA,aAAA,EAAe,KAAA;AAAA,IACf,cAAA,EAAgB,MAAA;AAAA,IAEhB,OAAA,EAAS,OAAO,MAAA,KAAW;AACzB,MAAA,IAAI;AACF,QAAA,MAAM,WAA8B,MAAM,YAAA;AAAA,UACxC;AAAA,YACE,OAAO,MAAA,CAAO,KAAA;AAAA,YACd,UAAA,EAAY,MAAA,CAAO,UAAA,IAAc,MAAA,CAAO,UAAA,IAAc;AAAA,WACxD;AAAA,UACA;AAAA,YACE,QAAA,EAAU,QAAA;AAAA,YACV,QAAQ,MAAA,CAAO,MAAA;AAAA,YACf,SAAS,MAAA,CAAO,OAAA;AAAA,YAChB,UAAU,MAAA,CAAO,QAAA;AAAA,YACjB,gBAAgB,MAAA,CAAO,cAAA;AAAA,YACvB,gBAAgB,MAAA,CAAO,cAAA;AAAA,YACvB,SAAS,MAAA,CAAO;AAAA;AAClB,SACF;AAEA,QAAA,MAAM,SAAA,GAAY,yBAAyB,QAAQ,CAAA;AAEnD,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,IAAA;AAAA,UACT,OAAA,EAAS,uBAAuB,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,OAAO,QAAQ,YAAY,CAAA;AAAA,MAC7B;AAAA,IACF;AAAA,GACF;AACF","file":"index.js","sourcesContent":["/**\n * Serper Search Tool\n *\n * Tree-shakeable import for Serper web search provider.\n * Only imports Serper code - no other providers bundled.\n *\n * @example\n * ```typescript\n * import { serperSearch } from '@yourgpt/copilot-sdk/tools/serper';\n *\n * const webSearch = serperSearch({\n * apiKey: process.env.SERPER_API_KEY,\n * });\n *\n * const runtime = createRuntime({\n * tools: [webSearch],\n * });\n * ```\n *\n * @see https://serper.dev/\n * @module @yourgpt/copilot-sdk/tools/serper\n */\n\nimport type { ToolDefinition } from \"../../core/types/tools\";\nimport { failure } from \"../../core/types/tools\";\nimport {\n searchSerper,\n serperProvider,\n} from \"../../core/tools/webSearch/providers/serper\";\nimport {\n formatSearchResultsForAI,\n summarizeSearchResults,\n} from \"../../core/tools/webSearch\";\nimport type { WebSearchResponse } from \"../../core/tools/webSearch/types\";\n\n// Re-export provider for direct access\nexport { serperProvider };\n\n/**\n * Serper search configuration\n */\nexport interface SerperSearchConfig {\n /** Serper API key - get one at https://serper.dev/ */\n apiKey: string;\n /** Maximum number of results (default: 5) */\n maxResults?: number;\n /** Country code for localized results (e.g., 'us', 'gb', 'de') */\n country?: string;\n /** Language code for results (e.g., 'en', 'es', 'fr') */\n language?: string;\n /** Only include results from these domains */\n includeDomains?: string[];\n /** Exclude results from these domains */\n excludeDomains?: string[];\n /** Request timeout in milliseconds */\n timeout?: number;\n}\n\n/**\n * Search parameters passed to the tool\n */\ninterface SerperSearchParams {\n /** The search query */\n query: string;\n /** Maximum number of results (overrides config) */\n maxResults?: number;\n}\n\n/**\n * Create a Serper web search tool\n *\n * Serper is a Google Search API that provides SERP data.\n * Fast and cost-effective for real-time Google results.\n *\n * @param config - Serper configuration including API key\n * @returns A configured tool definition ready to use\n *\n * @example\n * ```typescript\n * import { serperSearch } from '@yourgpt/copilot-sdk/tools/serper';\n *\n * // Basic usage\n * const webSearch = serperSearch({\n * apiKey: process.env.SERPER_API_KEY,\n * });\n *\n * // With locale settings\n * const webSearch = serperSearch({\n * apiKey: process.env.SERPER_API_KEY,\n * country: 'us',\n * language: 'en',\n * maxResults: 10,\n * });\n *\n * const runtime = createRuntime({\n * provider: openai,\n * model: 'gpt-4o',\n * tools: [webSearch],\n * });\n * ```\n */\nexport function serperSearch(\n config: SerperSearchConfig,\n): ToolDefinition<SerperSearchParams> {\n return {\n name: \"web_search\",\n description: `Search the web using Serper (Google results) 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\",\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 },\n required: [\"query\"],\n },\n\n needsApproval: false,\n aiResponseMode: \"full\",\n\n handler: async (params) => {\n try {\n const response: WebSearchResponse = await searchSerper(\n {\n query: params.query,\n maxResults: params.maxResults ?? config.maxResults ?? 5,\n },\n {\n provider: \"serper\",\n apiKey: config.apiKey,\n country: config.country,\n language: config.language,\n includeDomains: config.includeDomains,\n excludeDomains: config.excludeDomains,\n timeout: config.timeout,\n },\n );\n\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"]}
|