@omnicross/core 0.1.4 → 0.1.6

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 (204) hide show
  1. package/dist/ApiConverter.cjs +2 -2
  2. package/dist/ApiConverter.js +1 -1
  3. package/dist/{CompletionService-DdWaAxq0.d.ts → CompletionService-C3BX0Ovy.d.ts} +4 -3
  4. package/dist/{CompletionService-D3a47vdU.d.cts → CompletionService-kNA17cfI.d.cts} +4 -3
  5. package/dist/auth/GeminiCodeAssistProjectResolver.cjs +7 -5
  6. package/dist/auth/GeminiCodeAssistProjectResolver.js +5 -3
  7. package/dist/{chunk-HRRYG2AX.js → chunk-23S5OPIO.js} +10 -1
  8. package/dist/chunk-25GXJCEZ.cjs +40 -0
  9. package/dist/chunk-2JYRIADS.js +40 -0
  10. package/dist/chunk-3Z5BQZFM.cjs +52 -0
  11. package/dist/{chunk-4VAVYUZS.cjs → chunk-4VLRHHFE.cjs} +82 -40
  12. package/dist/{chunk-VACWOIRE.cjs → chunk-4VZX5F4T.cjs} +39 -15
  13. package/dist/{chunk-FTQ7IQUC.js → chunk-6CL5HTPQ.js} +52 -10
  14. package/dist/chunk-6QQG7YG3.cjs +153 -0
  15. package/dist/{chunk-SU2GCLAC.cjs → chunk-6VUQPOV3.cjs} +359 -60
  16. package/dist/chunk-7AK7B36B.cjs +44 -0
  17. package/dist/{chunk-5ZQBEOMD.js → chunk-AT7B7SOZ.js} +25 -2
  18. package/dist/{chunk-IK3KE3AU.js → chunk-DE2SRBFZ.js} +1 -1
  19. package/dist/chunk-DLXZEZWO.cjs +285 -0
  20. package/dist/{chunk-UHGVBFU3.js → chunk-EBLFCNPY.js} +38 -14
  21. package/dist/chunk-EJLH6NFT.cjs +166 -0
  22. package/dist/chunk-HVBBDBS3.cjs +350 -0
  23. package/dist/{chunk-7Y47UCF2.js → chunk-IFXJ2BG7.js} +5 -38
  24. package/dist/{chunk-46ZIFWYG.cjs → chunk-IIRPUVPH.cjs} +7 -1
  25. package/dist/{chunk-YGXJGRFI.cjs → chunk-KBM2W6UY.cjs} +111 -24
  26. package/dist/{chunk-OCEUVQHW.cjs → chunk-KCVJWJST.cjs} +73 -3
  27. package/dist/chunk-LB6EBS6Y.js +69 -0
  28. package/dist/{chunk-C7PSERMH.js → chunk-LVUCAWMK.js} +1 -1
  29. package/dist/chunk-MKF46GNZ.js +350 -0
  30. package/dist/{chunk-HYN75H6G.cjs → chunk-MUHWHQVM.cjs} +1 -1
  31. package/dist/{chunk-Z7Y2NPHY.js → chunk-N5T4M4GU.js} +1 -1
  32. package/dist/{chunk-TIER4SUC.js → chunk-OEWZUX4G.js} +346 -47
  33. package/dist/chunk-OF3BECU2.cjs +69 -0
  34. package/dist/{chunk-RSJ3TWJQ.cjs → chunk-OKMJLEXX.cjs} +5 -5
  35. package/dist/chunk-OPRS4IQZ.js +153 -0
  36. package/dist/{chunk-XK5CIRMQ.js → chunk-SIZQQD6T.js} +72 -2
  37. package/dist/{chunk-DKPXN34V.cjs → chunk-SQYVORNP.cjs} +1334 -510
  38. package/dist/chunk-SYQF7OIR.js +52 -0
  39. package/dist/{chunk-S4WBV25P.js → chunk-TOVPMMHM.js} +111 -24
  40. package/dist/{chunk-QYTT6GE3.js → chunk-UDCC7EMR.js} +1093 -269
  41. package/dist/{chunk-E3UCVHLP.cjs → chunk-UNWKG6EI.cjs} +5 -38
  42. package/dist/{chunk-ZLX3KGXX.js → chunk-UX7VWA46.js} +135 -23
  43. package/dist/{chunk-7YN22L2H.cjs → chunk-V4TXMEJS.cjs} +5 -5
  44. package/dist/chunk-VRFBB5DB.js +44 -0
  45. package/dist/chunk-WB6PH56J.js +166 -0
  46. package/dist/{chunk-G2UTNSGU.js → chunk-WNKWAEUR.js} +7 -1
  47. package/dist/{chunk-SUEGJ75D.cjs → chunk-WYTEQ4Q5.cjs} +25 -2
  48. package/dist/{chunk-5ENKBSWO.js → chunk-YJVHCHQX.js} +42 -6
  49. package/dist/{chunk-VQY5W4YW.cjs → chunk-YK57NMIF.cjs} +44 -8
  50. package/dist/{chunk-KFI44N2R.cjs → chunk-YNJNTCSQ.cjs} +10 -1
  51. package/dist/completion/ApiKeyPoolService.cjs +12 -0
  52. package/dist/completion/ApiKeyPoolService.d.cts +6 -0
  53. package/dist/completion/ApiKeyPoolService.d.ts +6 -0
  54. package/dist/completion/ApiKeyPoolService.js +12 -0
  55. package/dist/completion/CompletionService.cjs +27 -24
  56. package/dist/completion/CompletionService.d.cts +2 -1
  57. package/dist/completion/CompletionService.d.ts +2 -1
  58. package/dist/completion/CompletionService.js +26 -23
  59. package/dist/completion.cjs +27 -24
  60. package/dist/completion.d.cts +2 -1
  61. package/dist/completion.d.ts +2 -1
  62. package/dist/completion.js +26 -23
  63. package/dist/index.cjs +53 -29
  64. package/dist/index.d.cts +8 -8
  65. package/dist/index.d.ts +8 -8
  66. package/dist/index.js +56 -32
  67. package/dist/{keyPolicy-Cp0FntZl.d.cts → keyPolicy-zdWTu3CQ.d.cts} +1 -1
  68. package/dist/{keyPolicy-Cp0FntZl.d.ts → keyPolicy-zdWTu3CQ.d.ts} +1 -1
  69. package/dist/outbound-api/auditCapture.cjs +2 -2
  70. package/dist/outbound-api/auditCapture.d.cts +5 -3
  71. package/dist/outbound-api/auditCapture.d.ts +5 -3
  72. package/dist/outbound-api/auditCapture.js +1 -1
  73. package/dist/outbound-api/quotaWarn.d.cts +1 -1
  74. package/dist/outbound-api/quotaWarn.d.ts +1 -1
  75. package/dist/outbound-api/routeResolver.cjs +2 -2
  76. package/dist/outbound-api/routeResolver.d.cts +4 -3
  77. package/dist/outbound-api/routeResolver.d.ts +4 -3
  78. package/dist/outbound-api/routeResolver.js +1 -1
  79. package/dist/outbound-api/subscriptionRegistryPort.d.cts +1 -0
  80. package/dist/outbound-api/subscriptionRegistryPort.d.ts +1 -0
  81. package/dist/outbound-api/types.d.cts +3 -2
  82. package/dist/outbound-api/types.d.ts +3 -2
  83. package/dist/outbound-api.cjs +49 -25
  84. package/dist/outbound-api.d.cts +127 -85
  85. package/dist/outbound-api.d.ts +127 -85
  86. package/dist/outbound-api.js +52 -28
  87. package/dist/pipeline/AccountAllowanceScheduling.cjs +15 -0
  88. package/dist/pipeline/AccountAllowanceScheduling.d.cts +90 -0
  89. package/dist/pipeline/AccountAllowanceScheduling.d.ts +90 -0
  90. package/dist/pipeline/AccountAllowanceScheduling.js +15 -0
  91. package/dist/pipeline/AccountAllowanceStore.cjs +20 -0
  92. package/dist/pipeline/AccountAllowanceStore.d.cts +77 -0
  93. package/dist/pipeline/AccountAllowanceStore.d.ts +77 -0
  94. package/dist/pipeline/AccountAllowanceStore.js +20 -0
  95. package/dist/pipeline/AuthSource.d.cts +11 -2
  96. package/dist/pipeline/AuthSource.d.ts +11 -2
  97. package/dist/pipeline/BoundAccountSelectionError.cjs +10 -0
  98. package/dist/pipeline/BoundAccountSelectionError.d.cts +28 -0
  99. package/dist/pipeline/BoundAccountSelectionError.d.ts +28 -0
  100. package/dist/pipeline/BoundAccountSelectionError.js +10 -0
  101. package/dist/pipeline/LlmConfigProviderAuth.d.cts +1 -0
  102. package/dist/pipeline/LlmConfigProviderAuth.d.ts +1 -0
  103. package/dist/pipeline/SubscriptionAccountHealth.cjs +4 -2
  104. package/dist/pipeline/SubscriptionAccountHealth.d.cts +34 -6
  105. package/dist/pipeline/SubscriptionAccountHealth.d.ts +34 -6
  106. package/dist/pipeline/SubscriptionAccountHealth.js +3 -1
  107. package/dist/pipeline/SubscriptionAuthSource.cjs +5 -2
  108. package/dist/pipeline/SubscriptionAuthSource.d.cts +1 -0
  109. package/dist/pipeline/SubscriptionAuthSource.d.ts +1 -0
  110. package/dist/pipeline/SubscriptionAuthSource.js +4 -1
  111. package/dist/pipeline/SubscriptionAuthStrategy.d.cts +8 -3
  112. package/dist/pipeline/SubscriptionAuthStrategy.d.ts +8 -3
  113. package/dist/pipeline/executeProviderCall.cjs +2 -2
  114. package/dist/pipeline/executeProviderCall.d.cts +8 -3
  115. package/dist/pipeline/executeProviderCall.d.ts +8 -3
  116. package/dist/pipeline/executeProviderCall.js +1 -1
  117. package/dist/pipeline/resolveProviderChain.d.cts +2 -3
  118. package/dist/pipeline/resolveProviderChain.d.ts +2 -3
  119. package/dist/pipeline/resolveSubscriptionChain.d.cts +1 -0
  120. package/dist/pipeline/resolveSubscriptionChain.d.ts +1 -0
  121. package/dist/pipeline/upstreamFetch.cjs +4 -2
  122. package/dist/pipeline/upstreamFetch.d.cts +6 -0
  123. package/dist/pipeline/upstreamFetch.d.ts +6 -0
  124. package/dist/pipeline/upstreamFetch.js +3 -1
  125. package/dist/pipeline/upstreamTrace.cjs +14 -0
  126. package/dist/pipeline/upstreamTrace.d.cts +85 -0
  127. package/dist/pipeline/upstreamTrace.d.ts +85 -0
  128. package/dist/pipeline/upstreamTrace.js +14 -0
  129. package/dist/ports/pricing-store.d.cts +4 -3
  130. package/dist/ports/pricing-store.d.ts +4 -3
  131. package/dist/ports.d.cts +4 -3
  132. package/dist/ports.d.ts +4 -3
  133. package/dist/provider-proxy/ProviderProxy.cjs +27 -24
  134. package/dist/provider-proxy/ProviderProxy.d.cts +1 -0
  135. package/dist/provider-proxy/ProviderProxy.d.ts +1 -0
  136. package/dist/provider-proxy/ProviderProxy.js +26 -23
  137. package/dist/provider-proxy/ingress/providerProxyShared.cjs +31 -24
  138. package/dist/provider-proxy/ingress/providerProxyShared.d.cts +50 -5
  139. package/dist/provider-proxy/ingress/providerProxyShared.d.ts +50 -5
  140. package/dist/provider-proxy/ingress/providerProxyShared.js +30 -23
  141. package/dist/provider-proxy/matchText.cjs +4 -2
  142. package/dist/provider-proxy/matchText.d.cts +41 -6
  143. package/dist/provider-proxy/matchText.d.ts +41 -6
  144. package/dist/provider-proxy/matchText.js +3 -1
  145. package/dist/provider-proxy/types.d.cts +30 -2
  146. package/dist/provider-proxy/types.d.ts +30 -2
  147. package/dist/provider-proxy.cjs +27 -24
  148. package/dist/provider-proxy.d.cts +1 -0
  149. package/dist/provider-proxy.d.ts +1 -0
  150. package/dist/provider-proxy.js +26 -23
  151. package/dist/{routeResolver-C4T7yClx.d.ts → routeResolver-CHTv_Bs5.d.ts} +1 -1
  152. package/dist/{routeResolver-CB3tvJKy.d.cts → routeResolver-kepxnfcC.d.cts} +1 -1
  153. package/dist/transformer/TransformerChainExecutor.cjs +2 -2
  154. package/dist/transformer/TransformerChainExecutor.js +1 -1
  155. package/dist/transformer/transformers/AnthropicTransformer.cjs +2 -2
  156. package/dist/transformer/transformers/AnthropicTransformer.js +1 -1
  157. package/dist/transformer/transformers/GeminiCodeAssistTransformer.cjs +3 -3
  158. package/dist/transformer/transformers/GeminiCodeAssistTransformer.js +2 -2
  159. package/dist/transformer/transformers/GeminiTransformer.cjs +3 -3
  160. package/dist/transformer/transformers/GeminiTransformer.js +2 -2
  161. package/dist/transformer/transformers/OpenAIResponseTransformer.cjs +2 -2
  162. package/dist/transformer/transformers/OpenAIResponseTransformer.d.cts +1 -1
  163. package/dist/transformer/transformers/OpenAIResponseTransformer.d.ts +1 -1
  164. package/dist/transformer/transformers/OpenAIResponseTransformer.js +1 -1
  165. package/dist/transformer/transformers/OpenAITransformer.cjs +6 -0
  166. package/dist/transformer/transformers/OpenAITransformer.d.cts +68 -0
  167. package/dist/transformer/transformers/OpenAITransformer.d.ts +68 -0
  168. package/dist/transformer/transformers/OpenAITransformer.js +6 -0
  169. package/dist/transformer/transformers.cjs +8 -14
  170. package/dist/transformer/transformers.d.cts +12 -48
  171. package/dist/transformer/transformers.d.ts +12 -48
  172. package/dist/transformer/transformers.js +11 -17
  173. package/dist/transformer/types.d.cts +17 -0
  174. package/dist/transformer/types.d.ts +17 -0
  175. package/dist/transformer.cjs +11 -12
  176. package/dist/transformer.d.cts +1 -2
  177. package/dist/transformer.d.ts +1 -2
  178. package/dist/transformer.js +11 -12
  179. package/dist/{types-B8Arpxn0.d.cts → types-H3wGZSOo.d.cts} +134 -7
  180. package/dist/{types-lgPYQuZS.d.ts → types-hsoKrVQS.d.ts} +134 -7
  181. package/dist/usage/pricing-engine.cjs +2 -2
  182. package/dist/usage/pricing-engine.d.cts +9 -1
  183. package/dist/usage/pricing-engine.d.ts +9 -1
  184. package/dist/usage/pricing-engine.js +1 -1
  185. package/dist/usage.cjs +2 -2
  186. package/dist/usage.js +1 -1
  187. package/package.json +1 -1
  188. package/dist/chunk-C72S6TTV.cjs +0 -49
  189. package/dist/chunk-DWKQZ2SK.cjs +0 -254
  190. package/dist/chunk-IAXWICZU.js +0 -69
  191. package/dist/chunk-QWBWGODS.cjs +0 -69
  192. package/dist/chunk-RGTR7CIO.cjs +0 -235
  193. package/dist/chunk-VPBAUQ2M.js +0 -235
  194. package/dist/chunk-YMFAJFQT.cjs +0 -173
  195. package/dist/chunk-Z7LUNECE.js +0 -49
  196. package/dist/chunk-ZJZAOKI7.js +0 -254
  197. package/dist/transformer/transformers/OpenCodeGoTransformer.cjs +0 -6
  198. package/dist/transformer/transformers/OpenCodeGoTransformer.d.cts +0 -51
  199. package/dist/transformer/transformers/OpenCodeGoTransformer.d.ts +0 -51
  200. package/dist/transformer/transformers/OpenCodeGoTransformer.js +0 -6
  201. package/dist/transformer/transformers/ReasoningTransformer.cjs +0 -6
  202. package/dist/transformer/transformers/ReasoningTransformer.d.cts +0 -47
  203. package/dist/transformer/transformers/ReasoningTransformer.d.ts +0 -47
  204. package/dist/transformer/transformers/ReasoningTransformer.js +0 -6
