@yourgpt/copilot-sdk 2.0.1 → 2.0.2-beta.1

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-CJ7UWN2Y.js → chunk-3YKHVLNP.js} +397 -7
  19. package/dist/chunk-3YKHVLNP.js.map +1 -0
  20. package/dist/chunk-4WWWMNUA.js +1142 -0
  21. package/dist/chunk-4WWWMNUA.js.map +1 -0
  22. package/dist/chunk-53UGJNHN.js +92 -0
  23. package/dist/chunk-53UGJNHN.js.map +1 -0
  24. package/dist/chunk-6BXQFCK3.js +79 -0
  25. package/dist/chunk-6BXQFCK3.js.map +1 -0
  26. package/dist/chunk-6T5XXJEP.cjs +80 -0
  27. package/dist/chunk-6T5XXJEP.cjs.map +1 -0
  28. package/dist/chunk-7W7QLZNC.js +72 -0
  29. package/dist/chunk-7W7QLZNC.js.map +1 -0
  30. package/dist/chunk-ASV6JLYG.cjs +99 -0
  31. package/dist/chunk-ASV6JLYG.cjs.map +1 -0
  32. package/dist/chunk-CBAHCI4R.cjs +76 -0
  33. package/dist/chunk-CBAHCI4R.cjs.map +1 -0
  34. package/dist/chunk-CEOMTQTP.js +85 -0
  35. package/dist/chunk-CEOMTQTP.js.map +1 -0
  36. package/dist/chunk-DABZYCVX.js +84 -0
  37. package/dist/chunk-DABZYCVX.js.map +1 -0
  38. package/dist/chunk-DGUM43GV.js +10 -0
  39. package/dist/chunk-DGUM43GV.js.map +1 -0
  40. package/dist/{chunk-4PRWNAXQ.cjs → chunk-DUPNYVBP.cjs} +27 -89
  41. package/dist/chunk-DUPNYVBP.cjs.map +1 -0
  42. package/dist/chunk-DVC63PGD.cjs +1160 -0
  43. package/dist/chunk-DVC63PGD.cjs.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-J4OMGO5O.js +66 -0
  49. package/dist/chunk-J4OMGO5O.js.map +1 -0
  50. package/dist/chunk-JEQ2X3Z6.cjs +12 -0
  51. package/dist/chunk-JEQ2X3Z6.cjs.map +1 -0
  52. package/dist/chunk-JO4BHPAD.cjs +40 -0
  53. package/dist/chunk-JO4BHPAD.cjs.map +1 -0
  54. package/dist/chunk-MEBXW75C.cjs +89 -0
  55. package/dist/chunk-MEBXW75C.cjs.map +1 -0
  56. package/dist/chunk-MNDGIW47.js +76 -0
  57. package/dist/chunk-MNDGIW47.js.map +1 -0
  58. package/dist/chunk-PPFHA6IL.js +83 -0
  59. package/dist/chunk-PPFHA6IL.js.map +1 -0
  60. package/dist/{chunk-BLSI67J6.cjs → chunk-RBZXLBGI.cjs} +425 -30
  61. package/dist/chunk-RBZXLBGI.cjs.map +1 -0
  62. package/dist/chunk-RQ74USYU.js +128 -0
  63. package/dist/chunk-RQ74USYU.js.map +1 -0
  64. package/dist/chunk-TX7CGITI.cjs +82 -0
  65. package/dist/chunk-TX7CGITI.cjs.map +1 -0
  66. package/dist/chunk-TXLIY7GF.cjs +132 -0
  67. package/dist/chunk-TXLIY7GF.cjs.map +1 -0
  68. package/dist/chunk-VD74IPKB.js +106 -0
  69. package/dist/chunk-VD74IPKB.js.map +1 -0
  70. package/dist/chunk-W73FBYIH.cjs +87 -0
  71. package/dist/chunk-W73FBYIH.cjs.map +1 -0
  72. package/dist/chunk-W74OTXXX.cjs +73 -0
  73. package/dist/chunk-W74OTXXX.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-JM7PB2LP.js → chunk-Z7PHGSJT.js} +10 -66
  79. package/dist/chunk-Z7PHGSJT.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-DBNh0jhE.d.ts +206 -0
  97. package/dist/index-DOlhSb79.d.cts +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-EiPWA9Ay.d.cts} +34 -367
  196. package/dist/{types-BtAaOV07.d.ts → tools-EiPWA9Ay.d.ts} +34 -367
  197. package/dist/types-B20VCJXL.d.cts +347 -0
  198. package/dist/types-B20VCJXL.d.ts +347 -0
  199. package/dist/types-CKA6U74u.d.cts +441 -0
  200. package/dist/types-DG2ya08y.d.cts +367 -0
  201. package/dist/types-DG2ya08y.d.ts +367 -0
  202. package/dist/types-ZguuKEs_.d.cts +127 -0
  203. package/dist/types-ZguuKEs_.d.ts +127 -0
  204. package/dist/types-iBkPICvQ.d.ts +441 -0
  205. package/dist/ui/index.cjs +1069 -146
  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 +1001 -94
  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
