@omnicross/core 0.1.1 → 0.1.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 (210) hide show
  1. package/dist/ApiConverter.cjs +3 -778
  2. package/dist/ApiConverter.js +12 -751
  3. package/dist/{CompletionService-DtOF_War.d.cts → CompletionService-D3a47vdU.d.cts} +2 -1
  4. package/dist/{CompletionService-7fCmKAP3.d.ts → CompletionService-DdWaAxq0.d.ts} +2 -1
  5. package/dist/auth/GeminiCodeAssistProjectResolver.cjs +27 -60
  6. package/dist/auth/GeminiCodeAssistProjectResolver.js +5 -9
  7. package/dist/builtin-web-fetch-77JZUZGM.cjs +100 -0
  8. package/dist/builtin-web-fetch-IGLBX2XY.js +100 -0
  9. package/dist/chunk-2DCNB7DF.cjs +514 -0
  10. package/dist/chunk-2FEVTJWG.js +4400 -0
  11. package/dist/chunk-3MEACFK3.js +193 -0
  12. package/dist/chunk-3OPYJG76.cjs +266 -0
  13. package/dist/chunk-46RLHI7D.js +0 -0
  14. package/dist/chunk-46ZIFWYG.cjs +277 -0
  15. package/dist/chunk-4NBS6KPV.cjs +43 -0
  16. package/dist/chunk-4VAVYUZS.cjs +991 -0
  17. package/dist/chunk-5ERIZW3D.js +44 -0
  18. package/dist/chunk-5HTVET6E.js +514 -0
  19. package/dist/chunk-5ZQBEOMD.js +764 -0
  20. package/dist/chunk-6VIXXLMX.cjs +14 -0
  21. package/dist/chunk-745DV5FL.js +147 -0
  22. package/dist/chunk-74TMJA7Z.js +53 -0
  23. package/dist/chunk-7VU7V2E4.js +0 -0
  24. package/dist/chunk-7YN22L2H.cjs +87 -0
  25. package/dist/chunk-A2YMUCBT.cjs +105 -0
  26. package/dist/chunk-AQ5TNQB7.js +13 -0
  27. package/dist/chunk-AVYJ4YBN.js +58 -0
  28. package/dist/chunk-C72S6TTV.cjs +49 -0
  29. package/dist/chunk-C7PSERMH.js +87 -0
  30. package/dist/chunk-CDHS2QDC.js +179 -0
  31. package/dist/chunk-DK4A7DLE.js +266 -0
  32. package/dist/chunk-DRWHTIIZ.js +13 -0
  33. package/dist/chunk-DWKQZ2SK.cjs +254 -0
  34. package/dist/chunk-E3WHL7CO.js +14 -0
  35. package/dist/chunk-EYZYXJTJ.cjs +1 -0
  36. package/dist/chunk-FMOBD2OQ.js +39 -0
  37. package/dist/chunk-FTQ7IQUC.js +991 -0
  38. package/dist/chunk-FZ46M34D.cjs +1 -0
  39. package/dist/chunk-G2FUJNA2.cjs +193 -0
  40. package/dist/chunk-G2UTNSGU.js +277 -0
  41. package/dist/chunk-GBHYAGX3.cjs +26 -0
  42. package/dist/chunk-GMMT7RVN.cjs +39 -0
  43. package/dist/chunk-H5JUT3KV.js +105 -0
  44. package/dist/chunk-HQP3K7PU.cjs +431 -0
  45. package/dist/chunk-JO5NLTLY.js +46 -0
  46. package/dist/chunk-JWC6APFQ.js +23 -0
  47. package/dist/chunk-KUU2RNG6.cjs +46 -0
  48. package/dist/chunk-LKZJEL6E.cjs +124 -0
  49. package/dist/chunk-MNYKI4CI.js +94 -0
  50. package/dist/chunk-MZNPGW5Q.js +26 -0
  51. package/dist/chunk-N3V2J5ZO.cjs +53 -0
  52. package/dist/chunk-NYUNU75A.cjs +44 -0
  53. package/dist/chunk-NZYN7C3P.cjs +179 -0
  54. package/dist/chunk-O466Y272.js +235 -0
  55. package/dist/chunk-PXUJF5HS.js +124 -0
  56. package/dist/chunk-QBZJ7P2T.cjs +13 -0
  57. package/dist/chunk-QOCNX236.js +46 -0
  58. package/dist/chunk-QXD4MV2X.cjs +23 -0
  59. package/dist/chunk-R3HK6R4B.cjs +13 -0
  60. package/dist/chunk-RSJ3TWJQ.cjs +186 -0
  61. package/dist/chunk-S4WBV25P.js +913 -0
  62. package/dist/chunk-SN3YWBX7.cjs +4400 -0
  63. package/dist/chunk-SPVWWUHX.cjs +46 -0
  64. package/dist/chunk-SUEGJ75D.cjs +764 -0
  65. package/dist/chunk-SVNDB62D.cjs +58 -0
  66. package/dist/chunk-UYPEN5XE.cjs +235 -0
  67. package/dist/chunk-V5KPWNYX.cjs +147 -0
  68. package/dist/chunk-VVEHS2LI.js +431 -0
  69. package/dist/chunk-XBSYYZIY.cjs +94 -0
  70. package/dist/chunk-YGXJGRFI.cjs +913 -0
  71. package/dist/chunk-YMFAJFQT.cjs +173 -0
  72. package/dist/chunk-Z7LUNECE.js +49 -0
  73. package/dist/chunk-Z7Y2NPHY.js +186 -0
  74. package/dist/chunk-ZJZAOKI7.js +254 -0
  75. package/dist/chunk-ZLX3KGXX.js +173 -0
  76. package/dist/chunk-ZSVQT3PW.js +43 -0
  77. package/dist/completion/ApiKeyPoolService.cjs +23 -48
  78. package/dist/completion/ApiKeyPoolService.d.cts +150 -2
  79. package/dist/completion/ApiKeyPoolService.d.ts +150 -2
  80. package/dist/completion/BuiltinToolExecutor.cjs +9 -324
  81. package/dist/completion/BuiltinToolExecutor.js +6 -290
  82. package/dist/completion/CompletionService.cjs +38 -3487
  83. package/dist/completion/CompletionService.d.cts +3 -2
  84. package/dist/completion/CompletionService.d.ts +3 -2
  85. package/dist/completion/CompletionService.js +34 -3457
  86. package/dist/completion/NativeSearchInjector.cjs +8 -192
  87. package/dist/completion/NativeSearchInjector.js +7 -162
  88. package/dist/completion/ProviderSearchInjector.cjs +12 -39
  89. package/dist/completion/native-search-types.cjs +13 -66
  90. package/dist/completion/native-search-types.js +7 -31
  91. package/dist/completion/openrouter-headers.cjs +15 -71
  92. package/dist/completion/openrouter-headers.js +8 -34
  93. package/dist/completion/openrouter-models.cjs +10 -67
  94. package/dist/completion/openrouter-models.js +4 -34
  95. package/dist/completion/types.cjs +1 -18
  96. package/dist/completion/url-builder.cjs +24 -138
  97. package/dist/completion/url-builder.js +12 -92
  98. package/dist/completion.cjs +55 -3989
  99. package/dist/completion.d.cts +3 -2
  100. package/dist/completion.d.ts +3 -2
  101. package/dist/completion.js +63 -3953
  102. package/dist/index.cjs +197 -10429
  103. package/dist/index.d.cts +9 -2
  104. package/dist/index.d.ts +9 -2
  105. package/dist/index.js +125 -10268
  106. package/dist/logger-4GvQNzhE.d.cts +22 -0
  107. package/dist/logger-4GvQNzhE.d.ts +22 -0
  108. package/dist/outbound-api/routeResolver.cjs +7 -217
  109. package/dist/outbound-api/routeResolver.d.cts +2 -1
  110. package/dist/outbound-api/routeResolver.d.ts +2 -1
  111. package/dist/outbound-api/routeResolver.js +6 -187
  112. package/dist/outbound-api/subscriptionRegistryPort.cjs +7 -37
  113. package/dist/outbound-api/subscriptionRegistryPort.d.cts +2 -1
  114. package/dist/outbound-api/subscriptionRegistryPort.d.ts +2 -1
  115. package/dist/outbound-api/subscriptionRegistryPort.js +4 -8
  116. package/dist/outbound-api/types.cjs +1 -18
  117. package/dist/outbound-api/types.d.cts +2 -1
  118. package/dist/outbound-api/types.d.ts +2 -1
  119. package/dist/outbound-api.cjs +35 -5221
  120. package/dist/outbound-api.d.cts +2 -1
  121. package/dist/outbound-api.d.ts +2 -1
  122. package/dist/outbound-api.js +54 -5194
  123. package/dist/pipeline/AuthSource.cjs +1 -18
  124. package/dist/pipeline/LlmConfigProviderAuth.cjs +5 -166
  125. package/dist/pipeline/LlmConfigProviderAuth.d.cts +2 -1
  126. package/dist/pipeline/LlmConfigProviderAuth.d.ts +2 -1
  127. package/dist/pipeline/LlmConfigProviderAuth.js +5 -139
  128. package/dist/pipeline/SubscriptionAuthSource.cjs +6 -128
  129. package/dist/pipeline/SubscriptionAuthSource.js +5 -99
  130. package/dist/pipeline/SubscriptionAuthStrategy.cjs +1 -18
  131. package/dist/pipeline/executeProviderCall.cjs +5 -69
  132. package/dist/pipeline/executeProviderCall.js +3 -42
  133. package/dist/pipeline/resolveProviderChain.cjs +5 -46
  134. package/dist/pipeline/resolveProviderChain.js +3 -19
  135. package/dist/pipeline/resolveSubscriptionChain.cjs +5 -67
  136. package/dist/pipeline/resolveSubscriptionChain.js +3 -40
  137. package/dist/ports/gemini-code-assist-resolver.cjs +7 -37
  138. package/dist/ports/gemini-code-assist-resolver.js +4 -8
  139. package/dist/ports/pricing-store.cjs +1 -0
  140. package/dist/ports/pricing-store.d.cts +50 -0
  141. package/dist/ports/pricing-store.d.ts +50 -0
  142. package/dist/ports/pricing-store.js +0 -0
  143. package/dist/ports/provider-config-source.cjs +1 -18
  144. package/dist/ports/usage-event-store.cjs +1 -0
  145. package/dist/ports/usage-event-store.d.cts +29 -0
  146. package/dist/ports/usage-event-store.d.ts +29 -0
  147. package/dist/ports/usage-event-store.js +0 -0
  148. package/dist/ports/web-search-backend.cjs +1 -18
  149. package/dist/ports.cjs +1 -18
  150. package/dist/ports.d.cts +6 -1
  151. package/dist/ports.d.ts +6 -1
  152. package/dist/provider-proxy/ProviderProxy.cjs +40 -4643
  153. package/dist/provider-proxy/ProviderProxy.d.cts +2 -1
  154. package/dist/provider-proxy/ProviderProxy.d.ts +2 -1
  155. package/dist/provider-proxy/ProviderProxy.js +35 -4613
  156. package/dist/provider-proxy/ingress/providerProxyShared.cjs +35 -2941
  157. package/dist/provider-proxy/ingress/providerProxyShared.d.cts +2 -1
  158. package/dist/provider-proxy/ingress/providerProxyShared.d.ts +2 -1
  159. package/dist/provider-proxy/ingress/providerProxyShared.js +41 -2914
  160. package/dist/provider-proxy/matchText.cjs +11 -72
  161. package/dist/provider-proxy/matchText.js +6 -39
  162. package/dist/provider-proxy/types.cjs +1 -18
  163. package/dist/provider-proxy/types.d.cts +2 -1
  164. package/dist/provider-proxy/types.d.ts +2 -1
  165. package/dist/provider-proxy.cjs +35 -4655
  166. package/dist/provider-proxy.d.cts +2 -1
  167. package/dist/provider-proxy.d.ts +2 -1
  168. package/dist/provider-proxy.js +39 -4628
  169. package/dist/serializeError.cjs +5 -81
  170. package/dist/serializeError.js +3 -54
  171. package/dist/sse-parser.cjs +7 -455
  172. package/dist/sse-parser.js +4 -426
  173. package/dist/transformer/TransformerChainExecutor.cjs +4 -318
  174. package/dist/transformer/TransformerChainExecutor.js +4 -291
  175. package/dist/transformer/TransformerService.cjs +5 -289
  176. package/dist/transformer/TransformerService.js +3 -262
  177. package/dist/transformer/anthropicBetaInject.cjs +7 -50
  178. package/dist/transformer/anthropicBetaInject.js +4 -21
  179. package/dist/transformer/transformers/AnthropicTransformer.cjs +3 -1014
  180. package/dist/transformer/transformers/AnthropicTransformer.js +3 -987
  181. package/dist/transformer/transformers/GeminiCodeAssistTransformer.cjs +4 -1106
  182. package/dist/transformer/transformers/GeminiCodeAssistTransformer.js +7 -1079
  183. package/dist/transformer/transformers/GeminiTransformer.cjs +4 -1010
  184. package/dist/transformer/transformers/GeminiTransformer.js +4 -983
  185. package/dist/transformer/transformers/OpenAIResponseTransformer.cjs +3 -535
  186. package/dist/transformer/transformers/OpenAIResponseTransformer.js +3 -510
  187. package/dist/transformer/transformers/OpenCodeGoTransformer.cjs +5 -72
  188. package/dist/transformer/transformers/OpenCodeGoTransformer.js +3 -45
  189. package/dist/transformer/transformers/ReasoningTransformer.cjs +3 -270
  190. package/dist/transformer/transformers/ReasoningTransformer.js +2 -249
  191. package/dist/transformer/transformers.cjs +10 -3177
  192. package/dist/transformer/transformers.js +23 -3158
  193. package/dist/transformer/types.cjs +1 -18
  194. package/dist/transformer.cjs +13 -3726
  195. package/dist/transformer.js +17 -3706
  196. package/dist/usage/pricing-engine.cjs +6 -0
  197. package/dist/usage/pricing-engine.d.cts +83 -0
  198. package/dist/usage/pricing-engine.d.ts +83 -0
  199. package/dist/usage/pricing-engine.js +6 -0
  200. package/dist/usage/usage-recorder.cjs +6 -0
  201. package/dist/usage/usage-recorder.d.cts +73 -0
  202. package/dist/usage/usage-recorder.d.ts +73 -0
  203. package/dist/usage/usage-recorder.js +6 -0
  204. package/dist/usage.cjs +11 -0
  205. package/dist/usage.d.cts +8 -0
  206. package/dist/usage.d.ts +8 -0
  207. package/dist/usage.js +11 -0
  208. package/package.json +1 -1
  209. package/dist/ApiKeyPoolService-BmMkau07.d.cts +0 -170
  210. package/dist/ApiKeyPoolService-BmMkau07.d.ts +0 -170