@@ -7,6 +7,7 @@ var BAN_BODY_MARKERS = [
7
7
  "this organization has been disabled",
8
8
  "oauth authentication is currently not allowed"
9
9
  ];
10
+ var ACCOUNT_HEALTH_DIAGNOSTIC_LIMIT = 200;
10
11
  function readHeader(headers, name) {
11
12
  if (typeof headers.get === "function") {
12
13
  return headers.get(name);
@@ -44,6 +45,7 @@ var SubscriptionAccountHealth = class {
44
45
  records = /* @__PURE__ */ new Map();
45
46
  listeners = /* @__PURE__ */ new Set();
46
47
  anomalyListeners = /* @__PURE__ */ new Set();
48
+ diagnostics = [];
47
49
  now;
48
50
  overloadEnabled;
49
51
  overloadTtlMs;
@@ -71,8 +73,8 @@ var SubscriptionAccountHealth = class {
71
73
  }
72
74
  /**
73
75
  * Whether an account may be scheduled RIGHT NOW. `blocked` → false; any timer
74
- * still in the future → false. Expired timers are lazily deleted on read (CRS
75
- * lazy-clear parity) so an elapsed cooldown restores the account WITHOUT a
76
+ * still in the future → false. Expired timers are lazily deleted on read so
77
+ * an elapsed cooldown restores the account WITHOUT a
76
78
  * timer — but the recovery SIGNAL is the sweeper's job (`sweepRecoveries`), so
77
79
  * this read never emits (correctness is independent of the tick).
78
80
  */
@@ -86,7 +88,7 @@ var SubscriptionAccountHealth = class {
86
88
  return !active;
87
89
  }
88
90
  /**
89
- * The single marking entry point (design D3). Faithful to CRS status semantics:
91
+ * The single marking entry point (design D3):
90
92
  * - 429 + authoritative reset → `rateLimitEndAt`; a non-claude 429 may use
91
93
  * `retryAfterSeconds`; a bare 429 (no resolvable reset) is NOT marked;
92
94
  * - 529 → `overloadUntil` (gated by `overloadEnabled`);
@@ -141,9 +143,20 @@ var SubscriptionAccountHealth = class {
141
143
  }
142
144
  if (isRecordEmpty(record)) this.records.delete(key);
143
145
  else this.records.set(key, record);
144
- if (recovered) this.emit({ providerId, accountId, at: now, kind: "rateLimitRecovery" });
146
+ if (recovered) {
147
+ const recovery = {
148
+ providerId,
149
+ accountId,
150
+ at: now,
151
+ kind: "rateLimitRecovery"
152
+ };
153
+ this.recordDiagnostic({ kind: "health-recovery", providerId, accountId, at: now });
154
+ this.emit(recovery);
155
+ }
145
156
  if (anomalyState && !wasUnhealthyBefore) {
146
- this.emitAnomaly({ providerId, accountId, at: now, state: anomalyState });
157
+ const anomaly = { providerId, accountId, at: now, state: anomalyState };
158
+ this.recordDiagnostic({ kind: "health-anomaly", ...anomaly });
159
+ this.emitAnomaly(anomaly);
147
160
  }
148
161
  }
149
162
  /** Whether a record is unhealthy at `now`: blocked, or any timer still future. */
@@ -196,7 +209,15 @@ var SubscriptionAccountHealth = class {
196
209
  this.records.delete(key);
197
210
  }
198
211
  }
199
- for (const event of recovered) this.emit(event);
212
+ for (const event of recovered) {
213
+ this.recordDiagnostic({
214
+ kind: "health-recovery",
215
+ providerId: event.providerId,
216
+ accountId: event.accountId,
217
+ at: event.at
218
+ });
219
+ this.emit(event);
220
+ }
200
221
  return recovered;
201
222
  }
202
223
  /** Admin-facing coarse status + cooldown-until for one account (secret-free). */
@@ -215,6 +236,14 @@ var SubscriptionAccountHealth = class {
215
236
  }
216
237
  return { state: "healthy" };
217
238
  }
