@omnicross/core 0.1.1 → 0.1.3

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 (259) 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 +32 -60
  6. package/dist/auth/GeminiCodeAssistProjectResolver.js +11 -10
  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-2FMI2B6V.cjs +6196 -0
  11. package/dist/chunk-3OPYJG76.cjs +266 -0
  12. package/dist/chunk-3QOSDDNI.cjs +130 -0
  13. package/dist/chunk-46RLHI7D.js +0 -0
  14. package/dist/chunk-46ZIFWYG.cjs +277 -0
  15. package/dist/chunk-4DECIFU7.js +6196 -0
  16. package/dist/chunk-4IH4EL7M.cjs +9 -0
  17. package/dist/chunk-4VAVYUZS.cjs +991 -0
  18. package/dist/chunk-5ENKBSWO.js +311 -0
  19. package/dist/chunk-5ERIZW3D.js +44 -0
  20. package/dist/chunk-5HTVET6E.js +514 -0
  21. package/dist/chunk-5ZQBEOMD.js +764 -0
  22. package/dist/chunk-6RPZADX3.cjs +92 -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-AEOZIDEB.cjs +32 -0
  27. package/dist/chunk-AQ5TNQB7.js +13 -0
  28. package/dist/chunk-AVYJ4YBN.js +58 -0
  29. package/dist/chunk-BO4RFWBR.js +89 -0
  30. package/dist/chunk-C72S6TTV.cjs +49 -0
  31. package/dist/chunk-C7PSERMH.js +87 -0
  32. package/dist/chunk-CDHS2QDC.js +179 -0
  33. package/dist/chunk-CWM2ZDU5.js +130 -0
  34. package/dist/chunk-CZHZGRU7.js +383 -0
  35. package/dist/chunk-DK4A7DLE.js +266 -0
  36. package/dist/chunk-DQ5VAYZ6.cjs +42 -0
  37. package/dist/chunk-DRWHTIIZ.js +13 -0
  38. package/dist/chunk-DWKQZ2SK.cjs +254 -0
  39. package/dist/chunk-EYZYXJTJ.cjs +1 -0
  40. package/dist/chunk-FFALUUZZ.cjs +235 -0
  41. package/dist/chunk-FMOBD2OQ.js +39 -0
  42. package/dist/chunk-FTQ7IQUC.js +991 -0
  43. package/dist/chunk-FZ46M34D.cjs +1 -0
  44. package/dist/chunk-G2UTNSGU.js +277 -0
  45. package/dist/chunk-GBHYAGX3.cjs +26 -0
  46. package/dist/chunk-GMMT7RVN.cjs +39 -0
  47. package/dist/chunk-H5JUT3KV.js +105 -0
  48. package/dist/chunk-HQP3K7PU.cjs +431 -0
  49. package/dist/chunk-HUZZZ3JL.js +32 -0
  50. package/dist/chunk-IAXWICZU.js +69 -0
  51. package/dist/chunk-JMJBSACD.cjs +147 -0
  52. package/dist/chunk-JO5NLTLY.js +46 -0
  53. package/dist/chunk-JWC6APFQ.js +23 -0
  54. package/dist/chunk-KUU2RNG6.cjs +46 -0
  55. package/dist/chunk-L74VDN4A.cjs +32 -0
  56. package/dist/chunk-MQNDWYPN.js +235 -0
  57. package/dist/chunk-MZNPGW5Q.js +26 -0
  58. package/dist/chunk-N5QFKSDO.js +56 -0
  59. package/dist/chunk-NYUNU75A.cjs +44 -0
  60. package/dist/chunk-NZYN7C3P.cjs +179 -0
  61. package/dist/chunk-Q27JY5RG.cjs +126 -0
  62. package/dist/chunk-QBZJ7P2T.cjs +13 -0
  63. package/dist/chunk-QWBWGODS.cjs +69 -0
  64. package/dist/chunk-QXD4MV2X.cjs +23 -0
  65. package/dist/chunk-R3HK6R4B.cjs +13 -0
  66. package/dist/chunk-RPII3E6Z.cjs +145 -0
  67. package/dist/chunk-RSJ3TWJQ.cjs +186 -0
  68. package/dist/chunk-S4WBV25P.js +913 -0
  69. package/dist/chunk-S6JGLF3G.cjs +89 -0
  70. package/dist/chunk-SUEGJ75D.cjs +764 -0
  71. package/dist/chunk-SVNDB62D.cjs +58 -0
  72. package/dist/chunk-SVXC36MU.cjs +383 -0
  73. package/dist/chunk-TKJMZBAH.js +32 -0
  74. package/dist/chunk-UBWEBKRC.js +42 -0
  75. package/dist/chunk-UNEFIWXI.cjs +32 -0
  76. package/dist/chunk-VQY5W4YW.cjs +311 -0
  77. package/dist/chunk-VVEHS2LI.js +431 -0
  78. package/dist/chunk-WNY4WMRF.js +32 -0
  79. package/dist/chunk-XEKD23J5.js +9 -0
  80. package/dist/chunk-XTEI64OU.js +145 -0
  81. package/dist/chunk-XX6NQJMA.js +92 -0
  82. package/dist/chunk-Y6OM7EV7.cjs +56 -0
  83. package/dist/chunk-Y7FO65VT.js +147 -0
  84. package/dist/chunk-YGXJGRFI.cjs +913 -0
  85. package/dist/chunk-YMFAJFQT.cjs +173 -0
  86. package/dist/chunk-Z7LUNECE.js +49 -0
  87. package/dist/chunk-Z7Y2NPHY.js +186 -0
  88. package/dist/chunk-ZJZAOKI7.js +254 -0
  89. package/dist/chunk-ZLX3KGXX.js +173 -0
  90. package/dist/chunk-ZY6KU6P3.js +126 -0
  91. package/dist/completion/ApiKeyPoolService.cjs +23 -48
  92. package/dist/completion/ApiKeyPoolService.d.cts +150 -2
  93. package/dist/completion/ApiKeyPoolService.d.ts +150 -2
  94. package/dist/completion/BuiltinToolExecutor.cjs +9 -324
  95. package/dist/completion/BuiltinToolExecutor.js +6 -290
  96. package/dist/completion/CompletionService.cjs +45 -3487
  97. package/dist/completion/CompletionService.d.cts +3 -2
  98. package/dist/completion/CompletionService.d.ts +3 -2
  99. package/dist/completion/CompletionService.js +41 -3457
  100. package/dist/completion/NativeSearchInjector.cjs +8 -192
  101. package/dist/completion/NativeSearchInjector.js +7 -162
  102. package/dist/completion/ProviderSearchInjector.cjs +12 -39
  103. package/dist/completion/native-search-types.cjs +13 -66
  104. package/dist/completion/native-search-types.js +7 -31
  105. package/dist/completion/openrouter-headers.cjs +12 -71
  106. package/dist/completion/openrouter-headers.d.cts +9 -12
  107. package/dist/completion/openrouter-headers.d.ts +9 -12
  108. package/dist/completion/openrouter-headers.js +7 -36
  109. package/dist/completion/openrouter-models.cjs +11 -67
  110. package/dist/completion/openrouter-models.js +5 -34
  111. package/dist/completion/types.cjs +1 -18
  112. package/dist/completion/url-builder.cjs +24 -138
  113. package/dist/completion/url-builder.js +12 -92
  114. package/dist/completion.cjs +62 -3989
  115. package/dist/completion.d.cts +3 -2
  116. package/dist/completion.d.ts +3 -2
  117. package/dist/completion.js +70 -3953
  118. package/dist/index.cjs +319 -10429
  119. package/dist/index.d.cts +49 -12
  120. package/dist/index.d.ts +49 -12
  121. package/dist/index.js +248 -10269
  122. package/dist/logger-4GvQNzhE.d.cts +22 -0
  123. package/dist/logger-4GvQNzhE.d.ts +22 -0
  124. package/dist/outbound-api/routeResolver.cjs +10 -217
  125. package/dist/outbound-api/routeResolver.d.cts +10 -3
  126. package/dist/outbound-api/routeResolver.d.ts +10 -3
  127. package/dist/outbound-api/routeResolver.js +9 -187
  128. package/dist/outbound-api/subscriptionRegistryPort.cjs +7 -37
  129. package/dist/outbound-api/subscriptionRegistryPort.d.cts +2 -1
  130. package/dist/outbound-api/subscriptionRegistryPort.d.ts +2 -1
  131. package/dist/outbound-api/subscriptionRegistryPort.js +4 -8
  132. package/dist/outbound-api/types.cjs +5 -17
  133. package/dist/outbound-api/types.d.cts +12 -144
  134. package/dist/outbound-api/types.d.ts +12 -144
  135. package/dist/outbound-api/types.js +6 -0
  136. package/dist/outbound-api.cjs +197 -5265
  137. package/dist/outbound-api.d.cts +787 -25
  138. package/dist/outbound-api.d.ts +787 -25
  139. package/dist/outbound-api.js +173 -5195
  140. package/dist/pipeline/AuthSource.cjs +1 -18
  141. package/dist/pipeline/AuthSource.d.cts +23 -1
  142. package/dist/pipeline/AuthSource.d.ts +23 -1
  143. package/dist/pipeline/LlmConfigProviderAuth.cjs +5 -166
  144. package/dist/pipeline/LlmConfigProviderAuth.d.cts +2 -1
  145. package/dist/pipeline/LlmConfigProviderAuth.d.ts +2 -1
  146. package/dist/pipeline/LlmConfigProviderAuth.js +5 -139
  147. package/dist/pipeline/SubscriptionAccountHealth.cjs +22 -0
  148. package/dist/pipeline/SubscriptionAccountHealth.d.cts +235 -0
  149. package/dist/pipeline/SubscriptionAccountHealth.d.ts +235 -0
  150. package/dist/pipeline/SubscriptionAccountHealth.js +22 -0
  151. package/dist/pipeline/SubscriptionAuthSource.cjs +6 -128
  152. package/dist/pipeline/SubscriptionAuthSource.d.cts +3 -2
  153. package/dist/pipeline/SubscriptionAuthSource.d.ts +3 -2
  154. package/dist/pipeline/SubscriptionAuthSource.js +5 -99
  155. package/dist/pipeline/SubscriptionAuthStrategy.cjs +1 -18
  156. package/dist/pipeline/SubscriptionAuthStrategy.d.cts +24 -1
  157. package/dist/pipeline/SubscriptionAuthStrategy.d.ts +24 -1
  158. package/dist/pipeline/auditSink.cjs +14 -0
  159. package/dist/pipeline/auditSink.d.cts +48 -0
  160. package/dist/pipeline/auditSink.d.ts +48 -0
  161. package/dist/pipeline/auditSink.js +14 -0
  162. package/dist/pipeline/billingEmit.cjs +14 -0
  163. package/dist/pipeline/billingEmit.d.cts +49 -0
  164. package/dist/pipeline/billingEmit.d.ts +49 -0
  165. package/dist/pipeline/billingEmit.js +14 -0
  166. package/dist/pipeline/executeProviderCall.cjs +5 -69
  167. package/dist/pipeline/executeProviderCall.js +3 -42
  168. package/dist/pipeline/resolveProviderChain.cjs +5 -46
  169. package/dist/pipeline/resolveProviderChain.js +3 -19
  170. package/dist/pipeline/resolveSubscriptionChain.cjs +5 -67
  171. package/dist/pipeline/resolveSubscriptionChain.js +3 -40
  172. package/dist/ports/gemini-code-assist-resolver.cjs +7 -37
  173. package/dist/ports/gemini-code-assist-resolver.js +4 -8
  174. package/dist/ports/pricing-store.cjs +1 -0
  175. package/dist/ports/pricing-store.d.cts +50 -0
  176. package/dist/ports/pricing-store.d.ts +50 -0
  177. package/dist/ports/pricing-store.js +0 -0
  178. package/dist/ports/provider-config-source.cjs +1 -18
  179. package/dist/ports/usage-event-store.cjs +1 -0
  180. package/dist/ports/usage-event-store.d.cts +54 -0
  181. package/dist/ports/usage-event-store.d.ts +54 -0
  182. package/dist/ports/usage-event-store.js +0 -0
  183. package/dist/ports/web-search-backend.cjs +1 -18
  184. package/dist/ports.cjs +1 -18
  185. package/dist/ports.d.cts +13 -2
  186. package/dist/ports.d.ts +13 -2
  187. package/dist/provider-proxy/ProviderProxy.cjs +47 -4643
  188. package/dist/provider-proxy/ProviderProxy.d.cts +2 -1
  189. package/dist/provider-proxy/ProviderProxy.d.ts +2 -1
  190. package/dist/provider-proxy/ProviderProxy.js +42 -4613
  191. package/dist/provider-proxy/identity/SubscriptionIdentityStore.cjs +15 -0
  192. package/dist/provider-proxy/identity/SubscriptionIdentityStore.d.cts +121 -0
  193. package/dist/provider-proxy/identity/SubscriptionIdentityStore.d.ts +121 -0
  194. package/dist/provider-proxy/identity/SubscriptionIdentityStore.js +15 -0
  195. package/dist/provider-proxy/identity/fingerprintHeaders.cjs +20 -0
  196. package/dist/provider-proxy/identity/fingerprintHeaders.d.cts +89 -0
  197. package/dist/provider-proxy/identity/fingerprintHeaders.d.ts +89 -0
  198. package/dist/provider-proxy/identity/fingerprintHeaders.js +20 -0
  199. package/dist/provider-proxy/ingress/providerProxyShared.cjs +42 -2941
  200. package/dist/provider-proxy/ingress/providerProxyShared.d.cts +13 -3
  201. package/dist/provider-proxy/ingress/providerProxyShared.d.ts +13 -3
  202. package/dist/provider-proxy/ingress/providerProxyShared.js +48 -2914
  203. package/dist/provider-proxy/matchText.cjs +13 -72
  204. package/dist/provider-proxy/matchText.d.cts +14 -1
  205. package/dist/provider-proxy/matchText.d.ts +14 -1
  206. package/dist/provider-proxy/matchText.js +8 -39
  207. package/dist/provider-proxy/types.cjs +1 -18
  208. package/dist/provider-proxy/types.d.cts +25 -1
  209. package/dist/provider-proxy/types.d.ts +25 -1
  210. package/dist/provider-proxy.cjs +42 -4655
  211. package/dist/provider-proxy.d.cts +2 -1
  212. package/dist/provider-proxy.d.ts +2 -1
  213. package/dist/provider-proxy.js +46 -4628
  214. package/dist/{routeResolver-HE-ZO0fO.d.ts → routeResolver-B1NglTfe.d.ts} +36 -10
  215. package/dist/{routeResolver-BrbK6ja9.d.cts → routeResolver-CbG5uBgm.d.cts} +36 -10
  216. package/dist/serializeError.cjs +5 -81
  217. package/dist/serializeError.js +3 -54
  218. package/dist/sse-parser.cjs +7 -455
  219. package/dist/sse-parser.js +4 -426
  220. package/dist/transformer/TransformerChainExecutor.cjs +4 -318
  221. package/dist/transformer/TransformerChainExecutor.js +4 -291
  222. package/dist/transformer/TransformerService.cjs +5 -289
  223. package/dist/transformer/TransformerService.js +3 -262
  224. package/dist/transformer/anthropicBetaInject.cjs +7 -50
  225. package/dist/transformer/anthropicBetaInject.js +4 -21
  226. package/dist/transformer/transformers/AnthropicTransformer.cjs +3 -1014
  227. package/dist/transformer/transformers/AnthropicTransformer.js +3 -987
  228. package/dist/transformer/transformers/GeminiCodeAssistTransformer.cjs +4 -1106
  229. package/dist/transformer/transformers/GeminiCodeAssistTransformer.js +7 -1079
  230. package/dist/transformer/transformers/GeminiTransformer.cjs +4 -1010
  231. package/dist/transformer/transformers/GeminiTransformer.js +4 -983
  232. package/dist/transformer/transformers/OpenAIResponseTransformer.cjs +3 -535
  233. package/dist/transformer/transformers/OpenAIResponseTransformer.js +3 -510
  234. package/dist/transformer/transformers/OpenCodeGoTransformer.cjs +5 -72
  235. package/dist/transformer/transformers/OpenCodeGoTransformer.js +3 -45
  236. package/dist/transformer/transformers/ReasoningTransformer.cjs +3 -270
  237. package/dist/transformer/transformers/ReasoningTransformer.js +2 -249
  238. package/dist/transformer/transformers.cjs +10 -3177
  239. package/dist/transformer/transformers.js +23 -3158
  240. package/dist/transformer/types.cjs +1 -18
  241. package/dist/transformer.cjs +13 -3726
  242. package/dist/transformer.js +17 -3706
  243. package/dist/types-6OUY_xfA.d.ts +830 -0
  244. package/dist/types-aBFFXoBz.d.cts +830 -0
  245. package/dist/usage/pricing-engine.cjs +6 -0
  246. package/dist/usage/pricing-engine.d.cts +83 -0
  247. package/dist/usage/pricing-engine.d.ts +83 -0
  248. package/dist/usage/pricing-engine.js +6 -0
  249. package/dist/usage/usage-recorder.cjs +6 -0
  250. package/dist/usage/usage-recorder.d.cts +91 -0
  251. package/dist/usage/usage-recorder.d.ts +91 -0
  252. package/dist/usage/usage-recorder.js +6 -0
  253. package/dist/usage.cjs +11 -0
  254. package/dist/usage.d.cts +8 -0
  255. package/dist/usage.d.ts +8 -0
  256. package/dist/usage.js +11 -0
  257. package/package.json +4 -2
  258. package/dist/ApiKeyPoolService-BmMkau07.d.cts +0 -170
  259. package/dist/ApiKeyPoolService-BmMkau07.d.ts +0 -170
