@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
@@ -1,102 +1,8 @@
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
- // src/pipeline/SubscriptionAuthSource.ts
57
- function stripAuthHeaders(headers) {
58
- delete headers.authorization;
59
- delete headers.Authorization;
60
- delete headers["x-api-key"];
61
- delete headers["X-Api-Key"];
62
- delete headers["x-goog-api-key"];
63
- delete headers["X-Goog-Api-Key"];
64
- }
65
- var SubscriptionAuthSource = class {
66
- constructor(profile) {
67
- this.profile = profile;
68
- }
69
- profile;
70
- /**
71
- * Strip any transformer-set auth headers, then delegate to the bound
72
- * strategy. Mirrors `SubscriptionDispatcher`'s
73
- * `stripAuthHeaders(...)` + `applyHeadersWithRetry(...)` sequence, including
74
- * the best-effort swallow-and-warn around a throwing `applyHeaders`.
75
- *
76
- * The strategy's looser `AuthApplyHints` (optional `upstreamUrl` /
77
- * `resolvedModel`) is fed from the pipeline's required `{ upstreamUrl,
78
- * model }` at the boundary.
79
- */
80
- async applyHeaders(headers, hints) {
81
- stripAuthHeaders(headers);
82
- try {
83
- await this.profile.authStrategy.applyHeaders(headers, {
84
- upstreamUrl: hints.upstreamUrl,
85
- resolvedModel: hints.model
86
- });
87
- } catch (err) {
88
- console.warn("[SubscriptionAuthSource] authStrategy.applyHeaders threw:", serializeError(err));
89
- }
90
- }
91
- /** Delegate the 401-refresh decision to the bound strategy. */
92
- async onUnauthorized() {
93
- return this.profile.authStrategy.onUnauthorized();
94
- }
95
- /** Resolve the upstream URL from the profile, when it provides one. */
96
- resolveUpstreamUrl(model) {
97
- return this.profile.resolveUpstreamUrl?.(model);
98
- }
99
- };
1
+ import {
2
+ SubscriptionAuthSource,
3
+ stripAuthHeaders
4
+ } from "../chunk-N5QFKSDO.js";
5
+ import "../chunk-AVYJ4YBN.js";
100
6
  export {
101
7
  SubscriptionAuthSource,
102
8
  stripAuthHeaders
@@ -1,18 +1 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __copyProps = (to, from, except, desc) => {
7
- if (from && typeof from === "object" || typeof from === "function") {
8
- for (let key of __getOwnPropNames(from))
9
- if (!__hasOwnProp.call(to, key) && key !== except)
10
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
- }
12
- return to;
13
- };
14
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
-
16
- // src/pipeline/SubscriptionAuthStrategy.ts
17
- var SubscriptionAuthStrategy_exports = {};
18
- module.exports = __toCommonJS(SubscriptionAuthStrategy_exports);
1
+ "use strict";
@@ -31,6 +31,24 @@ interface AuthApplyHints {
31
31
  upstreamUrl?: string;
32
32
  /** Resolved model id — same purpose as `upstreamUrl`. */
33
33
  resolvedModel?: string;
34
+ /**
35
+ * Stable per-conversation session key (subscription-account-scheduling, D5).
36
+ * When present it drives the account pool's sticky session affinity; absent ⇒
37
+ * pure priority/LRU selection (still correct — affinity only loses stickiness).
38
+ */
39
+ sessionKey?: string;
40
+ /**
41
+ * Per-request selection callback (subscription-account-health, D5;
42
+ * subscription-account-model-map, D3). The strategy invokes it with the
43
+ * EFFECTIVE account id it resolved so the relay can mark that account's health
44
+ * against the upstream outcome. The OPTIONAL 3rd `remappedModel` carries the
45
+ * selected account's ACTUAL upstream model when its `supportedModels` object
46
+ * remaps `resolvedModel` — the relay rewrites the outbound `body.model` to it on
47
+ * the pass-through / same-format path; absent ⇒ the body is forwarded verbatim.
48
+ * Absent callback ⇒ health simply isn't marked on that path (degrades to the
49
+ * pre-health behavior).
50
+ */
51
+ reportSelection?: (accountId: string, isActive: boolean, remappedModel?: string) => void;
34
52
  }
35
53
  interface AuthStrategy {
36
54
  /** Discriminator — also surfaced through `subscription:list` to renderers. */
@@ -52,8 +70,13 @@ interface AuthStrategy {
52
70
  *
53
71
  * Implementations SHOULD use a shared `RefreshMutex` to dedupe concurrent
54
72
  * refreshes so N parallel 401s collapse into one upstream refresh call.
73
+ *
74
+ * The OPTIONAL `sessionKey` (subscription-account-scheduling, D7) refreshes the
75
+ * account the request was ACTUALLY served by: when it resolves to a sticky
76
+ * non-active account the strategy refreshes THAT account by id; absent (or an
77
+ * active pick) ⇒ the active-account refresh, unchanged.
55
78
  */
56
- onUnauthorized(): Promise<boolean>;
79
+ onUnauthorized(sessionKey?: string): Promise<boolean>;
57
80
  /** Diagnostic surface for the `subscription:status` IPC. */
58
81
  describeStatus(): Promise<SubscriptionStatusEntry>;
59
82
  }
@@ -31,6 +31,24 @@ interface AuthApplyHints {
31
31
  upstreamUrl?: string;
32
32
  /** Resolved model id — same purpose as `upstreamUrl`. */
33
33
  resolvedModel?: string;
34
+ /**
35
+ * Stable per-conversation session key (subscription-account-scheduling, D5).
36
+ * When present it drives the account pool's sticky session affinity; absent ⇒
37
+ * pure priority/LRU selection (still correct — affinity only loses stickiness).
38
+ */
39
+ sessionKey?: string;
40
+ /**
41
+ * Per-request selection callback (subscription-account-health, D5;
42
+ * subscription-account-model-map, D3). The strategy invokes it with the
43
+ * EFFECTIVE account id it resolved so the relay can mark that account's health
44
+ * against the upstream outcome. The OPTIONAL 3rd `remappedModel` carries the
45
+ * selected account's ACTUAL upstream model when its `supportedModels` object
46
+ * remaps `resolvedModel` — the relay rewrites the outbound `body.model` to it on
47
+ * the pass-through / same-format path; absent ⇒ the body is forwarded verbatim.
48
+ * Absent callback ⇒ health simply isn't marked on that path (degrades to the
49
+ * pre-health behavior).
50
+ */
51
+ reportSelection?: (accountId: string, isActive: boolean, remappedModel?: string) => void;
34
52
  }
35
53
  interface AuthStrategy {
36
54
  /** Discriminator — also surfaced through `subscription:list` to renderers. */
@@ -52,8 +70,13 @@ interface AuthStrategy {
52
70
  *
53
71
  * Implementations SHOULD use a shared `RefreshMutex` to dedupe concurrent
54
72
  * refreshes so N parallel 401s collapse into one upstream refresh call.
73
+ *
74
+ * The OPTIONAL `sessionKey` (subscription-account-scheduling, D7) refreshes the
75
+ * account the request was ACTUALLY served by: when it resolves to a sticky
76
+ * non-active account the strategy refreshes THAT account by id; absent (or an
77
+ * active pick) ⇒ the active-account refresh, unchanged.
55
78
  */
56
- onUnauthorized(): Promise<boolean>;
79
+ onUnauthorized(sessionKey?: string): Promise<boolean>;
57
80
  /** Diagnostic surface for the `subscription:status` IPC. */
58
81
  describeStatus(): Promise<SubscriptionStatusEntry>;
59
82
  }
@@ -0,0 +1,14 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+
4
+
5
+
6
+
7
+ var _chunkAEOZIDEBcjs = require('../chunk-AEOZIDEB.cjs');
8
+
9
+
10
+
11
+
12
+
13
+
14
+ exports.__resetAuditSinkForTests = _chunkAEOZIDEBcjs.__resetAuditSinkForTests; exports.getAuditCaptureConfig = _chunkAEOZIDEBcjs.getAuditCaptureConfig; exports.recordAudit = _chunkAEOZIDEBcjs.recordAudit; exports.setAuditCaptureConfig = _chunkAEOZIDEBcjs.setAuditCaptureConfig; exports.setAuditSink = _chunkAEOZIDEBcjs.setAuditSink;
@@ -0,0 +1,48 @@
1
+ import { AuditRecord, AuditConfig } from '@omnicross/contracts/audit-types';
2
+
3
+ /**
4
+ * auditSink — the module-slot sink + capture-config port for `@omnicross/core`
5
+ * (request-audit-log, design D5).
6
+ *
7
+ * The outbound server's post-response capture hook calls {@link recordAudit}
8
+ * with an assembled {@link AuditRecord}. The concrete `AuditWriter` (the
9
+ * date-rotated jsonl store) lives in the DAEMON and registers itself as the sink
10
+ * at bootstrap via {@link setAuditSink}. Core imports NOTHING from the daemon —
11
+ * exactly the `setWebhookSink` / `setUpstreamProxyResolver` precedent.
12
+ *
13
+ * A SECOND slot holds the active {@link AuditConfig} ({@link setAuditCaptureConfig}
14
+ * / {@link getAuditCaptureConfig}). The capture hook reads it to GATE assembly:
15
+ * absent/`enabled:false` ⇒ the hook does nothing (not even record assembly), so
16
+ * audit-disabled is byte-identical zero regression. The daemon sets BOTH slots
17
+ * together (config + sink) when audit is enabled and clears BOTH when disabled.
18
+ *
19
+ * HARD CONTRACT (design D5 / risk "the audit write adding latency"):
20
+ * {@link recordAudit} NEVER throws and NEVER awaits — it hands the record to the
21
+ * sink (which enqueues and returns immediately) and swallows any sink error, so
22
+ * a slow/failing/throwing writer can never affect the relay path. Absent a sink
23
+ * it is a pure no-op.
24
+ *
25
+ * @module @omnicross/core/pipeline/auditSink
26
+ */
27
+
28
+ /** The sink the daemon registers; it MUST enqueue-and-return (never block/throw). */
29
+ type AuditSink = (record: AuditRecord) => void;
30
+ /** Install (or clear, with `null`) the audit sink. Idempotent; last write wins. */
31
+ declare function setAuditSink(fn: AuditSink | null): void;
32
+ /**
33
+ * Install (or clear, with `null`) the active audit-capture config. `null` (or an
34
+ * `enabled:false` config) disables capture entirely — the hook does no work.
35
+ */
36
+ declare function setAuditCaptureConfig(config: AuditConfig | null): void;
37
+ /** The active capture config, or `null` when audit is disabled/unset. */
38
+ declare function getAuditCaptureConfig(): AuditConfig | null;
39
+ /**
40
+ * Hand one audit record to the registered sink. A no-op when no sink is set
41
+ * (zero regression). NEVER throws (a misbehaving sink is swallowed) and NEVER
42
+ * awaits (the sink enqueues + returns) — so no relay path is ever delayed.
43
+ */
44
+ declare function recordAudit(record: AuditRecord): void;
45
+ /** TEST SEAM — clear both slots so a suite starts from the no-audit baseline. */
46
+ declare function __resetAuditSinkForTests(): void;
47
+
48
+ export { type AuditSink, __resetAuditSinkForTests, getAuditCaptureConfig, recordAudit, setAuditCaptureConfig, setAuditSink };
@@ -0,0 +1,48 @@
1
+ import { AuditRecord, AuditConfig } from '@omnicross/contracts/audit-types';
2
+
3
+ /**
4
+ * auditSink — the module-slot sink + capture-config port for `@omnicross/core`
5
+ * (request-audit-log, design D5).
6
+ *
7
+ * The outbound server's post-response capture hook calls {@link recordAudit}
8
+ * with an assembled {@link AuditRecord}. The concrete `AuditWriter` (the
9
+ * date-rotated jsonl store) lives in the DAEMON and registers itself as the sink
10
+ * at bootstrap via {@link setAuditSink}. Core imports NOTHING from the daemon —
11
+ * exactly the `setWebhookSink` / `setUpstreamProxyResolver` precedent.
12
+ *
13
+ * A SECOND slot holds the active {@link AuditConfig} ({@link setAuditCaptureConfig}
14
+ * / {@link getAuditCaptureConfig}). The capture hook reads it to GATE assembly:
15
+ * absent/`enabled:false` ⇒ the hook does nothing (not even record assembly), so
16
+ * audit-disabled is byte-identical zero regression. The daemon sets BOTH slots
17
+ * together (config + sink) when audit is enabled and clears BOTH when disabled.
18
+ *
19
+ * HARD CONTRACT (design D5 / risk "the audit write adding latency"):
20
+ * {@link recordAudit} NEVER throws and NEVER awaits — it hands the record to the
21
+ * sink (which enqueues and returns immediately) and swallows any sink error, so
22
+ * a slow/failing/throwing writer can never affect the relay path. Absent a sink
23
+ * it is a pure no-op.
24
+ *
25
+ * @module @omnicross/core/pipeline/auditSink
26
+ */
27
+
28
+ /** The sink the daemon registers; it MUST enqueue-and-return (never block/throw). */
29
+ type AuditSink = (record: AuditRecord) => void;
30
+ /** Install (or clear, with `null`) the audit sink. Idempotent; last write wins. */
31
+ declare function setAuditSink(fn: AuditSink | null): void;
32
+ /**
33
+ * Install (or clear, with `null`) the active audit-capture config. `null` (or an
34
+ * `enabled:false` config) disables capture entirely — the hook does no work.
35
+ */
36
+ declare function setAuditCaptureConfig(config: AuditConfig | null): void;
37
+ /** The active capture config, or `null` when audit is disabled/unset. */
38
+ declare function getAuditCaptureConfig(): AuditConfig | null;
39
+ /**
40
+ * Hand one audit record to the registered sink. A no-op when no sink is set
41
+ * (zero regression). NEVER throws (a misbehaving sink is swallowed) and NEVER
42
+ * awaits (the sink enqueues + returns) — so no relay path is ever delayed.
43
+ */
44
+ declare function recordAudit(record: AuditRecord): void;
45
+ /** TEST SEAM — clear both slots so a suite starts from the no-audit baseline. */
46
+ declare function __resetAuditSinkForTests(): void;
47
+
48
+ export { type AuditSink, __resetAuditSinkForTests, getAuditCaptureConfig, recordAudit, setAuditCaptureConfig, setAuditSink };
@@ -0,0 +1,14 @@
1
+ import {
2
+ __resetAuditSinkForTests,
3
+ getAuditCaptureConfig,
4
+ recordAudit,
5
+ setAuditCaptureConfig,
6
+ setAuditSink
7
+ } from "../chunk-WNY4WMRF.js";
8
+ export {
9
+ __resetAuditSinkForTests,
10
+ getAuditCaptureConfig,
11
+ recordAudit,
12
+ setAuditCaptureConfig,
13
+ setAuditSink
14
+ };
@@ -0,0 +1,14 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+
4
+
5
+
6
+
7
+ var _chunkL74VDN4Acjs = require('../chunk-L74VDN4A.cjs');
8
+
9
+
10
+
11
+
12
+
13
+
14
+ exports.__resetBillingSinkForTests = _chunkL74VDN4Acjs.__resetBillingSinkForTests; exports.getBillingCaptureConfig = _chunkL74VDN4Acjs.getBillingCaptureConfig; exports.publishBillingEvent = _chunkL74VDN4Acjs.publishBillingEvent; exports.setBillingCaptureConfig = _chunkL74VDN4Acjs.setBillingCaptureConfig; exports.setBillingSink = _chunkL74VDN4Acjs.setBillingSink;
@@ -0,0 +1,49 @@
1
+ import { BillingEvent, BillingConfig } from '@omnicross/contracts/billing-types';
2
+
3
+ /**
4
+ * billingEmit — the module-slot sink + capture-gate port for `@omnicross/core`
5
+ * (billing-event-stream, design D4/D7).
6
+ *
7
+ * The outbound server's post-response billing hook calls {@link publishBillingEvent}
8
+ * with an assembled {@link BillingEvent}. The concrete `BillingPublisher` (the
9
+ * durable-first jsonl ledger + built-in POST) lives in the DAEMON and registers
10
+ * itself as the sink at bootstrap via {@link setBillingSink}. Core imports NOTHING
11
+ * from the daemon — exactly the `setWebhookSink` / `setAuditSink` precedent.
12
+ *
13
+ * A SECOND slot holds the active {@link BillingConfig} ({@link setBillingCaptureConfig}
14
+ * / {@link getBillingCaptureConfig}). The capture hook reads it to GATE assembly:
15
+ * absent/`enabled:false` ⇒ the hook does nothing (not even event assembly), so
16
+ * billing-disabled is byte-identical zero regression. The daemon sets BOTH slots
17
+ * together (config + sink) when billing is enabled and clears BOTH when disabled.
18
+ *
19
+ * HARD CONTRACT (design D7 / risk "a billing POST blocking the request path"):
20
+ * {@link publishBillingEvent} NEVER throws and NEVER awaits — it hands the event
21
+ * to the sink (which durably appends + enqueues delivery and returns immediately)
22
+ * and swallows any sink error, so a slow/failing/throwing publisher can never
23
+ * affect the relay path. Absent a sink it is a pure no-op.
24
+ *
25
+ * @module @omnicross/core/pipeline/billingEmit
26
+ */
27
+
28
+ /** The sink the daemon registers; it MUST durably-append-and-return (never block/throw). */
29
+ type BillingSink = (event: BillingEvent) => void;
30
+ /** Install (or clear, with `null`) the billing sink. Idempotent; last write wins. */
31
+ declare function setBillingSink(fn: BillingSink | null): void;
32
+ /**
33
+ * Install (or clear, with `null`) the active billing config. `null` (or an
34
+ * `enabled:false` config) disables the capture entirely — the hook does no work.
35
+ */
36
+ declare function setBillingCaptureConfig(config: BillingConfig | null): void;
37
+ /** The active billing config, or `null` when billing is disabled/unset. */
38
+ declare function getBillingCaptureConfig(): BillingConfig | null;
39
+ /**
40
+ * Publish one billing event to the registered sink. A no-op when no sink is set
41
+ * (zero regression). NEVER throws (a misbehaving sink is swallowed) and NEVER
42
+ * awaits (the sink durably appends + enqueues delivery, then returns) — so no
43
+ * relay path is ever delayed.
44
+ */
45
+ declare function publishBillingEvent(event: BillingEvent): void;
46
+ /** TEST SEAM — clear both slots so a suite starts from the no-billing baseline. */
47
+ declare function __resetBillingSinkForTests(): void;
48
+
49
+ export { type BillingSink, __resetBillingSinkForTests, getBillingCaptureConfig, publishBillingEvent, setBillingCaptureConfig, setBillingSink };
@@ -0,0 +1,49 @@
1
+ import { BillingEvent, BillingConfig } from '@omnicross/contracts/billing-types';
2
+
3
+ /**
4
+ * billingEmit — the module-slot sink + capture-gate port for `@omnicross/core`
5
+ * (billing-event-stream, design D4/D7).
6
+ *
7
+ * The outbound server's post-response billing hook calls {@link publishBillingEvent}
8
+ * with an assembled {@link BillingEvent}. The concrete `BillingPublisher` (the
9
+ * durable-first jsonl ledger + built-in POST) lives in the DAEMON and registers
10
+ * itself as the sink at bootstrap via {@link setBillingSink}. Core imports NOTHING
11
+ * from the daemon — exactly the `setWebhookSink` / `setAuditSink` precedent.
12
+ *
13
+ * A SECOND slot holds the active {@link BillingConfig} ({@link setBillingCaptureConfig}
14
+ * / {@link getBillingCaptureConfig}). The capture hook reads it to GATE assembly:
15
+ * absent/`enabled:false` ⇒ the hook does nothing (not even event assembly), so
16
+ * billing-disabled is byte-identical zero regression. The daemon sets BOTH slots
17
+ * together (config + sink) when billing is enabled and clears BOTH when disabled.
18
+ *
19
+ * HARD CONTRACT (design D7 / risk "a billing POST blocking the request path"):
20
+ * {@link publishBillingEvent} NEVER throws and NEVER awaits — it hands the event
21
+ * to the sink (which durably appends + enqueues delivery and returns immediately)
22
+ * and swallows any sink error, so a slow/failing/throwing publisher can never
23
+ * affect the relay path. Absent a sink it is a pure no-op.
24
+ *
25
+ * @module @omnicross/core/pipeline/billingEmit
26
+ */
27
+
28
+ /** The sink the daemon registers; it MUST durably-append-and-return (never block/throw). */
29
+ type BillingSink = (event: BillingEvent) => void;
30
+ /** Install (or clear, with `null`) the billing sink. Idempotent; last write wins. */
31
+ declare function setBillingSink(fn: BillingSink | null): void;
32
+ /**
33
+ * Install (or clear, with `null`) the active billing config. `null` (or an
34
+ * `enabled:false` config) disables the capture entirely — the hook does no work.
35
+ */
36
+ declare function setBillingCaptureConfig(config: BillingConfig | null): void;
37
+ /** The active billing config, or `null` when billing is disabled/unset. */
38
+ declare function getBillingCaptureConfig(): BillingConfig | null;
39
+ /**
40
+ * Publish one billing event to the registered sink. A no-op when no sink is set
41
+ * (zero regression). NEVER throws (a misbehaving sink is swallowed) and NEVER
42
+ * awaits (the sink durably appends + enqueues delivery, then returns) — so no
43
+ * relay path is ever delayed.
44
+ */
45
+ declare function publishBillingEvent(event: BillingEvent): void;
46
+ /** TEST SEAM — clear both slots so a suite starts from the no-billing baseline. */
47
+ declare function __resetBillingSinkForTests(): void;
48
+
49
+ export { type BillingSink, __resetBillingSinkForTests, getBillingCaptureConfig, publishBillingEvent, setBillingCaptureConfig, setBillingSink };
@@ -0,0 +1,14 @@
1
+ import {
2
+ __resetBillingSinkForTests,
3
+ getBillingCaptureConfig,
4
+ publishBillingEvent,
5
+ setBillingCaptureConfig,
6
+ setBillingSink
7
+ } from "../chunk-TKJMZBAH.js";
8
+ export {
9
+ __resetBillingSinkForTests,
10
+ getBillingCaptureConfig,
11
+ publishBillingEvent,
12
+ setBillingCaptureConfig,
13
+ setBillingSink
14
+ };
@@ -1,70 +1,6 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
19
2
 
20
- // src/pipeline/executeProviderCall.ts
21
- var executeProviderCall_exports = {};
22
- __export(executeProviderCall_exports, {
23
- executeProviderCall: () => executeProviderCall
24
- });
25
- module.exports = __toCommonJS(executeProviderCall_exports);
26
- async function executeProviderCall(ctx) {
27
- const {
28
- executor,
29
- request,
30
- provider,
31
- chain,
32
- endpointTransformer,
33
- extendedContext,
34
- resolveUrl,
35
- buildHeaders,
36
- prepareBody,
37
- fetchFn,
38
- runResponseChain = false,
39
- responseChainRequest
40
- } = ctx;
41
- const { requestBody, config } = await executor.executeRequestChain(
42
- request,
43
- provider,
44
- chain,
45
- { endpointTransformer, extendedContext }
46
- );
47
- const finalBody = prepareBody ? await prepareBody(requestBody, config) : requestBody;
48
- const url = resolveUrl(config);
49
- const headers = buildHeaders(config);
50
- const fetched = await fetchFn(url, headers, finalBody);
51
- let response = fetched;
52
- if (runResponseChain) {
53
- response = await executor.executeResponseChain(
54
- // Preserve the EXACT first arg each site passed: proxy → requestBody,
55
- // unified ingresses → their pre-transform request. The caller supplies
56
- // it via `responseChainRequest`; fall back to `requestBody` (the proxy
57
- // shape) so the contract is never silently `undefined`.
58
- responseChainRequest ?? requestBody,
59
- fetched,
60
- provider,
61
- chain,
62
- { endpointTransformer }
63
- );
64
- }
65
- return { response, requestBody, finalBody, config, url, headers };
66
- }
67
- // Annotate the CommonJS export names for ESM import in node:
68
- 0 && (module.exports = {
69
- executeProviderCall
70
- });
3
+ var _chunkKUU2RNG6cjs = require('../chunk-KUU2RNG6.cjs');
4
+
5
+
6
+ exports.executeProviderCall = _chunkKUU2RNG6cjs.executeProviderCall;
@@ -1,45 +1,6 @@
1
- // src/pipeline/executeProviderCall.ts
2
- async function executeProviderCall(ctx) {
3
- const {
4
- executor,
5
- request,
6
- provider,
7
- chain,
8
- endpointTransformer,
9
- extendedContext,
10
- resolveUrl,
11
- buildHeaders,
12
- prepareBody,
13
- fetchFn,
14
- runResponseChain = false,
15
- responseChainRequest
16
- } = ctx;
17
- const { requestBody, config } = await executor.executeRequestChain(
18
- request,
19
- provider,
20
- chain,
21
- { endpointTransformer, extendedContext }
22
- );
23
- const finalBody = prepareBody ? await prepareBody(requestBody, config) : requestBody;
24
- const url = resolveUrl(config);
25
- const headers = buildHeaders(config);
26
- const fetched = await fetchFn(url, headers, finalBody);
27
- let response = fetched;
28
- if (runResponseChain) {
29
- response = await executor.executeResponseChain(
30
- // Preserve the EXACT first arg each site passed: proxy → requestBody,
31
- // unified ingresses → their pre-transform request. The caller supplies
32
- // it via `responseChainRequest`; fall back to `requestBody` (the proxy
33
- // shape) so the contract is never silently `undefined`.
34
- responseChainRequest ?? requestBody,
35
- fetched,
36
- provider,
37
- chain,
38
- { endpointTransformer }
39
- );
40
- }
41
- return { response, requestBody, finalBody, config, url, headers };
42
- }
1
+ import {
2
+ executeProviderCall
3
+ } from "../chunk-JO5NLTLY.js";
43
4
  export {
44
5
  executeProviderCall
45
6
  };
@@ -1,47 +1,6 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
19
2
 
20
- // src/pipeline/resolveProviderChain.ts
21
- var resolveProviderChain_exports = {};
22
- __export(resolveProviderChain_exports, {
23
- resolveProviderChain: () => resolveProviderChain
24
- });
25
- module.exports = __toCommonJS(resolveProviderChain_exports);
26
- async function resolveProviderChain(llmConfig, providerId, model) {
27
- const cachedChain = await llmConfig.resolveTransformerChain(providerId, model);
28
- const mainTransformer = await llmConfig.getMainTransformer(providerId);
29
- const chain = {
30
- providerTransformers: [...cachedChain.providerTransformers],
31
- modelTransformers: [...cachedChain.modelTransformers]
32
- };
33
- if (mainTransformer) {
34
- const alreadyInChain = chain.providerTransformers.some(
35
- (t) => t.name === mainTransformer.name
36
- );
37
- if (!alreadyInChain) {
38
- chain.providerTransformers.unshift(mainTransformer);
39
- }
40
- }
41
- const hasTransformers = chain.providerTransformers.length > 0 || chain.modelTransformers.length > 0;
42
- return { chain, mainTransformer, hasTransformers };
43
- }
44
- // Annotate the CommonJS export names for ESM import in node:
45
- 0 && (module.exports = {
46
- resolveProviderChain
47
- });
3
+ var _chunkQXD4MV2Xcjs = require('../chunk-QXD4MV2X.cjs');
4
+
5
+
6
+ exports.resolveProviderChain = _chunkQXD4MV2Xcjs.resolveProviderChain;