@@ -1,327 +1,12 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __esm = (fn, res) => function __init() {
9
- return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
10
- };
11
- var __export = (target, all) => {
12
- for (var name in all)
13
- __defProp(target, name, { get: all[name], enumerable: true });
14
- };
15
- var __copyProps = (to, from, except, desc) => {
16
- if (from && typeof from === "object" || typeof from === "function") {
17
- for (let key of __getOwnPropNames(from))
18
- if (!__hasOwnProp.call(to, key) && key !== except)
19
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
20
- }
21
- return to;
22
- };
23
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
24
- // If the importer is in node compatibility mode or this is not an ESM
25
- // file that has been converted to a CommonJS file using a Babel-
26
- // compatible transform (i.e. "__esModule" has not been set), then set
27
- // "default" to the CommonJS "module.exports" for node compatibility.
28
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
29
- mod
30
- ));
31
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
32
2
 
33
- // src/completion/builtin-web-fetch.ts
34
- var builtin_web_fetch_exports = {};
35
- __export(builtin_web_fetch_exports, {
36
- fetchAndExtractUrl: () => fetchAndExtractUrl
37
- });
38
- async function fetchAndExtractUrl(url, maxChars) {
39
- const controller = new AbortController();
40
- const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
41
- try {
42
- const res = await fetchWithRedirectLimit(url, controller.signal);
43
- clearTimeout(timer);
44
- const contentType = res.headers.get("content-type") ?? "";
45
- const rawText = await readBodyWithLimit(res);
46
- let text;
47
- if (contentType.includes("json")) {
48
- try {
49
- text = JSON.stringify(JSON.parse(rawText), null, 2);
50
- } catch {
51
- text = rawText;
52
- }
53
- } else if (contentType.includes("html")) {
54
- text = extractHtml(rawText, res.url || url);
55
- } else {
56
- text = rawText;
57
- }
58
- return text.length > maxChars ? text.slice(0, maxChars) + "\n\n[Content truncated]" : text;
59
- } finally {
60
- clearTimeout(timer);
61
- }
62
- }
63
- function extractHtml(html, url) {
64
- const dom = new import_jsdom.JSDOM(html, { url });
65
- const doc = dom.window.document;
66
- for (const sel of ["script", "style", "noscript", "nav", "footer", "aside", "iframe"]) {
67
- doc.querySelectorAll(sel).forEach((el) => el.remove());
68
- }
69
- const reader = new import_readability.Readability(doc);
70
- const article = reader.parse();
71
- if (article?.content) {
72
- return turndown.turndown(article.content).replace(/\n{3,}/g, "\n\n");
73
- }
74
- const body = doc.body?.textContent || "";
75
- return body.replace(/\s+/g, " ").trim();
76
- }
77
- async function fetchWithRedirectLimit(url, signal) {
78
- let currentUrl = url;
79
- for (let i = 0; i < MAX_REDIRECTS; i++) {
80
- const res = await fetch(currentUrl, { signal, redirect: "manual", headers: FETCH_HEADERS });
81
- if (res.status >= 300 && res.status < 400) {
82
- const location = res.headers.get("location");
83
- if (!location) return res;
84
- currentUrl = new URL(location, currentUrl).href;
85
- continue;
86
- }
87
- Object.defineProperty(res, "url", { value: currentUrl, writable: false });
88
- return res;
89
- }
90
- throw new Error(`Too many redirects (>${MAX_REDIRECTS})`);
91
- }
92
- async function readBodyWithLimit(res) {
93
- const reader = res.body?.getReader();
94
- if (!reader) return "";
95
- const chunks = [];
96
- let totalBytes = 0;
97
- while (true) {
98
- const { done, value } = await reader.read();
99
- if (done) break;
100
- totalBytes += value.byteLength;
101
- if (totalBytes > MAX_RESPONSE_BYTES) {
102
- reader.cancel();
103
- break;
104
- }
105
- chunks.push(value);
106
- }
107
- const combined = new Uint8Array(totalBytes > MAX_RESPONSE_BYTES ? MAX_RESPONSE_BYTES : totalBytes);
108
- let offset = 0;
109
- for (const chunk of chunks) {
110
- const len = Math.min(chunk.byteLength, combined.byteLength - offset);
111
- combined.set(chunk.subarray(0, len), offset);
112
- offset += len;
113
- if (offset >= combined.byteLength) break;
114
- }
115
- return new TextDecoder("utf-8", { fatal: false }).decode(combined);
116
- }
117
- var import_readability, import_jsdom, import_turndown, FETCH_TIMEOUT_MS, MAX_RESPONSE_BYTES, MAX_REDIRECTS, CHROME_UA, FETCH_HEADERS, turndown;
118
- var init_builtin_web_fetch = __esm({
119
- "src/completion/builtin-web-fetch.ts"() {
120
- "use strict";
121
- import_readability = require("@mozilla/readability");
122
- import_jsdom = require("jsdom");
123
- import_turndown = __toESM(require("turndown"), 1);
124
- FETCH_TIMEOUT_MS = 15e3;
125
- MAX_RESPONSE_BYTES = 5 * 1024 * 1024;
126
- MAX_REDIRECTS = 5;
127
- CHROME_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36";
128
- FETCH_HEADERS = {
129
- "User-Agent": CHROME_UA,
130
- Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
131
- "Accept-Language": "en-US,en;q=0.9"
132
- };
133
- turndown = new import_turndown.default({
134
- headingStyle: "atx",
135
- codeBlockStyle: "fenced",
136
- bulletListMarker: "-"
137
- });
138
- }
139
- });
140
3
 
