@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,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 { searchBrave } from '../../chunk-PPFHA6IL.js';
6
+ export { braveProvider } from '../../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/brave/index.ts
15
+ function braveSearch(config) {
16
+ return {
17
+ name: "web_search",
18
+ description: `Search the web using Brave 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 searchBrave(
49
+ {
50
+ query: params.query,
51
+ maxResults: params.maxResults ?? config.maxResults ?? 5
52
+ },
53
+ {
54
+ provider: "brave",
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 { braveSearch };
79
+ //# sourceMappingURL=index.js.map
80
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/tools/brave/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAqGO,SAAS,YACd,MAAA,EACmC;AACnC,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,WAAA;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,OAAA;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 * Brave Search Tool\n *\n * Tree-shakeable import for Brave web search provider.\n * Only imports Brave code - no other providers bundled.\n *\n * @example\n * ```typescript\n * import { braveSearch } from '@yourgpt/copilot-sdk/tools/brave';\n *\n * const webSearch = braveSearch({\n * apiKey: process.env.BRAVE_API_KEY,\n * });\n *\n * const runtime = createRuntime({\n * tools: [webSearch],\n * });\n * ```\n *\n * @see https://brave.com/search/api/\n * @module @yourgpt/copilot-sdk/tools/brave\n */\n\nimport type { ToolDefinition } from \"../../core/types/tools\";\nimport { failure } from \"../../core/types/tools\";\nimport {\n searchBrave,\n braveProvider,\n} from \"../../core/tools/webSearch/providers/brave\";\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 { braveProvider };\n\n/**\n * Brave search configuration\n */\nexport interface BraveSearchConfig {\n /** Brave Search API key - get one at https://brave.com/search/api/ */\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 BraveSearchParams {\n /** The search query */\n query: string;\n /** Maximum number of results (overrides config) */\n maxResults?: number;\n}\n\n/**\n * Create a Brave web search tool\n *\n * Brave Search is a privacy-focused search engine with its own index.\n * Provides independent search results without tracking.\n *\n * @param config - Brave configuration including API key\n * @returns A configured tool definition ready to use\n *\n * @example\n * ```typescript\n * import { braveSearch } from '@yourgpt/copilot-sdk/tools/brave';\n *\n * // Basic usage\n * const webSearch = braveSearch({\n * apiKey: process.env.BRAVE_API_KEY,\n * });\n *\n * // With locale settings\n * const webSearch = braveSearch({\n * apiKey: process.env.BRAVE_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 braveSearch(\n config: BraveSearchConfig,\n): ToolDefinition<BraveSearchParams> {\n return {\n name: \"web_search\",\n description: `Search the web using Brave 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 searchBrave(\n {\n query: params.query,\n maxResults: params.maxResults ?? config.maxResults ?? 5,\n },\n {\n provider: \"brave\",\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,90 @@
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
+ var chunk6T5XXJEP_cjs = 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/exa/index.ts
16
+ function exaSearch(config) {
17
+ return {
18
+ name: "web_search",
19
+ description: `Search the web using Exa 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
+ searchDepth: {
43
+ type: "string",
44
+ enum: ["basic", "advanced"],
45
+ description: "Search depth - 'advanced' uses semantic search for better results"
46
+ }
47
+ },
48
+ required: ["query"]
49
+ },
50
+ needsApproval: false,
51
+ aiResponseMode: "full",
52
+ handler: async (params) => {
53
+ try {
54
+ const response = await chunk6T5XXJEP_cjs.searchExa(
55
+ {
56
+ query: params.query,
57
+ maxResults: params.maxResults ?? config.maxResults ?? 5,
58
+ searchDepth: params.searchDepth ?? config.searchDepth ?? "basic"
59
+ },
60
+ {
61
+ provider: "exa",
62
+ apiKey: config.apiKey,
63
+ includeDomains: config.includeDomains,
64
+ excludeDomains: config.excludeDomains,
65
+ includeRawContent: config.includeRawContent,
66
+ timeout: config.timeout
67
+ }
68
+ );
69
+ const aiContext = chunkASV6JLYG_cjs.formatSearchResultsForAI(response);
70
+ return {
71
+ success: true,
72
+ message: chunkASV6JLYG_cjs.summarizeSearchResults(response),
73
+ data: response,
74
+ _aiContext: aiContext
75
+ };
76
+ } catch (error) {
77
+ const errorMessage = error instanceof Error ? error.message : "Web search failed";
78
+ return chunkCEKAYA2Q_cjs.failure(errorMessage);
79
+ }
80
+ }
81
+ };
82
+ }
83
+
84
+ Object.defineProperty(exports, "exaProvider", {
85
+ enumerable: true,
86
+ get: function () { return chunk6T5XXJEP_cjs.exaProvider; }
87
+ });
88
+ exports.exaSearch = exaSearch;
89
+ //# sourceMappingURL=index.cjs.map
90
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/tools/exa/index.ts"],"names":["searchExa","formatSearchResultsForAI","summarizeSearchResults","failure"],"mappings":";;;;;;;;;;;;;;;AAsGO,SAAS,UACd,MAAA,EACiC;AACjC,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,SACX;AAAA,QACA,WAAA,EAAa;AAAA,UACX,IAAA,EAAM,QAAA;AAAA,UACN,IAAA,EAAM,CAAC,OAAA,EAAS,UAAU,CAAA;AAAA,UAC1B,WAAA,EACE;AAAA;AACJ,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,2BAAA;AAAA,UACxC;AAAA,YACE,OAAO,MAAA,CAAO,KAAA;AAAA,YACd,UAAA,EAAY,MAAA,CAAO,UAAA,IAAc,MAAA,CAAO,UAAA,IAAc,CAAA;AAAA,YACtD,WAAA,EAAa,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,WAAA,IAAe;AAAA,WAC3D;AAAA,UACA;AAAA,YACE,QAAA,EAAU,KAAA;AAAA,YACV,QAAQ,MAAA,CAAO,MAAA;AAAA,YACf,gBAAgB,MAAA,CAAO,cAAA;AAAA,YACvB,gBAAgB,MAAA,CAAO,cAAA;AAAA,YACvB,mBAAmB,MAAA,CAAO,iBAAA;AAAA,YAC1B,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 * Exa Search Tool\n *\n * Tree-shakeable import for Exa web search provider.\n * Only imports Exa code - no other providers bundled.\n *\n * @example\n * ```typescript\n * import { exaSearch } from '@yourgpt/copilot-sdk/tools/exa';\n *\n * const webSearch = exaSearch({\n * apiKey: process.env.EXA_API_KEY,\n * });\n *\n * const runtime = createRuntime({\n * tools: [webSearch],\n * });\n * ```\n *\n * @see https://exa.ai/\n * @module @yourgpt/copilot-sdk/tools/exa\n */\n\nimport type { ToolDefinition } from \"../../core/types/tools\";\nimport { failure } from \"../../core/types/tools\";\nimport {\n searchExa,\n exaProvider,\n} from \"../../core/tools/webSearch/providers/exa\";\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 { exaProvider };\n\n/**\n * Exa search configuration\n */\nexport interface ExaSearchConfig {\n /** Exa API key - get one at https://exa.ai/ */\n apiKey: string;\n /** Maximum number of results (default: 5) */\n maxResults?: number;\n /** Search depth - 'advanced' uses autoprompt for better semantic search */\n searchDepth?: \"basic\" | \"advanced\";\n /** Only include results from these domains */\n includeDomains?: string[];\n /** Exclude results from these domains */\n excludeDomains?: string[];\n /** Include raw page content */\n includeRawContent?: boolean;\n /** Request timeout in milliseconds */\n timeout?: number;\n}\n\n/**\n * Search parameters passed to the tool\n */\ninterface ExaSearchParams {\n /** The search query */\n query: string;\n /** Maximum number of results (overrides config) */\n maxResults?: number;\n /** Search depth (overrides config) */\n searchDepth?: \"basic\" | \"advanced\";\n}\n\n/**\n * Create an Exa web search tool\n *\n * Exa (formerly Metaphor) is an AI-native search engine that understands\n * queries semantically for better results.\n *\n * @param config - Exa configuration including API key\n * @returns A configured tool definition ready to use\n *\n * @example\n * ```typescript\n * import { exaSearch } from '@yourgpt/copilot-sdk/tools/exa';\n *\n * // Basic usage\n * const webSearch = exaSearch({\n * apiKey: process.env.EXA_API_KEY,\n * });\n *\n * // With semantic search (autoprompt)\n * const webSearch = exaSearch({\n * apiKey: process.env.EXA_API_KEY,\n * searchDepth: 'advanced',\n * maxResults: 10,\n * });\n *\n * const runtime = createRuntime({\n * provider: openai,\n * model: 'gpt-4o',\n * tools: [webSearch],\n * });\n * ```\n */\nexport function exaSearch(\n config: ExaSearchConfig,\n): ToolDefinition<ExaSearchParams> {\n return {\n name: \"web_search\",\n description: `Search the web using Exa 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 searchDepth: {\n type: \"string\",\n enum: [\"basic\", \"advanced\"],\n description:\n \"Search depth - 'advanced' uses semantic search for better results\",\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 searchExa(\n {\n query: params.query,\n maxResults: params.maxResults ?? config.maxResults ?? 5,\n searchDepth: params.searchDepth ?? config.searchDepth ?? \"basic\",\n },\n {\n provider: \"exa\",\n apiKey: config.apiKey,\n includeDomains: config.includeDomains,\n excludeDomains: config.excludeDomains,\n includeRawContent: config.includeRawContent,\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,92 @@
1
+ import { T as ToolDefinition } from '../../tools-DDWrco4h.cjs';
2
+ export { e as exaProvider } from '../../exa-jJSPhyUW.cjs';
3
+ import '../../types-ZguuKEs_.cjs';
4
+
5
+ /**
6
+ * Exa Search Tool
7
+ *
8
+ * Tree-shakeable import for Exa web search provider.
9
+ * Only imports Exa code - no other providers bundled.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * import { exaSearch } from '@yourgpt/copilot-sdk/tools/exa';
14
+ *
15
+ * const webSearch = exaSearch({
16
+ * apiKey: process.env.EXA_API_KEY,
17
+ * });
18
+ *
19
+ * const runtime = createRuntime({
20
+ * tools: [webSearch],
21
+ * });
22
+ * ```
23
+ *
24
+ * @see https://exa.ai/
25
+ * @module @yourgpt/copilot-sdk/tools/exa
26
+ */
27
+
28
+ /**
29
+ * Exa search configuration
30
+ */
31
+ interface ExaSearchConfig {
32
+ /** Exa API key - get one at https://exa.ai/ */
33
+ apiKey: string;
34
+ /** Maximum number of results (default: 5) */
35
+ maxResults?: number;
36
+ /** Search depth - 'advanced' uses autoprompt for better semantic search */
37
+ searchDepth?: "basic" | "advanced";
38
+ /** Only include results from these domains */
39
+ includeDomains?: string[];
40
+ /** Exclude results from these domains */
41
+ excludeDomains?: string[];
42
+ /** Include raw page content */
43
+ includeRawContent?: boolean;
44
+ /** Request timeout in milliseconds */
45
+ timeout?: number;
46
+ }
47
+ /**
48
+ * Search parameters passed to the tool
49
+ */
50
+ interface ExaSearchParams {
51
+ /** The search query */
52
+ query: string;
53
+ /** Maximum number of results (overrides config) */
54
+ maxResults?: number;
55
+ /** Search depth (overrides config) */
56
+ searchDepth?: "basic" | "advanced";
57
+ }
58
+ /**
59
+ * Create an Exa web search tool
60
+ *
61
+ * Exa (formerly Metaphor) is an AI-native search engine that understands
62
+ * queries semantically for better results.
63
+ *
64
+ * @param config - Exa configuration including API key
65
+ * @returns A configured tool definition ready to use
66
+ *
67
+ * @example
68
+ * ```typescript
69
+ * import { exaSearch } from '@yourgpt/copilot-sdk/tools/exa';
70
+ *
71
+ * // Basic usage
72
+ * const webSearch = exaSearch({
73
+ * apiKey: process.env.EXA_API_KEY,
74
+ * });
75
+ *
76
+ * // With semantic search (autoprompt)
77
+ * const webSearch = exaSearch({
78
+ * apiKey: process.env.EXA_API_KEY,
79
+ * searchDepth: 'advanced',
80
+ * maxResults: 10,
81
+ * });
82
+ *
83
+ * const runtime = createRuntime({
84
+ * provider: openai,
85
+ * model: 'gpt-4o',
86
+ * tools: [webSearch],
87
+ * });
88
+ * ```
89
+ */
90
+ declare function exaSearch(config: ExaSearchConfig): ToolDefinition<ExaSearchParams>;
91
+
92
+ export { type ExaSearchConfig, exaSearch };
@@ -0,0 +1,92 @@
1
+ import { T as ToolDefinition } from '../../tools-DDWrco4h.js';
2
+ export { e as exaProvider } from '../../exa-Dp9U-WTc.js';
3
+ import '../../types-ZguuKEs_.js';
4
+
5
+ /**
6
+ * Exa Search Tool
7
+ *
8
+ * Tree-shakeable import for Exa web search provider.
9
+ * Only imports Exa code - no other providers bundled.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * import { exaSearch } from '@yourgpt/copilot-sdk/tools/exa';
14
+ *
15
+ * const webSearch = exaSearch({
16
+ * apiKey: process.env.EXA_API_KEY,
17
+ * });
18
+ *
19
+ * const runtime = createRuntime({
20
+ * tools: [webSearch],
21
+ * });
22
+ * ```
23
+ *
24
+ * @see https://exa.ai/
25
+ * @module @yourgpt/copilot-sdk/tools/exa
26
+ */
27
+
28
+ /**
29
+ * Exa search configuration
30
+ */
31
+ interface ExaSearchConfig {
32
+ /** Exa API key - get one at https://exa.ai/ */
33
+ apiKey: string;
34
+ /** Maximum number of results (default: 5) */
35
+ maxResults?: number;
36
+ /** Search depth - 'advanced' uses autoprompt for better semantic search */
37
+ searchDepth?: "basic" | "advanced";
38
+ /** Only include results from these domains */
39
+ includeDomains?: string[];
40
+ /** Exclude results from these domains */
41
+ excludeDomains?: string[];
42
+ /** Include raw page content */
43
+ includeRawContent?: boolean;
44
+ /** Request timeout in milliseconds */
45
+ timeout?: number;
46
+ }
47
+ /**
48
+ * Search parameters passed to the tool
49
+ */
50
+ interface ExaSearchParams {
51
+ /** The search query */
52
+ query: string;
53
+ /** Maximum number of results (overrides config) */
54
+ maxResults?: number;
55
+ /** Search depth (overrides config) */
56
+ searchDepth?: "basic" | "advanced";
57
+ }
58
+ /**
59
+ * Create an Exa web search tool
60
+ *
61
+ * Exa (formerly Metaphor) is an AI-native search engine that understands
62
+ * queries semantically for better results.
63
+ *
64
+ * @param config - Exa configuration including API key
65
+ * @returns A configured tool definition ready to use
66
+ *
67
+ * @example
68
+ * ```typescript
69
+ * import { exaSearch } from '@yourgpt/copilot-sdk/tools/exa';
70
+ *
71
+ * // Basic usage
72
+ * const webSearch = exaSearch({
73
+ * apiKey: process.env.EXA_API_KEY,
74
+ * });
75
+ *
76
+ * // With semantic search (autoprompt)
77
+ * const webSearch = exaSearch({
78
+ * apiKey: process.env.EXA_API_KEY,
79
+ * searchDepth: 'advanced',
80
+ * maxResults: 10,
81
+ * });
82
+ *
83
+ * const runtime = createRuntime({
84
+ * provider: openai,
85
+ * model: 'gpt-4o',
86
+ * tools: [webSearch],
87
+ * });
88
+ * ```
89
+ */
90
+ declare function exaSearch(config: ExaSearchConfig): ToolDefinition<ExaSearchParams>;
91
+
92
+ export { type ExaSearchConfig, exaSearch };
@@ -0,0 +1,85 @@
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 { searchExa } from '../../chunk-MNDGIW47.js';
8
+ export { exaProvider } from '../../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/exa/index.ts
15
+ function exaSearch(config) {
16
+ return {
17
+ name: "web_search",
18
+ description: `Search the web using Exa 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
+ searchDepth: {
42
+ type: "string",
43
+ enum: ["basic", "advanced"],
44
+ description: "Search depth - 'advanced' uses semantic search for better results"
45
+ }
46
+ },
47
+ required: ["query"]
48
+ },
49
+ needsApproval: false,
50
+ aiResponseMode: "full",
51
+ handler: async (params) => {
52
+ try {
53
+ const response = await searchExa(
54
+ {
55
+ query: params.query,
56
+ maxResults: params.maxResults ?? config.maxResults ?? 5,
57
+ searchDepth: params.searchDepth ?? config.searchDepth ?? "basic"
58
+ },
59
+ {
60
+ provider: "exa",
61
+ apiKey: config.apiKey,
62
+ includeDomains: config.includeDomains,
63
+ excludeDomains: config.excludeDomains,
64
+ includeRawContent: config.includeRawContent,
65
+ timeout: config.timeout
66
+ }
67
+ );
68
+ const aiContext = formatSearchResultsForAI(response);
69
+ return {
70
+ success: true,
71
+ message: summarizeSearchResults(response),
72
+ data: response,
73
+ _aiContext: aiContext
74
+ };
75
+ } catch (error) {
76
+ const errorMessage = error instanceof Error ? error.message : "Web search failed";
77
+ return failure(errorMessage);
78
+ }
79
+ }
80
+ };
81
+ }
82
+
83
+ export { exaSearch };
84
+ //# sourceMappingURL=index.js.map
85
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/tools/exa/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAsGO,SAAS,UACd,MAAA,EACiC;AACjC,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,SACX;AAAA,QACA,WAAA,EAAa;AAAA,UACX,IAAA,EAAM,QAAA;AAAA,UACN,IAAA,EAAM,CAAC,OAAA,EAAS,UAAU,CAAA;AAAA,UAC1B,WAAA,EACE;AAAA;AACJ,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,SAAA;AAAA,UACxC;AAAA,YACE,OAAO,MAAA,CAAO,KAAA;AAAA,YACd,UAAA,EAAY,MAAA,CAAO,UAAA,IAAc,MAAA,CAAO,UAAA,IAAc,CAAA;AAAA,YACtD,WAAA,EAAa,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,WAAA,IAAe;AAAA,WAC3D;AAAA,UACA;AAAA,YACE,QAAA,EAAU,KAAA;AAAA,YACV,QAAQ,MAAA,CAAO,MAAA;AAAA,YACf,gBAAgB,MAAA,CAAO,cAAA;AAAA,YACvB,gBAAgB,MAAA,CAAO,cAAA;AAAA,YACvB,mBAAmB,MAAA,CAAO,iBAAA;AAAA,YAC1B,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 * Exa Search Tool\n *\n * Tree-shakeable import for Exa web search provider.\n * Only imports Exa code - no other providers bundled.\n *\n * @example\n * ```typescript\n * import { exaSearch } from '@yourgpt/copilot-sdk/tools/exa';\n *\n * const webSearch = exaSearch({\n * apiKey: process.env.EXA_API_KEY,\n * });\n *\n * const runtime = createRuntime({\n * tools: [webSearch],\n * });\n * ```\n *\n * @see https://exa.ai/\n * @module @yourgpt/copilot-sdk/tools/exa\n */\n\nimport type { ToolDefinition } from \"../../core/types/tools\";\nimport { failure } from \"../../core/types/tools\";\nimport {\n searchExa,\n exaProvider,\n} from \"../../core/tools/webSearch/providers/exa\";\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 { exaProvider };\n\n/**\n * Exa search configuration\n */\nexport interface ExaSearchConfig {\n /** Exa API key - get one at https://exa.ai/ */\n apiKey: string;\n /** Maximum number of results (default: 5) */\n maxResults?: number;\n /** Search depth - 'advanced' uses autoprompt for better semantic search */\n searchDepth?: \"basic\" | \"advanced\";\n /** Only include results from these domains */\n includeDomains?: string[];\n /** Exclude results from these domains */\n excludeDomains?: string[];\n /** Include raw page content */\n includeRawContent?: boolean;\n /** Request timeout in milliseconds */\n timeout?: number;\n}\n\n/**\n * Search parameters passed to the tool\n */\ninterface ExaSearchParams {\n /** The search query */\n query: string;\n /** Maximum number of results (overrides config) */\n maxResults?: number;\n /** Search depth (overrides config) */\n searchDepth?: \"basic\" | \"advanced\";\n}\n\n/**\n * Create an Exa web search tool\n *\n * Exa (formerly Metaphor) is an AI-native search engine that understands\n * queries semantically for better results.\n *\n * @param config - Exa configuration including API key\n * @returns A configured tool definition ready to use\n *\n * @example\n * ```typescript\n * import { exaSearch } from '@yourgpt/copilot-sdk/tools/exa';\n *\n * // Basic usage\n * const webSearch = exaSearch({\n * apiKey: process.env.EXA_API_KEY,\n * });\n *\n * // With semantic search (autoprompt)\n * const webSearch = exaSearch({\n * apiKey: process.env.EXA_API_KEY,\n * searchDepth: 'advanced',\n * maxResults: 10,\n * });\n *\n * const runtime = createRuntime({\n * provider: openai,\n * model: 'gpt-4o',\n * tools: [webSearch],\n * });\n * ```\n */\nexport function exaSearch(\n config: ExaSearchConfig,\n): ToolDefinition<ExaSearchParams> {\n return {\n name: \"web_search\",\n description: `Search the web using Exa 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 searchDepth: {\n type: \"string\",\n enum: [\"basic\", \"advanced\"],\n description:\n \"Search depth - 'advanced' uses semantic search for better results\",\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 searchExa(\n {\n query: params.query,\n maxResults: params.maxResults ?? config.maxResults ?? 5,\n searchDepth: params.searchDepth ?? config.searchDepth ?? \"basic\",\n },\n {\n provider: \"exa\",\n apiKey: config.apiKey,\n includeDomains: config.includeDomains,\n excludeDomains: config.excludeDomains,\n includeRawContent: config.includeRawContent,\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,81 @@
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
+ require('../../chunk-GANCV72Z.cjs');
11
+ var chunkXWOHNY3F_cjs = require('../../chunk-XWOHNY3F.cjs');
12
+ require('../../chunk-TXLIY7GF.cjs');
13
+ require('../../chunk-JEQ2X3Z6.cjs');
14
+
15
+ // src/tools/google/index.ts
16
+ function googleSearch(config) {
17
+ return {
18
+ name: "web_search",
19
+ description: `Search the web using Google 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 chunkXWOHNY3F_cjs.searchGoogle(
50
+ {
51
+ query: params.query,
52
+ maxResults: params.maxResults ?? config.maxResults ?? 5
53
+ },
54
+ {
55
+ provider: "google",
56
+ apiKey: config.apiKey,
57
+ timeout: config.timeout
58
+ }
59
+ );
60
+ const aiContext = chunkASV6JLYG_cjs.formatSearchResultsForAI(response);
61
+ return {
62
+ success: true,
63
+ message: chunkASV6JLYG_cjs.summarizeSearchResults(response),
64
+ data: response,
65
+ _aiContext: aiContext
66
+ };
67
+ } catch (error) {
68
+ const errorMessage = error instanceof Error ? error.message : "Web search failed";
69
+ return chunkCEKAYA2Q_cjs.failure(errorMessage);
70
+ }
71
+ }
72
+ };
73
+ }
74
+
75
+ Object.defineProperty(exports, "googleProvider", {
76
+ enumerable: true,
77
+ get: function () { return chunkXWOHNY3F_cjs.googleProvider; }
78
+ });
79
+ exports.googleSearch = googleSearch;
80
+ //# sourceMappingURL=index.cjs.map
81
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/tools/google/index.ts"],"names":["searchGoogle","formatSearchResultsForAI","summarizeSearchResults","failure"],"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,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;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 * 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,81 @@
1
+ import { T as ToolDefinition } from '../../tools-DDWrco4h.cjs';
2
+ export { g as googleProvider } from '../../google-CHU2yycE.cjs';
3
+ import '../../types-ZguuKEs_.cjs';
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 };