239
+ /** Return newest-first, bounded, secret-free health edge diagnostics. */
240
+ getDiagnostics(filter = {}) {
241
+ const requested = typeof filter.limit === "number" && Number.isFinite(filter.limit) ? Math.trunc(filter.limit) : ACCOUNT_HEALTH_DIAGNOSTIC_LIMIT;
242
+ const limit = Math.min(ACCOUNT_HEALTH_DIAGNOSTIC_LIMIT, Math.max(1, requested));
243
+ return this.diagnostics.filter(
244
+ (event) => (!filter.providerId || event.providerId === filter.providerId) && (!filter.accountId || event.accountId === filter.accountId)
245
+ ).slice(-limit).reverse().map((event) => ({ ...event }));
246
+ }
218
247
  /**
219
248
  * Register a recovery listener (the OQ3 seam #5 webhooks + #8 health-cron
220
249
  * consume). Returns an unsubscribe function. Two edges fire it:
@@ -257,6 +286,12 @@ var SubscriptionAccountHealth = class {
257
286
  }
258
287
  }
259
288
  }
289
+ recordDiagnostic(event) {
290
+ this.diagnostics.push({ ...event });
291
+ if (this.diagnostics.length > ACCOUNT_HEALTH_DIAGNOSTIC_LIMIT) {
292
+ this.diagnostics.splice(0, this.diagnostics.length - ACCOUNT_HEALTH_DIAGNOSTIC_LIMIT);
293
+ }
294
+ }
260
295
  /**
261
296
  * Delete every EXPIRED timer field on the record in place; return whether any
262
297
  * timer is STILL active (in the future). `blocked` is not a timer and is left
@@ -303,6 +338,7 @@ export {
303
338
  OVERLOAD_ENABLED_DEFAULT,
304
339
  AUTH_ERROR_TTL_MS,
305
340
  SERVER_ERROR_TTL_MS,
341
+ ACCOUNT_HEALTH_DIAGNOSTIC_LIMIT,
306
342
  resolveResetSeconds,
307
343
  SubscriptionAccountHealth,
308
344
  getSharedAccountHealth,
@@ -7,6 +7,7 @@ var BAN_BODY_MARKERS = [
7
7
  "this organization has been disabled",
8
8
  "oauth authentication is currently not allowed"
9
9
  ];
10
+ var ACCOUNT_HEALTH_DIAGNOSTIC_LIMIT = 200;
10
11
  function readHeader(headers, name) {
11
12
  if (typeof headers.get === "function") {
12
13
  return headers.get(name);
@@ -44,12 +45,13 @@ var SubscriptionAccountHealth = (_class = class {
44
45
  __init() {this.records = /* @__PURE__ */ new Map()}
