@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
@@ -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
+ };