141
- // src/completion/BuiltinToolExecutor.ts
142
- var BuiltinToolExecutor_exports = {};
143
- __export(BuiltinToolExecutor_exports, {
144
- BuiltinToolExecutor: () => BuiltinToolExecutor,
145
- convertBuiltinToolsToAnthropic: () => convertBuiltinToolsToAnthropic,
146
- convertBuiltinToolsToOpenAI: () => convertBuiltinToolsToOpenAI,
147
- getBuiltinSearchTools: () => getBuiltinSearchTools
148
- });
149
- module.exports = __toCommonJS(BuiltinToolExecutor_exports);
150
- var DEFAULT_SEARCH_COUNT = 5;
151
- var DEFAULT_FETCH_MAX_CHARS = 2e4;
152
- var FALLBACK_ORDER = [
153
- "tavily",
154
- "jina",
155
- "searxng",
156
- "zhipu",
157
- "z.ai",
158
- "bocha",
159
- "grok",
160
- "local-google",
161
- "local-bing",
162
- "local-baidu",
163
- "local-duckduckgo"
164
- ];
165
- var IMPLICIT_LOCAL_FALLBACK = "local-google";
166
- var WEB_SEARCH_TOOL = {
167
- id: "builtin__web_search",
168
- serverId: "builtin",
169
- serverName: "builtin",
170
- name: "web_search",
171
- description: "Search the web for current information. Returns a list of results with title, URL, and snippet. Use web_fetch afterwards to get full page content if snippets are insufficient.",
172
- inputSchema: {
173
- type: "object",
174
- properties: {
175
- query: { type: "string", description: "The search query." },
176
- count: { type: "integer", description: "Maximum number of results (1-10).", default: DEFAULT_SEARCH_COUNT }
177
- },
178
- required: ["query"]
179
- },
180
- type: "mcp",
181
- isBuiltIn: true
182
- };
183
- var WEB_FETCH_TOOL = {
184
- id: "builtin__web_fetch",
185
- serverId: "builtin",
186
- serverName: "builtin",
187
- name: "web_fetch",
188
- description: "Fetch and extract the main content of a web page as clean Markdown. Use this to read the full content of a URL found via web_search.",
189
- inputSchema: {
190
- type: "object",
191
- properties: {
192
- url: { type: "string", description: "The URL to fetch (http or https)." },
193
- maxChars: { type: "integer", description: "Maximum characters to return.", default: DEFAULT_FETCH_MAX_CHARS }
194
- },
195
- required: ["url"]
196
- },
197
- type: "mcp",
198
- isBuiltIn: true
199
- };
200
- var BuiltinToolExecutor = class {
201
- constructor(webSearch) {
202
- this.webSearch = webSearch;
203
- }
204
- webSearch;
205
- async execute(toolName, args) {
206
- switch (toolName) {
207
- case "web_search":
208
- return this.executeWebSearch(args);
209
- case "web_fetch":
210
- return this.executeWebFetch(args);
211
- default:
212
- return { isError: true, content: [{ type: "text", text: `Unknown built-in tool: ${toolName}` }] };
213
- }
214
- }
215
- // -----------------------------------------------------------------------
216
- // web_search
217
- // -----------------------------------------------------------------------
218
- async executeWebSearch(args) {
219
- const query = String(args.query ?? "").trim();
220
- if (!query) {
221
- return { isError: true, content: [{ type: "text", text: "Error: query parameter is required." }] };
222
- }
223
- const count = Math.min(Math.max(Number(args.count ?? DEFAULT_SEARCH_COUNT), 1), 10);
224
- const chain = this.resolveProviderChain();
225
- let lastError = "";
226
- for (const providerId of chain) {
227
- try {
228
- const result = await this.webSearch.search(query, providerId, { maxResults: count });
229
- if (!result.success) {
230
- lastError = result.error || "Unknown error";
231
- console.log(`[BuiltinToolExecutor] Search provider ${providerId} failed: ${lastError}, trying next...`);
232
- continue;
233
- }
234
- const items = result.results.slice(0, count);
235
- if (items.length === 0) {
236
- console.log(`[BuiltinToolExecutor] Search provider ${providerId} returned 0 results, trying next...`);
237
- continue;
238
- }
239
- const text = items.map((r, i) => `${i + 1}. ${r.title}
240
- URL: ${r.url}
241
- ${r.content || ""}`).join("\n\n");
242
- return { isError: false, content: [{ type: "text", text }] };
243
- } catch (err) {
244
- lastError = err instanceof Error ? err.message : String(err);
245
- console.log(`[BuiltinToolExecutor] Search provider ${providerId} threw: ${lastError}, trying next...`);
246
- continue;
247
- }
248
- }
249
- return {
250
- isError: false,
251
- content: [{ type: "text", text: lastError ? `Search failed after trying ${chain.length} provider(s). Last error: ${lastError}` : `No results found for "${query}" after trying ${chain.length} provider(s). Try rephrasing your search.` }]
252
- };
253
- }
254
- resolveProviderChain() {
255
- const chain = [];
256
- for (const id of FALLBACK_ORDER) {
257
- if (this.webSearch.isProviderEnabled(id)) {
258
- chain.push(id);
259
- }
260
- }
261
- if (!chain.includes(IMPLICIT_LOCAL_FALLBACK)) {
262
- chain.push(IMPLICIT_LOCAL_FALLBACK);
263
- }
264
- return chain;
265
- }
266
- // -----------------------------------------------------------------------
267
- // web_fetch
268
- // -----------------------------------------------------------------------
269
- async executeWebFetch(args) {
270
- const url = String(args.url ?? "").trim();
271
- if (!url) {
272
- return { isError: true, content: [{ type: "text", text: "Error: url parameter is required." }] };
273
- }
274
- try {
275
- const parsed = new URL(url);
276
- if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
277
- return { isError: true, content: [{ type: "text", text: "Error: only http and https URLs are supported." }] };
278
- }
279
- } catch {
280
- return { isError: true, content: [{ type: "text", text: `Error: invalid URL "${url}".` }] };
281
- }
282
- const maxChars = Number(args.maxChars ?? DEFAULT_FETCH_MAX_CHARS);
283
- try {
284
- const jinaResult = await this.webSearch.readUrl(url, { timeout: 15e3 });
285
- if (jinaResult.success && jinaResult.content) {
286
- const content = jinaResult.content.length > maxChars ? jinaResult.content.slice(0, maxChars) + "\n\n[Content truncated]" : jinaResult.content;
287
- const header = jinaResult.title ? `# ${jinaResult.title}
288
4
 
289
- ` : "";
290
- return { isError: false, content: [{ type: "text", text: header + content }] };
291
- }
292
- const { fetchAndExtractUrl: fetchAndExtractUrl2 } = await Promise.resolve().then(() => (init_builtin_web_fetch(), builtin_web_fetch_exports));
293
- const text = await fetchAndExtractUrl2(url, maxChars);
294
- return { isError: false, content: [{ type: "text", text }] };
295
- } catch (err) {
296
- const message = err instanceof Error ? err.message : String(err);
297
- return { isError: true, content: [{ type: "text", text: `Fetch error: ${message}` }] };
298
- }
299
- }
300
- };
301
- function getBuiltinSearchTools() {
302
- return [WEB_SEARCH_TOOL, WEB_FETCH_TOOL];
303
- }
304
- function convertBuiltinToolsToOpenAI(tools) {
305
- return tools.map((t) => ({
306
- type: "function",
307
- function: {
308
- name: t.id,
309
- description: t.description || t.name,
310
- parameters: t.inputSchema
311
- }
312
- }));
313
- }
314
- function convertBuiltinToolsToAnthropic(tools) {
315
- return tools.map((t) => ({
316
- name: t.id,
317
- description: t.description || t.name,
318
- input_schema: t.inputSchema
319
- }));
320
- }
321
- // Annotate the CommonJS export names for ESM import in node:
322
- 0 && (module.exports = {
323
- BuiltinToolExecutor,
324
- convertBuiltinToolsToAnthropic,
325
- convertBuiltinToolsToOpenAI,
326
- getBuiltinSearchTools
327
- });
5
+
6
+ var _chunkNZYN7C3Pcjs = require('../chunk-NZYN7C3P.cjs');
7
+
8
+
9
+
10
+
11
+
12
+ exports.BuiltinToolExecutor = _chunkNZYN7C3Pcjs.BuiltinToolExecutor; exports.convertBuiltinToolsToAnthropic = _chunkNZYN7C3Pcjs.convertBuiltinToolsToAnthropic; exports.convertBuiltinToolsToOpenAI = _chunkNZYN7C3Pcjs.convertBuiltinToolsToOpenAI; exports.getBuiltinSearchTools = _chunkNZYN7C3Pcjs.getBuiltinSearchTools;
@@ -1,293 +1,9 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropNames = Object.getOwnPropertyNames;
3
- var __esm = (fn, res) => function __init() {
4
- return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
5
- };
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
-
11
- // src/completion/builtin-web-fetch.ts
12
- var builtin_web_fetch_exports = {};
13
- __export(builtin_web_fetch_exports, {
14
- fetchAndExtractUrl: () => fetchAndExtractUrl
15
- });
16
- import { Readability } from "@mozilla/readability";
17
- import { JSDOM } from "jsdom";
18
- import TurndownService from "turndown";
19
- async function fetchAndExtractUrl(url, maxChars) {
20
- const controller = new AbortController();
21
- const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
22
- try {
23
- const res = await fetchWithRedirectLimit(url, controller.signal);
24
- clearTimeout(timer);
25
- const contentType = res.headers.get("content-type") ?? "";
26
- const rawText = await readBodyWithLimit(res);
27
- let text;
28
- if (contentType.includes("json")) {
29
- try {
30
- text = JSON.stringify(JSON.parse(rawText), null, 2);
31
- } catch {
32
- text = rawText;
33
- }
34
- } else if (contentType.includes("html")) {
35
- text = extractHtml(rawText, res.url || url);
36
- } else {
37
- text = rawText;
38
- }
39
- return text.length > maxChars ? text.slice(0, maxChars) + "\n\n[Content truncated]" : text;
40
- } finally {
41
- clearTimeout(timer);
42
- }
43
- }
44
- function extractHtml(html, url) {
45
- const dom = new JSDOM(html, { url });
46
- const doc = dom.window.document;
47
- for (const sel of ["script", "style", "noscript", "nav", "footer", "aside", "iframe"]) {
48
- doc.querySelectorAll(sel).forEach((el) => el.remove());
49
- }
50
- const reader = new Readability(doc);
51
- const article = reader.parse();
52
- if (article?.content) {
53
- return turndown.turndown(article.content).replace(/\n{3,}/g, "\n\n");
54
- }
55
- const body = doc.body?.textContent || "";
56
- return body.replace(/\s+/g, " ").trim();
57
- }
58
- async function fetchWithRedirectLimit(url, signal) {
59
- let currentUrl = url;
60
- for (let i = 0; i < MAX_REDIRECTS; i++) {
61
- const res = await fetch(currentUrl, { signal, redirect: "manual", headers: FETCH_HEADERS });
62
- if (res.status >= 300 && res.status < 400) {
63
- const location = res.headers.get("location");
64
- if (!location) return res;
65
- currentUrl = new URL(location, currentUrl).href;
66
- continue;
67
- }
68
- Object.defineProperty(res, "url", { value: currentUrl, writable: false });
69
- return res;
70
- }
71
- throw new Error(`Too many redirects (>${MAX_REDIRECTS})`);
72
- }
73
- async function readBodyWithLimit(res) {
74
- const reader = res.body?.getReader();
75
- if (!reader) return "";
76
- const chunks = [];
77
- let totalBytes = 0;
78
- while (true) {
79
- const { done, value } = await reader.read();
80
- if (done) break;
81
- totalBytes += value.byteLength;
82
- if (totalBytes > MAX_RESPONSE_BYTES) {
83
- reader.cancel();
84
- break;
85
- }
86
- chunks.push(value);
87
- }
88
- const combined = new Uint8Array(totalBytes > MAX_RESPONSE_BYTES ? MAX_RESPONSE_BYTES : totalBytes);
89
- let offset = 0;
90
- for (const chunk of chunks) {
91
- const len = Math.min(chunk.byteLength, combined.byteLength - offset);
92
- combined.set(chunk.subarray(0, len), offset);
93
- offset += len;
94
- if (offset >= combined.byteLength) break;
95
- }
96
- return new TextDecoder("utf-8", { fatal: false }).decode(combined);
97
- }
98
- var FETCH_TIMEOUT_MS, MAX_RESPONSE_BYTES, MAX_REDIRECTS, CHROME_UA, FETCH_HEADERS, turndown;
99
- var init_builtin_web_fetch = __esm({
100
- "src/completion/builtin-web-fetch.ts"() {
101
- "use strict";
102
- FETCH_TIMEOUT_MS = 15e3;
103
- MAX_RESPONSE_BYTES = 5 * 1024 * 1024;
104
- MAX_REDIRECTS = 5;
105
- CHROME_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36";
106
- FETCH_HEADERS = {
107
- "User-Agent": CHROME_UA,
108
- Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
109
- "Accept-Language": "en-US,en;q=0.9"
110
- };
111
- turndown = new TurndownService({
112
- headingStyle: "atx",
113
- codeBlockStyle: "fenced",
114
- bulletListMarker: "-"
115
- });
116
- }
117
- });
118
-
119
- // src/completion/BuiltinToolExecutor.ts
120
- var DEFAULT_SEARCH_COUNT = 5;
121
- var DEFAULT_FETCH_MAX_CHARS = 2e4;
122
- var FALLBACK_ORDER = [
123
- "tavily",
124
- "jina",
125
- "searxng",
126
- "zhipu",
127
- "z.ai",
128
- "bocha",
129
- "grok",
130
- "local-google",
131
- "local-bing",
132
- "local-baidu",
133
- "local-duckduckgo"
134
- ];
135
- var IMPLICIT_LOCAL_FALLBACK = "local-google";
136
- var WEB_SEARCH_TOOL = {
137
- id: "builtin__web_search",
138
- serverId: "builtin",
139
- serverName: "builtin",
140
- name: "web_search",
141
- description: "Search the web for current information. Returns a list of results with title, URL, and snippet. Use web_fetch afterwards to get full page content if snippets are insufficient.",
142
- inputSchema: {
143
- type: "object",
144
- properties: {
145
- query: { type: "string", description: "The search query." },
146
- count: { type: "integer", description: "Maximum number of results (1-10).", default: DEFAULT_SEARCH_COUNT }
147
- },
148
- required: ["query"]
149
- },
150
- type: "mcp",
151
- isBuiltIn: true
152
- };
153
- var WEB_FETCH_TOOL = {
154
- id: "builtin__web_fetch",
155
- serverId: "builtin",
156
- serverName: "builtin",
157
- name: "web_fetch",
158
- description: "Fetch and extract the main content of a web page as clean Markdown. Use this to read the full content of a URL found via web_search.",
159
- inputSchema: {
160
- type: "object",
161
- properties: {
162
- url: { type: "string", description: "The URL to fetch (http or https)." },
163
- maxChars: { type: "integer", description: "Maximum characters to return.", default: DEFAULT_FETCH_MAX_CHARS }
164
- },
165
- required: ["url"]
166
- },
167
- type: "mcp",
168
- isBuiltIn: true
169
- };
170
- var BuiltinToolExecutor = class {
171
- constructor(webSearch) {
172
- this.webSearch = webSearch;
173
- }
174
- webSearch;
175
- async execute(toolName, args) {
176
- switch (toolName) {
177
- case "web_search":
178
- return this.executeWebSearch(args);
179
- case "web_fetch":
180
- return this.executeWebFetch(args);
181
- default:
182
- return { isError: true, content: [{ type: "text", text: `Unknown built-in tool: ${toolName}` }] };
183
- }
184
- }
185
- // -----------------------------------------------------------------------
186
- // web_search
187
- // -----------------------------------------------------------------------
188
- async executeWebSearch(args) {
189
- const query = String(args.query ?? "").trim();
190
- if (!query) {
191
- return { isError: true, content: [{ type: "text", text: "Error: query parameter is required." }] };
192
- }
193
- const count = Math.min(Math.max(Number(args.count ?? DEFAULT_SEARCH_COUNT), 1), 10);
194
- const chain = this.resolveProviderChain();
195
- let lastError = "";
196
- for (const providerId of chain) {
197
- try {
198
- const result = await this.webSearch.search(query, providerId, { maxResults: count });
199
- if (!result.success) {
200
- lastError = result.error || "Unknown error";
201
- console.log(`[BuiltinToolExecutor] Search provider ${providerId} failed: ${lastError}, trying next...`);
202
- continue;
203
- }
204
- const items = result.results.slice(0, count);
205
- if (items.length === 0) {
206
- console.log(`[BuiltinToolExecutor] Search provider ${providerId} returned 0 results, trying next...`);
207
- continue;
208
- }
209
- const text = items.map((r, i) => `${i + 1}. ${r.title}
210
- URL: ${r.url}
211
- ${r.content || ""}`).join("\n\n");
212
- return { isError: false, content: [{ type: "text", text }] };
213
- } catch (err) {
214
- lastError = err instanceof Error ? err.message : String(err);
215
- console.log(`[BuiltinToolExecutor] Search provider ${providerId} threw: ${lastError}, trying next...`);
216
- continue;
217
- }
218
- }
219
- return {
220
- isError: false,
221
- content: [{ type: "text", text: lastError ? `Search failed after trying ${chain.length} provider(s). Last error: ${lastError}` : `No results found for "${query}" after trying ${chain.length} provider(s). Try rephrasing your search.` }]
222
- };
223
- }
224
- resolveProviderChain() {
225
- const chain = [];
226
- for (const id of FALLBACK_ORDER) {
227
- if (this.webSearch.isProviderEnabled(id)) {
228
- chain.push(id);
229
- }
230
- }
231
- if (!chain.includes(IMPLICIT_LOCAL_FALLBACK)) {
232
- chain.push(IMPLICIT_LOCAL_FALLBACK);
233
- }
234
- return chain;
235
- }
236
- // -----------------------------------------------------------------------
237
- // web_fetch
238
- // -----------------------------------------------------------------------
239
- async executeWebFetch(args) {
240
- const url = String(args.url ?? "").trim();
241
- if (!url) {
242
- return { isError: true, content: [{ type: "text", text: "Error: url parameter is required." }] };
243
- }
244
- try {
245
- const parsed = new URL(url);
246
- if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
247
- return { isError: true, content: [{ type: "text", text: "Error: only http and https URLs are supported." }] };
248
- }
249
- } catch {
250
- return { isError: true, content: [{ type: "text", text: `Error: invalid URL "${url}".` }] };
251
- }
252
- const maxChars = Number(args.maxChars ?? DEFAULT_FETCH_MAX_CHARS);
253
- try {
254
- const jinaResult = await this.webSearch.readUrl(url, { timeout: 15e3 });
255
- if (jinaResult.success && jinaResult.content) {
256
- const content = jinaResult.content.length > maxChars ? jinaResult.content.slice(0, maxChars) + "\n\n[Content truncated]" : jinaResult.content;
257
- const header = jinaResult.title ? `# ${jinaResult.title}
258
-
259
- ` : "";
260
- return { isError: false, content: [{ type: "text", text: header + content }] };
261
- }
262
- const { fetchAndExtractUrl: fetchAndExtractUrl2 } = await Promise.resolve().then(() => (init_builtin_web_fetch(), builtin_web_fetch_exports));
263
- const text = await fetchAndExtractUrl2(url, maxChars);
264
- return { isError: false, content: [{ type: "text", text }] };
265
- } catch (err) {
266
- const message = err instanceof Error ? err.message : String(err);
267
- return { isError: true, content: [{ type: "text", text: `Fetch error: ${message}` }] };
268
- }
269
- }
270
- };
271
- function getBuiltinSearchTools() {
272
- return [WEB_SEARCH_TOOL, WEB_FETCH_TOOL];
273
- }
274
- function convertBuiltinToolsToOpenAI(tools) {
275
- return tools.map((t) => ({
276
- type: "function",
277
- function: {
278
- name: t.id,
279
- description: t.description || t.name,
280
- parameters: t.inputSchema
281
- }
282
- }));
283
- }
284
- function convertBuiltinToolsToAnthropic(tools) {
285
- return tools.map((t) => ({
286
- name: t.id,
287
- description: t.description || t.name,
288
- input_schema: t.inputSchema
289
- }));
290
- }
1
+ import {
2
+ BuiltinToolExecutor,
3
+ convertBuiltinToolsToAnthropic,
4
+ convertBuiltinToolsToOpenAI,
5
+ getBuiltinSearchTools
6
+ } from "../chunk-CDHS2QDC.js";
291
7
  export {
292
8
  BuiltinToolExecutor,
293
9
  convertBuiltinToolsToAnthropic,