45
46
  __init2() {this.listeners = /* @__PURE__ */ new Set()}
46
47
  __init3() {this.anomalyListeners = /* @__PURE__ */ new Set()}
48
+ __init4() {this.diagnostics = []}
47
49
 
48
50
 
49
51
 
50
52
 
51
53
 
52
- constructor(opts = {}) {;_class.prototype.__init.call(this);_class.prototype.__init2.call(this);_class.prototype.__init3.call(this);
54
+ constructor(opts = {}) {;_class.prototype.__init.call(this);_class.prototype.__init2.call(this);_class.prototype.__init3.call(this);_class.prototype.__init4.call(this);
53
55
  this.now = _nullishCoalesce(opts.now, () => ( Date.now));
54
56
  this.overloadEnabled = _nullishCoalesce(opts.overloadEnabled, () => ( OVERLOAD_ENABLED_DEFAULT));
55
57
  this.overloadTtlMs = _nullishCoalesce(opts.overloadTtlMs, () => ( OVERLOAD_TTL_MS));
@@ -71,8 +73,8 @@ var SubscriptionAccountHealth = (_class = class {
71
73
  }
72
74
  /**
73
75
  * Whether an account may be scheduled RIGHT NOW. `blocked` → false; any timer
74
- * still in the future → false. Expired timers are lazily deleted on read (CRS
75
- * lazy-clear parity) so an elapsed cooldown restores the account WITHOUT a
76
+ * still in the future → false. Expired timers are lazily deleted on read so
77
+ * an elapsed cooldown restores the account WITHOUT a
76
78
  * timer — but the recovery SIGNAL is the sweeper's job (`sweepRecoveries`), so
77
79
  * this read never emits (correctness is independent of the tick).
78
80
  */
@@ -86,7 +88,7 @@ var SubscriptionAccountHealth = (_class = class {
86
88
  return !active;
87
89
  }
88
90
  /**
89
- * The single marking entry point (design D3). Faithful to CRS status semantics:
91
+ * The single marking entry point (design D3):
90
92
  * - 429 + authoritative reset → `rateLimitEndAt`; a non-claude 429 may use
91
93
  * `retryAfterSeconds`; a bare 429 (no resolvable reset) is NOT marked;
92
94
  * - 529 → `overloadUntil` (gated by `overloadEnabled`);
@@ -141,9 +143,20 @@ var SubscriptionAccountHealth = (_class = class {
141
143
  }
142
144
  if (isRecordEmpty(record)) this.records.delete(key);
143
145
  else this.records.set(key, record);
144
- if (recovered) this.emit({ providerId, accountId, at: now, kind: "rateLimitRecovery" });
146
+ if (recovered) {
147
+ const recovery = {
148
+ providerId,
149
+ accountId,
150
+ at: now,
151
+ kind: "rateLimitRecovery"
152
+ };
153
+ this.recordDiagnostic({ kind: "health-recovery", providerId, accountId, at: now });
154
+ this.emit(recovery);
155
+ }
145
156
  if (anomalyState && !wasUnhealthyBefore) {
146
- this.emitAnomaly({ providerId, accountId, at: now, state: anomalyState });
157
+ const anomaly = { providerId, accountId, at: now, state: anomalyState };
158
+ this.recordDiagnostic({ kind: "health-anomaly", ...anomaly });
159
+ this.emitAnomaly(anomaly);
147
160
  }
148
161
  }
149
162
  /** Whether a record is unhealthy at `now`: blocked, or any timer still future. */
@@ -196,7 +209,15 @@ var SubscriptionAccountHealth = (_class = class {
196
209
  this.records.delete(key);
197
210
  }
198
211
  }
199
- for (const event of recovered) this.emit(event);
212
+ for (const event of recovered) {
213
+ this.recordDiagnostic({
214
+ kind: "health-recovery",
215
+ providerId: event.providerId,
216
+ accountId: event.accountId,
217
+ at: event.at
218
+ });
219
+ this.emit(event);
220
+ }
200
221
  return recovered;
201
222
  }
202
223
  /** Admin-facing coarse status + cooldown-until for one account (secret-free). */
@@ -215,6 +236,14 @@ var SubscriptionAccountHealth = (_class = class {
215
236
  }
216
237
  return { state: "healthy" };
217
238
  }
239
+ /** Return newest-first, bounded, secret-free health edge diagnostics. */
240
+ getDiagnostics(filter = {}) {
241
+ const requested = typeof filter.limit === "number" && Number.isFinite(filter.limit) ? Math.trunc(filter.limit) : ACCOUNT_HEALTH_DIAGNOSTIC_LIMIT;
242
+ const limit = Math.min(ACCOUNT_HEALTH_DIAGNOSTIC_LIMIT, Math.max(1, requested));
243
+ return this.diagnostics.filter(
244
+ (event) => (!filter.providerId || event.providerId === filter.providerId) && (!filter.accountId || event.accountId === filter.accountId)
245
+ ).slice(-limit).reverse().map((event) => ({ ...event }));
246
+ }
218
247
  /**
219
248
  * Register a recovery listener (the OQ3 seam #5 webhooks + #8 health-cron
220
249
  * consume). Returns an unsubscribe function. Two edges fire it:
@@ -257,6 +286,12 @@ var SubscriptionAccountHealth = (_class = class {
257
286
  }
258
287
  }
259
288
  }
289
+ recordDiagnostic(event) {
290
+ this.diagnostics.push({ ...event });
291
+ if (this.diagnostics.length > ACCOUNT_HEALTH_DIAGNOSTIC_LIMIT) {
292
+ this.diagnostics.splice(0, this.diagnostics.length - ACCOUNT_HEALTH_DIAGNOSTIC_LIMIT);
293
+ }
294
+ }
260
295
  /**
261
296
  * Delete every EXPIRED timer field on the record in place; return whether any
262
297
  * timer is STILL active (in the future). `blocked` is not a timer and is left
@@ -308,4 +343,5 @@ function __resetSharedAccountHealthForTests() {
308
343
 
309
344
 
310
345
 
311
- exports.OVERLOAD_TTL_MS = OVERLOAD_TTL_MS; exports.OVERLOAD_ENABLED_DEFAULT = OVERLOAD_ENABLED_DEFAULT; exports.AUTH_ERROR_TTL_MS = AUTH_ERROR_TTL_MS; exports.SERVER_ERROR_TTL_MS = SERVER_ERROR_TTL_MS; exports.resolveResetSeconds = resolveResetSeconds; exports.SubscriptionAccountHealth = SubscriptionAccountHealth; exports.getSharedAccountHealth = getSharedAccountHealth; exports.setSharedAccountHealth = setSharedAccountHealth; exports.__resetSharedAccountHealthForTests = __resetSharedAccountHealthForTests;
346
+
347
+ exports.OVERLOAD_TTL_MS = OVERLOAD_TTL_MS; exports.OVERLOAD_ENABLED_DEFAULT = OVERLOAD_ENABLED_DEFAULT; exports.AUTH_ERROR_TTL_MS = AUTH_ERROR_TTL_MS; exports.SERVER_ERROR_TTL_MS = SERVER_ERROR_TTL_MS; exports.ACCOUNT_HEALTH_DIAGNOSTIC_LIMIT = ACCOUNT_HEALTH_DIAGNOSTIC_LIMIT; exports.resolveResetSeconds = resolveResetSeconds; exports.SubscriptionAccountHealth = SubscriptionAccountHealth; exports.getSharedAccountHealth = getSharedAccountHealth; exports.setSharedAccountHealth = setSharedAccountHealth; exports.__resetSharedAccountHealthForTests = __resetSharedAccountHealthForTests;
@@ -2,6 +2,12 @@
2
2
 
3
3
  var _chunkSVNDB62Dcjs = require('./chunk-SVNDB62D.cjs');
4
4
 
5
+
6
+ var _chunk6QQG7YG3cjs = require('./chunk-6QQG7YG3.cjs');
7
+
8
+
9
+ var _chunk25GXJCEZcjs = require('./chunk-25GXJCEZ.cjs');
10
+
5
11
  // src/pipeline/SubscriptionAuthSource.ts
6
12
  function stripAuthHeaders(headers) {
7
13
  delete headers.authorization;
@@ -34,9 +40,12 @@ var SubscriptionAuthSource = class {
34
40
  resolvedModel: hints.model,
35
41
  sessionKey: hints.sessionKey,
36
42
  reportSelection: hints.reportSelection,
37
- preferredAccountId: hints.preferredAccountId
43
+ preferredAccountId: hints.preferredAccountId,
44
+ preferredAccountGroup: hints.preferredAccountGroup,
45
+ boundAccountFallbackPolicy: hints.boundAccountFallbackPolicy
38
46
  });
39
47
  } catch (err) {
48
+ if (_chunk6QQG7YG3cjs.isAccountAllowanceExhaustedError.call(void 0, err) || _chunk25GXJCEZcjs.isBoundAccountSelectionError.call(void 0, err)) throw err;
40
49
  console.warn("[SubscriptionAuthSource] authStrategy.applyHeaders threw:", _chunkSVNDB62Dcjs.serializeError.call(void 0, err));
41
50
  }
42
51
  }
@@ -80,6 +80,18 @@ var ApiKeyPoolService = (_class = class {
80
80
  });
81
81
  return this.resolveKey(selected.apiKey);
82
82
  }
83
+ /**
84
+ * Bind a session to one explicit provider key. Returns an empty string when
85
+ * the key is unknown, disabled, or cooling so the caller can apply its strict
86
+ * versus pool fallback policy without exposing key material.
87
+ */
88
+ async getKeyById(providerId, keyId, sessionId) {
89
+ const keys = await this.getAvailableKeys(providerId);
90
+ const selected = keys.find((key) => key.id === keyId);
91
+ if (!selected) return "";
92
+ if (sessionId) this.sessionBindings.set(sessionId, { keyId: selected.id, providerId });
93
+ return this.resolveKey(selected.apiKey);
94
+ }
83
95
  /**
84
96
  * Get a key without session affinity (for one-shot calls like testConnection).
85
97
  *
@@ -71,6 +71,12 @@ declare class ApiKeyPoolService {
71
71
  */
72
72
  getKeyIdForSession(providerId: string, sessionId: string): string | null;
73
73
  getKeyForSession(providerId: string, sessionId: string): Promise<string>;
74
+ /**
75
+ * Bind a session to one explicit provider key. Returns an empty string when
76
+ * the key is unknown, disabled, or cooling so the caller can apply its strict
77
+ * versus pool fallback policy without exposing key material.
78
+ */
79
+ getKeyById(providerId: string, keyId: string, sessionId?: string | null): Promise<string>;
74
80
  /**
75
81
  * Get a key without session affinity (for one-shot calls like testConnection).
76
82
  *
@@ -71,6 +71,12 @@ declare class ApiKeyPoolService {
71
71
  */
72
72
  getKeyIdForSession(providerId: string, sessionId: string): string | null;
73
73
  getKeyForSession(providerId: string, sessionId: string): Promise<string>;
74
+ /**
75
+ * Bind a session to one explicit provider key. Returns an empty string when
76
+ * the key is unknown, disabled, or cooling so the caller can apply its strict
77
+ * versus pool fallback policy without exposing key material.
78
+ */
79
+ getKeyById(providerId: string, keyId: string, sessionId?: string | null): Promise<string>;
74
80
  /**
75
81
  * Get a key without session affinity (for one-shot calls like testConnection).
76
82
  *
@@ -80,6 +80,18 @@ var ApiKeyPoolService = class {
80
80
  });
81
81
  return this.resolveKey(selected.apiKey);
82
82
  }
83
+ /**
84
+ * Bind a session to one explicit provider key. Returns an empty string when
85
+ * the key is unknown, disabled, or cooling so the caller can apply its strict
86
+ * versus pool fallback policy without exposing key material.
87
+ */
88
+ async getKeyById(providerId, keyId, sessionId) {
89
+ const keys = await this.getAvailableKeys(providerId);
90
+ const selected = keys.find((key) => key.id === keyId);
91
+ if (!selected) return "";
92
+ if (sessionId) this.sessionBindings.set(sessionId, { keyId: selected.id, providerId });
93
+ return this.resolveKey(selected.apiKey);
94
+ }
83
95
  /**
84
96
  * Get a key without session affinity (for one-shot calls like testConnection).
85
97
  *
@@ -1,51 +1,54 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkDKPXN34Vcjs = require('../chunk-DKPXN34V.cjs');
3
+ var _chunkSQYVORNPcjs = require('../chunk-SQYVORNP.cjs');
4
+ require('../chunk-EJLH6NFT.cjs');
4
5
  require('../chunk-HQP3K7PU.cjs');
5
6
  require('../chunk-FZ46M34D.cjs');
7
+ require('../chunk-IIRPUVPH.cjs');
8
+ require('../chunk-GBHYAGX3.cjs');
6
9
  require('../chunk-3OPYJG76.cjs');
7
- require('../chunk-RGTR7CIO.cjs');
8
- require('../chunk-DWKQZ2SK.cjs');
9
- require('../chunk-4VAVYUZS.cjs');
10
- require('../chunk-7YN22L2H.cjs');
11
- require('../chunk-SU2GCLAC.cjs');
12
- require('../chunk-C72S6TTV.cjs');
10
+ require('../chunk-7AK7B36B.cjs');
11
+ require('../chunk-V4TXMEJS.cjs');
12
+ require('../chunk-6VUQPOV3.cjs');
13
+ require('../chunk-OF3BECU2.cjs');
14
+ require('../chunk-4VLRHHFE.cjs');
13
15
  require('../chunk-EYZYXJTJ.cjs');
14
- require('../chunk-YMFAJFQT.cjs');
16
+ require('../chunk-DLXZEZWO.cjs');
15
17
  require('../chunk-SNYBEXLB.cjs');
16
- require('../chunk-46ZIFWYG.cjs');
17
- require('../chunk-GBHYAGX3.cjs');
18
+ require('../chunk-R3HK6R4B.cjs');
18
19
  require('../chunk-RPII3E6Z.cjs');
19
20
  require('../chunk-6RPZADX3.cjs');
20
- require('../chunk-QWBWGODS.cjs');
21
+ require('../chunk-NYUNU75A.cjs');
22
+ require('../chunk-YK57NMIF.cjs');
23
+ require('../chunk-YNJNTCSQ.cjs');
24
+ require('../chunk-SVNDB62D.cjs');
21
25
  require('../chunk-UIBD2YY5.cjs');
22
- require('../chunk-R3HK6R4B.cjs');
23
- require('../chunk-HYN75H6G.cjs');
26
+ require('../chunk-6QQG7YG3.cjs');
27
+ require('../chunk-25GXJCEZ.cjs');
28
+ require('../chunk-MUHWHQVM.cjs');
24
29
  require('../chunk-Q27JY5RG.cjs');
25
30
  require('../chunk-QXD4MV2X.cjs');
26
- require('../chunk-NYUNU75A.cjs');
27
- require('../chunk-VQY5W4YW.cjs');
28
- require('../chunk-KFI44N2R.cjs');
29
- require('../chunk-SVNDB62D.cjs');
30
31
  require('../chunk-APYG5QD7.cjs');
31
32
  require('../chunk-L74VDN4A.cjs');
32
33
  require('../chunk-4YINUUKQ.cjs');
33
- require('../chunk-VACWOIRE.cjs');
34
+ require('../chunk-4VZX5F4T.cjs');
34
35
  require('../chunk-QBZJ7P2T.cjs');
35
36
  require('../chunk-4IH4EL7M.cjs');
36
37
  require('../chunk-A2YMUCBT.cjs');
37
- require('../chunk-E3UCVHLP.cjs');
38
+ require('../chunk-UNWKG6EI.cjs');
38
39
  require('../chunk-FCR77GYM.cjs');
39
40
  require('../chunk-AEOZIDEB.cjs');
40
41
  require('../chunk-XSVNC2UD.cjs');
41
- require('../chunk-SUEGJ75D.cjs');
42
- require('../chunk-RSJ3TWJQ.cjs');
43
- require('../chunk-YGXJGRFI.cjs');
44
- require('../chunk-OCEUVQHW.cjs');
42
+ require('../chunk-WYTEQ4Q5.cjs');
43
+ require('../chunk-OKMJLEXX.cjs');
44
+ require('../chunk-KBM2W6UY.cjs');
45
+ require('../chunk-KCVJWJST.cjs');
46
+ require('../chunk-3Z5BQZFM.cjs');
47
+ require('../chunk-HVBBDBS3.cjs');
45
48
  require('../chunk-NZYN7C3P.cjs');
46
49
  require('../chunk-JMJBSACD.cjs');
47
50
  require('../chunk-GMMT7RVN.cjs');
48
51
  require('../chunk-UNEFIWXI.cjs');
49
52
 
50
53
 
51
- exports.CompletionService = _chunkDKPXN34Vcjs.CompletionService;
54
+ exports.CompletionService = _chunkSQYVORNPcjs.CompletionService;
@@ -6,7 +6,7 @@ import '../ports/provider-config-source.cjs';
6
6
  import '../provider-proxy/types.cjs';
7
7
  import '../BuiltinToolExecutor-CS2WpXhM.cjs';
8
8
  export { C as CompletionOptions, a as CompletionResult, S as StreamCallbacks } from '../types-BScIHmPr.cjs';
9
- export { C as CompletionService } from '../CompletionService-D3a47vdU.cjs';
9
+ export { C as CompletionService } from '../CompletionService-kNA17cfI.cjs';
10
10
  import './ApiKeyPoolService.cjs';
11
11
  import '../transformer/types.cjs';
12
12
  import '../transformer/TransformerService.cjs';
@@ -14,6 +14,7 @@ import 'node:http';
14
14
  import '@omnicross/contracts/subscription-types';
15
15
  import '@omnicross/contracts/usage-types';
16
16
  import '../pipeline/AuthSource.cjs';
17
+ import '../pipeline/BoundAccountSelectionError.cjs';
17
18
  import '../pipeline/SubscriptionAuthSource.cjs';
18
19
  import '../pipeline/SubscriptionAuthStrategy.cjs';
19
20
  import '../ports/web-search-backend.cjs';
@@ -6,7 +6,7 @@ import '../ports/provider-config-source.js';
6
6
  import '../provider-proxy/types.js';
7
7
  import '../BuiltinToolExecutor-BluWyeob.js';
8
8
  export { C as CompletionOptions, a as CompletionResult, S as StreamCallbacks } from '../types-BScIHmPr.js';
9
- export { C as CompletionService } from '../CompletionService-DdWaAxq0.js';
9
+ export { C as CompletionService } from '../CompletionService-C3BX0Ovy.js';
10
10
  import './ApiKeyPoolService.js';
11
11
  import '../transformer/types.js';
12
12
  import '../transformer/TransformerService.js';
@@ -14,6 +14,7 @@ import 'node:http';
14
14
  import '@omnicross/contracts/subscription-types';
15
15
  import '@omnicross/contracts/usage-types';
16
16
  import '../pipeline/AuthSource.js';
17
+ import '../pipeline/BoundAccountSelectionError.js';
17
18
  import '../pipeline/SubscriptionAuthSource.js';
18
19
  import '../pipeline/SubscriptionAuthStrategy.js';
19
20
  import '../ports/web-search-backend.js';
@@ -1,47 +1,50 @@
1
1
  import {
2
2
  CompletionService
3
- } from "../chunk-QYTT6GE3.js";
3
+ } from "../chunk-UDCC7EMR.js";
4
+ import "../chunk-WB6PH56J.js";
4
5
  import "../chunk-VVEHS2LI.js";
5
6
  import "../chunk-46RLHI7D.js";
7
+ import "../chunk-WNKWAEUR.js";
8
+ import "../chunk-MZNPGW5Q.js";
6
9
  import "../chunk-DK4A7DLE.js";
7
- import "../chunk-VPBAUQ2M.js";
8
- import "../chunk-ZJZAOKI7.js";
9
- import "../chunk-FTQ7IQUC.js";
10
- import "../chunk-C7PSERMH.js";
11
- import "../chunk-TIER4SUC.js";
12
- import "../chunk-Z7LUNECE.js";
10
+ import "../chunk-VRFBB5DB.js";
11
+ import "../chunk-LVUCAWMK.js";
12
+ import "../chunk-OEWZUX4G.js";
13
+ import "../chunk-LB6EBS6Y.js";
14
+ import "../chunk-6CL5HTPQ.js";
13
15
  import "../chunk-7VU7V2E4.js";
14
- import "../chunk-ZLX3KGXX.js";
16
+ import "../chunk-UX7VWA46.js";
15
17
  import "../chunk-BPKCU575.js";
16
- import "../chunk-G2UTNSGU.js";
17
- import "../chunk-MZNPGW5Q.js";
18
+ import "../chunk-DRWHTIIZ.js";
18
19
  import "../chunk-XTEI64OU.js";
19
20
  import "../chunk-XX6NQJMA.js";
20
- import "../chunk-IAXWICZU.js";
21
+ import "../chunk-5ERIZW3D.js";
22
+ import "../chunk-YJVHCHQX.js";
23
+ import "../chunk-23S5OPIO.js";
24
+ import "../chunk-AVYJ4YBN.js";
21
25
  import "../chunk-OE6TDIWW.js";
22
- import "../chunk-DRWHTIIZ.js";
23
- import "../chunk-IK3KE3AU.js";
26
+ import "../chunk-OPRS4IQZ.js";
27
+ import "../chunk-2JYRIADS.js";
28
+ import "../chunk-DE2SRBFZ.js";
24
29
  import "../chunk-ZY6KU6P3.js";
25
30
  import "../chunk-JWC6APFQ.js";
26
- import "../chunk-5ERIZW3D.js";
27
- import "../chunk-5ENKBSWO.js";
28
- import "../chunk-HRRYG2AX.js";
29
- import "../chunk-AVYJ4YBN.js";
30
31
  import "../chunk-WLYIIEAF.js";
31
32
  import "../chunk-TKJMZBAH.js";
32
33
  import "../chunk-3QFXFCHG.js";
33
- import "../chunk-UHGVBFU3.js";
34
+ import "../chunk-EBLFCNPY.js";
34
35
  import "../chunk-AQ5TNQB7.js";
35
36
  import "../chunk-XEKD23J5.js";
36
37
  import "../chunk-H5JUT3KV.js";
37
- import "../chunk-7Y47UCF2.js";
38
+ import "../chunk-IFXJ2BG7.js";
38
39
  import "../chunk-K5NM7VAH.js";
39
40
  import "../chunk-WNY4WMRF.js";
40
41
  import "../chunk-OZFM4X3S.js";
41
- import "../chunk-5ZQBEOMD.js";
42
- import "../chunk-Z7Y2NPHY.js";
43
- import "../chunk-S4WBV25P.js";
44
- import "../chunk-XK5CIRMQ.js";
42
+ import "../chunk-AT7B7SOZ.js";
43
+ import "../chunk-N5T4M4GU.js";
44
+ import "../chunk-TOVPMMHM.js";
45
+ import "../chunk-SIZQQD6T.js";
46
+ import "../chunk-SYQF7OIR.js";
47
+ import "../chunk-MKF46GNZ.js";
45
48
  import "../chunk-CDHS2QDC.js";
46
49
  import "../chunk-Y7FO65VT.js";
47
50
  import "../chunk-FMOBD2OQ.js";
@@ -9,39 +9,40 @@
9
9
 
10
10
 
11
11
 
12
- var _chunkDKPXN34Vcjs = require('./chunk-DKPXN34V.cjs');
12
+ var _chunkSQYVORNPcjs = require('./chunk-SQYVORNP.cjs');
13
+ require('./chunk-EJLH6NFT.cjs');
13
14
  require('./chunk-HQP3K7PU.cjs');
14
15
  require('./chunk-FZ46M34D.cjs');
16
+ require('./chunk-IIRPUVPH.cjs');
17
+ require('./chunk-GBHYAGX3.cjs');
15
18
  require('./chunk-3OPYJG76.cjs');
16
- require('./chunk-RGTR7CIO.cjs');
17
- require('./chunk-DWKQZ2SK.cjs');
18
- require('./chunk-4VAVYUZS.cjs');
19
- require('./chunk-7YN22L2H.cjs');
20
- require('./chunk-SU2GCLAC.cjs');
21
- require('./chunk-C72S6TTV.cjs');
19
+ require('./chunk-7AK7B36B.cjs');
20
+ require('./chunk-V4TXMEJS.cjs');
21
+ require('./chunk-6VUQPOV3.cjs');
22
+ require('./chunk-OF3BECU2.cjs');
23
+ require('./chunk-4VLRHHFE.cjs');
22
24
  require('./chunk-EYZYXJTJ.cjs');
23
- require('./chunk-YMFAJFQT.cjs');
25
+ require('./chunk-DLXZEZWO.cjs');
24
26
  require('./chunk-SNYBEXLB.cjs');
25
- require('./chunk-46ZIFWYG.cjs');
26
- require('./chunk-GBHYAGX3.cjs');
27
+ require('./chunk-R3HK6R4B.cjs');
27
28
  require('./chunk-RPII3E6Z.cjs');
28
29
  require('./chunk-6RPZADX3.cjs');
29
- require('./chunk-QWBWGODS.cjs');
30
+ require('./chunk-NYUNU75A.cjs');
31
+ require('./chunk-YK57NMIF.cjs');
32
+ require('./chunk-YNJNTCSQ.cjs');
33
+ require('./chunk-SVNDB62D.cjs');
30
34
  require('./chunk-UIBD2YY5.cjs');
31
- require('./chunk-R3HK6R4B.cjs');
32
- require('./chunk-HYN75H6G.cjs');
35
+ require('./chunk-6QQG7YG3.cjs');
36
+ require('./chunk-25GXJCEZ.cjs');
37
+ require('./chunk-MUHWHQVM.cjs');
33
38
 
34
39
 
35
40
  var _chunkQ27JY5RGcjs = require('./chunk-Q27JY5RG.cjs');
36
41
  require('./chunk-QXD4MV2X.cjs');
37
- require('./chunk-NYUNU75A.cjs');
38
- require('./chunk-VQY5W4YW.cjs');
39
- require('./chunk-KFI44N2R.cjs');
40
- require('./chunk-SVNDB62D.cjs');
41
42
  require('./chunk-APYG5QD7.cjs');
42
43
  require('./chunk-L74VDN4A.cjs');
43
44
  require('./chunk-4YINUUKQ.cjs');
44
- require('./chunk-VACWOIRE.cjs');
45
+ require('./chunk-4VZX5F4T.cjs');
45
46
  require('./chunk-QBZJ7P2T.cjs');
46
47
  require('./chunk-4IH4EL7M.cjs');
47
48
 
@@ -55,14 +56,16 @@ require('./chunk-4IH4EL7M.cjs');
55
56
 
56
57
 
57
58
  var _chunkA2YMUCBTcjs = require('./chunk-A2YMUCBT.cjs');
58
- require('./chunk-E3UCVHLP.cjs');
59
+ require('./chunk-UNWKG6EI.cjs');
59
60
  require('./chunk-FCR77GYM.cjs');
60
61
  require('./chunk-AEOZIDEB.cjs');
61
62
  require('./chunk-XSVNC2UD.cjs');
62
- require('./chunk-SUEGJ75D.cjs');
63
- require('./chunk-RSJ3TWJQ.cjs');
64
- require('./chunk-YGXJGRFI.cjs');
65
- require('./chunk-OCEUVQHW.cjs');
63
+ require('./chunk-WYTEQ4Q5.cjs');
64
+ require('./chunk-OKMJLEXX.cjs');
65
+ require('./chunk-KBM2W6UY.cjs');
66
+ require('./chunk-KCVJWJST.cjs');
67
+ require('./chunk-3Z5BQZFM.cjs');
68
+ require('./chunk-HVBBDBS3.cjs');
66
69
 
67
70
 
68
71
 
@@ -103,4 +106,4 @@ require('./chunk-UNEFIWXI.cjs');
103
106
 
104
107
 
105
108
 
106
- exports.BuiltinToolExecutor = _chunkNZYN7C3Pcjs.BuiltinToolExecutor; exports.CompletionService = _chunkDKPXN34Vcjs.CompletionService; exports.NATIVE_SEARCH_TOOL_NAMES = _chunkGMMT7RVNcjs.NATIVE_SEARCH_TOOL_NAMES; exports.addOpenRouterProviderToRequest = _chunkDKPXN34Vcjs.addOpenRouterProviderToRequest; exports.applyAugmentation = _chunkJMJBSACDcjs.applyAugmentation; exports.attachStreamEventBuffer = _chunkDKPXN34Vcjs.attach; exports.buildAnthropicApiUrl = _chunkA2YMUCBTcjs.buildAnthropicApiUrl; exports.buildAzureOpenAIApiUrl = _chunkA2YMUCBTcjs.buildAzureOpenAIApiUrl; exports.buildGeminiApiUrl = _chunkA2YMUCBTcjs.buildGeminiApiUrl; exports.buildNativeSearchAugmentation = _chunkJMJBSACDcjs.buildNativeSearchAugmentation; exports.buildOpenAIApiUrl = _chunkA2YMUCBTcjs.buildOpenAIApiUrl; exports.buildOpenAIResponseApiUrl = _chunkA2YMUCBTcjs.buildOpenAIResponseApiUrl; exports.buildProviderApiUrl = _chunkA2YMUCBTcjs.buildProviderApiUrl; exports.convertMessageToAnthropic = _chunkDKPXN34Vcjs.convertMessageToAnthropic; exports.convertMessageToGemini = _chunkDKPXN34Vcjs.convertMessageToGemini; exports.convertMessageToOpenAI = _chunkDKPXN34Vcjs.convertMessageToOpenAI; exports.detectNativeSearch = _chunkJMJBSACDcjs.detectNativeSearch; exports.emitStreamEvent = _chunkDKPXN34Vcjs.emit; exports.getBuiltinSearchTools = _chunkNZYN7C3Pcjs.getBuiltinSearchTools; exports.getOpenRouterProviderConfig = _chunkDKPXN34Vcjs.getOpenRouterProviderConfig; exports.getProviderHeaders = _chunkQ27JY5RGcjs.getProviderHeaders; exports.normalizeAzureEndpoint = _chunkA2YMUCBTcjs.normalizeAzureEndpoint; exports.registerStreamEventBuffer = _chunkDKPXN34Vcjs.register; exports.releaseStreamEventBuffer = _chunkDKPXN34Vcjs.release; exports.resolveApiFormat = _chunkA2YMUCBTcjs.resolveApiFormat; exports.resolveProviderEndpoint = _chunkA2YMUCBTcjs.resolveProviderEndpoint;
109
+ exports.BuiltinToolExecutor = _chunkNZYN7C3Pcjs.BuiltinToolExecutor; exports.CompletionService = _chunkSQYVORNPcjs.CompletionService; exports.NATIVE_SEARCH_TOOL_NAMES = _chunkGMMT7RVNcjs.NATIVE_SEARCH_TOOL_NAMES; exports.addOpenRouterProviderToRequest = _chunkSQYVORNPcjs.addOpenRouterProviderToRequest; exports.applyAugmentation = _chunkJMJBSACDcjs.applyAugmentation; exports.attachStreamEventBuffer = _chunkSQYVORNPcjs.attach; exports.buildAnthropicApiUrl = _chunkA2YMUCBTcjs.buildAnthropicApiUrl; exports.buildAzureOpenAIApiUrl = _chunkA2YMUCBTcjs.buildAzureOpenAIApiUrl; exports.buildGeminiApiUrl = _chunkA2YMUCBTcjs.buildGeminiApiUrl; exports.buildNativeSearchAugmentation = _chunkJMJBSACDcjs.buildNativeSearchAugmentation; exports.buildOpenAIApiUrl = _chunkA2YMUCBTcjs.buildOpenAIApiUrl; exports.buildOpenAIResponseApiUrl = _chunkA2YMUCBTcjs.buildOpenAIResponseApiUrl; exports.buildProviderApiUrl = _chunkA2YMUCBTcjs.buildProviderApiUrl; exports.convertMessageToAnthropic = _chunkSQYVORNPcjs.convertMessageToAnthropic; exports.convertMessageToGemini = _chunkSQYVORNPcjs.convertMessageToGemini; exports.convertMessageToOpenAI = _chunkSQYVORNPcjs.convertMessageToOpenAI; exports.detectNativeSearch = _chunkJMJBSACDcjs.detectNativeSearch; exports.emitStreamEvent = _chunkSQYVORNPcjs.emit; exports.getBuiltinSearchTools = _chunkNZYN7C3Pcjs.getBuiltinSearchTools; exports.getOpenRouterProviderConfig = _chunkSQYVORNPcjs.getOpenRouterProviderConfig; exports.getProviderHeaders = _chunkQ27JY5RGcjs.getProviderHeaders; exports.normalizeAzureEndpoint = _chunkA2YMUCBTcjs.normalizeAzureEndpoint; exports.registerStreamEventBuffer = _chunkSQYVORNPcjs.register; exports.releaseStreamEventBuffer = _chunkSQYVORNPcjs.release; exports.resolveApiFormat = _chunkA2YMUCBTcjs.resolveApiFormat; exports.resolveProviderEndpoint = _chunkA2YMUCBTcjs.resolveProviderEndpoint;
@@ -1,5 +1,5 @@
1
1
  export { A as ApiFormat, C as CompletionOptions, a as CompletionResult, N as NATIVE_SEARCH_TOOL_NAMES, b as NativeSearchAugmentation, c as NativeSearchDetectionResult, d as NativeSearchProvider, e as NativeSearchUserConfig, S as StreamCallbacks } from './types-BScIHmPr.cjs';
2
- export { C as CompletionService, V as VisionFallbackProvider } from './CompletionService-D3a47vdU.cjs';
2
+ export { C as CompletionService, V as VisionFallbackProvider } from './CompletionService-kNA17cfI.cjs';
3
3
  export { buildAnthropicApiUrl, buildAzureOpenAIApiUrl, buildGeminiApiUrl, buildOpenAIApiUrl, buildOpenAIResponseApiUrl, buildProviderApiUrl, normalizeAzureEndpoint, resolveApiFormat, resolveProviderEndpoint } from './completion/url-builder.cjs';
4
4
  import { LLMProvider, OpenRouterProviderRouting } from '@omnicross/contracts/llm-config';
5
5
  import { SimpleChatMessage, AnthropicMessage, OpenAIMessage } from '@omnicross/contracts/completion-types';
@@ -17,6 +17,7 @@ import '@omnicross/contracts/subscription-types';
17
17
  import '@omnicross/contracts/usage-types';
18
18
  import './completion/ApiKeyPoolService.cjs';
19
19
  import './pipeline/AuthSource.cjs';
20
+ import './pipeline/BoundAccountSelectionError.cjs';
20
21
  import './pipeline/SubscriptionAuthSource.cjs';
21
22
  import './pipeline/SubscriptionAuthStrategy.cjs';
22
23
  import './ports/web-search-backend.cjs';
@@ -1,5 +1,5 @@
1
1
  export { A as ApiFormat, C as CompletionOptions, a as CompletionResult, N as NATIVE_SEARCH_TOOL_NAMES, b as NativeSearchAugmentation, c as NativeSearchDetectionResult, d as NativeSearchProvider, e as NativeSearchUserConfig, S as StreamCallbacks } from './types-BScIHmPr.js';
2
- export { C as CompletionService, V as VisionFallbackProvider } from './CompletionService-DdWaAxq0.js';
2
+ export { C as CompletionService, V as VisionFallbackProvider } from './CompletionService-C3BX0Ovy.js';
3
3
  export { buildAnthropicApiUrl, buildAzureOpenAIApiUrl, buildGeminiApiUrl, buildOpenAIApiUrl, buildOpenAIResponseApiUrl, buildProviderApiUrl, normalizeAzureEndpoint, resolveApiFormat, resolveProviderEndpoint } from './completion/url-builder.js';
4
4
  import { LLMProvider, OpenRouterProviderRouting } from '@omnicross/contracts/llm-config';
5
5
  import { SimpleChatMessage, AnthropicMessage, OpenAIMessage } from '@omnicross/contracts/completion-types';
@@ -17,6 +17,7 @@ import '@omnicross/contracts/subscription-types';
17
17
  import '@omnicross/contracts/usage-types';
18
18
  import './completion/ApiKeyPoolService.js';
19
19
  import './pipeline/AuthSource.js';
20
+ import './pipeline/BoundAccountSelectionError.js';
20
21
  import './pipeline/SubscriptionAuthSource.js';
21
22
  import './pipeline/SubscriptionAuthStrategy.js';
22
23
  import './ports/web-search-backend.js';