@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,124 @@
1
+ import {
2
+ resolveApiFormat
3
+ } from "./chunk-H5JUT3KV.js";
4
+ import {
5
+ OPENROUTER_APP_HEADERS,
6
+ isOpenRouterProvider
7
+ } from "./chunk-E3WHL7CO.js";
8
+
9
+ // src/completion/header-builder.ts
10
+ function getProviderHeaders(provider, apiKey) {
11
+ const format = resolveApiFormat(provider);
12
+ let headers;
13
+ switch (format) {
14
+ case "anthropic":
15
+ headers = {
16
+ "Content-Type": "application/json",
17
+ "x-api-key": apiKey,
18
+ "anthropic-version": "2025-01-10"
19
+ // Required for extended thinking feature
20
+ };
21
+ break;
22
+ case "google":
23
+ headers = {
24
+ "Content-Type": "application/json",
25
+ "x-goog-api-key": apiKey
26
+ };
27
+ break;
28
+ case "azure-openai":
29
+ headers = {
30
+ "Content-Type": "application/json",
31
+ "api-key": apiKey
32
+ };
33
+ break;
34
+ case "openai":
35
+ case "openai-response":
36
+ default:
37
+ headers = {
38
+ "Content-Type": "application/json",
39
+ "Authorization": `Bearer ${apiKey}`
40
+ };
41
+ break;
42
+ }
43
+ if (isOpenRouterProvider(provider)) {
44
+ return { ...headers, ...OPENROUTER_APP_HEADERS };
45
+ }
46
+ return headers;
47
+ }
48
+
49
+ // src/pipeline/LlmConfigProviderAuth.ts
50
+ function isReportableStatus(status) {
51
+ return status === 429 || status === 529 || status === 401 || status === 403;
52
+ }
53
+ var LlmConfigProviderAuth = class {
54
+ provider;
55
+ apiKeyPool;
56
+ providerId;
57
+ sessionId;
58
+ /**
59
+ * The current resolved key. Mutable so a Phase-3 caller can read the
60
+ * rotated key after `onResult`; this phase it is only set at construction
61
+ * and updated inside `onResult` (mirroring the inline re-point in
62
+ * `callWithPoolReporting`).
63
+ */
64
+ apiKey;
65
+ constructor(opts) {
66
+ this.provider = opts.provider;
67
+ this.apiKey = opts.apiKey;
68
+ this.apiKeyPool = opts.apiKeyPool ?? null;
69
+ this.providerId = opts.providerId;
70
+ this.sessionId = opts.sessionId;
71
+ }
72
+ /**
73
+ * Merge the provider auth headers (and content-type / OpenRouter app
74
+ * headers) into `headers`, exactly as a direct `getProviderHeaders` call
75
+ * would produce them. `hints` are accepted for contract symmetry but the
76
+ * provider-key path does not vary headers by URL/model.
77
+ */
78
+ applyHeaders(headers, _hints) {
79
+ const authHeaders = getProviderHeaders(this.provider, this.apiKey);
80
+ for (const [k, v] of Object.entries(authHeaders)) {
81
+ headers[k] = v;
82
+ }
83
+ }
84
+ /**
85
+ * React to the final HTTP status — the pool-rotation seam (design D5).
86
+ *
87
+ * Reproduces `callWithPoolReporting`'s reportable + success branches:
88
+ * - reportable status (429/529/401/403) on a pool-backed request →
89
+ * `reportError(providerId, sessionId, status)`; when it hands back a
90
+ * `newKey` the session was re-bound, so we adopt it (`this.apiKey`) and
91
+ * return `{ rebound: true, newKey }`. When no key is available it returns
92
+ * `{ rebound: false }` (the session is still cooled/disabled by the report).
93
+ * - success / any 2xx → `reportSuccess(sessionId)`; `{ rebound: false }`.
94
+ * - non-reportable, non-success, or non-pool request → no-op
95
+ * `{ rebound: false }`.
96
+ *
97
+ * NOTE: no caller invokes this in Phase 2; it is unit-tested in isolation.
98
+ */
99
+ async onResult(status) {
100
+ const pool = this.apiKeyPool;
101
+ const providerId = this.providerId;
102
+ const sessionId = this.sessionId;
103
+ if (!pool || !providerId || !sessionId) {
104
+ return { rebound: false };
105
+ }
106
+ if (isReportableStatus(status)) {
107
+ const newKey = await pool.reportError(providerId, sessionId, status);
108
+ if (newKey) {
109
+ this.apiKey = newKey;
110
+ return { rebound: true, newKey };
111
+ }
112
+ return { rebound: false };
113
+ }
114
+ if (status !== null && status >= 200 && status < 300) {
115
+ pool.reportSuccess(sessionId);
116
+ }
117
+ return { rebound: false };
118
+ }
119
+ };
120
+
121
+ export {
122
+ getProviderHeaders,
123
+ LlmConfigProviderAuth
124
+ };
@@ -0,0 +1,13 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});// 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
+
11
+
12
+
13
+ exports.setSubscriptionRegistryForOutbound = setSubscriptionRegistryForOutbound; exports.getSubscriptionRegistryForOutbound = getSubscriptionRegistryForOutbound;
@@ -0,0 +1,46 @@
1
+ // src/provider-proxy/matchText.ts
2
+ var MATCH_TEXT_PER_MESSAGE_CAP = 8192;
3
+ var MATCH_TEXT_RECENT_MESSAGES = 6;
4
+ function flattenMatchText(value) {
5
+ if (typeof value === "string") return value;
6
+ if (Array.isArray(value)) {
7
+ const parts = [];
8
+ for (const item of value) {
9
+ const text = flattenMatchText(item);
10
+ if (text) parts.push(text);
11
+ }
12
+ return parts.join("\n");
13
+ }
14
+ if (value && typeof value === "object") {
15
+ const obj = value;
16
+ if (obj.type === "tool_result" && obj.content !== void 0) {
17
+ return flattenMatchText(obj.content);
18
+ }
19
+ if (typeof obj.text === "string") return obj.text;
20
+ }
21
+ return "";
22
+ }
23
+ function collectMatchText(anthropicBody) {
24
+ const messages = Array.isArray(anthropicBody.messages) ? anthropicBody.messages : [];
25
+ const slices = [];
26
+ const sys = flattenMatchText(anthropicBody.system).trim();
27
+ if (sys) slices.push(sys.slice(0, MATCH_TEXT_PER_MESSAGE_CAP));
28
+ const recent = [];
29
+ for (let i = messages.length - 1; i >= 0 && recent.length < MATCH_TEXT_RECENT_MESSAGES; i--) {
30
+ const message = messages[i];
31
+ if (!message || typeof message !== "object") continue;
32
+ const role = message.role;
33
+ if (role !== "user" && role !== "system") continue;
34
+ const text = flattenMatchText(message.content).trim();
35
+ if (text) recent.push(text.slice(0, MATCH_TEXT_PER_MESSAGE_CAP));
36
+ }
37
+ for (let i = recent.length - 1; i >= 0; i--) slices.push(recent[i]);
38
+ return slices;
39
+ }
40
+
41
+ export {
42
+ MATCH_TEXT_PER_MESSAGE_CAP,
43
+ MATCH_TEXT_RECENT_MESSAGES,
44
+ flattenMatchText,
45
+ collectMatchText
46
+ };
@@ -0,0 +1,23 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/pipeline/resolveProviderChain.ts
2
+ async function resolveProviderChain(llmConfig, providerId, model) {
3
+ const cachedChain = await llmConfig.resolveTransformerChain(providerId, model);
4
+ const mainTransformer = await llmConfig.getMainTransformer(providerId);
5
+ const chain = {
6
+ providerTransformers: [...cachedChain.providerTransformers],
7
+ modelTransformers: [...cachedChain.modelTransformers]
8
+ };
9
+ if (mainTransformer) {
10
+ const alreadyInChain = chain.providerTransformers.some(
11
+ (t) => t.name === mainTransformer.name
12
+ );
13
+ if (!alreadyInChain) {
14
+ chain.providerTransformers.unshift(mainTransformer);
15
+ }
16
+ }
17
+ const hasTransformers = chain.providerTransformers.length > 0 || chain.modelTransformers.length > 0;
18
+ return { chain, mainTransformer, hasTransformers };
19
+ }
20
+
21
+
22
+
23
+ exports.resolveProviderChain = resolveProviderChain;
@@ -0,0 +1,13 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/ports/gemini-code-assist-resolver.ts
2
+ var resolver = null;
3
+ function setGeminiCodeAssistResolver(impl) {
4
+ resolver = impl;
5
+ }
6
+ function getGeminiCodeAssistResolver() {
7
+ return resolver;
8
+ }
9
+
10
+
11
+
12
+
13
+ exports.setGeminiCodeAssistResolver = setGeminiCodeAssistResolver; exports.getGeminiCodeAssistResolver = getGeminiCodeAssistResolver;
@@ -0,0 +1,186 @@
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/GeminiCodeAssistTransformer.ts
9
+ var DEFAULT_CODE_ASSIST_ENDPOINT = "https://cloudcode-pa.googleapis.com";
10
+ var DEFAULT_CODE_ASSIST_API_VERSION = "v1internal";
11
+ function resolveCodeAssistEndpoint() {
12
+ return (process.env.CODE_ASSIST_ENDPOINT || DEFAULT_CODE_ASSIST_ENDPOINT).replace(/\/+$/, "");
13
+ }
14
+ function resolveCodeAssistApiVersion() {
15
+ return process.env.CODE_ASSIST_API_VERSION || DEFAULT_CODE_ASSIST_API_VERSION;
16
+ }
17
+ function buildCodeAssistUrl(stream) {
18
+ const base = resolveCodeAssistEndpoint();
19
+ const version = resolveCodeAssistApiVersion();
20
+ const method = stream ? "streamGenerateContent?alt=sse" : "generateContent";
21
+ return `${base}/${version}:${method}`;
22
+ }
23
+ function generateUserPromptId() {
24
+ const c = globalThis.crypto;
25
+ if (_optionalChain([c, 'optionalAccess', _ => _.randomUUID])) return c.randomUUID();
26
+ return `omnicross-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
27
+ }
28
+ function peelResponseEnvelope(parsed) {
29
+ if (parsed && typeof parsed === "object" && "response" in parsed) {
30
+ return parsed.response;
31
+ }
32
+ return parsed;
33
+ }
34
+ async function unwrapCodeAssistResponse(response) {
35
+ const contentType = _nullishCoalesce(response.headers.get("Content-Type"), () => ( ""));
36
+ if (contentType.includes("stream") || contentType.includes("text/event-stream")) {
37
+ const sourceBody = response.body;
38
+ if (!sourceBody) return response;
39
+ const decoder = new TextDecoder();
40
+ const encoder = new TextEncoder();
41
+ const peeled = new ReadableStream({
42
+ async start(controller) {
43
+ const reader = sourceBody.getReader();
44
+ let buffer = "";
45
+ const processLine = (line) => {
46
+ if (!line.startsWith("data:")) {
47
+ if (line.length > 0) controller.enqueue(encoder.encode(`${line}
48
+ `));
49
+ return;
50
+ }
51
+ const payload = line.slice(line.indexOf(":") + 1).trim();
52
+ if (!payload || payload === "[DONE]") {
53
+ controller.enqueue(encoder.encode(`${line}
54
+ `));
55
+ return;
56
+ }
57
+ try {
58
+ const parsed = JSON.parse(payload);
59
+ const inner2 = peelResponseEnvelope(parsed);
60
+ controller.enqueue(encoder.encode(`data: ${JSON.stringify(inner2)}
61
+ `));
62
+ } catch (e) {
63
+ controller.enqueue(encoder.encode(`${line}
64
+ `));
65
+ }
66
+ };
67
+ try {
68
+ while (true) {
69
+ const { done, value } = await reader.read();
70
+ if (done) {
71
+ if (buffer) processLine(buffer);
72
+ break;
73
+ }
74
+ buffer += decoder.decode(value, { stream: true });
75
+ const lines = buffer.split("\n");
76
+ buffer = lines.pop() || "";
77
+ for (const line of lines) processLine(line);
78
+ }
79
+ } catch (err) {
80
+ controller.error(err);
81
+ } finally {
82
+ controller.close();
83
+ }
84
+ }
85
+ });
86
+ return new Response(peeled, {
87
+ status: response.status,
88
+ statusText: response.statusText,
89
+ headers: response.headers
90
+ });
91
+ }
92
+ const raw = await response.json().catch(() => null);
93
+ const inner = peelResponseEnvelope(raw);
94
+ return new Response(JSON.stringify(inner), {
95
+ status: response.status,
96
+ statusText: response.statusText,
97
+ headers: response.headers
98
+ });
99
+ }
100
+ var GeminiCodeAssistTransformer = (_class = class {constructor() { _class.prototype.__init.call(this);_class.prototype.__init2.call(this); }
101
+ static __initStatic() {this.TransformerName = "gemini-code-assist"}
102
+ __init() {this.name = "gemini-code-assist"}
103
+
104
+ /** Code Assist has no fixed `/models/:modelAndAction` endpoint pattern — the
105
+ * URL is built per-request in `transformRequestIn`. Left undefined so the
106
+ * TransformerService does NOT treat this as an endpoint (reverse) transformer. */
107
+ __init2() {this.endPoint = void 0}
108
+ /**
109
+ * unified → Code Assist envelope.
110
+ *
111
+ * Builds the inner public-Gemini body via the shared `buildRequestBody`, then
112
+ * wraps it as `{ model, project, user_prompt_id, request: <inner> }` and sets
113
+ * the Code Assist URL + Bearer-only headers.
114
+ *
115
+ * The resolved Code Assist `project` is threaded in via `provider.geminiProject`
116
+ * (stashed by the subscription dispatch seam — see SubscriptionDispatcher /
117
+ * openaiResponsesIngress). `undefined` is the valid fresh free-tier value.
118
+ */
119
+ async transformRequestIn(request, provider, _context) {
120
+ const inner = _chunkYGXJGRFIcjs.buildRequestBody.call(void 0, request);
121
+ const envelope = {
122
+ model: request.model,
123
+ project: provider.geminiProject,
124
+ user_prompt_id: generateUserPromptId(),
125
+ request: inner
126
+ };
127
+ const url = buildCodeAssistUrl(Boolean(request.stream));
128
+ const headers = {
129
+ "x-goog-api-key": void 0,
130
+ "X-Goog-Api-Key": void 0
131
+ };
132
+ return {
133
+ body: envelope,
134
+ config: { url, headers }
135
+ };
136
+ }
137
+ /**
138
+ * Code Assist request → unified (endpoint-decode parity with GeminiTransformer).
139
+ * Peels the top-level `request` envelope first, then delegates to the shared
140
+ * gemini request decoder. Not used on the subscription dispatch path (the
141
+ * endpoint transformer there is Anthropic/OpenAI-Response), but provided for
142
+ * completeness so this transformer is a drop-in for the gemini one.
143
+ */
144
+ async transformRequestOut(request, _context) {
145
+ const r = request;
146
+ const inner = r && typeof r === "object" && "request" in r ? r.request : r;
147
+ if (inner && typeof inner === "object" && !("model" in inner) && "model" in r) {
148
+ inner.model = r.model;
149
+ }
150
+ return _chunkYGXJGRFIcjs.transformRequestOut.call(void 0, inner);
151
+ }
152
+ /**
153
+ * Code Assist response → OpenAI-compatible. PEEL the `.response` envelope from
154
+ * the body / each SSE chunk, then DELEGATE to the existing gemini parser.
155
+ */
156
+ async transformResponseOut(response, _context) {
157
+ const unwrapped = await unwrapCodeAssistResponse(response);
158
+ return _chunkYGXJGRFIcjs.transformResponseOut.call(void 0, unwrapped, this.name, this.logger);
159
+ }
160
+ /**
161
+ * OpenAI-compatible response → Code Assist (endpoint-encode parity). Re-wraps
162
+ * the standard gemini response under the top-level `response` key after the
163
+ * shared gemini encoder produces a public-Gemini body. Symmetric with
164
+ * `transformResponseOut`'s peel.
165
+ */
166
+ async transformResponseIn(response, _context) {
167
+ const geminiResponse = await _chunkYGXJGRFIcjs.transformResponseIn.call(void 0, response, this.logger);
168
+ const contentType = _nullishCoalesce(geminiResponse.headers.get("Content-Type"), () => ( ""));
169
+ if (contentType.includes("text/event-stream")) {
170
+ return geminiResponse;
171
+ }
172
+ const data = await geminiResponse.json().catch(() => null);
173
+ return new Response(JSON.stringify({ response: data }), {
174
+ status: geminiResponse.status,
175
+ statusText: geminiResponse.statusText,
176
+ headers: { "Content-Type": "application/json" }
177
+ });
178
+ }
179
+ }, _class.__initStatic(), _class);
180
+
181
+
182
+
183
+
184
+
185
+
186
+ exports.resolveCodeAssistEndpoint = resolveCodeAssistEndpoint; exports.resolveCodeAssistApiVersion = resolveCodeAssistApiVersion; exports.buildCodeAssistUrl = buildCodeAssistUrl; exports.GeminiCodeAssistTransformer = GeminiCodeAssistTransformer;