package/README.md CHANGED
@@ -44,6 +44,48 @@ function App() {
44
44
  | `/ui` | Pre-built UI components |
45
45
  | `/core` | Types, utilities, tool helpers |
46
46
 
47
+ ## Built-in Tools
48
+
49
+ ### Web Search
50
+
51
+ Add real-time web search capabilities to your AI copilot. **No extra API key needed** - use your existing OpenAI or Google key.
52
+
53
+ ```typescript
54
+ import { createWebSearchTool } from "@yourgpt/copilot-sdk/core";
55
+
56
+ // Use OpenAI's built-in search (recommended)
57
+ const webSearch = createWebSearchTool({
58
+ provider: "openai",
59
+ apiKey: process.env.OPENAI_API_KEY,
60
+ });
61
+
62
+ // Or use Google's built-in search
63
+ const webSearch = createWebSearchTool({
64
+ provider: "google",
65
+ apiKey: process.env.GOOGLE_API_KEY,
66
+ });
67
+
68
+ const runtime = createRuntime({
69
+ provider: openai,
70
+ model: "gpt-4o",
71
+ tools: [webSearch],
72
+ });
73
+ ```
74
+
75
+ **Native Providers (No extra API needed):**
76
+
77
+ - `openai` - OpenAI's built-in web search
78
+ - `google` - Google's grounding with Google Search
79
+ - `anthropic` - Anthropic's built-in web search
80
+
81
+ **Third-Party Providers:**
82
+
83
+ - [Tavily](https://tavily.com/) - AI-native search with answer generation
84
+ - [Serper](https://serper.dev/) - Google Search API
85
+ - [Brave](https://brave.com/search/api/) - Privacy-focused search
86
+ - [Exa](https://exa.ai/) - Semantic AI search
87
+ - [SearXNG](https://docs.searxng.org/) - Self-hosted metasearch
88
+
47
89
  ## Examples
48
90
 
49
91
  Explore real-world implementations and demo projects.
@@ -1,4 +1,4 @@
1
- import { k as Thread, l as ThreadData, _ as ThreadStorageAdapter, X as AsyncThreadStorageAdapter, g as Message } from './types-BtAaOV07.js';
1
+ import { T as Thread, a as ThreadData, b as ThreadStorageAdapter, A as AsyncThreadStorageAdapter, M as Message } from './types-DG2ya08y.js';
2
2
 
3
3
  /**
4
4
  * Tool types for App Context Awareness
@@ -1,4 +1,4 @@
1
- import { k as Thread, l as ThreadData, _ as ThreadStorageAdapter, X as AsyncThreadStorageAdapter, g as Message } from './types-BtAaOV07.cjs';
1
+ import { T as Thread, a as ThreadData, b as ThreadStorageAdapter, A as AsyncThreadStorageAdapter, M as Message } from './types-DG2ya08y.cjs';
2
2
 
3
3
  /**
4
4
  * Tool types for App Context Awareness
@@ -0,0 +1,4 @@
1
+ export { anthropicProvider, searchAnthropic, validateAnthropicConfig } from './chunk-RQ74USYU.js';
2
+ import './chunk-DGUM43GV.js';
3
+ //# sourceMappingURL=anthropic-6F5GRE3B.js.map
4
+ //# sourceMappingURL=anthropic-6F5GRE3B.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"anthropic-6F5GRE3B.js"}
@@ -0,0 +1,17 @@
1
+ import { W as WebSearchProviderInterface } from './types-ZguuKEs_.cjs';
2
+
3
+ /**
4
+ * Anthropic Web Search Provider
5
+ *
6
+ * Uses Anthropic's built-in web_search tool via the Messages API.
7
+ * Returns reliable citations with cited_text, url, and title.
8
+ *
9
+ * @see https://docs.anthropic.com/en/docs/build-with-claude/tool-use/web-search-tool
10
+ */
11
+
12
+ /**
13
+ * Anthropic native search provider implementation
14
+ */
15
+ declare const anthropicProvider: WebSearchProviderInterface;
16
+
17
+ export { anthropicProvider as a };
@@ -0,0 +1,17 @@
1
+ import { W as WebSearchProviderInterface } from './types-ZguuKEs_.js';
2
+
3
+ /**
4
+ * Anthropic Web Search Provider
5
+ *
6
+ * Uses Anthropic's built-in web_search tool via the Messages API.
7
+ * Returns reliable citations with cited_text, url, and title.
8
+ *
9
+ * @see https://docs.anthropic.com/en/docs/build-with-claude/tool-use/web-search-tool
10
+ */
11
+
12
+ /**
13
+ * Anthropic native search provider implementation
14
+ */
15
+ declare const anthropicProvider: WebSearchProviderInterface;
16
+
17
+ export { anthropicProvider as a };
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ var chunkTXLIY7GF_cjs = require('./chunk-TXLIY7GF.cjs');
4
+ require('./chunk-JEQ2X3Z6.cjs');
5
+
6
+
7
+
8
+ Object.defineProperty(exports, "anthropicProvider", {
9
+ enumerable: true,
10
+ get: function () { return chunkTXLIY7GF_cjs.anthropicProvider; }
11
+ });
12
+ Object.defineProperty(exports, "searchAnthropic", {
13
+ enumerable: true,
14
+ get: function () { return chunkTXLIY7GF_cjs.searchAnthropic; }
15
+ });
16
+ Object.defineProperty(exports, "validateAnthropicConfig", {
17
+ enumerable: true,
18
+ get: function () { return chunkTXLIY7GF_cjs.validateAnthropicConfig; }
19
+ });
20
+ //# sourceMappingURL=anthropic-NMTRABEH.cjs.map
21
+ //# sourceMappingURL=anthropic-NMTRABEH.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"anthropic-NMTRABEH.cjs"}
@@ -0,0 +1,17 @@
1
+ import { W as WebSearchProviderInterface } from './types-ZguuKEs_.cjs';
2
+
3
+ /**
4
+ * Brave Search Provider
5
+ *
6
+ * Brave Search is a privacy-focused search engine with its own index.
7
+ * Provides independent search results without tracking.
8
+ *
9
+ * @see https://brave.com/search/api/
10
+ */
11
+
12
+ /**
13
+ * Brave provider implementation
14
+ */
15
+ declare const braveProvider: WebSearchProviderInterface;
16
+
17
+ export { braveProvider as b };
@@ -0,0 +1,17 @@
1
+ import { W as WebSearchProviderInterface } from './types-ZguuKEs_.js';
2
+
3
+ /**
4
+ * Brave Search Provider
5
+ *
6
+ * Brave Search is a privacy-focused search engine with its own index.
7
+ * Provides independent search results without tracking.
8
+ *
9
+ * @see https://brave.com/search/api/
10
+ */
11
+
12
+ /**
13
+ * Brave provider implementation
14
+ */
15
+ declare const braveProvider: WebSearchProviderInterface;
16
+
17
+ export { braveProvider as b };
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ var chunkW73FBYIH_cjs = require('./chunk-W73FBYIH.cjs');
4
+ require('./chunk-JEQ2X3Z6.cjs');
5
+
6
+
7
+
8
+ Object.defineProperty(exports, "braveProvider", {
9
+ enumerable: true,
10
+ get: function () { return chunkW73FBYIH_cjs.braveProvider; }
11
+ });
12
+ Object.defineProperty(exports, "searchBrave", {
13
+ enumerable: true,
14
+ get: function () { return chunkW73FBYIH_cjs.searchBrave; }
15
+ });
16
+ Object.defineProperty(exports, "validateBraveConfig", {
17
+ enumerable: true,
18
+ get: function () { return chunkW73FBYIH_cjs.validateBraveConfig; }
19
+ });
20
+ //# sourceMappingURL=brave-OYKCOZEM.cjs.map
21
+ //# sourceMappingURL=brave-OYKCOZEM.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"brave-OYKCOZEM.cjs"}
@@ -0,0 +1,4 @@
1
+ export { braveProvider, searchBrave, validateBraveConfig } from './chunk-PPFHA6IL.js';
2
+ import './chunk-DGUM43GV.js';
3
+ //# sourceMappingURL=brave-XSASGGH2.js.map
4
+ //# sourceMappingURL=brave-XSASGGH2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"brave-XSASGGH2.js"}
@@ -0,0 +1,88 @@
1
+ 'use strict';
2
+
3
+ // src/core/tools/webSearch/providers/searxng.ts
4
+ var DEFAULT_SEARXNG_URL = "https://searxng.instance.local";
5
+ function validateSearxngConfig(config) {
6
+ if (!config.baseUrl) {
7
+ throw new Error(
8
+ "SearXNG base URL is required. Self-host SearXNG or use a public instance. See https://docs.searxng.org/ for setup instructions."
9
+ );
10
+ }
11
+ }
12
+ async function searchSearxng(params, config) {
13
+ validateSearxngConfig(config);
14
+ const startTime = Date.now();
15
+ const baseUrl = config.baseUrl || DEFAULT_SEARXNG_URL;
16
+ const searchParams = new URLSearchParams({
17
+ q: params.query,
18
+ format: "json"
19
+ });
20
+ if (config.language) {
21
+ searchParams.set("language", config.language);
22
+ }
23
+ const url = `${baseUrl.replace(/\/$/, "")}/search?${searchParams.toString()}`;
24
+ const headers = {
25
+ Accept: "application/json"
26
+ };
27
+ if (config.apiKey) {
28
+ headers["Authorization"] = `Bearer ${config.apiKey}`;
29
+ }
30
+ const response = await fetch(url, {
31
+ method: "GET",
32
+ headers,
33
+ signal: config.timeout ? AbortSignal.timeout(config.timeout) : void 0
34
+ });
35
+ if (!response.ok) {
36
+ const errorText = await response.text().catch(() => "Unknown error");
37
+ throw new Error(`SearXNG API error (${response.status}): ${errorText}`);
38
+ }
39
+ const data = await response.json();
40
+ const searchTime = Date.now() - startTime;
41
+ let results = data.results || [];
42
+ if (config.includeDomains?.length) {
43
+ results = results.filter(
44
+ (r) => config.includeDomains.some((domain) => r.url.includes(domain))
45
+ );
46
+ }
47
+ if (config.excludeDomains?.length) {
48
+ results = results.filter(
49
+ (r) => !config.excludeDomains.some((domain) => r.url.includes(domain))
50
+ );
51
+ }
52
+ const maxResults = params.maxResults ?? config.maxResults ?? 5;
53
+ results = results.slice(0, maxResults);
54
+ const answer = data.answers?.[0] || data.infoboxes?.[0]?.content;
55
+ return {
56
+ query: params.query,
57
+ answer,
58
+ results: results.map((result) => ({
59
+ title: result.title,
60
+ url: result.url,
61
+ content: result.content,
62
+ score: result.score,
63
+ publishedDate: result.publishedDate,
64
+ image: result.img_src,
65
+ domain: extractDomain(result.url)
66
+ })),
67
+ provider: "searxng",
68
+ totalResults: data.number_of_results,
69
+ searchTime
70
+ };
71
+ }
72
+ function extractDomain(url) {
73
+ try {
74
+ return new URL(url).hostname;
75
+ } catch {
76
+ return url;
77
+ }
78
+ }
79
+ var searxngProvider = {
80
+ search: searchSearxng,
81
+ validateConfig: validateSearxngConfig
82
+ };
83
+
84
+ exports.searchSearxng = searchSearxng;
85
+ exports.searxngProvider = searxngProvider;
86
+ exports.validateSearxngConfig = validateSearxngConfig;
87
+ //# sourceMappingURL=chunk-2FAWEBZS.cjs.map
88
+ //# sourceMappingURL=chunk-2FAWEBZS.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/tools/webSearch/providers/searxng.ts"],"names":[],"mappings":"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","file":"chunk-2FAWEBZS.cjs","sourcesContent":["/**\n * SearXNG Search Provider\n *\n * SearXNG is a privacy-respecting, self-hostable metasearch engine.\n * It aggregates results from multiple search engines without tracking.\n *\n * @see https://docs.searxng.org/\n */\n\nimport type {\n WebSearchConfig,\n WebSearchParams,\n WebSearchResponse,\n SearxngApiResponse,\n WebSearchProviderInterface,\n} from \"../types\";\n\n// Default public instance (users should self-host for production)\nconst DEFAULT_SEARXNG_URL = \"https://searxng.instance.local\";\n\n/**\n * Validate SearXNG configuration\n */\nexport function validateSearxngConfig(config: WebSearchConfig): void {\n if (!config.baseUrl) {\n throw new Error(\n \"SearXNG base URL is required. Self-host SearXNG or use a public instance. \" +\n \"See https://docs.searxng.org/ for setup instructions.\",\n );\n }\n}\n\n/**\n * Search using SearXNG API\n */\nexport async function searchSearxng(\n params: WebSearchParams,\n config: WebSearchConfig,\n): Promise<WebSearchResponse> {\n validateSearxngConfig(config);\n\n const startTime = Date.now();\n\n const baseUrl = config.baseUrl || DEFAULT_SEARXNG_URL;\n const searchParams = new URLSearchParams({\n q: params.query,\n format: \"json\",\n });\n\n // SearXNG doesn't have a direct max_results param, but we can limit after\n if (config.language) {\n searchParams.set(\"language\", config.language);\n }\n\n // Add specific engines if needed\n // searchParams.set('engines', 'google,duckduckgo,bing');\n\n const url = `${baseUrl.replace(/\\/$/, \"\")}/search?${searchParams.toString()}`;\n\n const headers: Record<string, string> = {\n Accept: \"application/json\",\n };\n\n // Add API key if provided (some instances require it)\n if (config.apiKey) {\n headers[\"Authorization\"] = `Bearer ${config.apiKey}`;\n }\n\n const response = await fetch(url, {\n method: \"GET\",\n headers,\n signal: config.timeout ? AbortSignal.timeout(config.timeout) : undefined,\n });\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => \"Unknown error\");\n throw new Error(`SearXNG API error (${response.status}): ${errorText}`);\n }\n\n const data: SearxngApiResponse = await response.json();\n const searchTime = Date.now() - startTime;\n\n // Filter by domains if specified\n let results = data.results || [];\n if (config.includeDomains?.length) {\n results = results.filter((r) =>\n config.includeDomains!.some((domain) => r.url.includes(domain)),\n );\n }\n if (config.excludeDomains?.length) {\n results = results.filter(\n (r) => !config.excludeDomains!.some((domain) => r.url.includes(domain)),\n );\n }\n\n // Limit results\n const maxResults = params.maxResults ?? config.maxResults ?? 5;\n results = results.slice(0, maxResults);\n\n // Extract answer from infoboxes or answers if available\n const answer = data.answers?.[0] || data.infoboxes?.[0]?.content;\n\n return {\n query: params.query,\n answer,\n results: results.map((result) => ({\n title: result.title,\n url: result.url,\n content: result.content,\n score: result.score,\n publishedDate: result.publishedDate,\n image: result.img_src,\n domain: extractDomain(result.url),\n })),\n provider: \"searxng\",\n totalResults: data.number_of_results,\n searchTime,\n };\n}\n\n/**\n * Extract domain from URL\n */\nfunction extractDomain(url: string): string {\n try {\n return new URL(url).hostname;\n } catch {\n return url;\n }\n}\n\n/**\n * SearXNG provider implementation\n */\nexport const searxngProvider: WebSearchProviderInterface = {\n search: searchSearxng,\n validateConfig: validateSearxngConfig,\n};\n"]}