@omnicross/core 0.1.0 → 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 (272) hide show
  1. package/dist/ApiConverter.cjs +24 -0
  2. package/dist/ApiConverter.d.cts +82 -0
  3. package/dist/ApiConverter.d.ts +82 -0
  4. package/dist/ApiConverter.js +24 -0
  5. package/dist/BuiltinToolExecutor-BluWyeob.d.ts +81 -0
  6. package/dist/BuiltinToolExecutor-CS2WpXhM.d.cts +81 -0
  7. package/dist/CompletionService-D3a47vdU.d.cts +213 -0
  8. package/dist/CompletionService-DdWaAxq0.d.ts +213 -0
  9. package/dist/{ProviderProxy-f_8ziIhW.d.cts → ProviderProxy-C-xqrkKi.d.ts} +7 -2
  10. package/dist/{ProviderProxy-vjt8sQQk.d.ts → ProviderProxy-CnMQYN59.d.cts} +7 -2
  11. package/dist/auth/GeminiCodeAssistProjectResolver.cjs +27 -60
  12. package/dist/auth/GeminiCodeAssistProjectResolver.js +5 -9
  13. package/dist/builtin-web-fetch-77JZUZGM.cjs +100 -0
  14. package/dist/builtin-web-fetch-IGLBX2XY.js +100 -0
  15. package/dist/chunk-2DCNB7DF.cjs +514 -0
  16. package/dist/chunk-2FEVTJWG.js +4400 -0
  17. package/dist/chunk-3MEACFK3.js +193 -0
  18. package/dist/chunk-3OPYJG76.cjs +266 -0
  19. package/dist/chunk-46RLHI7D.js +0 -0
  20. package/dist/chunk-46ZIFWYG.cjs +277 -0
  21. package/dist/chunk-4NBS6KPV.cjs +43 -0
  22. package/dist/chunk-4VAVYUZS.cjs +991 -0
  23. package/dist/chunk-5ERIZW3D.js +44 -0
  24. package/dist/chunk-5HTVET6E.js +514 -0
  25. package/dist/chunk-5ZQBEOMD.js +764 -0
  26. package/dist/chunk-6VIXXLMX.cjs +14 -0
  27. package/dist/chunk-745DV5FL.js +147 -0
  28. package/dist/chunk-74TMJA7Z.js +53 -0
  29. package/dist/chunk-7VU7V2E4.js +0 -0
  30. package/dist/chunk-7YN22L2H.cjs +87 -0
  31. package/dist/chunk-A2YMUCBT.cjs +105 -0
  32. package/dist/chunk-AQ5TNQB7.js +13 -0
  33. package/dist/chunk-AVYJ4YBN.js +58 -0
  34. package/dist/chunk-C72S6TTV.cjs +49 -0
  35. package/dist/chunk-C7PSERMH.js +87 -0
  36. package/dist/chunk-CDHS2QDC.js +179 -0
  37. package/dist/chunk-DK4A7DLE.js +266 -0
  38. package/dist/chunk-DRWHTIIZ.js +13 -0
  39. package/dist/chunk-DWKQZ2SK.cjs +254 -0
  40. package/dist/chunk-E3WHL7CO.js +14 -0
  41. package/dist/chunk-EYZYXJTJ.cjs +1 -0
  42. package/dist/chunk-FMOBD2OQ.js +39 -0
  43. package/dist/chunk-FTQ7IQUC.js +991 -0
  44. package/dist/chunk-FZ46M34D.cjs +1 -0
  45. package/dist/chunk-G2FUJNA2.cjs +193 -0
  46. package/dist/chunk-G2UTNSGU.js +277 -0
  47. package/dist/chunk-GBHYAGX3.cjs +26 -0
  48. package/dist/chunk-GMMT7RVN.cjs +39 -0
  49. package/dist/chunk-H5JUT3KV.js +105 -0
  50. package/dist/chunk-HQP3K7PU.cjs +431 -0
  51. package/dist/chunk-JO5NLTLY.js +46 -0
  52. package/dist/chunk-JWC6APFQ.js +23 -0
  53. package/dist/chunk-KUU2RNG6.cjs +46 -0
  54. package/dist/chunk-LKZJEL6E.cjs +124 -0
  55. package/dist/chunk-MNYKI4CI.js +94 -0
  56. package/dist/chunk-MZNPGW5Q.js +26 -0
  57. package/dist/chunk-N3V2J5ZO.cjs +53 -0
  58. package/dist/chunk-NYUNU75A.cjs +44 -0
  59. package/dist/chunk-NZYN7C3P.cjs +179 -0
  60. package/dist/chunk-O466Y272.js +235 -0
  61. package/dist/chunk-PXUJF5HS.js +124 -0
  62. package/dist/chunk-QBZJ7P2T.cjs +13 -0
  63. package/dist/chunk-QOCNX236.js +46 -0
  64. package/dist/chunk-QXD4MV2X.cjs +23 -0
  65. package/dist/chunk-R3HK6R4B.cjs +13 -0
  66. package/dist/chunk-RSJ3TWJQ.cjs +186 -0
  67. package/dist/chunk-S4WBV25P.js +913 -0
  68. package/dist/chunk-SN3YWBX7.cjs +4400 -0
  69. package/dist/chunk-SPVWWUHX.cjs +46 -0
  70. package/dist/chunk-SUEGJ75D.cjs +764 -0
  71. package/dist/chunk-SVNDB62D.cjs +58 -0
  72. package/dist/chunk-UYPEN5XE.cjs +235 -0
  73. package/dist/chunk-V5KPWNYX.cjs +147 -0
  74. package/dist/chunk-VVEHS2LI.js +431 -0
  75. package/dist/chunk-XBSYYZIY.cjs +94 -0
  76. package/dist/chunk-YGXJGRFI.cjs +913 -0
  77. package/dist/chunk-YMFAJFQT.cjs +173 -0
  78. package/dist/chunk-Z7LUNECE.js +49 -0
  79. package/dist/chunk-Z7Y2NPHY.js +186 -0
  80. package/dist/chunk-ZJZAOKI7.js +254 -0
  81. package/dist/chunk-ZLX3KGXX.js +173 -0
  82. package/dist/chunk-ZSVQT3PW.js +43 -0
  83. package/dist/completion/ApiKeyPoolService.cjs +23 -48
  84. package/dist/completion/ApiKeyPoolService.d.cts +150 -2
  85. package/dist/completion/ApiKeyPoolService.d.ts +150 -2
  86. package/dist/completion/BuiltinToolExecutor.cjs +12 -0
  87. package/dist/completion/BuiltinToolExecutor.d.cts +4 -0
  88. package/dist/completion/BuiltinToolExecutor.d.ts +4 -0
  89. package/dist/completion/BuiltinToolExecutor.js +12 -0
  90. package/dist/completion/CompletionService.cjs +38 -0
  91. package/dist/completion/CompletionService.d.cts +22 -0
  92. package/dist/completion/CompletionService.d.ts +22 -0
  93. package/dist/completion/CompletionService.js +38 -0
  94. package/dist/completion/NativeSearchInjector.cjs +12 -0
  95. package/dist/completion/NativeSearchInjector.d.cts +42 -0
  96. package/dist/completion/NativeSearchInjector.d.ts +42 -0
  97. package/dist/completion/NativeSearchInjector.js +12 -0
  98. package/dist/completion/ProviderSearchInjector.cjs +60 -0
  99. package/dist/completion/ProviderSearchInjector.d.cts +47 -0
  100. package/dist/completion/ProviderSearchInjector.d.ts +47 -0
  101. package/dist/completion/ProviderSearchInjector.js +60 -0
  102. package/dist/completion/native-search-types.cjs +14 -0
  103. package/dist/completion/native-search-types.d.cts +3 -0
  104. package/dist/completion/native-search-types.d.ts +3 -0
  105. package/dist/completion/native-search-types.js +14 -0
  106. package/dist/completion/openrouter-headers.cjs +16 -0
  107. package/dist/completion/openrouter-headers.d.cts +44 -0
  108. package/dist/completion/openrouter-headers.d.ts +44 -0
  109. package/dist/completion/openrouter-headers.js +16 -0
  110. package/dist/completion/openrouter-models.cjs +29 -0
  111. package/dist/completion/openrouter-models.d.cts +27 -0
  112. package/dist/completion/openrouter-models.d.ts +27 -0
  113. package/dist/completion/openrouter-models.js +29 -0
  114. package/dist/completion/types.cjs +1 -0
  115. package/dist/completion/types.d.cts +3 -0
  116. package/dist/completion/types.d.ts +3 -0
  117. package/dist/completion/types.js +0 -0
  118. package/dist/completion/url-builder.cjs +24 -0
  119. package/dist/completion/url-builder.d.cts +87 -0
  120. package/dist/completion/url-builder.d.ts +87 -0
  121. package/dist/completion/url-builder.js +24 -0
  122. package/dist/completion.cjs +55 -3989
  123. package/dist/completion.d.cts +150 -8
  124. package/dist/completion.d.ts +150 -8
  125. package/dist/completion.js +63 -3953
  126. package/dist/index.cjs +197 -10428
  127. package/dist/index.d.cts +35 -91
  128. package/dist/index.d.ts +35 -91
  129. package/dist/index.js +125 -10267
  130. package/dist/logger-4GvQNzhE.d.cts +22 -0
  131. package/dist/logger-4GvQNzhE.d.ts +22 -0
  132. package/dist/outbound-api/routeResolver.cjs +11 -0
  133. package/dist/outbound-api/routeResolver.d.cts +19 -0
  134. package/dist/outbound-api/routeResolver.d.ts +19 -0
  135. package/dist/outbound-api/routeResolver.js +11 -0
  136. package/dist/outbound-api/subscriptionRegistryPort.cjs +7 -37
  137. package/dist/outbound-api/subscriptionRegistryPort.d.cts +7 -3
  138. package/dist/outbound-api/subscriptionRegistryPort.d.ts +7 -3
  139. package/dist/outbound-api/subscriptionRegistryPort.js +4 -8
  140. package/dist/outbound-api/types.cjs +1 -0
  141. package/dist/{types-CbCN2NQP.d.ts → outbound-api/types.d.cts} +18 -3
  142. package/dist/{types-CGGrKqC_.d.cts → outbound-api/types.d.ts} +18 -3
  143. package/dist/outbound-api/types.js +0 -0
  144. package/dist/outbound-api.cjs +35 -5220
  145. package/dist/outbound-api.d.cts +16 -88
  146. package/dist/outbound-api.d.ts +16 -88
  147. package/dist/outbound-api.js +54 -5193
  148. package/dist/pipeline/AuthSource.cjs +1 -0
  149. package/dist/pipeline/AuthSource.d.cts +101 -0
  150. package/dist/pipeline/AuthSource.d.ts +101 -0
  151. package/dist/pipeline/AuthSource.js +0 -0
  152. package/dist/pipeline/LlmConfigProviderAuth.cjs +8 -0
  153. package/dist/pipeline/LlmConfigProviderAuth.d.cts +87 -0
  154. package/dist/pipeline/LlmConfigProviderAuth.d.ts +87 -0
  155. package/dist/pipeline/LlmConfigProviderAuth.js +8 -0
  156. package/dist/pipeline/SubscriptionAuthSource.cjs +6 -128
  157. package/dist/pipeline/SubscriptionAuthSource.d.cts +165 -3
  158. package/dist/pipeline/SubscriptionAuthSource.d.ts +165 -3
  159. package/dist/pipeline/SubscriptionAuthSource.js +5 -99
  160. package/dist/pipeline/SubscriptionAuthStrategy.cjs +1 -18
  161. package/dist/pipeline/executeProviderCall.cjs +6 -0
  162. package/dist/pipeline/executeProviderCall.d.cts +149 -0
  163. package/dist/pipeline/executeProviderCall.d.ts +149 -0
  164. package/dist/pipeline/executeProviderCall.js +6 -0
  165. package/dist/pipeline/resolveProviderChain.cjs +6 -0
  166. package/dist/pipeline/resolveProviderChain.d.cts +58 -0
  167. package/dist/pipeline/resolveProviderChain.d.ts +58 -0
  168. package/dist/pipeline/resolveProviderChain.js +6 -0
  169. package/dist/pipeline/resolveSubscriptionChain.cjs +6 -0
  170. package/dist/pipeline/resolveSubscriptionChain.d.cts +68 -0
  171. package/dist/pipeline/resolveSubscriptionChain.d.ts +68 -0
  172. package/dist/pipeline/resolveSubscriptionChain.js +6 -0
  173. package/dist/ports/gemini-code-assist-resolver.cjs +7 -37
  174. package/dist/ports/gemini-code-assist-resolver.js +4 -8
  175. package/dist/ports/pricing-store.cjs +1 -0
  176. package/dist/ports/pricing-store.d.cts +50 -0
  177. package/dist/ports/pricing-store.d.ts +50 -0
  178. package/dist/ports/pricing-store.js +0 -0
  179. package/dist/ports/provider-config-source.cjs +1 -0
  180. package/dist/ports/provider-config-source.d.cts +51 -0
  181. package/dist/ports/provider-config-source.d.ts +51 -0
  182. package/dist/ports/provider-config-source.js +0 -0
  183. package/dist/ports/usage-event-store.cjs +1 -0
  184. package/dist/ports/usage-event-store.d.cts +29 -0
  185. package/dist/ports/usage-event-store.d.ts +29 -0
  186. package/dist/ports/usage-event-store.js +0 -0
  187. package/dist/ports/web-search-backend.cjs +1 -0
  188. package/dist/ports/web-search-backend.d.cts +29 -0
  189. package/dist/ports/web-search-backend.d.ts +29 -0
  190. package/dist/ports/web-search-backend.js +0 -0
  191. package/dist/ports.cjs +1 -18
  192. package/dist/ports.d.cts +16 -8
  193. package/dist/ports.d.ts +16 -8
  194. package/dist/provider-proxy/ProviderProxy.cjs +40 -0
  195. package/dist/provider-proxy/ProviderProxy.d.cts +17 -0
  196. package/dist/provider-proxy/ProviderProxy.d.ts +17 -0
  197. package/dist/provider-proxy/ProviderProxy.js +40 -0
  198. package/dist/provider-proxy/ingress/providerProxyShared.cjs +35 -2941
  199. package/dist/provider-proxy/ingress/providerProxyShared.d.cts +7 -3
  200. package/dist/provider-proxy/ingress/providerProxyShared.d.ts +7 -3
  201. package/dist/provider-proxy/ingress/providerProxyShared.js +41 -2914
  202. package/dist/provider-proxy/matchText.cjs +11 -72
  203. package/dist/provider-proxy/matchText.js +6 -39
  204. package/dist/provider-proxy/types.cjs +1 -18
  205. package/dist/provider-proxy/types.d.cts +407 -8
  206. package/dist/provider-proxy/types.d.ts +407 -8
  207. package/dist/provider-proxy.cjs +35 -4654
  208. package/dist/provider-proxy.d.cts +10 -6
  209. package/dist/provider-proxy.d.ts +10 -6
  210. package/dist/provider-proxy.js +39 -4627
  211. package/dist/routeResolver-BrbK6ja9.d.cts +88 -0
  212. package/dist/routeResolver-HE-ZO0fO.d.ts +88 -0
  213. package/dist/serializeError.cjs +5 -81
  214. package/dist/serializeError.js +3 -54
  215. package/dist/sse-parser.cjs +7 -455
  216. package/dist/sse-parser.js +4 -426
  217. package/dist/transformer/TransformerChainExecutor.cjs +4 -318
  218. package/dist/transformer/TransformerChainExecutor.js +4 -291
  219. package/dist/transformer/TransformerService.cjs +5 -289
  220. package/dist/transformer/TransformerService.js +3 -262
  221. package/dist/transformer/anthropicBetaInject.cjs +8 -0
  222. package/dist/transformer/anthropicBetaInject.d.cts +20 -0
  223. package/dist/transformer/anthropicBetaInject.d.ts +20 -0
  224. package/dist/transformer/anthropicBetaInject.js +8 -0
  225. package/dist/transformer/transformers/AnthropicTransformer.cjs +6 -0
  226. package/dist/transformer/transformers/AnthropicTransformer.d.cts +148 -0
  227. package/dist/transformer/transformers/AnthropicTransformer.d.ts +148 -0
  228. package/dist/transformer/transformers/AnthropicTransformer.js +6 -0
  229. package/dist/transformer/transformers/GeminiCodeAssistTransformer.cjs +4 -1106
  230. package/dist/transformer/transformers/GeminiCodeAssistTransformer.js +7 -1079
  231. package/dist/transformer/transformers/GeminiTransformer.cjs +4 -1010
  232. package/dist/transformer/transformers/GeminiTransformer.js +4 -983
  233. package/dist/transformer/transformers/OpenAIResponseTransformer.cjs +3 -535
  234. package/dist/transformer/transformers/OpenAIResponseTransformer.js +3 -510
  235. package/dist/transformer/transformers/OpenCodeGoTransformer.cjs +5 -72
  236. package/dist/transformer/transformers/OpenCodeGoTransformer.js +3 -45
  237. package/dist/transformer/transformers/ReasoningTransformer.cjs +6 -0
  238. package/dist/transformer/transformers/ReasoningTransformer.d.cts +47 -0
  239. package/dist/transformer/transformers/ReasoningTransformer.d.ts +47 -0
  240. package/dist/transformer/transformers/ReasoningTransformer.js +6 -0
  241. package/dist/transformer/transformers.cjs +39 -0
  242. package/dist/transformer/transformers.d.cts +100 -0
  243. package/dist/transformer/transformers.d.ts +100 -0
  244. package/dist/transformer/transformers.js +39 -0
  245. package/dist/transformer/types.cjs +1 -18
  246. package/dist/transformer.cjs +13 -3726
  247. package/dist/transformer.d.cts +8 -31
  248. package/dist/transformer.d.ts +8 -31
  249. package/dist/transformer.js +17 -3706
  250. package/dist/types-BScIHmPr.d.cts +153 -0
  251. package/dist/types-BScIHmPr.d.ts +153 -0
  252. package/dist/usage/pricing-engine.cjs +6 -0
  253. package/dist/usage/pricing-engine.d.cts +83 -0
  254. package/dist/usage/pricing-engine.d.ts +83 -0
  255. package/dist/usage/pricing-engine.js +6 -0
  256. package/dist/usage/usage-recorder.cjs +6 -0
  257. package/dist/usage/usage-recorder.d.cts +73 -0
  258. package/dist/usage/usage-recorder.d.ts +73 -0
  259. package/dist/usage/usage-recorder.js +6 -0
  260. package/dist/usage.cjs +11 -0
  261. package/dist/usage.d.cts +8 -0
  262. package/dist/usage.d.ts +8 -0
  263. package/dist/usage.js +11 -0
  264. package/package.json +3 -3
  265. package/dist/ApiKeyPoolService-BmMkau07.d.cts +0 -170
  266. package/dist/ApiKeyPoolService-BmMkau07.d.ts +0 -170
  267. package/dist/SubscriptionAuthSource-Cr4fVEYY.d.cts +0 -264
  268. package/dist/SubscriptionAuthSource-D89zmiSS.d.ts +0 -264
  269. package/dist/index-BTSmc9Sm.d.ts +0 -645
  270. package/dist/index-DXazdTzZ.d.cts +0 -645
  271. package/dist/types-DCzHkhJt.d.ts +0 -467
  272. package/dist/types-DZIQbgp0.d.cts +0 -467
