@yourgpt/copilot-sdk 2.1.5-alpha.3 → 2.1.5-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{MessageTree-CoIt_4nB.d.cts → MessageTree-Clhiv_k2.d.ts} +5 -4
- package/dist/{MessageTree-CzaN9Eul.d.ts → MessageTree-Dt9qfJ55.d.cts} +5 -4
- package/dist/{ThreadManager-BEAECB7Y.d.ts → ThreadManager-D7KwT2FJ.d.ts} +3 -1
- package/dist/{ThreadManager-Cw5fwyCN.d.cts → ThreadManager-DK46fVl3.d.cts} +3 -1
- package/dist/{chunk-NUXLAZOE.cjs → chunk-3ZDRX7J2.cjs} +2 -2
- package/dist/{chunk-NUXLAZOE.cjs.map → chunk-3ZDRX7J2.cjs.map} +1 -1
- package/dist/{chunk-RKGRQRZU.js → chunk-533K2Z7C.js} +4 -4
- package/dist/{chunk-RKGRQRZU.js.map → chunk-533K2Z7C.js.map} +1 -1
- package/dist/chunk-5EGBIQYS.cjs +292 -0
- package/dist/chunk-5EGBIQYS.cjs.map +1 -0
- package/dist/chunk-5UGWLGFS.cjs +2039 -0
- package/dist/chunk-5UGWLGFS.cjs.map +1 -0
- package/dist/{chunk-3AONOZLY.js → chunk-AIVXGTWS.js} +2 -2
- package/dist/chunk-AIVXGTWS.js.map +1 -0
- package/dist/{chunk-LLM7AHMO.js → chunk-DDZLRCVX.js} +2 -2
- package/dist/{chunk-LLM7AHMO.js.map → chunk-DDZLRCVX.js.map} +1 -1
- package/dist/{chunk-PT2TOHG5.js → chunk-DH6EO6NW.js} +1337 -3049
- package/dist/chunk-DH6EO6NW.js.map +1 -0
- package/dist/{chunk-WIXFZUEZ.cjs → chunk-KGYDGK3U.cjs} +84 -30
- package/dist/chunk-KGYDGK3U.cjs.map +1 -0
- package/dist/{chunk-TCPAT3WG.cjs → chunk-LHLVTGIP.cjs} +1339 -3101
- package/dist/chunk-LHLVTGIP.cjs.map +1 -0
- package/dist/{chunk-TPB7XED6.cjs → chunk-TPDMBDQX.cjs} +2 -2
- package/dist/chunk-TPDMBDQX.cjs.map +1 -0
- package/dist/chunk-TXQ37MAO.js +287 -0
- package/dist/chunk-TXQ37MAO.js.map +1 -0
- package/dist/{chunk-MDS23G2S.cjs → chunk-Y2A6AMGO.cjs} +10 -10
- package/dist/{chunk-MDS23G2S.cjs.map → chunk-Y2A6AMGO.cjs.map} +1 -1
- package/dist/{chunk-WZ2TOZ7M.js → chunk-YLZCTR4O.js} +65 -11
- package/dist/chunk-YLZCTR4O.js.map +1 -0
- package/dist/chunk-ZAOTYA5L.js +1983 -0
- package/dist/chunk-ZAOTYA5L.js.map +1 -0
- package/dist/core/index.cjs +93 -93
- package/dist/core/index.d.cts +7 -7
- package/dist/core/index.d.ts +7 -7
- package/dist/core/index.js +5 -5
- package/dist/experimental/index.cjs +644 -0
- package/dist/experimental/index.cjs.map +1 -0
- package/dist/experimental/index.d.cts +924 -0
- package/dist/experimental/index.d.ts +924 -0
- package/dist/experimental/index.js +611 -0
- package/dist/experimental/index.js.map +1 -0
- package/dist/{index-D7169xuR.d.ts → index-D8zza1Q8.d.ts} +1 -1
- package/dist/{index-CzJB8Ddo.d.cts → index-DCVjTdIZ.d.cts} +1 -1
- package/dist/mcp/index.d.cts +3 -3
- package/dist/mcp/index.d.ts +3 -3
- package/dist/react/index.cjs +136 -123
- package/dist/react/index.d.cts +178 -12
- package/dist/react/index.d.ts +178 -12
- package/dist/react/index.js +7 -6
- package/dist/styles.css +45 -0
- package/dist/tools/anthropic/index.cjs +3 -3
- package/dist/tools/anthropic/index.d.cts +1 -1
- package/dist/tools/anthropic/index.d.ts +1 -1
- package/dist/tools/anthropic/index.js +2 -2
- package/dist/tools/brave/index.cjs +6 -6
- package/dist/tools/brave/index.d.cts +1 -1
- package/dist/tools/brave/index.d.ts +1 -1
- package/dist/tools/brave/index.js +3 -3
- package/dist/tools/exa/index.cjs +6 -6
- package/dist/tools/exa/index.d.cts +1 -1
- package/dist/tools/exa/index.d.ts +1 -1
- package/dist/tools/exa/index.js +3 -3
- package/dist/tools/google/index.cjs +6 -6
- package/dist/tools/google/index.d.cts +1 -1
- package/dist/tools/google/index.d.ts +1 -1
- package/dist/tools/google/index.js +4 -4
- package/dist/tools/openai/index.cjs +6 -6
- package/dist/tools/openai/index.d.cts +1 -1
- package/dist/tools/openai/index.d.ts +1 -1
- package/dist/tools/openai/index.js +3 -3
- package/dist/tools/searxng/index.cjs +6 -6
- package/dist/tools/searxng/index.d.cts +1 -1
- package/dist/tools/searxng/index.d.ts +1 -1
- package/dist/tools/searxng/index.js +3 -3
- package/dist/tools/serper/index.cjs +6 -6
- package/dist/tools/serper/index.d.cts +1 -1
- package/dist/tools/serper/index.d.ts +1 -1
- package/dist/tools/serper/index.js +3 -3
- package/dist/tools/tavily/index.cjs +6 -6
- package/dist/tools/tavily/index.d.cts +1 -1
- package/dist/tools/tavily/index.d.ts +1 -1
- package/dist/tools/tavily/index.js +3 -3
- package/dist/tools/web-search/index.cjs +7 -7
- package/dist/tools/web-search/index.d.cts +2 -2
- package/dist/tools/web-search/index.d.ts +2 -2
- package/dist/tools/web-search/index.js +4 -4
- package/dist/{tools-tmksfhUo.d.cts → tools-DcS6Aeao.d.cts} +7 -3
- package/dist/{tools-tmksfhUo.d.ts → tools-DcS6Aeao.d.ts} +7 -3
- package/dist/{types-BqwW3Baj.d.ts → types-BUYni9B8.d.ts} +1 -1
- package/dist/{types-BLw7mxtW.d.cts → types-Cvg4DUoc.d.cts} +1 -1
- package/dist/{types-BeFBBZ5i.d.ts → types-waEqyE4K.d.cts} +5 -0
- package/dist/{types-BeFBBZ5i.d.cts → types-waEqyE4K.d.ts} +5 -0
- package/dist/ui/index.cjs +354 -524
- package/dist/ui/index.cjs.map +1 -1
- package/dist/ui/index.d.cts +22 -4
- package/dist/ui/index.d.ts +22 -4
- package/dist/ui/index.js +197 -372
- package/dist/ui/index.js.map +1 -1
- package/package.json +6 -1
- package/dist/chunk-3AONOZLY.js.map +0 -1
- package/dist/chunk-PT2TOHG5.js.map +0 -1
- package/dist/chunk-TCPAT3WG.cjs.map +0 -1
- package/dist/chunk-TPB7XED6.cjs.map +0 -1
- package/dist/chunk-WIXFZUEZ.cjs.map +0 -1
- package/dist/chunk-WZ2TOZ7M.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { M as MessageAttachment, T as ToolCall, S as Source } from './types-
|
|
1
|
+
import { M as MessageAttachment, T as ToolCall, S as Source } from './types-waEqyE4K.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Message Types
|
|
@@ -91,9 +91,10 @@ declare class MessageTree<T extends UIMessage = UIMessage> {
|
|
|
91
91
|
*
|
|
92
92
|
* Rules:
|
|
93
93
|
* - Tool messages get parentId = the owning assistant message's id
|
|
94
|
-
* (matched via toolCallId → toolCall.id).
|
|
95
|
-
* - All other messages get parentId
|
|
96
|
-
* (
|
|
94
|
+
* (matched via toolCallId → toolCall.id), chained in sequence.
|
|
95
|
+
* - All other messages get parentId = the previous message in the linear
|
|
96
|
+
* chain (including tool messages, so the next non-tool after tool results
|
|
97
|
+
* is a child of the last tool result, not a sibling).
|
|
97
98
|
*
|
|
98
99
|
* Returns a new array with parentId/childrenIds filled in.
|
|
99
100
|
* Does NOT mutate the original messages.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { M as MessageAttachment, T as ToolCall, S as Source } from './types-
|
|
1
|
+
import { M as MessageAttachment, T as ToolCall, S as Source } from './types-waEqyE4K.cjs';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Message Types
|
|
@@ -91,9 +91,10 @@ declare class MessageTree<T extends UIMessage = UIMessage> {
|
|
|
91
91
|
*
|
|
92
92
|
* Rules:
|
|
93
93
|
* - Tool messages get parentId = the owning assistant message's id
|
|
94
|
-
* (matched via toolCallId → toolCall.id).
|
|
95
|
-
* - All other messages get parentId
|
|
96
|
-
* (
|
|
94
|
+
* (matched via toolCallId → toolCall.id), chained in sequence.
|
|
95
|
+
* - All other messages get parentId = the previous message in the linear
|
|
96
|
+
* chain (including tool messages, so the next non-tool after tool results
|
|
97
|
+
* is a child of the last tool result, not a sibling).
|
|
97
98
|
*
|
|
98
99
|
* Returns a new array with parentId/childrenIds filled in.
|
|
99
100
|
* Does NOT mutate the original messages.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as Thread, b as ThreadData, c as ThreadStorageAdapter, A as AsyncThreadStorageAdapter, d as Message } from './types-
|
|
1
|
+
import { a as Thread, b as ThreadData, c as ThreadStorageAdapter, A as AsyncThreadStorageAdapter, d as Message } from './types-waEqyE4K.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Tool types for App Context Awareness
|
|
@@ -725,6 +725,8 @@ interface CreateThreadOptions {
|
|
|
725
725
|
title?: string;
|
|
726
726
|
/** Initial messages */
|
|
727
727
|
messages?: Message[];
|
|
728
|
+
/** Active leaf message ID — preserves branch selection across reloads */
|
|
729
|
+
activeLeafId?: string;
|
|
728
730
|
}
|
|
729
731
|
/**
|
|
730
732
|
* Options for updating a thread
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as Thread, b as ThreadData, c as ThreadStorageAdapter, A as AsyncThreadStorageAdapter, d as Message } from './types-
|
|
1
|
+
import { a as Thread, b as ThreadData, c as ThreadStorageAdapter, A as AsyncThreadStorageAdapter, d as Message } from './types-waEqyE4K.cjs';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Tool types for App Context Awareness
|
|
@@ -725,6 +725,8 @@ interface CreateThreadOptions {
|
|
|
725
725
|
title?: string;
|
|
726
726
|
/** Initial messages */
|
|
727
727
|
messages?: Message[];
|
|
728
|
+
/** Active leaf message ID — preserves branch selection across reloads */
|
|
729
|
+
activeLeafId?: string;
|
|
728
730
|
}
|
|
729
731
|
/**
|
|
730
732
|
* Options for updating a thread
|
|
@@ -95,5 +95,5 @@ exports.formatSearchResultsForAI = formatSearchResultsForAI;
|
|
|
95
95
|
exports.getAvailableProviders = getAvailableProviders;
|
|
96
96
|
exports.getProvider = getProvider;
|
|
97
97
|
exports.summarizeSearchResults = summarizeSearchResults;
|
|
98
|
-
//# sourceMappingURL=chunk-
|
|
99
|
-
//# sourceMappingURL=chunk-
|
|
98
|
+
//# sourceMappingURL=chunk-3ZDRX7J2.cjs.map
|
|
99
|
+
//# sourceMappingURL=chunk-3ZDRX7J2.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/tools/webSearch/index.ts"],"names":[],"mappings":";;;AAwCA,IAAM,eAAA,GAKF;AAAA,EACF,MAAA,EAAQ,MAAM,OAAO,uBAAoB,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,cAAc,CAAA;AAAA,EACvE,MAAA,EAAQ,MAAM,OAAO,uBAAoB,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,cAAc,CAAA;AAAA,EACvE,SAAA,EAAW,MACT,OAAO,0BAAuB,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,iBAAiB,CAAA;AAAA,EACjE,MAAA,EAAQ,MAAM,OAAO,uBAAoB,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,cAAc,CAAA;AAAA,EACvE,MAAA,EAAQ,MAAM,OAAO,uBAAoB,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,cAAc,CAAA;AAAA,EACvE,KAAA,EAAO,MAAM,OAAO,sBAAmB,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,CAAA;AAAA,EACpE,OAAA,EAAS,MAAM,OAAO,wBAAqB,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,eAAe,CAAA;AAAA,EAC1E,GAAA,EAAK,MAAM,OAAO,oBAAiB,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW;AAChE,CAAA;AAGA,IAAM,eAAA,uBACA,GAAA,EAAI;AAQV,eAAsB,YACpB,IAAA,EACqC;AAErC,EAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,GAAA,CAAI,IAAI,CAAA;AACvC,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,OAAO,MAAA;AAAA,EACT;AAGA,EAAA,MAAM,MAAA,GAAS,gBAAgB,IAAI,CAAA;AACnC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,yBAAA,EAA4B,IAAI,CAAA,uBAAA,EACN,MAAA,CAAO,KAAK,eAAe,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KACnE;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,EAAO;AAC9B,EAAA,MAAM,gBAAA,GAAmB,SAAA,IAAa,QAAA,GAAW,QAAA,CAAS,OAAA,GAAU,QAAA;AAGpE,EAAA,eAAA,CAAgB,GAAA,CAAI,MAAM,gBAA8C,CAAA;AAExE,EAAA,OAAO,gBAAA;AACT;AAKO,SAAS,qBAAA,GAA6C;AAC3D,EAAA,OAAO,MAAA,CAAO,KAAK,eAAe,CAAA;AACpC;AAwBA,SAAS,oBACP,QAAA,EACwC;AACxC,EAAA,OAAO,OAAO,QAAA,KAAa,QAAA,IAAY,QAAA,IAAY,QAAA;AACrD;AAmCA,eAAsB,gBAAA,CACpB,QACA,MAAA,EAC4B;AAE5B,EAAA,MAAM,QAAA,GAAW,mBAAA,CAAoB,MAAA,CAAO,QAAQ,CAAA,GAChD,OAAO,QAAA,GACP,MAAM,WAAA,CAAY,MAAA,CAAO,QAAQ,CAAA;AAGrC,EAAA,MAAM,eAAkC,mBAAA,CAAoB,MAAA,CAAO,QAAQ,CAAA,GACtE,WACD,MAAA,CAAO,QAAA;AAEX,EAAA,MAAM,cAAA,GAAkC;AAAA,IACtC,GAAG,MAAA;AAAA,IACH,QAAA,EAAU;AAAA,GACZ;AAGA,EAAA,IAAI,SAAS,cAAA,EAAgB;AAC3B,IAAA,QAAA,CAAS,eAAe,cAAc,CAAA;AAAA,EACxC;AAGA,EAAA,OAAO,QAAA,CAAS,MAAA,CAAO,MAAA,EAAQ,cAAc,CAAA;AAC/C;AAaO,SAAS,wBAAA,CACd,UACA,OAAA,EAKQ;AACR,EAAA,MAAM;AAAA,IACJ,WAAA,GAAc,IAAA;AAAA,IACd,aAAA,GAAgB,KAAA;AAAA,IAChB,gBAAA,GAAmB;AAAA,GACrB,GAAI,WAAW,EAAC;AAEhB,EAAA,MAAM,QAAkB,EAAC;AAGzB,EAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,QAAA,EAAW,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AACvC,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAGA,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,oBAAA,EAAuB,QAAA,CAAS,KAAK,CAAA,EAAA,CAAI,CAAA;AACpD,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAEb,EAAA,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,CAAC,MAAA,EAAQ,KAAA,KAAU;AAC1C,IAAA,MAAM,MAAM,KAAA,GAAQ,CAAA;AACpB,IAAA,IAAI,UAAU,MAAA,CAAO,OAAA;AAGrB,IAAA,IAAI,gBAAA,IAAoB,OAAA,CAAQ,MAAA,GAAS,gBAAA,EAAkB;AACzD,MAAA,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,gBAAgB,CAAA,GAAI,KAAA;AAAA,IACjD;AAEA,IAAA,KAAA,CAAM,KAAK,CAAA,EAAG,GAAG,CAAA,EAAA,EAAK,MAAA,CAAO,KAAK,CAAA,CAAE,CAAA;AACpC,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,QAAA,EAAW,MAAA,CAAO,GAAG,CAAA,CAAE,CAAA;AAAA,IACpC;AACA,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,GAAA,EAAM,OAAO,CAAA,CAAE,CAAA;AAC1B,IAAA,IAAI,aAAA,IAAiB,MAAA,CAAO,KAAA,KAAU,MAAA,EAAW;AAC/C,MAAA,KAAA,CAAM,IAAA,CAAK,kBAAkB,MAAA,CAAO,KAAA,GAAQ,KAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,IAChE;AACA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf,CAAC,CAAA;AAED,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAQO,SAAS,uBAAuB,QAAA,EAAqC;AAC1E,EAAA,MAAM,KAAA,GAAQ,SAAS,OAAA,CAAQ,MAAA;AAC/B,EAAA,MAAM,OAAA,GAAU,SAAS,OAAA,CACtB,KAAA,CAAM,GAAG,CAAC,CAAA,CACV,IAAI,CAAC,CAAA,KAAM,EAAE,MAAA,IAAU,IAAI,IAAI,CAAA,CAAE,GAAG,EAAE,QAAQ,CAAA,CAC9C,KAAK,IAAI,CAAA;AAEZ,EAAA,IAAI,UAAU,CAAA,MAAA,EAAS,KAAK,UAAU,KAAA,KAAU,CAAA,GAAI,MAAM,EAAE,CAAA,CAAA;AAC5D,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,OAAA,IAAW,SAAS,OAAO,CAAA,CAAA;AAAA,EAC7B;AACA,EAAA,IAAI,SAAS,UAAA,EAAY;AACvB,IAAA,OAAA,IAAW,CAAA,EAAA,EAAK,SAAS,UAAU,CAAA,GAAA,CAAA;AAAA,EACrC;AAEA,EAAA,OAAO,OAAA;AACT","file":"chunk-NUXLAZOE.cjs","sourcesContent":["/**\n * Web Search Module\n *\n * Multi-provider web search with unified API.\n * Supports tree-shaking - only the provider you use gets bundled.\n *\n * @example\n * ```typescript\n * // Option 1: Lazy loading (provider loaded on first use)\n * import { executeWebSearch } from './webSearch';\n * const results = await executeWebSearch(\n * { query: 'latest AI news' },\n * { provider: 'tavily', apiKey: 'your-api-key' }\n * );\n *\n * // Option 2: Direct import (best for tree-shaking)\n * import { tavilyProvider, executeWebSearch } from './webSearch';\n * const results = await executeWebSearch(\n * { query: 'latest AI news' },\n * { provider: tavilyProvider, apiKey: 'your-api-key' }\n * );\n * ```\n */\n\nimport type {\n WebSearchConfig,\n WebSearchParams,\n WebSearchResponse,\n WebSearchProvider,\n WebSearchProviderInterface,\n} from \"./types\";\n\n// ============================================\n// Lazy Provider Loading (for tree-shaking)\n// ============================================\n\n/**\n * Provider loaders - dynamically import providers only when needed.\n * This ensures unused providers are NOT included in the bundle.\n */\nconst providerLoaders: Record<\n WebSearchProvider,\n () => Promise<\n { default: WebSearchProviderInterface } | WebSearchProviderInterface\n >\n> = {\n openai: () => import(\"./providers/openai\").then((m) => m.openaiProvider),\n google: () => import(\"./providers/google\").then((m) => m.googleProvider),\n anthropic: () =>\n import(\"./providers/anthropic\").then((m) => m.anthropicProvider),\n tavily: () => import(\"./providers/tavily\").then((m) => m.tavilyProvider),\n serper: () => import(\"./providers/serper\").then((m) => m.serperProvider),\n brave: () => import(\"./providers/brave\").then((m) => m.braveProvider),\n searxng: () => import(\"./providers/searxng\").then((m) => m.searxngProvider),\n exa: () => import(\"./providers/exa\").then((m) => m.exaProvider),\n};\n\n// Cache for loaded providers\nconst loadedProviders: Map<WebSearchProvider, WebSearchProviderInterface> =\n new Map();\n\n/**\n * Get a provider by name (lazy loading)\n *\n * @param name - Provider name string\n * @returns Provider interface (loaded dynamically)\n */\nexport async function getProvider(\n name: WebSearchProvider,\n): Promise<WebSearchProviderInterface> {\n // Check cache first\n const cached = loadedProviders.get(name);\n if (cached) {\n return cached;\n }\n\n // Load provider dynamically\n const loader = providerLoaders[name];\n if (!loader) {\n throw new Error(\n `Unknown search provider: ${name}. ` +\n `Available providers: ${Object.keys(providerLoaders).join(\", \")}`,\n );\n }\n\n const provider = await loader();\n const resolvedProvider = \"default\" in provider ? provider.default : provider;\n\n // Cache for future use\n loadedProviders.set(name, resolvedProvider as WebSearchProviderInterface);\n\n return resolvedProvider as WebSearchProviderInterface;\n}\n\n/**\n * Get all available provider names\n */\nexport function getAvailableProviders(): WebSearchProvider[] {\n return Object.keys(providerLoaders) as WebSearchProvider[];\n}\n\n// ============================================\n// Extended Config with Direct Provider Support\n// ============================================\n\n/**\n * Extended config that allows passing provider directly for tree-shaking\n */\nexport interface WebSearchConfigExtended extends Omit<\n WebSearchConfig,\n \"provider\"\n> {\n /**\n * Provider can be either:\n * - A string name (lazy loaded): \"tavily\", \"openai\", \"anthropic\", \"google\", etc.\n * - A provider instance (best for tree-shaking): import { tavilyProvider } from '...'\n */\n provider: WebSearchProvider | WebSearchProviderInterface;\n}\n\n/**\n * Check if a value is a provider interface (not a string)\n */\nfunction isProviderInterface(\n provider: WebSearchProvider | WebSearchProviderInterface,\n): provider is WebSearchProviderInterface {\n return typeof provider === \"object\" && \"search\" in provider;\n}\n\n// ============================================\n// Execute Search\n// ============================================\n\n/**\n * Execute a web search using the configured provider\n *\n * @param params - Search parameters (query, maxResults, searchDepth)\n * @param config - Provider configuration (provider, apiKey, options)\n * @returns Search results with optional AI-generated answer\n *\n * @example\n * ```typescript\n * // Option 1: String provider name (lazy loaded)\n * const results = await executeWebSearch(\n * { query: 'What is the latest news about SpaceX?' },\n * {\n * provider: 'tavily',\n * apiKey: process.env.TAVILY_API_KEY,\n * }\n * );\n *\n * // Option 2: Direct provider import (best for tree-shaking)\n * import { tavilyProvider } from '@yourgpt/copilot-sdk/core';\n * const results = await executeWebSearch(\n * { query: 'What is the latest news about SpaceX?' },\n * {\n * provider: tavilyProvider,\n * apiKey: process.env.TAVILY_API_KEY,\n * }\n * );\n * ```\n */\nexport async function executeWebSearch(\n params: WebSearchParams,\n config: WebSearchConfigExtended,\n): Promise<WebSearchResponse> {\n // Resolve provider (either from string or direct reference)\n const provider = isProviderInterface(config.provider)\n ? config.provider\n : await getProvider(config.provider);\n\n // Build config with string provider name for validation\n const providerName: WebSearchProvider = isProviderInterface(config.provider)\n ? (\"custom\" as WebSearchProvider) // Direct provider\n : config.provider;\n\n const resolvedConfig: WebSearchConfig = {\n ...config,\n provider: providerName,\n };\n\n // Validate configuration if provider supports it\n if (provider.validateConfig) {\n provider.validateConfig(resolvedConfig);\n }\n\n // Execute search\n return provider.search(params, resolvedConfig);\n}\n\n// ============================================\n// Utility Functions\n// ============================================\n\n/**\n * Format search results for display in AI context\n *\n * @param response - Web search response\n * @param options - Formatting options\n * @returns Formatted string for AI consumption\n */\nexport function formatSearchResultsForAI(\n response: WebSearchResponse,\n options?: {\n includeUrls?: boolean;\n includeScores?: boolean;\n maxContentLength?: number;\n },\n): string {\n const {\n includeUrls = true,\n includeScores = false,\n maxContentLength = 200,\n } = options || {};\n\n const lines: string[] = [];\n\n // Add answer if available\n if (response.answer) {\n lines.push(`Answer: ${response.answer}`);\n lines.push(\"\");\n }\n\n // Add results\n lines.push(`Search results for \"${response.query}\":`);\n lines.push(\"\");\n\n response.results.forEach((result, index) => {\n const num = index + 1;\n let content = result.content;\n\n // Truncate content if needed\n if (maxContentLength && content.length > maxContentLength) {\n content = content.slice(0, maxContentLength) + \"...\";\n }\n\n lines.push(`${num}. ${result.title}`);\n if (includeUrls) {\n lines.push(` URL: ${result.url}`);\n }\n lines.push(` ${content}`);\n if (includeScores && result.score !== undefined) {\n lines.push(` Relevance: ${(result.score * 100).toFixed(1)}%`);\n }\n lines.push(\"\");\n });\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Create a minimal search result summary\n *\n * @param response - Web search response\n * @returns Brief summary string\n */\nexport function summarizeSearchResults(response: WebSearchResponse): string {\n const count = response.results.length;\n const sources = response.results\n .slice(0, 3)\n .map((r) => r.domain || new URL(r.url).hostname)\n .join(\", \");\n\n let summary = `Found ${count} result${count !== 1 ? \"s\" : \"\"}`;\n if (sources) {\n summary += ` from ${sources}`;\n }\n if (response.searchTime) {\n summary += ` (${response.searchTime}ms)`;\n }\n\n return summary;\n}\n\n// ============================================\n// Re-exports\n// ============================================\n\n// Export types\nexport * from \"./types\";\n\n// Export individual providers for direct import (tree-shakeable)\n// Users should import these directly for best bundle size:\n// import { tavilyProvider } from '@yourgpt/copilot-sdk/core';\nexport { openaiProvider } from \"./providers/openai\";\nexport { googleProvider } from \"./providers/google\";\nexport { anthropicProvider } from \"./providers/anthropic\";\nexport { tavilyProvider } from \"./providers/tavily\";\nexport { serperProvider } from \"./providers/serper\";\nexport { braveProvider } from \"./providers/brave\";\nexport { searxngProvider } from \"./providers/searxng\";\nexport { exaProvider } from \"./providers/exa\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/tools/webSearch/index.ts"],"names":[],"mappings":"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","file":"chunk-3ZDRX7J2.cjs","sourcesContent":["/**\n * Web Search Module\n *\n * Multi-provider web search with unified API.\n * Supports tree-shaking - only the provider you use gets bundled.\n *\n * @example\n * ```typescript\n * // Option 1: Lazy loading (provider loaded on first use)\n * import { executeWebSearch } from './webSearch';\n * const results = await executeWebSearch(\n * { query: 'latest AI news' },\n * { provider: 'tavily', apiKey: 'your-api-key' }\n * );\n *\n * // Option 2: Direct import (best for tree-shaking)\n * import { tavilyProvider, executeWebSearch } from './webSearch';\n * const results = await executeWebSearch(\n * { query: 'latest AI news' },\n * { provider: tavilyProvider, apiKey: 'your-api-key' }\n * );\n * ```\n */\n\nimport type {\n WebSearchConfig,\n WebSearchParams,\n WebSearchResponse,\n WebSearchProvider,\n WebSearchProviderInterface,\n} from \"./types\";\n\n// ============================================\n// Lazy Provider Loading (for tree-shaking)\n// ============================================\n\n/**\n * Provider loaders - dynamically import providers only when needed.\n * This ensures unused providers are NOT included in the bundle.\n */\nconst providerLoaders: Record<\n WebSearchProvider,\n () => Promise<\n { default: WebSearchProviderInterface } | WebSearchProviderInterface\n >\n> = {\n openai: () => import(\"./providers/openai\").then((m) => m.openaiProvider),\n google: () => import(\"./providers/google\").then((m) => m.googleProvider),\n anthropic: () =>\n import(\"./providers/anthropic\").then((m) => m.anthropicProvider),\n tavily: () => import(\"./providers/tavily\").then((m) => m.tavilyProvider),\n serper: () => import(\"./providers/serper\").then((m) => m.serperProvider),\n brave: () => import(\"./providers/brave\").then((m) => m.braveProvider),\n searxng: () => import(\"./providers/searxng\").then((m) => m.searxngProvider),\n exa: () => import(\"./providers/exa\").then((m) => m.exaProvider),\n};\n\n// Cache for loaded providers\nconst loadedProviders: Map<WebSearchProvider, WebSearchProviderInterface> =\n new Map();\n\n/**\n * Get a provider by name (lazy loading)\n *\n * @param name - Provider name string\n * @returns Provider interface (loaded dynamically)\n */\nexport async function getProvider(\n name: WebSearchProvider,\n): Promise<WebSearchProviderInterface> {\n // Check cache first\n const cached = loadedProviders.get(name);\n if (cached) {\n return cached;\n }\n\n // Load provider dynamically\n const loader = providerLoaders[name];\n if (!loader) {\n throw new Error(\n `Unknown search provider: ${name}. ` +\n `Available providers: ${Object.keys(providerLoaders).join(\", \")}`,\n );\n }\n\n const provider = await loader();\n const resolvedProvider = \"default\" in provider ? provider.default : provider;\n\n // Cache for future use\n loadedProviders.set(name, resolvedProvider as WebSearchProviderInterface);\n\n return resolvedProvider as WebSearchProviderInterface;\n}\n\n/**\n * Get all available provider names\n */\nexport function getAvailableProviders(): WebSearchProvider[] {\n return Object.keys(providerLoaders) as WebSearchProvider[];\n}\n\n// ============================================\n// Extended Config with Direct Provider Support\n// ============================================\n\n/**\n * Extended config that allows passing provider directly for tree-shaking\n */\nexport interface WebSearchConfigExtended extends Omit<\n WebSearchConfig,\n \"provider\"\n> {\n /**\n * Provider can be either:\n * - A string name (lazy loaded): \"tavily\", \"openai\", \"anthropic\", \"google\", etc.\n * - A provider instance (best for tree-shaking): import { tavilyProvider } from '...'\n */\n provider: WebSearchProvider | WebSearchProviderInterface;\n}\n\n/**\n * Check if a value is a provider interface (not a string)\n */\nfunction isProviderInterface(\n provider: WebSearchProvider | WebSearchProviderInterface,\n): provider is WebSearchProviderInterface {\n return typeof provider === \"object\" && \"search\" in provider;\n}\n\n// ============================================\n// Execute Search\n// ============================================\n\n/**\n * Execute a web search using the configured provider\n *\n * @param params - Search parameters (query, maxResults, searchDepth)\n * @param config - Provider configuration (provider, apiKey, options)\n * @returns Search results with optional AI-generated answer\n *\n * @example\n * ```typescript\n * // Option 1: String provider name (lazy loaded)\n * const results = await executeWebSearch(\n * { query: 'What is the latest news about SpaceX?' },\n * {\n * provider: 'tavily',\n * apiKey: process.env.TAVILY_API_KEY,\n * }\n * );\n *\n * // Option 2: Direct provider import (best for tree-shaking)\n * import { tavilyProvider } from '@yourgpt/copilot-sdk/core';\n * const results = await executeWebSearch(\n * { query: 'What is the latest news about SpaceX?' },\n * {\n * provider: tavilyProvider,\n * apiKey: process.env.TAVILY_API_KEY,\n * }\n * );\n * ```\n */\nexport async function executeWebSearch(\n params: WebSearchParams,\n config: WebSearchConfigExtended,\n): Promise<WebSearchResponse> {\n // Resolve provider (either from string or direct reference)\n const provider = isProviderInterface(config.provider)\n ? config.provider\n : await getProvider(config.provider);\n\n // Build config with string provider name for validation\n const providerName: WebSearchProvider = isProviderInterface(config.provider)\n ? (\"custom\" as WebSearchProvider) // Direct provider\n : config.provider;\n\n const resolvedConfig: WebSearchConfig = {\n ...config,\n provider: providerName,\n };\n\n // Validate configuration if provider supports it\n if (provider.validateConfig) {\n provider.validateConfig(resolvedConfig);\n }\n\n // Execute search\n return provider.search(params, resolvedConfig);\n}\n\n// ============================================\n// Utility Functions\n// ============================================\n\n/**\n * Format search results for display in AI context\n *\n * @param response - Web search response\n * @param options - Formatting options\n * @returns Formatted string for AI consumption\n */\nexport function formatSearchResultsForAI(\n response: WebSearchResponse,\n options?: {\n includeUrls?: boolean;\n includeScores?: boolean;\n maxContentLength?: number;\n },\n): string {\n const {\n includeUrls = true,\n includeScores = false,\n maxContentLength = 200,\n } = options || {};\n\n const lines: string[] = [];\n\n // Add answer if available\n if (response.answer) {\n lines.push(`Answer: ${response.answer}`);\n lines.push(\"\");\n }\n\n // Add results\n lines.push(`Search results for \"${response.query}\":`);\n lines.push(\"\");\n\n response.results.forEach((result, index) => {\n const num = index + 1;\n let content = result.content;\n\n // Truncate content if needed\n if (maxContentLength && content.length > maxContentLength) {\n content = content.slice(0, maxContentLength) + \"...\";\n }\n\n lines.push(`${num}. ${result.title}`);\n if (includeUrls) {\n lines.push(` URL: ${result.url}`);\n }\n lines.push(` ${content}`);\n if (includeScores && result.score !== undefined) {\n lines.push(` Relevance: ${(result.score * 100).toFixed(1)}%`);\n }\n lines.push(\"\");\n });\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Create a minimal search result summary\n *\n * @param response - Web search response\n * @returns Brief summary string\n */\nexport function summarizeSearchResults(response: WebSearchResponse): string {\n const count = response.results.length;\n const sources = response.results\n .slice(0, 3)\n .map((r) => r.domain || new URL(r.url).hostname)\n .join(\", \");\n\n let summary = `Found ${count} result${count !== 1 ? \"s\" : \"\"}`;\n if (sources) {\n summary += ` from ${sources}`;\n }\n if (response.searchTime) {\n summary += ` (${response.searchTime}ms)`;\n }\n\n return summary;\n}\n\n// ============================================\n// Re-exports\n// ============================================\n\n// Export types\nexport * from \"./types\";\n\n// Export individual providers for direct import (tree-shakeable)\n// Users should import these directly for best bundle size:\n// import { tavilyProvider } from '@yourgpt/copilot-sdk/core';\nexport { openaiProvider } from \"./providers/openai\";\nexport { googleProvider } from \"./providers/google\";\nexport { anthropicProvider } from \"./providers/anthropic\";\nexport { tavilyProvider } from \"./providers/tavily\";\nexport { serperProvider } from \"./providers/serper\";\nexport { braveProvider } from \"./providers/brave\";\nexport { searxngProvider } from \"./providers/searxng\";\nexport { exaProvider } from \"./providers/exa\";\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { tool, failure } from './chunk-
|
|
2
|
-
import { formatSearchResultsForAI, executeWebSearch, summarizeSearchResults } from './chunk-
|
|
1
|
+
import { tool, failure } from './chunk-AIVXGTWS.js';
|
|
2
|
+
import { formatSearchResultsForAI, executeWebSearch, summarizeSearchResults } from './chunk-DDZLRCVX.js';
|
|
3
3
|
|
|
4
4
|
// src/core/tools/builtin/webSearch.ts
|
|
5
5
|
var webSearchTool = tool({
|
|
@@ -75,5 +75,5 @@ function createWebSearchTool(config) {
|
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
export { createWebSearchTool, webSearchTool };
|
|
78
|
-
//# sourceMappingURL=chunk-
|
|
79
|
-
//# sourceMappingURL=chunk-
|
|
78
|
+
//# sourceMappingURL=chunk-533K2Z7C.js.map
|
|
79
|
+
//# sourceMappingURL=chunk-533K2Z7C.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/tools/builtin/webSearch.ts"],"names":[],"mappings":";;;;AAoDO,IAAM,gBAAgB,IAAA,CAAsB;AAAA,EACjD,WAAA,EAAa,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qDAAA,CAAA;AAAA,EAOb,QAAA,EAAU,QAAA;AAAA;AAAA,EAEV,KAAA,EAAO,CAAC,IAAA,KAAS,CAAA,eAAA,EAAkB,KAAK,KAAK,CAAA,CAAA,CAAA;AAAA,EAC7C,cAAA,EAAgB,CAAC,IAAA,KAAS,CAAA,uBAAA,EAA0B,KAAK,KAAK,CAAA,IAAA,CAAA;AAAA,EAC9D,cAAA,EAAgB,CAAC,IAAA,KAAS,CAAA,mBAAA,EAAsB,KAAK,KAAK,CAAA,CAAA,CAAA;AAAA,EAE1D,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACV,KAAA,EAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACf;AAAA,MACA,UAAA,EAAY;AAAA,QACV,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EACE,2DAAA;AAAA,QACF,OAAA,EAAS,CAAA;AAAA,QACT,OAAA,EAAS;AAAA,OACX;AAAA,MACA,WAAA,EAAa;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,IAAA,EAAM,CAAC,OAAA,EAAS,UAAU,CAAA;AAAA,QAC1B,WAAA,EACE;AAAA;AACJ,KACF;AAAA,IACA,QAAA,EAAU,CAAC,OAAO;AAAA,GACpB;AAAA,EAEA,aAAA,EAAe,KAAA;AAAA;AAAA;AAAA,EAGf,cAAA,EAAgB,MAAA;AAAA,EAChB,SAAA,EAAW,CAAC,MAAA,EAAQ,IAAA,KAAS;AAC3B,IAAA,IAAI,CAAC,MAAA,CAAO,OAAA,EAAS,OAAO,CAAA,eAAA,EAAkB,OAAO,KAAK,CAAA,CAAA;AAC1D,IAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AACpB,IAAA,OAAO,yBAAyB,IAAI,CAAA;AAAA,EACtC;AACF,CAAC;AAoEM,SAAS,oBACd,MAAA,EACiC;AACjC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,YAAA;AAAA,IACN,GAAG,aAAA;AAAA,IACH,OAAA,EAAS,OAAO,MAAA,KAA4B;AAC1C,MAAA,IAAI;AACF,QAAA,MAAM,WAAW,MAAM,gBAAA;AAAA,UACrB;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,SACF;AAGA,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":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/core/tools/builtin/webSearch.ts"],"names":[],"mappings":";;;;AAoDO,IAAM,gBAAgB,IAAA,CAAsB;AAAA,EACjD,WAAA,EAAa,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qDAAA,CAAA;AAAA,EAOb,QAAA,EAAU,QAAA;AAAA;AAAA,EAEV,KAAA,EAAO,CAAC,IAAA,KAAS,CAAA,eAAA,EAAkB,KAAK,KAAK,CAAA,CAAA,CAAA;AAAA,EAC7C,cAAA,EAAgB,CAAC,IAAA,KAAS,CAAA,uBAAA,EAA0B,KAAK,KAAK,CAAA,IAAA,CAAA;AAAA,EAC9D,cAAA,EAAgB,CAAC,IAAA,KAAS,CAAA,mBAAA,EAAsB,KAAK,KAAK,CAAA,CAAA,CAAA;AAAA,EAE1D,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACV,KAAA,EAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACf;AAAA,MACA,UAAA,EAAY;AAAA,QACV,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EACE,2DAAA;AAAA,QACF,OAAA,EAAS,CAAA;AAAA,QACT,OAAA,EAAS;AAAA,OACX;AAAA,MACA,WAAA,EAAa;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,IAAA,EAAM,CAAC,OAAA,EAAS,UAAU,CAAA;AAAA,QAC1B,WAAA,EACE;AAAA;AACJ,KACF;AAAA,IACA,QAAA,EAAU,CAAC,OAAO;AAAA,GACpB;AAAA,EAEA,aAAA,EAAe,KAAA;AAAA;AAAA;AAAA,EAGf,cAAA,EAAgB,MAAA;AAAA,EAChB,SAAA,EAAW,CAAC,MAAA,EAAQ,IAAA,KAAS;AAC3B,IAAA,IAAI,CAAC,MAAA,CAAO,OAAA,EAAS,OAAO,CAAA,eAAA,EAAkB,OAAO,KAAK,CAAA,CAAA;AAC1D,IAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AACpB,IAAA,OAAO,yBAAyB,IAAI,CAAA;AAAA,EACtC;AACF,CAAC;AAoEM,SAAS,oBACd,MAAA,EACiC;AACjC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,YAAA;AAAA,IACN,GAAG,aAAA;AAAA,IACH,OAAA,EAAS,OAAO,MAAA,KAA4B;AAC1C,MAAA,IAAI;AACF,QAAA,MAAM,WAAW,MAAM,gBAAA;AAAA,UACrB;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,SACF;AAGA,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":"chunk-533K2Z7C.js","sourcesContent":["/**\n * Built-in Web Search Tool\n *\n * A pre-configured tool for searching the web with multiple provider support.\n * Runs on the server to protect API keys.\n *\n * Supports tree-shaking - import providers directly for smaller bundles.\n *\n * @example\n * ```typescript\n * // Option 1: String provider (lazy loaded at runtime)\n * import { createWebSearchTool } from '@yourgpt/copilot-sdk';\n * const webSearch = createWebSearchTool({\n * provider: 'tavily',\n * apiKey: process.env.TAVILY_API_KEY,\n * });\n *\n * // Option 2: Direct provider import (best for tree-shaking)\n * import { createWebSearchTool, tavilyProvider } from '@yourgpt/copilot-sdk';\n * const webSearch = createWebSearchTool({\n * provider: tavilyProvider,\n * apiKey: process.env.TAVILY_API_KEY,\n * });\n *\n * // Add to your runtime\n * const runtime = createRuntime({\n * tools: [webSearch],\n * });\n * ```\n */\n\nimport { tool, success, failure } from \"../../types/tools\";\nimport type { ToolDefinition } from \"../../types/tools\";\nimport {\n executeWebSearch,\n formatSearchResultsForAI,\n summarizeSearchResults,\n type WebSearchConfigExtended,\n} from \"../webSearch\";\nimport type {\n WebSearchConfig,\n WebSearchParams,\n WebSearchResponse,\n WebSearchProviderInterface,\n} from \"../webSearch/types\";\n\n/**\n * Base web search tool definition\n *\n * This is the core tool definition. Use `createWebSearchTool()` to create\n * a configured instance with your provider settings.\n */\nexport const webSearchTool = tool<WebSearchParams>({\n description: `Search the web 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\", // Runs on server to protect API keys\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' provides more thorough results but may be slower\",\n },\n },\n required: [\"query\"],\n },\n\n needsApproval: false, // No user data exposed, just searching\n\n // Control what AI sees from results\n aiResponseMode: \"full\",\n aiContext: (result, args) => {\n if (!result.success) return `Search failed: ${result.error}`;\n const data = result.data as WebSearchResponse;\n return formatSearchResultsForAI(data);\n },\n});\n\n/**\n * Create a configured web search tool\n *\n * Supports both string provider names (lazy loaded) and direct provider imports (tree-shakeable).\n *\n * @param config - Web search configuration including provider and API key\n * @returns A configured tool definition ready to use\n *\n * @example\n * ```typescript\n * // ===== BEST FOR TREE-SHAKING: Direct provider import =====\n * import { createWebSearchTool, openaiProvider } from '@yourgpt/copilot-sdk/core';\n *\n * const webSearch = createWebSearchTool({\n * provider: openaiProvider, // Only this provider in bundle\n * apiKey: process.env.OPENAI_API_KEY,\n * });\n *\n * // ===== STRING PROVIDERS (Lazy loaded at runtime) =====\n *\n * // OpenAI (uses your OpenAI API key)\n * const webSearch = createWebSearchTool({\n * provider: 'openai',\n * apiKey: process.env.OPENAI_API_KEY,\n * });\n *\n * // Google (uses your Google/Gemini API key)\n * const webSearch = createWebSearchTool({\n * provider: 'google',\n * apiKey: process.env.GOOGLE_API_KEY,\n * });\n *\n * // Tavily (AI-optimized search with answer generation)\n * const webSearch = createWebSearchTool({\n * provider: 'tavily',\n * apiKey: process.env.TAVILY_API_KEY,\n * includeAnswer: true,\n * maxResults: 5,\n * });\n *\n * // Serper (Google results)\n * const webSearch = createWebSearchTool({\n * provider: 'serper',\n * apiKey: process.env.SERPER_API_KEY,\n * });\n *\n * // Brave Search (privacy-focused)\n * const webSearch = createWebSearchTool({\n * provider: 'brave',\n * apiKey: process.env.BRAVE_API_KEY,\n * });\n *\n * // Self-hosted SearXNG (no API key needed)\n * const webSearch = createWebSearchTool({\n * provider: 'searxng',\n * baseUrl: 'https://your-searxng-instance.com',\n * });\n *\n * // Exa (AI-optimized semantic search)\n * const webSearch = createWebSearchTool({\n * provider: 'exa',\n * apiKey: process.env.EXA_API_KEY,\n * searchDepth: 'advanced',\n * });\n * ```\n */\nexport function createWebSearchTool(\n config: WebSearchConfigExtended,\n): ToolDefinition<WebSearchParams> {\n return {\n name: \"web_search\",\n ...webSearchTool,\n handler: async (params: WebSearchParams) => {\n try {\n const response = await executeWebSearch(\n {\n query: params.query,\n maxResults: params.maxResults ?? config.maxResults ?? 5,\n searchDepth: params.searchDepth ?? config.searchDepth ?? \"basic\",\n },\n config,\n );\n\n // Build the AI context string\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\n/**\n * Utility types for web search tool configuration\n */\nexport type {\n WebSearchConfig,\n WebSearchParams,\n WebSearchResponse,\n WebSearchProviderInterface,\n};\nexport type { WebSearchConfigExtended };\n"]}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var clsx = require('clsx');
|
|
4
|
+
var tailwindMerge = require('tailwind-merge');
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
|
|
7
|
+
// src/ui/lib/utils.ts
|
|
8
|
+
function cn(...inputs) {
|
|
9
|
+
return tailwindMerge.twMerge(clsx.clsx(inputs));
|
|
10
|
+
}
|
|
11
|
+
function DotsLoader({
|
|
12
|
+
className,
|
|
13
|
+
size = "md"
|
|
14
|
+
}) {
|
|
15
|
+
const dotSizes = {
|
|
16
|
+
sm: "h-1 w-1",
|
|
17
|
+
md: "h-1.5 w-1.5",
|
|
18
|
+
lg: "h-2 w-2"
|
|
19
|
+
};
|
|
20
|
+
const containerSizes = {
|
|
21
|
+
sm: "h-4",
|
|
22
|
+
md: "h-5",
|
|
23
|
+
lg: "h-6"
|
|
24
|
+
};
|
|
25
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
26
|
+
"div",
|
|
27
|
+
{
|
|
28
|
+
className: cn(
|
|
29
|
+
"flex items-center translate-y-[-2px] space-x-1",
|
|
30
|
+
containerSizes[size],
|
|
31
|
+
className
|
|
32
|
+
),
|
|
33
|
+
children: [
|
|
34
|
+
[...Array(3)].map((_, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
35
|
+
"div",
|
|
36
|
+
{
|
|
37
|
+
className: cn(
|
|
38
|
+
"bg-primary csdk-loader-bounce-dots rounded-full",
|
|
39
|
+
dotSizes[size]
|
|
40
|
+
),
|
|
41
|
+
style: {
|
|
42
|
+
animationDelay: `${i * 160}ms`
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
i
|
|
46
|
+
)),
|
|
47
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Loading" })
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
function TypingLoader({
|
|
53
|
+
className,
|
|
54
|
+
size = "md"
|
|
55
|
+
}) {
|
|
56
|
+
const dotSizes = {
|
|
57
|
+
sm: "h-1 w-1",
|
|
58
|
+
md: "h-1.5 w-1.5",
|
|
59
|
+
lg: "h-2 w-2"
|
|
60
|
+
};
|
|
61
|
+
const containerSizes = {
|
|
62
|
+
sm: "h-4",
|
|
63
|
+
md: "h-5",
|
|
64
|
+
lg: "h-6"
|
|
65
|
+
};
|
|
66
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
67
|
+
"div",
|
|
68
|
+
{
|
|
69
|
+
className: cn(
|
|
70
|
+
"flex items-center space-x-1",
|
|
71
|
+
containerSizes[size],
|
|
72
|
+
className
|
|
73
|
+
),
|
|
74
|
+
children: [
|
|
75
|
+
[...Array(3)].map((_, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
76
|
+
"div",
|
|
77
|
+
{
|
|
78
|
+
className: cn(
|
|
79
|
+
"bg-primary csdk-loader-typing rounded-full",
|
|
80
|
+
dotSizes[size]
|
|
81
|
+
),
|
|
82
|
+
style: {
|
|
83
|
+
animationDelay: `${i * 250}ms`
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
i
|
|
87
|
+
)),
|
|
88
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Loading" })
|
|
89
|
+
]
|
|
90
|
+
}
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
function WaveLoader({
|
|
94
|
+
className,
|
|
95
|
+
size = "md"
|
|
96
|
+
}) {
|
|
97
|
+
const barWidths = {
|
|
98
|
+
sm: "w-0.5",
|
|
99
|
+
md: "w-0.5",
|
|
100
|
+
lg: "w-1"
|
|
101
|
+
};
|
|
102
|
+
const containerSizes = {
|
|
103
|
+
sm: "h-4",
|
|
104
|
+
md: "h-5",
|
|
105
|
+
lg: "h-6"
|
|
106
|
+
};
|
|
107
|
+
const heights = {
|
|
108
|
+
sm: ["6px", "9px", "12px", "9px", "6px"],
|
|
109
|
+
md: ["8px", "12px", "16px", "12px", "8px"],
|
|
110
|
+
lg: ["10px", "15px", "20px", "15px", "10px"]
|
|
111
|
+
};
|
|
112
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
113
|
+
"div",
|
|
114
|
+
{
|
|
115
|
+
className: cn(
|
|
116
|
+
"flex items-center gap-0.5",
|
|
117
|
+
containerSizes[size],
|
|
118
|
+
className
|
|
119
|
+
),
|
|
120
|
+
children: [
|
|
121
|
+
[...Array(5)].map((_, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
122
|
+
"div",
|
|
123
|
+
{
|
|
124
|
+
className: cn(
|
|
125
|
+
"bg-primary csdk-loader-wave rounded-full",
|
|
126
|
+
barWidths[size]
|
|
127
|
+
),
|
|
128
|
+
style: {
|
|
129
|
+
animationDelay: `${i * 100}ms`,
|
|
130
|
+
height: heights[size][i]
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
i
|
|
134
|
+
)),
|
|
135
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Loading" })
|
|
136
|
+
]
|
|
137
|
+
}
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
function TerminalLoader({
|
|
141
|
+
className,
|
|
142
|
+
size = "md"
|
|
143
|
+
}) {
|
|
144
|
+
const cursorSizes = {
|
|
145
|
+
sm: "h-3 w-1.5",
|
|
146
|
+
md: "h-4 w-2",
|
|
147
|
+
lg: "h-5 w-2.5"
|
|
148
|
+
};
|
|
149
|
+
const textSizes = {
|
|
150
|
+
sm: "text-xs",
|
|
151
|
+
md: "text-sm",
|
|
152
|
+
lg: "text-base"
|
|
153
|
+
};
|
|
154
|
+
const containerSizes = {
|
|
155
|
+
sm: "h-4",
|
|
156
|
+
md: "h-5",
|
|
157
|
+
lg: "h-6"
|
|
158
|
+
};
|
|
159
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
160
|
+
"div",
|
|
161
|
+
{
|
|
162
|
+
className: cn(
|
|
163
|
+
"flex items-center space-x-1",
|
|
164
|
+
containerSizes[size],
|
|
165
|
+
className
|
|
166
|
+
),
|
|
167
|
+
children: [
|
|
168
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("text-primary font-mono", textSizes[size]), children: ">" }),
|
|
169
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("bg-primary csdk-loader-blink", cursorSizes[size]) }),
|
|
170
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Loading" })
|
|
171
|
+
]
|
|
172
|
+
}
|
|
173
|
+
);
|
|
174
|
+
}
|
|
175
|
+
function TextBlinkLoader({
|
|
176
|
+
text = "Thinking",
|
|
177
|
+
className,
|
|
178
|
+
size = "md"
|
|
179
|
+
}) {
|
|
180
|
+
const textSizes = {
|
|
181
|
+
sm: "text-xs",
|
|
182
|
+
md: "text-sm",
|
|
183
|
+
lg: "text-base"
|
|
184
|
+
};
|
|
185
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
186
|
+
"div",
|
|
187
|
+
{
|
|
188
|
+
className: cn(
|
|
189
|
+
"csdk-loader-text-blink font-medium",
|
|
190
|
+
textSizes[size],
|
|
191
|
+
className
|
|
192
|
+
),
|
|
193
|
+
children: text
|
|
194
|
+
}
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
function TextShimmerLoader({
|
|
198
|
+
text = "Thinking",
|
|
199
|
+
className,
|
|
200
|
+
size = "md"
|
|
201
|
+
}) {
|
|
202
|
+
const textSizes = {
|
|
203
|
+
sm: "text-xs",
|
|
204
|
+
md: "text-sm",
|
|
205
|
+
lg: "text-base"
|
|
206
|
+
};
|
|
207
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
208
|
+
"div",
|
|
209
|
+
{
|
|
210
|
+
className: cn(
|
|
211
|
+
"bg-[linear-gradient(to_right,var(--muted-foreground)_40%,var(--foreground)_60%,var(--muted-foreground)_80%)]",
|
|
212
|
+
"bg-[length:200%_auto] bg-clip-text font-medium text-transparent",
|
|
213
|
+
"csdk-loader-shimmer",
|
|
214
|
+
textSizes[size],
|
|
215
|
+
className
|
|
216
|
+
),
|
|
217
|
+
children: text
|
|
218
|
+
}
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
function TextDotsLoader({
|
|
222
|
+
className,
|
|
223
|
+
text = "Thinking",
|
|
224
|
+
size = "md"
|
|
225
|
+
}) {
|
|
226
|
+
const textSizes = {
|
|
227
|
+
sm: "text-xs",
|
|
228
|
+
md: "text-sm",
|
|
229
|
+
lg: "text-base"
|
|
230
|
+
};
|
|
231
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("inline-flex items-center", className), children: [
|
|
232
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("text-primary font-medium", textSizes[size]), children: text }),
|
|
233
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex", children: [
|
|
234
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
235
|
+
"span",
|
|
236
|
+
{
|
|
237
|
+
className: "text-primary csdk-loader-loading-dots",
|
|
238
|
+
style: { animationDelay: "0.2s" },
|
|
239
|
+
children: "."
|
|
240
|
+
}
|
|
241
|
+
),
|
|
242
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
243
|
+
"span",
|
|
244
|
+
{
|
|
245
|
+
className: "text-primary csdk-loader-loading-dots",
|
|
246
|
+
style: { animationDelay: "0.4s" },
|
|
247
|
+
children: "."
|
|
248
|
+
}
|
|
249
|
+
),
|
|
250
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
251
|
+
"span",
|
|
252
|
+
{
|
|
253
|
+
className: "text-primary csdk-loader-loading-dots",
|
|
254
|
+
style: { animationDelay: "0.6s" },
|
|
255
|
+
children: "."
|
|
256
|
+
}
|
|
257
|
+
)
|
|
258
|
+
] })
|
|
259
|
+
] });
|
|
260
|
+
}
|
|
261
|
+
function Loader({
|
|
262
|
+
variant = "typing",
|
|
263
|
+
size = "md",
|
|
264
|
+
text,
|
|
265
|
+
className
|
|
266
|
+
}) {
|
|
267
|
+
switch (variant) {
|
|
268
|
+
case "dots":
|
|
269
|
+
return /* @__PURE__ */ jsxRuntime.jsx(DotsLoader, { size, className });
|
|
270
|
+
case "typing":
|
|
271
|
+
return /* @__PURE__ */ jsxRuntime.jsx(TypingLoader, { size, className });
|
|
272
|
+
case "wave":
|
|
273
|
+
return /* @__PURE__ */ jsxRuntime.jsx(WaveLoader, { size, className });
|
|
274
|
+
case "terminal":
|
|
275
|
+
return /* @__PURE__ */ jsxRuntime.jsx(TerminalLoader, { size, className });
|
|
276
|
+
case "text-blink":
|
|
277
|
+
return /* @__PURE__ */ jsxRuntime.jsx(TextBlinkLoader, { text, size, className });
|
|
278
|
+
case "text-shimmer":
|
|
279
|
+
return /* @__PURE__ */ jsxRuntime.jsx(TextShimmerLoader, { text, size, className });
|
|
280
|
+
case "loading-dots":
|
|
281
|
+
return /* @__PURE__ */ jsxRuntime.jsx(TextDotsLoader, { text, size, className });
|
|
282
|
+
default:
|
|
283
|
+
return /* @__PURE__ */ jsxRuntime.jsx(TypingLoader, { size, className });
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
exports.DotsLoader = DotsLoader;
|
|
288
|
+
exports.Loader = Loader;
|
|
289
|
+
exports.TextShimmerLoader = TextShimmerLoader;
|
|
290
|
+
exports.cn = cn;
|
|
291
|
+
//# sourceMappingURL=chunk-5EGBIQYS.cjs.map
|
|
292
|
+
//# sourceMappingURL=chunk-5EGBIQYS.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ui/lib/utils.ts","../src/ui/components/ui/loader.tsx"],"names":["twMerge","clsx","jsxs","jsx"],"mappings":"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","file":"chunk-5EGBIQYS.cjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { cn } from \"../../lib/utils\";\n\nexport interface LoaderProps {\n variant?:\n | \"dots\"\n | \"typing\"\n | \"wave\"\n | \"terminal\"\n | \"text-blink\"\n | \"text-shimmer\"\n | \"loading-dots\";\n size?: \"sm\" | \"md\" | \"lg\";\n text?: string;\n className?: string;\n}\n\nexport function DotsLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const dotSizes = {\n sm: \"h-1 w-1\",\n md: \"h-1.5 w-1.5\",\n lg: \"h-2 w-2\",\n };\n\n const containerSizes = {\n sm: \"h-4\",\n md: \"h-5\",\n lg: \"h-6\",\n };\n\n return (\n <div\n className={cn(\n \"flex items-center translate-y-[-2px] space-x-1\",\n containerSizes[size],\n className,\n )}\n >\n {[...Array(3)].map((_, i) => (\n <div\n key={i}\n className={cn(\n \"bg-primary csdk-loader-bounce-dots rounded-full\",\n dotSizes[size],\n )}\n style={{\n animationDelay: `${i * 160}ms`,\n }}\n />\n ))}\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function TypingLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const dotSizes = {\n sm: \"h-1 w-1\",\n md: \"h-1.5 w-1.5\",\n lg: \"h-2 w-2\",\n };\n\n const containerSizes = {\n sm: \"h-4\",\n md: \"h-5\",\n lg: \"h-6\",\n };\n\n return (\n <div\n className={cn(\n \"flex items-center space-x-1\",\n containerSizes[size],\n className,\n )}\n >\n {[...Array(3)].map((_, i) => (\n <div\n key={i}\n className={cn(\n \"bg-primary csdk-loader-typing rounded-full\",\n dotSizes[size],\n )}\n style={{\n animationDelay: `${i * 250}ms`,\n }}\n />\n ))}\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function WaveLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const barWidths = {\n sm: \"w-0.5\",\n md: \"w-0.5\",\n lg: \"w-1\",\n };\n\n const containerSizes = {\n sm: \"h-4\",\n md: \"h-5\",\n lg: \"h-6\",\n };\n\n const heights = {\n sm: [\"6px\", \"9px\", \"12px\", \"9px\", \"6px\"],\n md: [\"8px\", \"12px\", \"16px\", \"12px\", \"8px\"],\n lg: [\"10px\", \"15px\", \"20px\", \"15px\", \"10px\"],\n };\n\n return (\n <div\n className={cn(\n \"flex items-center gap-0.5\",\n containerSizes[size],\n className,\n )}\n >\n {[...Array(5)].map((_, i) => (\n <div\n key={i}\n className={cn(\n \"bg-primary csdk-loader-wave rounded-full\",\n barWidths[size],\n )}\n style={{\n animationDelay: `${i * 100}ms`,\n height: heights[size][i],\n }}\n />\n ))}\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function TerminalLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const cursorSizes = {\n sm: \"h-3 w-1.5\",\n md: \"h-4 w-2\",\n lg: \"h-5 w-2.5\",\n };\n\n const textSizes = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n };\n\n const containerSizes = {\n sm: \"h-4\",\n md: \"h-5\",\n lg: \"h-6\",\n };\n\n return (\n <div\n className={cn(\n \"flex items-center space-x-1\",\n containerSizes[size],\n className,\n )}\n >\n <span className={cn(\"text-primary font-mono\", textSizes[size])}>\n {\">\"}\n </span>\n <div className={cn(\"bg-primary csdk-loader-blink\", cursorSizes[size])} />\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function TextBlinkLoader({\n text = \"Thinking\",\n className,\n size = \"md\",\n}: {\n text?: string;\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const textSizes = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n };\n\n return (\n <div\n className={cn(\n \"csdk-loader-text-blink font-medium\",\n textSizes[size],\n className,\n )}\n >\n {text}\n </div>\n );\n}\n\nexport function TextShimmerLoader({\n text = \"Thinking\",\n className,\n size = \"md\",\n}: {\n text?: string;\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const textSizes = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n };\n\n return (\n <div\n className={cn(\n \"bg-[linear-gradient(to_right,var(--muted-foreground)_40%,var(--foreground)_60%,var(--muted-foreground)_80%)]\",\n \"bg-[length:200%_auto] bg-clip-text font-medium text-transparent\",\n \"csdk-loader-shimmer\",\n textSizes[size],\n className,\n )}\n >\n {text}\n </div>\n );\n}\n\nexport function TextDotsLoader({\n className,\n text = \"Thinking\",\n size = \"md\",\n}: {\n className?: string;\n text?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const textSizes = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n };\n\n return (\n <div className={cn(\"inline-flex items-center\", className)}>\n <span className={cn(\"text-primary font-medium\", textSizes[size])}>\n {text}\n </span>\n <span className=\"inline-flex\">\n <span\n className=\"text-primary csdk-loader-loading-dots\"\n style={{ animationDelay: \"0.2s\" }}\n >\n .\n </span>\n <span\n className=\"text-primary csdk-loader-loading-dots\"\n style={{ animationDelay: \"0.4s\" }}\n >\n .\n </span>\n <span\n className=\"text-primary csdk-loader-loading-dots\"\n style={{ animationDelay: \"0.6s\" }}\n >\n .\n </span>\n </span>\n </div>\n );\n}\n\nfunction Loader({\n variant = \"typing\",\n size = \"md\",\n text,\n className,\n}: LoaderProps) {\n switch (variant) {\n case \"dots\":\n return <DotsLoader size={size} className={className} />;\n case \"typing\":\n return <TypingLoader size={size} className={className} />;\n case \"wave\":\n return <WaveLoader size={size} className={className} />;\n case \"terminal\":\n return <TerminalLoader size={size} className={className} />;\n case \"text-blink\":\n return <TextBlinkLoader text={text} size={size} className={className} />;\n case \"text-shimmer\":\n return (\n <TextShimmerLoader text={text} size={size} className={className} />\n );\n case \"loading-dots\":\n return <TextDotsLoader text={text} size={size} className={className} />;\n default:\n return <TypingLoader size={size} className={className} />;\n }\n}\n\nexport { Loader };\n"]}
|