@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,81 @@
1
+ import { T as ToolDefinition } from '../../tools-DDWrco4h.js';
2
+ export { g as googleProvider } from '../../google-Da8IQxaI.js';
3
+ import '../../types-ZguuKEs_.js';
4
+
5
+ /**
6
+ * Google Search Tool
7
+ *
8
+ * Tree-shakeable import for Google's built-in web search via Gemini API.
9
+ * Uses Google's grounding with Google Search feature.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * import { googleSearch } from '@yourgpt/copilot-sdk/tools/google';
14
+ *
15
+ * const webSearch = googleSearch({
16
+ * apiKey: process.env.GOOGLE_API_KEY,
17
+ * });
18
+ *
19
+ * const runtime = createRuntime({
20
+ * tools: [webSearch],
21
+ * });
22
+ * ```
23
+ *
24
+ * @see https://ai.google.dev/gemini-api/docs/google-search
25
+ * @module @yourgpt/copilot-sdk/tools/google
26
+ */
27
+
28
+ /**
29
+ * Google native search configuration
30
+ */
31
+ interface GoogleSearchConfig {
32
+ /** Google/Gemini API key - uses your existing Google API key */
33
+ apiKey: string;
34
+ /** Maximum number of results (default: 5) */
35
+ maxResults?: number;
36
+ /** Request timeout in milliseconds */
37
+ timeout?: number;
38
+ }
39
+ /**
40
+ * Search parameters passed to the tool
41
+ */
42
+ interface GoogleSearchParams {
43
+ /** The search query */
44
+ query: string;
45
+ /** Maximum number of results (overrides config) */
46
+ maxResults?: number;
47
+ }
48
+ /**
49
+ * Create a Google native web search tool
50
+ *
51
+ * Uses Google's built-in grounding with Google Search via the Gemini API.
52
+ * No third-party API key required - uses your existing Google/Gemini API key.
53
+ *
54
+ * @param config - Google configuration including API key
55
+ * @returns A configured tool definition ready to use
56
+ *
57
+ * @example
58
+ * ```typescript
59
+ * import { googleSearch } from '@yourgpt/copilot-sdk/tools/google';
60
+ *
61
+ * // Basic usage
62
+ * const webSearch = googleSearch({
63
+ * apiKey: process.env.GOOGLE_API_KEY,
64
+ * });
65
+ *
66
+ * // Or with Gemini API key
67
+ * const webSearch = googleSearch({
68
+ * apiKey: process.env.GEMINI_API_KEY,
69
+ * maxResults: 5,
70
+ * });
71
+ *
72
+ * const runtime = createRuntime({
73
+ * provider: gemini,
74
+ * model: 'gemini-2.0-flash',
75
+ * tools: [webSearch],
76
+ * });
77
+ * ```
78
+ */
79
+ declare function googleSearch(config: GoogleSearchConfig): ToolDefinition<GoogleSearchParams>;
80
+
81
+ export { type GoogleSearchConfig, googleSearch };
@@ -0,0 +1,76 @@
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 '../../chunk-DABZYCVX.js';
7
+ import '../../chunk-MNDGIW47.js';
8
+ import '../../chunk-VD74IPKB.js';
9
+ import { searchGoogle } from '../../chunk-53UGJNHN.js';
10
+ export { googleProvider } from '../../chunk-53UGJNHN.js';
11
+ import '../../chunk-RQ74USYU.js';
12
+ import '../../chunk-DGUM43GV.js';
13
+
14
+ // src/tools/google/index.ts
15
+ function googleSearch(config) {
16
+ return {
17
+ name: "web_search",
18
+ description: `Search the web using Google Search 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 searchGoogle(
49
+ {
50
+ query: params.query,
51
+ maxResults: params.maxResults ?? config.maxResults ?? 5
52
+ },
53
+ {
54
+ provider: "google",
55
+ apiKey: config.apiKey,
56
+ timeout: config.timeout
57
+ }
58
+ );
59
+ const aiContext = formatSearchResultsForAI(response);
60
+ return {
61
+ success: true,
62
+ message: summarizeSearchResults(response),
63
+ data: response,
64
+ _aiContext: aiContext
65
+ };
66
+ } catch (error) {
67
+ const errorMessage = error instanceof Error ? error.message : "Web search failed";
68
+ return failure(errorMessage);
69
+ }
70
+ }
71
+ };
72
+ }
73
+
74
+ export { googleSearch };
75
+ //# sourceMappingURL=index.js.map
76
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/tools/google/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AA2FO,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;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 * Google Search Tool\n *\n * Tree-shakeable import for Google's built-in web search via Gemini API.\n * Uses Google's grounding with Google Search feature.\n *\n * @example\n * ```typescript\n * import { googleSearch } from '@yourgpt/copilot-sdk/tools/google';\n *\n * const webSearch = googleSearch({\n * apiKey: process.env.GOOGLE_API_KEY,\n * });\n *\n * const runtime = createRuntime({\n * tools: [webSearch],\n * });\n * ```\n *\n * @see https://ai.google.dev/gemini-api/docs/google-search\n * @module @yourgpt/copilot-sdk/tools/google\n */\n\nimport type { ToolDefinition } from \"../../core/types/tools\";\nimport { failure } from \"../../core/types/tools\";\nimport {\n searchGoogle,\n googleProvider,\n} from \"../../core/tools/webSearch/providers/google\";\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 { googleProvider };\n\n/**\n * Google native search configuration\n */\nexport interface GoogleSearchConfig {\n /** Google/Gemini API key - uses your existing Google API key */\n apiKey: string;\n /** Maximum number of results (default: 5) */\n maxResults?: number;\n /** Request timeout in milliseconds */\n timeout?: number;\n}\n\n/**\n * Search parameters passed to the tool\n */\ninterface GoogleSearchParams {\n /** The search query */\n query: string;\n /** Maximum number of results (overrides config) */\n maxResults?: number;\n}\n\n/**\n * Create a Google native web search tool\n *\n * Uses Google's built-in grounding with Google Search via the Gemini API.\n * No third-party API key required - uses your existing Google/Gemini API key.\n *\n * @param config - Google configuration including API key\n * @returns A configured tool definition ready to use\n *\n * @example\n * ```typescript\n * import { googleSearch } from '@yourgpt/copilot-sdk/tools/google';\n *\n * // Basic usage\n * const webSearch = googleSearch({\n * apiKey: process.env.GOOGLE_API_KEY,\n * });\n *\n * // Or with Gemini API key\n * const webSearch = googleSearch({\n * apiKey: process.env.GEMINI_API_KEY,\n * maxResults: 5,\n * });\n *\n * const runtime = createRuntime({\n * provider: gemini,\n * model: 'gemini-2.0-flash',\n * tools: [webSearch],\n * });\n * ```\n */\nexport function googleSearch(\n config: GoogleSearchConfig,\n): ToolDefinition<GoogleSearchParams> {\n return {\n name: \"web_search\",\n description: `Search the web using Google Search 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 searchGoogle(\n {\n query: params.query,\n maxResults: params.maxResults ?? config.maxResults ?? 5,\n },\n {\n provider: \"google\",\n apiKey: config.apiKey,\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,83 @@
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
+ require('../../chunk-MEBXW75C.cjs');
7
+ require('../../chunk-W73FBYIH.cjs');
8
+ require('../../chunk-2FAWEBZS.cjs');
9
+ require('../../chunk-6T5XXJEP.cjs');
10
+ var chunkGANCV72Z_cjs = require('../../chunk-GANCV72Z.cjs');
11
+ require('../../chunk-XWOHNY3F.cjs');
12
+ require('../../chunk-TXLIY7GF.cjs');
13
+ require('../../chunk-JEQ2X3Z6.cjs');
14
+
15
+ // src/tools/openai/index.ts
16
+ function openaiSearch(config) {
17
+ return {
18
+ name: "web_search",
19
+ description: `Search the web using OpenAI's native search 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 chunkGANCV72Z_cjs.searchOpenAI(
50
+ {
51
+ query: params.query,
52
+ maxResults: params.maxResults ?? config.maxResults ?? 5
53
+ },
54
+ {
55
+ provider: "openai",
56
+ apiKey: config.apiKey,
57
+ includeDomains: config.includeDomains,
58
+ timeout: config.timeout
59
+ }
60
+ );
61
+ const aiContext = chunkASV6JLYG_cjs.formatSearchResultsForAI(response);
62
+ return {
63
+ success: true,
64
+ message: chunkASV6JLYG_cjs.summarizeSearchResults(response),
65
+ data: response,
66
+ _aiContext: aiContext
67
+ };
68
+ } catch (error) {
69
+ const errorMessage = error instanceof Error ? error.message : "Web search failed";
70
+ console.error("[OpenAI Search] Error:", errorMessage);
71
+ return chunkCEKAYA2Q_cjs.failure(errorMessage);
72
+ }
73
+ }
74
+ };
75
+ }
76
+
77
+ Object.defineProperty(exports, "openaiProvider", {
78
+ enumerable: true,
79
+ get: function () { return chunkGANCV72Z_cjs.openaiProvider; }
80
+ });
81
+ exports.openaiSearch = openaiSearch;
82
+ //# sourceMappingURL=index.cjs.map
83
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/tools/openai/index.ts"],"names":["searchOpenAI","formatSearchResultsForAI","summarizeSearchResults","failure"],"mappings":";;;;;;;;;;;;;;;AA8FO,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,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,OAAA,CAAQ,KAAA,CAAM,0BAA0B,YAAY,CAAA;AACpD,QAAA,OAAOC,0BAAQ,YAAY,CAAA;AAAA,MAC7B;AAAA,IACF;AAAA,GACF;AACF","file":"index.cjs","sourcesContent":["/**\n * OpenAI Search Tool\n *\n * Tree-shakeable import for OpenAI's built-in web search.\n * Uses OpenAI's Responses API with the web_search tool.\n *\n * @example\n * ```typescript\n * import { openaiSearch } from '@yourgpt/copilot-sdk/tools/openai';\n *\n * const webSearch = openaiSearch({\n * apiKey: process.env.OPENAI_API_KEY,\n * });\n *\n * const runtime = createRuntime({\n * tools: [webSearch],\n * });\n * ```\n *\n * @see https://platform.openai.com/docs/guides/tools-web-search\n * @module @yourgpt/copilot-sdk/tools/openai\n */\n\nimport type { ToolDefinition } from \"../../core/types/tools\";\nimport { failure } from \"../../core/types/tools\";\nimport {\n searchOpenAI,\n openaiProvider,\n} from \"../../core/tools/webSearch/providers/openai\";\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 { openaiProvider };\n\n/**\n * OpenAI search configuration\n */\nexport interface OpenAISearchConfig {\n /** OpenAI API key - uses your existing OpenAI key */\n apiKey: string;\n /** Maximum number of results (default: 5) */\n maxResults?: number;\n /** Only include results from these domains */\n includeDomains?: string[];\n /** Request timeout in milliseconds */\n timeout?: number;\n}\n\n/**\n * Search parameters passed to the tool\n */\ninterface OpenAISearchParams {\n /** The search query */\n query: string;\n /** Maximum number of results (overrides config) */\n maxResults?: number;\n}\n\n/**\n * Create an OpenAI web search tool\n *\n * Uses OpenAI's built-in web_search tool via the Responses API.\n * No third-party API key required - uses your existing OpenAI API key.\n *\n * @param config - OpenAI configuration including API key\n * @returns A configured tool definition ready to use\n *\n * @example\n * ```typescript\n * import { openaiSearch } from '@yourgpt/copilot-sdk/tools/openai';\n *\n * // Basic usage\n * const webSearch = openaiSearch({\n * apiKey: process.env.OPENAI_API_KEY,\n * });\n *\n * // With domain filtering\n * const webSearch = openaiSearch({\n * apiKey: process.env.OPENAI_API_KEY,\n * includeDomains: ['docs.python.org', 'stackoverflow.com'],\n * maxResults: 5,\n * });\n *\n * const runtime = createRuntime({\n * provider: openai,\n * model: 'gpt-4o',\n * tools: [webSearch],\n * });\n * ```\n */\nexport function openaiSearch(\n config: OpenAISearchConfig,\n): ToolDefinition<OpenAISearchParams> {\n return {\n name: \"web_search\",\n description: `Search the web using OpenAI's native search 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 searchOpenAI(\n {\n query: params.query,\n maxResults: params.maxResults ?? config.maxResults ?? 5,\n },\n {\n provider: \"openai\",\n apiKey: config.apiKey,\n includeDomains: config.includeDomains,\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 console.error(\"[OpenAI Search] Error:\", errorMessage);\n return failure(errorMessage);\n }\n },\n };\n}\n"]}
@@ -0,0 +1,84 @@
1
+ import { T as ToolDefinition } from '../../tools-DDWrco4h.cjs';
2
+ export { o as openaiProvider } from '../../openai-HVSCuXgO.cjs';
3
+ import '../../types-ZguuKEs_.cjs';
4
+
5
+ /**
6
+ * OpenAI Search Tool
7
+ *
8
+ * Tree-shakeable import for OpenAI's built-in web search.
9
+ * Uses OpenAI's Responses API with the web_search tool.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * import { openaiSearch } from '@yourgpt/copilot-sdk/tools/openai';
14
+ *
15
+ * const webSearch = openaiSearch({
16
+ * apiKey: process.env.OPENAI_API_KEY,
17
+ * });
18
+ *
19
+ * const runtime = createRuntime({
20
+ * tools: [webSearch],
21
+ * });
22
+ * ```
23
+ *
24
+ * @see https://platform.openai.com/docs/guides/tools-web-search
25
+ * @module @yourgpt/copilot-sdk/tools/openai
26
+ */
27
+
28
+ /**
29
+ * OpenAI search configuration
30
+ */
31
+ interface OpenAISearchConfig {
32
+ /** OpenAI API key - uses your existing OpenAI key */
33
+ apiKey: string;
34
+ /** Maximum number of results (default: 5) */
35
+ maxResults?: number;
36
+ /** Only include results from these domains */
37
+ includeDomains?: string[];
38
+ /** Request timeout in milliseconds */
39
+ timeout?: number;
40
+ }
41
+ /**
42
+ * Search parameters passed to the tool
43
+ */
44
+ interface OpenAISearchParams {
45
+ /** The search query */
46
+ query: string;
47
+ /** Maximum number of results (overrides config) */
48
+ maxResults?: number;
49
+ }
50
+ /**
51
+ * Create an OpenAI web search tool
52
+ *
53
+ * Uses OpenAI's built-in web_search tool via the Responses API.
54
+ * No third-party API key required - uses your existing OpenAI API key.
55
+ *
56
+ * @param config - OpenAI configuration including API key
57
+ * @returns A configured tool definition ready to use
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * import { openaiSearch } from '@yourgpt/copilot-sdk/tools/openai';
62
+ *
63
+ * // Basic usage
64
+ * const webSearch = openaiSearch({
65
+ * apiKey: process.env.OPENAI_API_KEY,
66
+ * });
67
+ *
68
+ * // With domain filtering
69
+ * const webSearch = openaiSearch({
70
+ * apiKey: process.env.OPENAI_API_KEY,
71
+ * includeDomains: ['docs.python.org', 'stackoverflow.com'],
72
+ * maxResults: 5,
73
+ * });
74
+ *
75
+ * const runtime = createRuntime({
76
+ * provider: openai,
77
+ * model: 'gpt-4o',
78
+ * tools: [webSearch],
79
+ * });
80
+ * ```
81
+ */
82
+ declare function openaiSearch(config: OpenAISearchConfig): ToolDefinition<OpenAISearchParams>;
83
+
84
+ export { type OpenAISearchConfig, openaiSearch };
@@ -0,0 +1,84 @@
1
+ import { T as ToolDefinition } from '../../tools-DDWrco4h.js';
2
+ export { o as openaiProvider } from '../../openai-Cam8hF4f.js';
3
+ import '../../types-ZguuKEs_.js';
4
+
5
+ /**
6
+ * OpenAI Search Tool
7
+ *
8
+ * Tree-shakeable import for OpenAI's built-in web search.
9
+ * Uses OpenAI's Responses API with the web_search tool.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * import { openaiSearch } from '@yourgpt/copilot-sdk/tools/openai';
14
+ *
15
+ * const webSearch = openaiSearch({
16
+ * apiKey: process.env.OPENAI_API_KEY,
17
+ * });
18
+ *
19
+ * const runtime = createRuntime({
20
+ * tools: [webSearch],
21
+ * });
22
+ * ```
23
+ *
24
+ * @see https://platform.openai.com/docs/guides/tools-web-search
25
+ * @module @yourgpt/copilot-sdk/tools/openai
26
+ */
27
+
28
+ /**
29
+ * OpenAI search configuration
30
+ */
31
+ interface OpenAISearchConfig {
32
+ /** OpenAI API key - uses your existing OpenAI key */
33
+ apiKey: string;
34
+ /** Maximum number of results (default: 5) */
35
+ maxResults?: number;
36
+ /** Only include results from these domains */
37
+ includeDomains?: string[];
38
+ /** Request timeout in milliseconds */
39
+ timeout?: number;
40
+ }
41
+ /**
42
+ * Search parameters passed to the tool
43
+ */
44
+ interface OpenAISearchParams {
45
+ /** The search query */
46
+ query: string;
47
+ /** Maximum number of results (overrides config) */
48
+ maxResults?: number;
49
+ }
50
+ /**
51
+ * Create an OpenAI web search tool
52
+ *
53
+ * Uses OpenAI's built-in web_search tool via the Responses API.
54
+ * No third-party API key required - uses your existing OpenAI API key.
55
+ *
56
+ * @param config - OpenAI configuration including API key
57
+ * @returns A configured tool definition ready to use
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * import { openaiSearch } from '@yourgpt/copilot-sdk/tools/openai';
62
+ *
63
+ * // Basic usage
64
+ * const webSearch = openaiSearch({
65
+ * apiKey: process.env.OPENAI_API_KEY,
66
+ * });
67
+ *
68
+ * // With domain filtering
69
+ * const webSearch = openaiSearch({
70
+ * apiKey: process.env.OPENAI_API_KEY,
71
+ * includeDomains: ['docs.python.org', 'stackoverflow.com'],
72
+ * maxResults: 5,
73
+ * });
74
+ *
75
+ * const runtime = createRuntime({
76
+ * provider: openai,
77
+ * model: 'gpt-4o',
78
+ * tools: [webSearch],
79
+ * });
80
+ * ```
81
+ */
82
+ declare function openaiSearch(config: OpenAISearchConfig): ToolDefinition<OpenAISearchParams>;
83
+
84
+ export { type OpenAISearchConfig, openaiSearch };
@@ -0,0 +1,78 @@
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 '../../chunk-DABZYCVX.js';
7
+ import '../../chunk-MNDGIW47.js';
8
+ import { searchOpenAI } from '../../chunk-VD74IPKB.js';
9
+ export { openaiProvider } from '../../chunk-VD74IPKB.js';
10
+ import '../../chunk-53UGJNHN.js';
11
+ import '../../chunk-RQ74USYU.js';
12
+ import '../../chunk-DGUM43GV.js';
13
+
14
+ // src/tools/openai/index.ts
15
+ function openaiSearch(config) {
16
+ return {
17
+ name: "web_search",
18
+ description: `Search the web using OpenAI's native search 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 searchOpenAI(
49
+ {
50
+ query: params.query,
51
+ maxResults: params.maxResults ?? config.maxResults ?? 5
52
+ },
53
+ {
54
+ provider: "openai",
55
+ apiKey: config.apiKey,
56
+ includeDomains: config.includeDomains,
57
+ timeout: config.timeout
58
+ }
59
+ );
60
+ const aiContext = formatSearchResultsForAI(response);
61
+ return {
62
+ success: true,
63
+ message: summarizeSearchResults(response),
64
+ data: response,
65
+ _aiContext: aiContext
66
+ };
67
+ } catch (error) {
68
+ const errorMessage = error instanceof Error ? error.message : "Web search failed";
69
+ console.error("[OpenAI Search] Error:", errorMessage);
70
+ return failure(errorMessage);
71
+ }
72
+ }
73
+ };
74
+ }
75
+
76
+ export { openaiSearch };
77
+ //# sourceMappingURL=index.js.map
78
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/tools/openai/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AA8FO,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,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,OAAA,CAAQ,KAAA,CAAM,0BAA0B,YAAY,CAAA;AACpD,QAAA,OAAO,QAAQ,YAAY,CAAA;AAAA,MAC7B;AAAA,IACF;AAAA,GACF;AACF","file":"index.js","sourcesContent":["/**\n * OpenAI Search Tool\n *\n * Tree-shakeable import for OpenAI's built-in web search.\n * Uses OpenAI's Responses API with the web_search tool.\n *\n * @example\n * ```typescript\n * import { openaiSearch } from '@yourgpt/copilot-sdk/tools/openai';\n *\n * const webSearch = openaiSearch({\n * apiKey: process.env.OPENAI_API_KEY,\n * });\n *\n * const runtime = createRuntime({\n * tools: [webSearch],\n * });\n * ```\n *\n * @see https://platform.openai.com/docs/guides/tools-web-search\n * @module @yourgpt/copilot-sdk/tools/openai\n */\n\nimport type { ToolDefinition } from \"../../core/types/tools\";\nimport { failure } from \"../../core/types/tools\";\nimport {\n searchOpenAI,\n openaiProvider,\n} from \"../../core/tools/webSearch/providers/openai\";\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 { openaiProvider };\n\n/**\n * OpenAI search configuration\n */\nexport interface OpenAISearchConfig {\n /** OpenAI API key - uses your existing OpenAI key */\n apiKey: string;\n /** Maximum number of results (default: 5) */\n maxResults?: number;\n /** Only include results from these domains */\n includeDomains?: string[];\n /** Request timeout in milliseconds */\n timeout?: number;\n}\n\n/**\n * Search parameters passed to the tool\n */\ninterface OpenAISearchParams {\n /** The search query */\n query: string;\n /** Maximum number of results (overrides config) */\n maxResults?: number;\n}\n\n/**\n * Create an OpenAI web search tool\n *\n * Uses OpenAI's built-in web_search tool via the Responses API.\n * No third-party API key required - uses your existing OpenAI API key.\n *\n * @param config - OpenAI configuration including API key\n * @returns A configured tool definition ready to use\n *\n * @example\n * ```typescript\n * import { openaiSearch } from '@yourgpt/copilot-sdk/tools/openai';\n *\n * // Basic usage\n * const webSearch = openaiSearch({\n * apiKey: process.env.OPENAI_API_KEY,\n * });\n *\n * // With domain filtering\n * const webSearch = openaiSearch({\n * apiKey: process.env.OPENAI_API_KEY,\n * includeDomains: ['docs.python.org', 'stackoverflow.com'],\n * maxResults: 5,\n * });\n *\n * const runtime = createRuntime({\n * provider: openai,\n * model: 'gpt-4o',\n * tools: [webSearch],\n * });\n * ```\n */\nexport function openaiSearch(\n config: OpenAISearchConfig,\n): ToolDefinition<OpenAISearchParams> {\n return {\n name: \"web_search\",\n description: `Search the web using OpenAI's native search 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 searchOpenAI(\n {\n query: params.query,\n maxResults: params.maxResults ?? config.maxResults ?? 5,\n },\n {\n provider: \"openai\",\n apiKey: config.apiKey,\n includeDomains: config.includeDomains,\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 console.error(\"[OpenAI Search] Error:\", errorMessage);\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
+ require('../../chunk-MEBXW75C.cjs');
7
+ require('../../chunk-W73FBYIH.cjs');
8
+ var chunk2FAWEBZS_cjs = 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/searxng/index.ts
16
+ function searxngSearch(config) {
17
+ return {
18
+ name: "web_search",
19
+ description: `Search the web using SearXNG 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 chunk2FAWEBZS_cjs.searchSearxng(
50
+ {
51
+ query: params.query,
52
+ maxResults: params.maxResults ?? config.maxResults ?? 5
53
+ },
54
+ {
55
+ provider: "searxng",
56
+ baseUrl: config.baseUrl,
57
+ apiKey: config.apiKey,
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, "searxngProvider", {
80
+ enumerable: true,
81
+ get: function () { return chunk2FAWEBZS_cjs.searxngProvider; }
82
+ });
83
+ exports.searxngSearch = searxngSearch;
84
+ //# sourceMappingURL=index.cjs.map
85
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/tools/searxng/index.ts"],"names":["searchSearxng","formatSearchResultsForAI","summarizeSearchResults","failure"],"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,MAAMA,+BAAA;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,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 * 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"]}