@@ -0,0 +1,14 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/openrouter.ts
2
+ function isOpenRouterProvider(provider) {
3
+ const baseUrl = (provider.api_base_url || "").toLowerCase();
4
+ return baseUrl.includes("openrouter.ai");
5
+ }
6
+ var OPENROUTER_APP_HEADERS = {
7
+ "HTTP-Referer": "https://omnicross.dev",
8
+ "X-Title": "omnicross"
9
+ };
10
+
11
+
12
+
13
+
14
+ exports.isOpenRouterProvider = isOpenRouterProvider; exports.OPENROUTER_APP_HEADERS = OPENROUTER_APP_HEADERS;
@@ -0,0 +1,147 @@
1
+ import {
2
+ isOpenRouterProvider
3
+ } from "./chunk-E3WHL7CO.js";
4
+ import {
5
+ API_FORMAT_PROVIDER_MAP,
6
+ NATIVE_SEARCH_EXCLUDED_MODELS,
7
+ NATIVE_SEARCH_MODEL_PATTERNS,
8
+ OPENAI_CHAT_COMPLETION_SEARCH_MODELS
9
+ } from "./chunk-FMOBD2OQ.js";
10
+
11
+ // src/completion/NativeSearchInjector.ts
12
+ function detectNativeSearch(modelId, apiFormat, provider, userExplicit) {
13
+ if (isOpenRouterProvider(provider)) {
14
+ return { supported: true, nativeProvider: "openrouter" };
15
+ }
16
+ if (isXaiProvider(provider)) {
17
+ return { supported: true, nativeProvider: "xai" };
18
+ }
19
+ if (apiFormat === "openai" && OPENAI_CHAT_COMPLETION_SEARCH_MODELS.some((m) => modelId.startsWith(m))) {
20
+ return { supported: true, nativeProvider: "openai" };
21
+ }
22
+ const formatProvider = API_FORMAT_PROVIDER_MAP[apiFormat];
23
+ if (formatProvider) {
24
+ const patterns = NATIVE_SEARCH_MODEL_PATTERNS[formatProvider];
25
+ if (patterns.some((re) => re.test(modelId))) {
26
+ if (!NATIVE_SEARCH_EXCLUDED_MODELS.some((m) => modelId.startsWith(m))) {
27
+ return { supported: true, nativeProvider: formatProvider };
28
+ }
29
+ }
30
+ }
31
+ if (userExplicit && formatProvider) {
32
+ return { supported: true, nativeProvider: formatProvider };
33
+ }
34
+ return { supported: false, nativeProvider: null };
35
+ }
36
+ function buildNativeSearchAugmentation(nativeProvider, config, _apiFormat, modelId) {
37
+ if (!config.enabled) return null;
38
+ switch (nativeProvider) {
39
+ case "openai":
40
+ return buildOpenAIAugmentation(config, modelId);
41
+ case "anthropic":
42
+ return buildAnthropicAugmentation(config);
43
+ case "google":
44
+ return buildGoogleAugmentation(modelId);
45
+ case "xai":
46
+ return buildXaiAugmentation(config);
47
+ case "openrouter":
48
+ return buildOpenRouterAugmentation(config);
49
+ default:
50
+ return null;
51
+ }
52
+ }
53
+ function applyAugmentation(requestBody, augmentation) {
54
+ if (augmentation.additionalTools?.length) {
55
+ const existing = requestBody.tools ?? [];
56
+ requestBody.tools = [...existing, ...augmentation.additionalTools];
57
+ }
58
+ if (augmentation.bodyFields) {
59
+ Object.assign(requestBody, augmentation.bodyFields);
60
+ }
61
+ return requestBody;
62
+ }
63
+ function buildOpenAIAugmentation(config, modelId) {
64
+ const isChatCompletionSearch = OPENAI_CHAT_COMPLETION_SEARCH_MODELS.some(
65
+ (m) => modelId.startsWith(m)
66
+ );
67
+ if (isChatCompletionSearch) {
68
+ return {
69
+ bodyFields: {
70
+ web_search_options: {
71
+ search_context_size: config.maxResults ? mapMaxResultsToContextSize(config.maxResults) : "medium"
72
+ }
73
+ }
74
+ };
75
+ }
76
+ return {
77
+ additionalTools: [
78
+ {
79
+ type: "web_search",
80
+ web_search: {
81
+ search_context_size: config.maxResults ? mapMaxResultsToContextSize(config.maxResults) : "medium"
82
+ }
83
+ }
84
+ ]
85
+ };
86
+ }
87
+ function buildAnthropicAugmentation(config) {
88
+ const toolDef = {
89
+ type: "web_search_20250305",
90
+ name: "web_search"
91
+ };
92
+ if (config.maxResults) {
93
+ toolDef.max_uses = config.maxResults;
94
+ }
95
+ if (config.blockedDomains?.length) {
96
+ toolDef.blocked_domains = config.blockedDomains;
97
+ }
98
+ return { additionalTools: [toolDef] };
99
+ }
100
+ function buildGoogleAugmentation(modelId) {
101
+ const isLegacy = /gemini-1[._]/.test(modelId);
102
+ if (isLegacy) {
103
+ return {
104
+ additionalTools: [
105
+ { googleSearchRetrieval: {} }
106
+ ]
107
+ };
108
+ }
109
+ return {
110
+ additionalTools: [
111
+ { google_search: {} }
112
+ ]
113
+ };
114
+ }
115
+ function buildXaiAugmentation(config) {
116
+ const searchParams = {
117
+ mode: config.searchMode ?? "auto",
118
+ return_citations: true,
119
+ max_search_results: config.maxResults ?? 5
120
+ };
121
+ if (config.sources?.length) {
122
+ searchParams.sources = config.sources;
123
+ }
124
+ return { bodyFields: { search_parameters: searchParams } };
125
+ }
126
+ function buildOpenRouterAugmentation(config) {
127
+ const plugin = { id: "web" };
128
+ if (config.maxResults) {
129
+ plugin.max_results = config.maxResults;
130
+ }
131
+ return { bodyFields: { plugins: [plugin] } };
132
+ }
133
+ function isXaiProvider(provider) {
134
+ const baseUrl = (provider.api_base_url || "").toLowerCase();
135
+ return baseUrl.includes("x.ai") || baseUrl.includes("xai.com");
136
+ }
137
+ function mapMaxResultsToContextSize(maxResults) {
138
+ if (maxResults <= 2) return "low";
139
+ if (maxResults <= 5) return "medium";
140
+ return "high";
141
+ }
142
+
143
+ export {
144
+ detectNativeSearch,
145
+ buildNativeSearchAugmentation,
146
+ applyAugmentation
147
+ };
@@ -0,0 +1,53 @@
1
+ import {
2
+ serializeError
3
+ } from "./chunk-AVYJ4YBN.js";
4
+
5
+ // src/pipeline/SubscriptionAuthSource.ts
6
+ function stripAuthHeaders(headers) {
7
+ delete headers.authorization;
8
+ delete headers.Authorization;
9
+ delete headers["x-api-key"];
10
+ delete headers["X-Api-Key"];
11
+ delete headers["x-goog-api-key"];
12
+ delete headers["X-Goog-Api-Key"];
13
+ }
14
+ var SubscriptionAuthSource = class {
15
+ constructor(profile) {
16
+ this.profile = profile;
17
+ }
18
+ profile;
19
+ /**
20
+ * Strip any transformer-set auth headers, then delegate to the bound
21
+ * strategy. Mirrors `SubscriptionDispatcher`'s
22
+ * `stripAuthHeaders(...)` + `applyHeadersWithRetry(...)` sequence, including
23
+ * the best-effort swallow-and-warn around a throwing `applyHeaders`.
24
+ *
25
+ * The strategy's looser `AuthApplyHints` (optional `upstreamUrl` /
26
+ * `resolvedModel`) is fed from the pipeline's required `{ upstreamUrl,
27
+ * model }` at the boundary.
28
+ */
29
+ async applyHeaders(headers, hints) {
30
+ stripAuthHeaders(headers);
31
+ try {
32
+ await this.profile.authStrategy.applyHeaders(headers, {
33
+ upstreamUrl: hints.upstreamUrl,
34
+ resolvedModel: hints.model
35
+ });
36
+ } catch (err) {
37
+ console.warn("[SubscriptionAuthSource] authStrategy.applyHeaders threw:", serializeError(err));
38
+ }
39
+ }
40
+ /** Delegate the 401-refresh decision to the bound strategy. */
41
+ async onUnauthorized() {
42
+ return this.profile.authStrategy.onUnauthorized();
43
+ }
44
+ /** Resolve the upstream URL from the profile, when it provides one. */
45
+ resolveUpstreamUrl(model) {
46
+ return this.profile.resolveUpstreamUrl?.(model);
47
+ }
48
+ };
49
+
50
+ export {
51
+ stripAuthHeaders,
52
+ SubscriptionAuthSource
53
+ };
File without changes
@@ -0,0 +1,87 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;
2
+
3
+
4
+
5
+
6
+ var _chunkYGXJGRFIcjs = require('./chunk-YGXJGRFI.cjs');
7
+
8
+ // src/transformer/transformers/GeminiTransformer.ts
9
+ var GeminiTransformer = (_class = class {
10
+ static __initStatic() {this.TransformerName = "gemini"}
11
+ __init() {this.name = "gemini"}
12
+
13
+ /**
14
+ * API endpoint pattern for Gemini
15
+ * :modelAndAction will be replaced with actual model and action
16
+ */
17
+ __init2() {this.endPoint = "/v1beta/models/:modelAndAction"}
18
+ /** Use Bearer token instead of x-goog-api-key (for relay providers) */
19
+
20
+ constructor(options) {;_class.prototype.__init.call(this);_class.prototype.__init2.call(this);
21
+ this.useBearer = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _ => _.UseBearer]), () => ( false));
22
+ }
23
+ /**
24
+ * Handle authentication
25
+ * - Official Gemini: x-goog-api-key header
26
+ * - Relay providers: Authorization: Bearer header
27
+ */
28
+ async auth(request, provider, _context) {
29
+ const headers = {};
30
+ if (this.useBearer) {
31
+ headers["authorization"] = `Bearer ${provider.apiKey}`;
32
+ headers["x-goog-api-key"] = void 0;
33
+ } else {
34
+ headers["x-goog-api-key"] = provider.apiKey;
35
+ headers["authorization"] = void 0;
36
+ }
37
+ return {
38
+ body: request,
39
+ config: { headers }
40
+ };
41
+ }
42
+ /**
43
+ * Transform request from unified format to Gemini format
44
+ * Also builds the correct URL for the Gemini API
45
+ */
46
+ async transformRequestIn(request, provider, _context) {
47
+ const body = _chunkYGXJGRFIcjs.buildRequestBody.call(void 0, request);
48
+ const action = request.stream ? "streamGenerateContent?alt=sse" : "generateContent";
49
+ const url = new URL(`./${request.model}:${action}`, provider.baseUrl);
50
+ const headers = {};
51
+ if (this.useBearer) {
52
+ headers["authorization"] = `Bearer ${provider.apiKey}`;
53
+ headers["x-goog-api-key"] = void 0;
54
+ } else {
55
+ headers["x-goog-api-key"] = provider.apiKey;
56
+ headers["Authorization"] = void 0;
57
+ }
58
+ return {
59
+ body,
60
+ config: { url, headers }
61
+ };
62
+ }
63
+ /**
64
+ * Transform incoming request to unified format
65
+ * (For requests coming into the Gemini endpoint)
66
+ */
67
+ async transformRequestOut(request, _context) {
68
+ return _chunkYGXJGRFIcjs.transformRequestOut.call(void 0, request);
69
+ }
70
+ /**
71
+ * Transform Gemini response to OpenAI-compatible format
72
+ */
73
+ async transformResponseOut(response, _context) {
74
+ return _chunkYGXJGRFIcjs.transformResponseOut.call(void 0, response, this.name, this.logger);
75
+ }
76
+ /**
77
+ * Transform OpenAI-compatible response back to Gemini format
78
+ * (For endpoint mode — returning Gemini-format responses to the client)
79
+ */
80
+ async transformResponseIn(response, _context) {
81
+ return _chunkYGXJGRFIcjs.transformResponseIn.call(void 0, response, this.logger);
82
+ }
83
+ }, _class.__initStatic(), _class);
84
+
85
+
86
+
87
+ exports.GeminiTransformer = GeminiTransformer;
@@ -0,0 +1,105 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/completion/url-builder.ts
2
+ var _endpointresolver = require('@omnicross/contracts/endpoint-resolver');
3
+ function resolveApiFormat(provider) {
4
+ if (provider.apiFormat) {
5
+ return provider.apiFormat;
6
+ }
7
+ if (provider.chatApiFormat) {
8
+ return provider.chatApiFormat;
9
+ }
10
+ if (provider.apiType === "claudecode" || provider.apiType === "anthropic") {
11
+ return "anthropic";
12
+ }
13
+ if (provider.apiType === "google") {
14
+ return "google";
15
+ }
16
+ return "openai";
17
+ }
18
+ function buildOpenAIApiUrl(baseUrl) {
19
+ const url = baseUrl.replace(/\/+$/, "");
20
+ if (url.endsWith("/chat/completions")) {
21
+ return url;
22
+ }
23
+ if (/\/v\d+$/.test(url)) {
24
+ return url + "/chat/completions";
25
+ }
26
+ if (url.includes("/chat/completions")) {
27
+ return url;
28
+ }
29
+ return url + "/v1/chat/completions";
30
+ }
31
+ function buildAnthropicApiUrl(baseUrl) {
32
+ const url = baseUrl.replace(/\/+$/, "");
33
+ if (url.endsWith("/messages")) {
34
+ return url;
35
+ }
36
+ if (url.includes("/messages")) {
37
+ return url;
38
+ }
39
+ if (/\/v\d+$/.test(url)) {
40
+ return url + "/messages";
41
+ }
42
+ return url + "/v1/messages";
43
+ }
44
+ function buildGeminiModelActionUrl(baseUrl, model, action) {
45
+ let url = baseUrl.replace(/\/+$/, "");
46
+ if (url.includes("/models/")) {
47
+ return url;
48
+ }
49
+ if (!/\/v\d+(?:beta)?(?:$|\/)/.test(url)) {
50
+ url += "/v1beta";
51
+ }
52
+ return `${url}/models/${model}:${action}`;
53
+ }
54
+ function buildGeminiApiUrl(baseUrl, model, stream) {
55
+ const action = stream ? "streamGenerateContent?alt=sse" : "generateContent";
56
+ return buildGeminiModelActionUrl(baseUrl, model, action);
57
+ }
58
+ function normalizeAzureEndpoint(endpoint) {
59
+ return endpoint.replace(/\/+$/, "").replace(/\/openai(\/v\d+)?$/, "");
60
+ }
61
+ function buildAzureOpenAIApiUrl(baseUrl, model, apiVersion) {
62
+ const endpoint = normalizeAzureEndpoint(baseUrl);
63
+ return `${endpoint}/openai/deployments/${model}/chat/completions?api-version=${apiVersion}`;
64
+ }
65
+ function buildOpenAIResponseApiUrl(baseUrl) {
66
+ const url = baseUrl.replace(/\/+$/, "");
67
+ if (url.endsWith("/responses")) {
68
+ return url;
69
+ }
70
+ if (/\/v\d+$/.test(url)) {
71
+ return url + "/responses";
72
+ }
73
+ return url + "/v1/responses";
74
+ }
75
+ var resolveProviderEndpoint = _endpointresolver.resolveProviderEndpoint;
76
+ function buildProviderApiUrl(provider, options = {}) {
77
+ const format = resolveApiFormat(provider);
78
+ const { baseUrl } = resolveProviderEndpoint(provider);
79
+ switch (format) {
80
+ case "anthropic":
81
+ return buildAnthropicApiUrl(baseUrl);
82
+ case "google":
83
+ return buildGeminiApiUrl(baseUrl, options.model || "", options.stream || false);
84
+ case "azure-openai":
85
+ return buildAzureOpenAIApiUrl(baseUrl, options.model || "", provider.apiVersion || "2024-08-01-preview");
86
+ case "openai-response":
87
+ return buildOpenAIResponseApiUrl(baseUrl);
88
+ case "openai":
89
+ default:
90
+ return buildOpenAIApiUrl(baseUrl);
91
+ }
92
+ }
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+
103
+
104
+
105
+ exports.resolveApiFormat = resolveApiFormat; exports.buildOpenAIApiUrl = buildOpenAIApiUrl; exports.buildAnthropicApiUrl = buildAnthropicApiUrl; exports.buildGeminiModelActionUrl = buildGeminiModelActionUrl; exports.buildGeminiApiUrl = buildGeminiApiUrl; exports.normalizeAzureEndpoint = normalizeAzureEndpoint; exports.buildAzureOpenAIApiUrl = buildAzureOpenAIApiUrl; exports.buildOpenAIResponseApiUrl = buildOpenAIResponseApiUrl; exports.resolveProviderEndpoint = resolveProviderEndpoint; exports.buildProviderApiUrl = buildProviderApiUrl;
@@ -0,0 +1,13 @@
1
+ // src/outbound-api/subscriptionRegistryPort.ts
2
+ var _registry = null;
3
+ function setSubscriptionRegistryForOutbound(registry) {
4
+ _registry = registry;
5
+ }
6
+ function getSubscriptionRegistryForOutbound() {
7
+ return _registry;
8
+ }
9
+
10
+ export {
11
+ setSubscriptionRegistryForOutbound,
12
+ getSubscriptionRegistryForOutbound
13
+ };
@@ -0,0 +1,58 @@
1
+ // src/serializeError.ts
2
+ function serializeError(err) {
3
+ if (err == null) return "Unknown error (null)";
4
+ if (err instanceof Error) {
5
+ let msg = err.message || err.name || "Error";
6
+ if (err.cause) {
7
+ msg += ` [cause: ${serializeError(err.cause)}]`;
8
+ }
9
+ const anyErr = err;
10
+ if (anyErr.status != null) msg += ` (status: ${anyErr.status})`;
11
+ else if (anyErr.code != null) msg += ` (code: ${anyErr.code})`;
12
+ return msg;
13
+ }
14
+ if (typeof err === "string") return err || "Empty error string";
15
+ if (typeof err !== "object") return String(err);
16
+ const obj = err;
17
+ if (typeof obj.message === "string" && obj.message) {
18
+ let msg = obj.message;
19
+ if (obj.status != null) msg += ` (status: ${obj.status})`;
20
+ else if (obj.code != null) msg += ` (code: ${obj.code})`;
21
+ if (typeof obj.type === "string") msg += ` [type: ${obj.type}]`;
22
+ return msg;
23
+ }
24
+ if (typeof obj.error === "string" && obj.error) {
25
+ return obj.error;
26
+ }
27
+ if (obj.error && typeof obj.error === "object") {
28
+ const inner = obj.error;
29
+ if (typeof inner.message === "string" && inner.message) {
30
+ let msg = inner.message;
31
+ if (typeof inner.type === "string") msg += ` [type: ${inner.type}]`;
32
+ return msg;
33
+ }
34
+ }
35
+ try {
36
+ const json = JSON.stringify(err, getCircularReplacer(), 2);
37
+ if (json && json.length > 1e3) {
38
+ return json.slice(0, 1e3) + "... (truncated)";
39
+ }
40
+ return json || "Unserializable error";
41
+ } catch {
42
+ return `Unserializable error: ${Object.prototype.toString.call(err)}`;
43
+ }
44
+ }
45
+ function getCircularReplacer() {
46
+ const seen = /* @__PURE__ */ new WeakSet();
47
+ return (_key, value) => {
48
+ if (typeof value === "object" && value !== null) {
49
+ if (seen.has(value)) return "[Circular]";
50
+ seen.add(value);
51
+ }
52
+ return value;
53
+ };
54
+ }
55
+
56
+ export {
57
+ serializeError
58
+ };
@@ -0,0 +1,49 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;// src/transformer/transformers/OpenCodeGoTransformer.ts
2
+ var OpenCodeGoTransformer = (_class = class {constructor() { _class.prototype.__init.call(this);_class.prototype.__init2.call(this); }
3
+ static __initStatic() {this.TransformerName = "opencodego"}
4
+ __init() {this.name = "opencodego"}
5
+ __init2() {this.endPoint = "/v1/chat/completions"}
6
+
7
+ async auth(request, _provider, _context) {
8
+ return { body: request, config: { headers: {} } };
9
+ }
10
+ /**
11
+ * Unified → OpenAI Chat Completions.
12
+ * Unified IS chat completions shape; this is mostly stripping `meta` and
13
+ * normalizing string-content single-block messages.
14
+ */
15
+ async transformRequestIn(request, _provider, _context) {
16
+ const messages = request.messages.map((m) => {
17
+ const content = m.content;
18
+ if (Array.isArray(content) && content.length === 1 && _optionalChain([content, 'access', _ => _[0], 'optionalAccess', _2 => _2.type]) === "text") {
19
+ return { ...m, content: content[0].text };
20
+ }
21
+ return m;
22
+ });
23
+ const out = {
24
+ model: request.model,
25
+ messages,
26
+ stream: request.stream
27
+ };
28
+ if (request.temperature !== void 0) out.temperature = request.temperature;
29
+ if (request.max_tokens !== void 0) out.max_tokens = request.max_tokens;
30
+ if (request.tools && request.tools.length > 0) out.tools = request.tools;
31
+ if (request.tool_choice !== void 0) out.tool_choice = request.tool_choice;
32
+ if (_optionalChain([request, 'access', _3 => _3.reasoning, 'optionalAccess', _4 => _4.effort]) && request.reasoning.effort !== "none") {
33
+ out.reasoning_effort = request.reasoning.effort;
34
+ }
35
+ return out;
36
+ }
37
+ /**
38
+ * OpenAI Chat Completions response → Unified.
39
+ * The upstream's response shape already matches Unified — pass through.
40
+ * The endpoint AnthropicTransformer re-encodes to Anthropic for the SDK.
41
+ */
42
+ async transformResponseOut(response, _context) {
43
+ return response;
44
+ }
45
+ }, _class.__initStatic(), _class);
46
+
47
+
48
+
49
+ exports.OpenCodeGoTransformer = OpenCodeGoTransformer;
@@ -0,0 +1,87 @@
1
+ import {
2
+ buildRequestBody,
3
+ transformRequestOut,
4
+ transformResponseIn,
5
+ transformResponseOut
6
+ } from "./chunk-S4WBV25P.js";
7
+
8
+ // src/transformer/transformers/GeminiTransformer.ts
9
+ var GeminiTransformer = class {
10
+ static TransformerName = "gemini";
11
+ name = "gemini";
12
+ logger;
13
+ /**
14
+ * API endpoint pattern for Gemini
15
+ * :modelAndAction will be replaced with actual model and action
16
+ */
17
+ endPoint = "/v1beta/models/:modelAndAction";
18
+ /** Use Bearer token instead of x-goog-api-key (for relay providers) */
19
+ useBearer;
20
+ constructor(options) {
21
+ this.useBearer = options?.UseBearer ?? false;
22
+ }
23
+ /**
24
+ * Handle authentication
25
+ * - Official Gemini: x-goog-api-key header
26
+ * - Relay providers: Authorization: Bearer header
27
+ */
28
+ async auth(request, provider, _context) {
29
+ const headers = {};
30
+ if (this.useBearer) {
31
+ headers["authorization"] = `Bearer ${provider.apiKey}`;
32
+ headers["x-goog-api-key"] = void 0;
33
+ } else {
34
+ headers["x-goog-api-key"] = provider.apiKey;
35
+ headers["authorization"] = void 0;
36
+ }
37
+ return {
38
+ body: request,
39
+ config: { headers }
40
+ };
41
+ }
42
+ /**
43
+ * Transform request from unified format to Gemini format
44
+ * Also builds the correct URL for the Gemini API
45
+ */
46
+ async transformRequestIn(request, provider, _context) {
47
+ const body = buildRequestBody(request);
48
+ const action = request.stream ? "streamGenerateContent?alt=sse" : "generateContent";
49
+ const url = new URL(`./${request.model}:${action}`, provider.baseUrl);
50
+ const headers = {};
51
+ if (this.useBearer) {
52
+ headers["authorization"] = `Bearer ${provider.apiKey}`;
53
+ headers["x-goog-api-key"] = void 0;
54
+ } else {
55
+ headers["x-goog-api-key"] = provider.apiKey;
56
+ headers["Authorization"] = void 0;
57
+ }
58
+ return {
59
+ body,
60
+ config: { url, headers }
61
+ };
62
+ }
63
+ /**
64
+ * Transform incoming request to unified format
65
+ * (For requests coming into the Gemini endpoint)
66
+ */
67
+ async transformRequestOut(request, _context) {
68
+ return transformRequestOut(request);
69
+ }
70
+ /**
71
+ * Transform Gemini response to OpenAI-compatible format
72
+ */
73
+ async transformResponseOut(response, _context) {
74
+ return transformResponseOut(response, this.name, this.logger);
75
+ }
76
+ /**
77
+ * Transform OpenAI-compatible response back to Gemini format
78
+ * (For endpoint mode — returning Gemini-format responses to the client)
79
+ */
80
+ async transformResponseIn(response, _context) {
81
+ return transformResponseIn(response, this.logger);
82
+ }
83
+ };
84
+
85
+ export {
86
+ GeminiTransformer
87
+ };