@@ -0,0 +1,126 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
2
+
3
+ var _chunkA2YMUCBTcjs = require('./chunk-A2YMUCBT.cjs');
4
+
5
+
6
+
7
+ var _chunkUNEFIWXIcjs = require('./chunk-UNEFIWXI.cjs');
8
+
9
+ // src/completion/header-builder.ts
10
+ function getProviderHeaders(provider, apiKey) {
11
+ const format = _chunkA2YMUCBTcjs.resolveApiFormat.call(void 0, provider);
12
+ let headers;
13
+ switch (format) {
14
+ case "anthropic":
15
+ headers = {
16
+ "Content-Type": "application/json",
17
+ // Third-party Anthropic-Messages relays often gate on a Bearer token
18
+ // rather than x-api-key; `provider.useBearer` opts into that.
19
+ ...provider.useBearer ? { Authorization: `Bearer ${apiKey}` } : { "x-api-key": apiKey },
20
+ "anthropic-version": "2025-01-10"
21
+ // Required for extended thinking feature
22
+ };
23
+ break;
24
+ case "google":
25
+ headers = {
26
+ "Content-Type": "application/json",
27
+ "x-goog-api-key": apiKey
28
+ };
29
+ break;
30
+ case "azure-openai":
31
+ headers = {
32
+ "Content-Type": "application/json",
33
+ "api-key": apiKey
34
+ };
35
+ break;
36
+ case "openai":
37
+ case "openai-response":
38
+ default:
39
+ headers = {
40
+ "Content-Type": "application/json",
41
+ "Authorization": `Bearer ${apiKey}`
42
+ };
43
+ break;
44
+ }
45
+ if (_chunkUNEFIWXIcjs.isOpenRouterProvider.call(void 0, provider)) {
46
+ return { ...headers, ..._chunkUNEFIWXIcjs.OPENROUTER_APP_HEADERS };
47
+ }
48
+ return headers;
49
+ }
50
+
51
+ // src/pipeline/LlmConfigProviderAuth.ts
52
+ function isReportableStatus(status) {
53
+ return status === 429 || status === 529 || status === 401 || status === 403;
54
+ }
55
+ var LlmConfigProviderAuth = class {
56
+
57
+
58
+
59
+
60
+ /**
61
+ * The current resolved key. Mutable so a Phase-3 caller can read the
62
+ * rotated key after `onResult`; this phase it is only set at construction
63
+ * and updated inside `onResult` (mirroring the inline re-point in
64
+ * `callWithPoolReporting`).
65
+ */
66
+
67
+ constructor(opts) {
68
+ this.provider = opts.provider;
69
+ this.apiKey = opts.apiKey;
70
+ this.apiKeyPool = _nullishCoalesce(opts.apiKeyPool, () => ( null));
71
+ this.providerId = opts.providerId;
72
+ this.sessionId = opts.sessionId;
73
+ }
74
+ /**
75
+ * Merge the provider auth headers (and content-type / OpenRouter app
76
+ * headers) into `headers`, exactly as a direct `getProviderHeaders` call
77
+ * would produce them. `hints` are accepted for contract symmetry but the
78
+ * provider-key path does not vary headers by URL/model.
79
+ */
80
+ applyHeaders(headers, _hints) {
81
+ const authHeaders = getProviderHeaders(this.provider, this.apiKey);
82
+ for (const [k, v] of Object.entries(authHeaders)) {
83
+ headers[k] = v;
84
+ }
85
+ }
86
+ /**
87
+ * React to the final HTTP status — the pool-rotation seam (design D5).
88
+ *
89
+ * Reproduces `callWithPoolReporting`'s reportable + success branches:
90
+ * - reportable status (429/529/401/403) on a pool-backed request →
91
+ * `reportError(providerId, sessionId, status)`; when it hands back a
92
+ * `newKey` the session was re-bound, so we adopt it (`this.apiKey`) and
93
+ * return `{ rebound: true, newKey }`. When no key is available it returns
94
+ * `{ rebound: false }` (the session is still cooled/disabled by the report).
95
+ * - success / any 2xx → `reportSuccess(sessionId)`; `{ rebound: false }`.
96
+ * - non-reportable, non-success, or non-pool request → no-op
97
+ * `{ rebound: false }`.
98
+ *
99
+ * NOTE: no caller invokes this in Phase 2; it is unit-tested in isolation.
100
+ */
101
+ async onResult(status) {
102
+ const pool = this.apiKeyPool;
103
+ const providerId = this.providerId;
104
+ const sessionId = this.sessionId;
105
+ if (!pool || !providerId || !sessionId) {
106
+ return { rebound: false };
107
+ }
108
+ if (isReportableStatus(status)) {
109
+ const newKey = await pool.reportError(providerId, sessionId, status);
110
+ if (newKey) {
111
+ this.apiKey = newKey;
112
+ return { rebound: true, newKey };
113
+ }
114
+ return { rebound: false };
115
+ }
116
+ if (status !== null && status >= 200 && status < 300) {
117
+ pool.reportSuccess(sessionId);
118
+ }
119
+ return { rebound: false };
120
+ }
121
+ };
122
+
123
+
124
+
125
+
126
+ exports.getProviderHeaders = getProviderHeaders; exports.LlmConfigProviderAuth = LlmConfigProviderAuth;
@@ -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,69 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});// 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
+ function deriveSubscriptionSessionKey(anthropicBody) {
41
+ const system = flattenMatchText(anthropicBody.system).trim().slice(0, MATCH_TEXT_PER_MESSAGE_CAP);
42
+ const messages = Array.isArray(anthropicBody.messages) ? anthropicBody.messages : [];
43
+ let firstUser = "";
44
+ for (const message of messages) {
45
+ if (message && typeof message === "object" && message.role === "user") {
46
+ firstUser = flattenMatchText(message.content).trim().slice(0, MATCH_TEXT_PER_MESSAGE_CAP);
47
+ break;
48
+ }
49
+ }
50
+ const anchor = `${system}\0${firstUser}`;
51
+ if (!system && !firstUser) return void 0;
52
+ return fnv1a(anchor);
53
+ }
54
+ function fnv1a(str) {
55
+ let h = 2166136261;
56
+ for (let i = 0; i < str.length; i++) {
57
+ h ^= str.charCodeAt(i);
58
+ h = Math.imul(h, 16777619);
59
+ }
60
+ return (h >>> 0).toString(16).padStart(8, "0");
61
+ }
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+ exports.MATCH_TEXT_PER_MESSAGE_CAP = MATCH_TEXT_PER_MESSAGE_CAP; exports.MATCH_TEXT_RECENT_MESSAGES = MATCH_TEXT_RECENT_MESSAGES; exports.flattenMatchText = flattenMatchText; exports.collectMatchText = collectMatchText; exports.deriveSubscriptionSessionKey = deriveSubscriptionSessionKey;
@@ -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,145 @@
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
+ var _chunk6RPZADX3cjs = require('./chunk-6RPZADX3.cjs');
5
+
6
+ // src/provider-proxy/identity/SubscriptionIdentityStore.ts
7
+ var CC_HEADER_TTL_MS = 7 * 24 * 60 * 60 * 1e3;
8
+ var KEY_SEP = "\0";
9
+ function normalizeUa(ua) {
10
+ if (typeof ua !== "string") return void 0;
11
+ const trimmed = ua.trim();
12
+ return trimmed.length > 0 ? trimmed : void 0;
13
+ }
14
+ var SubscriptionIdentityStore = (_class = class {
15
+ __init() {this.identities = /* @__PURE__ */ new Map()}
16
+
17
+
18
+
19
+
20
+ __init2() {this.persistence = null}
21
+ constructor(opts = {}) {;_class.prototype.__init.call(this);_class.prototype.__init2.call(this);
22
+ this.now = _nullishCoalesce(opts.now, () => ( Date.now));
23
+ this.enabled = _nullishCoalesce(opts.enabled, () => ( false));
24
+ this.ua = normalizeUa(opts.ua);
25
+ this.ccHeaderTtlMs = _nullishCoalesce(opts.ccHeaderTtlMs, () => ( CC_HEADER_TTL_MS));
26
+ }
27
+ /** Whether capture/replay is engaged (config flag). */
28
+ isEnabled() {
29
+ return this.enabled;
30
+ }
31
+ /** The operator UA baseline (piece 4), or undefined when unset. */
32
+ uaBaseline() {
33
+ return this.ua;
34
+ }
35
+ /**
36
+ * Re-apply config to the LIVE shared instance (bootstrap, mirroring the health
37
+ * tracker's `configure`). Only defined fields override; `ua: null` clears the
38
+ * baseline.
39
+ */
40
+ configure(opts) {
41
+ if (opts.enabled !== void 0) this.enabled = opts.enabled;
42
+ if (opts.ua !== void 0) this.ua = normalizeUa(_nullishCoalesce(opts.ua, () => ( void 0)));
43
+ }
44
+ /** Install (or clear) the write-through persistence port (P2). */
45
+ setPersistence(port) {
46
+ this.persistence = port;
47
+ }
48
+ /**
49
+ * Boot seed (P2, D5): install a PERSISTED identity for an account, but NEVER
50
+ * over a live in-memory capture (a re-captured identity from this session wins).
51
+ * A no-op for an empty/absent identity. Does NOT write back through the port.
52
+ */
53
+ seed(providerId, accountId, identity) {
54
+ if (!accountId || !identity) return;
55
+ const headers = _chunk6RPZADX3cjs.sanitizeFrozenHeaders.call(void 0, _nullishCoalesce(identity.headers, () => ( {})));
56
+ if (Object.keys(headers).length === 0) return;
57
+ const key = this.key(providerId, accountId);
58
+ if (this.identities.has(key)) return;
59
+ this.identities.set(key, {
60
+ headers,
61
+ capturedAt: typeof identity.capturedAt === "number" ? identity.capturedAt : this.now()
62
+ });
63
+ }
64
+ /**
65
+ * Capture a real client's fingerprint headers for an account. First-seen ⇒
66
+ * FREEZE the whole (sanitized) bag. Already-frozen ⇒ within the TTL, no change
67
+ * (stable identity); past the TTL, refresh the NON-stainless headers from the
68
+ * new observation while keeping stainless frozen-stable (P2). An empty/absent
69
+ * account id or an empty sanitized bag is a no-op (so an account with no
70
+ * fingerprint headers never freezes an empty identity → the caller falls back
71
+ * to the UA baseline). Fires the persistence port on a freeze/refresh.
72
+ */
73
+ capture(providerId, accountId, incoming, now = this.now()) {
74
+ if (!accountId) return;
75
+ const clean = _chunk6RPZADX3cjs.sanitizeFrozenHeaders.call(void 0, incoming);
76
+ if (Object.keys(clean).length === 0) return;
77
+ const key = this.key(providerId, accountId);
78
+ const existing = this.identities.get(key);
79
+ if (!existing) {
80
+ const frozen = { headers: clean, capturedAt: now };
81
+ this.identities.set(key, frozen);
82
+ this.emitPersist(providerId, accountId, frozen);
83
+ return;
84
+ }
85
+ if (now - existing.capturedAt < this.ccHeaderTtlMs) return;
86
+ const refreshed = {
87
+ headers: _chunk6RPZADX3cjs.refreshNonStainless.call(void 0, existing.headers, clean),
88
+ capturedAt: now
89
+ };
90
+ this.identities.set(key, refreshed);
91
+ this.emitPersist(providerId, accountId, refreshed);
92
+ }
93
+ /**
94
+ * The frozen identity headers for an account, or `undefined` when none is
95
+ * frozen (or the frozen set is empty). Returns a COPY (the caller merges it into
96
+ * a mutable outbound header bag).
97
+ */
98
+ replay(providerId, accountId) {
99
+ if (!accountId) return void 0;
100
+ const frozen = this.identities.get(this.key(providerId, accountId));
101
+ if (!frozen || Object.keys(frozen.headers).length === 0) return void 0;
102
+ return { ...frozen.headers };
103
+ }
104
+ /** Whether an identity is frozen for an account (admin coarse status — D7). */
105
+ hasIdentity(providerId, accountId) {
106
+ const frozen = this.identities.get(this.key(providerId, accountId));
107
+ return !!frozen && Object.keys(frozen.headers).length > 0;
108
+ }
109
+ /** The freeze/refresh time for an account's identity (admin coarse status). */
110
+ capturedAt(providerId, accountId) {
111
+ return _optionalChain([this, 'access', _ => _.identities, 'access', _2 => _2.get, 'call', _3 => _3(this.key(providerId, accountId)), 'optionalAccess', _4 => _4.capturedAt]);
112
+ }
113
+ emitPersist(providerId, accountId, identity) {
114
+ if (!this.persistence) return;
115
+ try {
116
+ this.persistence.persist(providerId, accountId, {
117
+ headers: { ...identity.headers },
118
+ capturedAt: identity.capturedAt
119
+ });
120
+ } catch (e) {
121
+ }
122
+ }
123
+ key(providerId, accountId) {
124
+ return `${providerId}${KEY_SEP}${accountId}`;
125
+ }
126
+ }, _class);
127
+ var _shared = null;
128
+ function getSharedIdentityStore() {
129
+ if (!_shared) _shared = new SubscriptionIdentityStore();
130
+ return _shared;
131
+ }
132
+ function setSharedIdentityStore(instance) {
133
+ _shared = instance;
134
+ }
135
+ function __resetSharedIdentityStoreForTests() {
136
+ _shared = null;
137
+ }
138
+
139
+
140
+
141
+
142
+
143
+
144
+
145
+ exports.CC_HEADER_TTL_MS = CC_HEADER_TTL_MS; exports.SubscriptionIdentityStore = SubscriptionIdentityStore; exports.getSharedIdentityStore = getSharedIdentityStore; exports.setSharedIdentityStore = setSharedIdentityStore; exports.__resetSharedIdentityStoreForTests = __resetSharedIdentityStoreForTests;
@@ -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;