@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.
Files changed (215) hide show
  1. package/README.md +42 -0
  2. package/dist/{ThreadManager-JT0sqSSD.d.ts → ThreadManager-Dkp_eLty.d.ts} +1 -1
  3. package/dist/{ThreadManager-CUq5Ocu2.d.cts → ThreadManager-LfFRhr4e.d.cts} +1 -1
  4. package/dist/anthropic-6F5GRE3B.js +4 -0
  5. package/dist/anthropic-6F5GRE3B.js.map +1 -0
  6. package/dist/anthropic-DGalr_Fw.d.cts +17 -0
  7. package/dist/anthropic-DkCEDYOt.d.ts +17 -0
  8. package/dist/anthropic-NMTRABEH.cjs +21 -0
  9. package/dist/anthropic-NMTRABEH.cjs.map +1 -0
  10. package/dist/brave-DdnWb7Gb.d.cts +17 -0
  11. package/dist/brave-DsI9n7Wr.d.ts +17 -0
  12. package/dist/brave-OYKCOZEM.cjs +21 -0
  13. package/dist/brave-OYKCOZEM.cjs.map +1 -0
  14. package/dist/brave-XSASGGH2.js +4 -0
  15. package/dist/brave-XSASGGH2.js.map +1 -0
  16. package/dist/chunk-2FAWEBZS.cjs +88 -0
  17. package/dist/chunk-2FAWEBZS.cjs.map +1 -0
  18. package/dist/chunk-53UGJNHN.js +92 -0
  19. package/dist/chunk-53UGJNHN.js.map +1 -0
  20. package/dist/chunk-6T5XXJEP.cjs +80 -0
  21. package/dist/chunk-6T5XXJEP.cjs.map +1 -0
  22. package/dist/chunk-7K7HZMP4.cjs +1170 -0
  23. package/dist/chunk-7K7HZMP4.cjs.map +1 -0
  24. package/dist/chunk-7W7QLZNC.js +72 -0
  25. package/dist/chunk-7W7QLZNC.js.map +1 -0
  26. package/dist/{chunk-JM7PB2LP.js → chunk-7XFFRV7D.js} +10 -66
  27. package/dist/chunk-7XFFRV7D.js.map +1 -0
  28. package/dist/chunk-ASV6JLYG.cjs +99 -0
  29. package/dist/chunk-ASV6JLYG.cjs.map +1 -0
  30. package/dist/chunk-BH7MNDWW.js +1152 -0
  31. package/dist/chunk-BH7MNDWW.js.map +1 -0
  32. package/dist/chunk-BKO7DSPU.js +67 -0
  33. package/dist/chunk-BKO7DSPU.js.map +1 -0
  34. package/dist/chunk-CBAHCI4R.cjs +76 -0
  35. package/dist/chunk-CBAHCI4R.cjs.map +1 -0
  36. package/dist/chunk-CEKAYA2Q.cjs +74 -0
  37. package/dist/chunk-CEKAYA2Q.cjs.map +1 -0
  38. package/dist/chunk-CEOMTQTP.js +85 -0
  39. package/dist/chunk-CEOMTQTP.js.map +1 -0
  40. package/dist/chunk-DABZYCVX.js +84 -0
  41. package/dist/chunk-DABZYCVX.js.map +1 -0
  42. package/dist/chunk-DGUM43GV.js +10 -0
  43. package/dist/chunk-DGUM43GV.js.map +1 -0
  44. package/dist/chunk-G4SF2PNQ.js +33 -0
  45. package/dist/chunk-G4SF2PNQ.js.map +1 -0
  46. package/dist/chunk-GANCV72Z.cjs +110 -0
  47. package/dist/chunk-GANCV72Z.cjs.map +1 -0
  48. package/dist/{chunk-BLSI67J6.cjs → chunk-H5XMKBBA.cjs} +425 -30
  49. package/dist/chunk-H5XMKBBA.cjs.map +1 -0
  50. package/dist/{chunk-CJ7UWN2Y.js → chunk-IXFV6AW6.js} +397 -7
  51. package/dist/chunk-IXFV6AW6.js.map +1 -0
  52. package/dist/chunk-JEQ2X3Z6.cjs +12 -0
  53. package/dist/chunk-JEQ2X3Z6.cjs.map +1 -0
  54. package/dist/chunk-JO4BHPAD.cjs +40 -0
  55. package/dist/chunk-JO4BHPAD.cjs.map +1 -0
  56. package/dist/chunk-MEBXW75C.cjs +89 -0
  57. package/dist/chunk-MEBXW75C.cjs.map +1 -0
  58. package/dist/chunk-MNDGIW47.js +76 -0
  59. package/dist/chunk-MNDGIW47.js.map +1 -0
  60. package/dist/chunk-PPFHA6IL.js +83 -0
  61. package/dist/chunk-PPFHA6IL.js.map +1 -0
  62. package/dist/chunk-RQ74USYU.js +128 -0
  63. package/dist/chunk-RQ74USYU.js.map +1 -0
  64. package/dist/chunk-TXLIY7GF.cjs +132 -0
  65. package/dist/chunk-TXLIY7GF.cjs.map +1 -0
  66. package/dist/chunk-UIWFYMAO.cjs +82 -0
  67. package/dist/chunk-UIWFYMAO.cjs.map +1 -0
  68. package/dist/{chunk-4PRWNAXQ.cjs → chunk-UOWLKFXK.cjs} +27 -89
  69. package/dist/chunk-UOWLKFXK.cjs.map +1 -0
  70. package/dist/chunk-VD74IPKB.js +106 -0
  71. package/dist/chunk-VD74IPKB.js.map +1 -0
  72. package/dist/chunk-W73FBYIH.cjs +87 -0
  73. package/dist/chunk-W73FBYIH.cjs.map +1 -0
  74. package/dist/chunk-XGITAEXU.js +93 -0
  75. package/dist/chunk-XGITAEXU.js.map +1 -0
  76. package/dist/chunk-XWOHNY3F.cjs +96 -0
  77. package/dist/chunk-XWOHNY3F.cjs.map +1 -0
  78. package/dist/chunk-ZPYQDMUX.js +79 -0
  79. package/dist/chunk-ZPYQDMUX.js.map +1 -0
  80. package/dist/core/index.cjs +156 -84
  81. package/dist/core/index.d.cts +16 -4
  82. package/dist/core/index.d.ts +16 -4
  83. package/dist/core/index.js +13 -1
  84. package/dist/exa-72KFY5A7.cjs +21 -0
  85. package/dist/exa-72KFY5A7.cjs.map +1 -0
  86. package/dist/exa-Dp9U-WTc.d.ts +17 -0
  87. package/dist/exa-NNVPBC2M.js +4 -0
  88. package/dist/exa-NNVPBC2M.js.map +1 -0
  89. package/dist/exa-jJSPhyUW.d.cts +17 -0
  90. package/dist/google-CHU2yycE.d.cts +17 -0
  91. package/dist/google-CTEK6SV2.js +4 -0
  92. package/dist/google-CTEK6SV2.js.map +1 -0
  93. package/dist/google-Da8IQxaI.d.ts +17 -0
  94. package/dist/google-IIUXFFVF.cjs +21 -0
  95. package/dist/google-IIUXFFVF.cjs.map +1 -0
  96. package/dist/index-2VtgKM8S.d.cts +206 -0
  97. package/dist/index-pWEH7pUE.d.ts +206 -0
  98. package/dist/mcp/index.cjs +670 -0
  99. package/dist/mcp/index.cjs.map +1 -0
  100. package/dist/mcp/index.d.cts +779 -0
  101. package/dist/mcp/index.d.ts +779 -0
  102. package/dist/mcp/index.js +574 -0
  103. package/dist/mcp/index.js.map +1 -0
  104. package/dist/openai-6KTCQ7PZ.cjs +21 -0
  105. package/dist/openai-6KTCQ7PZ.cjs.map +1 -0
  106. package/dist/openai-7W2PCNW5.js +4 -0
  107. package/dist/openai-7W2PCNW5.js.map +1 -0
  108. package/dist/openai-Cam8hF4f.d.ts +17 -0
  109. package/dist/openai-HVSCuXgO.d.cts +17 -0
  110. package/dist/react/index.cjs +75 -42
  111. package/dist/react/index.d.cts +270 -45
  112. package/dist/react/index.d.ts +270 -45
  113. package/dist/react/index.js +15 -2
  114. package/dist/searxng-AXLVGY7Z.js +4 -0
  115. package/dist/searxng-AXLVGY7Z.js.map +1 -0
  116. package/dist/searxng-EJKNY236.cjs +21 -0
  117. package/dist/searxng-EJKNY236.cjs.map +1 -0
  118. package/dist/searxng-K0qtY9vp.d.ts +17 -0
  119. package/dist/searxng-QGOte_Gq.d.cts +17 -0
  120. package/dist/serper-3JYJHJX6.js +4 -0
  121. package/dist/serper-3JYJHJX6.js.map +1 -0
  122. package/dist/serper-63FT4AOL.cjs +21 -0
  123. package/dist/serper-63FT4AOL.cjs.map +1 -0
  124. package/dist/serper-7Czya3PW.d.ts +17 -0
  125. package/dist/serper-JzdaSnS9.d.cts +17 -0
  126. package/dist/styles.css +38 -0
  127. package/dist/tavily-AWFP4RM7.cjs +21 -0
  128. package/dist/tavily-AWFP4RM7.cjs.map +1 -0
  129. package/dist/tavily-C8cXXojE.d.cts +17 -0
  130. package/dist/tavily-CIWAAZPH.js +4 -0
  131. package/dist/tavily-CIWAAZPH.js.map +1 -0
  132. package/dist/tavily-DdSGVgkE.d.ts +17 -0
  133. package/dist/themes/catppuccin.css +2 -0
  134. package/dist/themes/claude.css +2 -0
  135. package/dist/themes/linear.css +2 -0
  136. package/dist/themes/modern-minimal.css +2 -0
  137. package/dist/themes/posthog.css +2 -0
  138. package/dist/themes/supabase.css +2 -0
  139. package/dist/themes/twitter.css +2 -0
  140. package/dist/themes/vercel.css +2 -0
  141. package/dist/tools/anthropic/index.cjs +61 -0
  142. package/dist/tools/anthropic/index.cjs.map +1 -0
  143. package/dist/tools/anthropic/index.d.cts +67 -0
  144. package/dist/tools/anthropic/index.d.ts +67 -0
  145. package/dist/tools/anthropic/index.js +56 -0
  146. package/dist/tools/anthropic/index.js.map +1 -0
  147. package/dist/tools/brave/index.cjs +85 -0
  148. package/dist/tools/brave/index.cjs.map +1 -0
  149. package/dist/tools/brave/index.d.cts +91 -0
  150. package/dist/tools/brave/index.d.ts +91 -0
  151. package/dist/tools/brave/index.js +80 -0
  152. package/dist/tools/brave/index.js.map +1 -0
  153. package/dist/tools/exa/index.cjs +90 -0
  154. package/dist/tools/exa/index.cjs.map +1 -0
  155. package/dist/tools/exa/index.d.cts +92 -0
  156. package/dist/tools/exa/index.d.ts +92 -0
  157. package/dist/tools/exa/index.js +85 -0
  158. package/dist/tools/exa/index.js.map +1 -0
  159. package/dist/tools/google/index.cjs +81 -0
  160. package/dist/tools/google/index.cjs.map +1 -0
  161. package/dist/tools/google/index.d.cts +81 -0
  162. package/dist/tools/google/index.d.ts +81 -0
  163. package/dist/tools/google/index.js +76 -0
  164. package/dist/tools/google/index.js.map +1 -0
  165. package/dist/tools/openai/index.cjs +83 -0
  166. package/dist/tools/openai/index.cjs.map +1 -0
  167. package/dist/tools/openai/index.d.cts +84 -0
  168. package/dist/tools/openai/index.d.ts +84 -0
  169. package/dist/tools/openai/index.js +78 -0
  170. package/dist/tools/openai/index.js.map +1 -0
  171. package/dist/tools/searxng/index.cjs +85 -0
  172. package/dist/tools/searxng/index.cjs.map +1 -0
  173. package/dist/tools/searxng/index.d.cts +91 -0
  174. package/dist/tools/searxng/index.d.ts +91 -0
  175. package/dist/tools/searxng/index.js +80 -0
  176. package/dist/tools/searxng/index.js.map +1 -0
  177. package/dist/tools/serper/index.cjs +85 -0
  178. package/dist/tools/serper/index.cjs.map +1 -0
  179. package/dist/tools/serper/index.d.cts +91 -0
  180. package/dist/tools/serper/index.d.ts +91 -0
  181. package/dist/tools/serper/index.js +80 -0
  182. package/dist/tools/serper/index.js.map +1 -0
  183. package/dist/tools/tavily/index.cjs +91 -0
  184. package/dist/tools/tavily/index.cjs.map +1 -0
  185. package/dist/tools/tavily/index.d.cts +95 -0
  186. package/dist/tools/tavily/index.d.ts +95 -0
  187. package/dist/tools/tavily/index.js +86 -0
  188. package/dist/tools/tavily/index.js.map +1 -0
  189. package/dist/tools/web-search/index.cjs +31 -0
  190. package/dist/tools/web-search/index.cjs.map +1 -0
  191. package/dist/tools/web-search/index.d.cts +3 -0
  192. package/dist/tools/web-search/index.d.ts +3 -0
  193. package/dist/tools/web-search/index.js +14 -0
  194. package/dist/tools/web-search/index.js.map +1 -0
  195. package/dist/{types-BtAaOV07.d.cts → tools-DDWrco4h.d.cts} +43 -367
  196. package/dist/{types-BtAaOV07.d.ts → tools-DDWrco4h.d.ts} +43 -367
  197. package/dist/types-B20VCJXL.d.cts +347 -0
  198. package/dist/types-B20VCJXL.d.ts +347 -0
  199. package/dist/types-Cizh9K_f.d.ts +441 -0
  200. package/dist/types-DG2ya08y.d.cts +367 -0
  201. package/dist/types-DG2ya08y.d.ts +367 -0
  202. package/dist/types-DjSfYNKj.d.cts +441 -0
  203. package/dist/types-ZguuKEs_.d.cts +127 -0
  204. package/dist/types-ZguuKEs_.d.ts +127 -0
  205. package/dist/ui/index.cjs +1075 -148
  206. package/dist/ui/index.cjs.map +1 -1
  207. package/dist/ui/index.d.cts +410 -4
  208. package/dist/ui/index.d.ts +410 -4
  209. package/dist/ui/index.js +1007 -96
  210. package/dist/ui/index.js.map +1 -1
  211. package/package.json +52 -2
  212. package/dist/chunk-4PRWNAXQ.cjs.map +0 -1
  213. package/dist/chunk-BLSI67J6.cjs.map +0 -1
  214. package/dist/chunk-CJ7UWN2Y.js.map +0 -1
  215. 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"]}