@framers/agentos 0.9.10 → 0.9.12

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.
@@ -15,6 +15,7 @@ import { adaptTools } from './runtime/toolAdapter.js';
15
15
  import { buildFallbackChain, createPlan, isRetryableError, resolveChainOfThought, } from './generateText.js';
16
16
  import { resolveDynamicToolCalls } from './runtime/dynamicToolCalling.js';
17
17
  import { StreamingReconstructor } from '../core/llm/streaming/StreamingReconstructor.js';
18
+ import { globalLLMProviderHealth } from '../core/safety/LLMProviderHealthRegistry.js';
18
19
  import { recordAgentOSTurnMetrics, startAgentOSSpan } from '../safety/evaluation/observability/otel.js';
19
20
  import { createLogger } from '../core/logging/loggerFactory.js';
20
21
  const fallbackLogger = createLogger('fallback');
@@ -138,13 +139,24 @@ export function streamText(opts) {
138
139
  apiKey: opts.apiKey,
139
140
  baseUrl: opts.baseUrl,
140
141
  });
141
- const manager = await createProviderManager(resolved);
142
142
  recordedProviderId = resolved.providerId;
143
143
  recordedModelId = resolved.modelId;
144
144
  // Resolve the eagerly-exposed routing Promises so callers
145
145
  // logging telemetry don't have to wait for the stream to drain.
146
146
  resolveProviderId(resolved.providerId);
147
147
  resolveModelId(resolved.modelId);
148
+ // Provider-health circuit-breaker check. See
149
+ // {@link LLMProviderHealthRegistry} for the policy. Mirrors the
150
+ // generateText path so a 402 on the OpenRouter REST endpoint
151
+ // short-circuits streaming consumers in the same process too.
152
+ if (globalLLMProviderHealth.isOpen(resolved.providerId)) {
153
+ const stats = globalLLMProviderHealth.getStats(resolved.providerId);
154
+ const err = new Error(`[503] Provider '${resolved.providerId}' circuit open; cooldown ${stats?.cooldownRemainingMs ?? 0}ms`);
155
+ err.name = 'LLMProviderCircuitOpenError';
156
+ err.httpStatus = 503;
157
+ throw err;
158
+ }
159
+ const manager = await createProviderManager(resolved);
148
160
  const provider = manager.getProvider(resolved.providerId);
149
161
  if (!provider)
150
162
  throw new Error(`Provider ${resolved.providerId} not available.`);
@@ -171,7 +183,7 @@ export function streamText(opts) {
171
183
  }
172
184
  }
173
185
  else {
174
- // Structured SystemContentBlock[] convert to content parts with cache_control
186
+ // Structured SystemContentBlock[]: convert to content parts with cache_control
175
187
  const blocks = opts.system;
176
188
  const parts = blocks.map(block => ({
177
189
  type: 'text',
@@ -500,9 +512,21 @@ export function streamText(opts) {
500
512
  resolveText(finalText);
501
513
  resolveUsage(usage);
502
514
  resolveToolCalls(allToolCalls);
515
+ // Primary streaming attempt succeeded: reset the failure streak
516
+ // so a future transient error starts fresh. See
517
+ // {@link LLMProviderHealthRegistry}.
518
+ if (recordedProviderId) {
519
+ globalLLMProviderHealth.recordSuccess(recordedProviderId);
520
+ }
503
521
  }
504
522
  catch (err) {
505
523
  const error = err instanceof Error ? err : new Error(String(err));
524
+ // Record the failure on the provider-health registry. Synthetic
525
+ // circuit-open errors are skipped because they're already a
526
+ // *consequence* of the registry, not a new failure to record.
527
+ if (recordedProviderId && error.name !== 'LLMProviderCircuitOpenError') {
528
+ globalLLMProviderHealth.recordFailure(recordedProviderId, error);
529
+ }
506
530
  // ── Fallback chain for streaming ──────────────────────────────
507
531
  // When the primary provider fails with a retryable error and
508
532
  // fallbackProviders are configured, delegate to a new streamText
@@ -519,6 +543,21 @@ export function streamText(opts) {
519
543
  let attempt = 0;
520
544
  for (const fb of effectiveFallbacks) {
521
545
  attempt += 1;
546
+ // Skip fallback entries with an open breaker: the recursive
547
+ // streamText below would short-circuit at the same isOpen()
548
+ // check, but the outer skip avoids the extra log noise +
549
+ // recursion overhead.
550
+ if (globalLLMProviderHealth.isOpen(fb.provider)) {
551
+ fallbackLogger.info('streaming provider fallback skipped (circuit open)', {
552
+ event: 'fallback_skipped_circuit_open',
553
+ api: 'streamText',
554
+ primaryProvider: recordedProviderId,
555
+ fallbackProvider: fb.provider,
556
+ fallbackModel: fb.model,
557
+ attempt,
558
+ });
559
+ continue;
560
+ }
522
561
  try {
523
562
  fallbackLogger.info('streaming provider fallback triggered', {
524
563
  event: 'fallback_fired',
@@ -1 +1 @@
1
- {"version":3,"file":"streamText.js","sourceRoot":"","sources":["../../src/api/streamText.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"streamText.js","sourceRoot":"","sources":["../../src/api/streamText.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EAChB,qBAAqB,GAQtB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAE1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AACzF,OAAO,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAC;AACtF,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AACxG,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAEhE,MAAM,cAAc,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;AAEhD,KAAK,UAAU,sBAAsB,CACnC,KAAqF;IAErF,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;IACxE,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAkDD,SAAS,+BAA+B,CACtC,MAAoB,EACpB,KAAa,EACb,SAAiB,EACjB,aAAsB;IAEtB,OAAO;QACL,KAAK,EAAE,GAAG,MAAM,IAAI,KAAK,EAAE;QAC3B,SAAS,EAAE,GAAG,MAAM,UAAU;QAC9B,WAAW,EAAE;YACX,MAAM,EAAE,QAAQ;YAChB,MAAM;SACP;QACD,aAAa,EAAE,aAAa,IAAI,GAAG,MAAM,SAAS,SAAS,GAAG,CAAC,IAAI,UAAU,EAAE,EAAE;QACjF,WAAW,EAAE;YACX,SAAS,EAAE,GAAG,MAAM,IAAI,KAAK,EAAE;YAC/B,MAAM;YACN,SAAS;SACV;KACF,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAU;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAC1B,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,GAAG,CAAA,CAAC,CAAC,EAAE,EAAE,CACnE,CAAC;IACF,OAAO,sBAAsB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAClD,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,UAAU,CAAC,IAAyB;IAClD,IAAI,WAAgC,CAAC;IACrC,IAAI,YAAqC,CAAC;IAC1C,IAAI,gBAA+C,CAAC;IACpD,IAAI,iBAAsC,CAAC;IAC3C,IAAI,cAAmC,CAAC;IAExC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAS,CAAC,CAAC,EAAE,EAAE;QAC5C,WAAW,GAAG,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,IAAI,OAAO,CAAa,CAAC,CAAC,EAAE,EAAE;QACjD,YAAY,GAAG,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;IACH,MAAM,gBAAgB,GAAG,IAAI,OAAO,CAAmB,CAAC,CAAC,EAAE,EAAE;QAC3D,gBAAgB,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IACH,qEAAqE;IACrE,qEAAqE;IACrE,mEAAmE;IACnE,kEAAkE;IAClE,gEAAgE;IAChE,MAAM,eAAe,GAAG,IAAI,OAAO,CAAS,CAAC,CAAC,EAAE,EAAE;QAChD,iBAAiB,GAAG,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,IAAI,OAAO,CAAS,CAAC,CAAC,EAAE,EAAE;QAC7C,cAAc,GAAG,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,MAAM,YAAY,GAAqB,EAAE,CAAC;IAE1C,KAAK,SAAS,CAAC,CAAC,SAAS;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,yBAAyB,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAe,EAAE,YAAY,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;QACnF,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,IAAI,YAAY,GAAmB,IAAI,CAAC;QACxC,IAAI,kBAAsC,CAAC;QAC3C,IAAI,eAAmC,CAAC;QAExC,IAAI,CAAC;YACH,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAE/D,mCAAmC;YACnC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,IAAI,CAAC;oBACH,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK;wBAC1B,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;4BACxB,CAAC,CAAC,IAAI,CAAC,KAAK;4BACb,CAAC,CAAC,CAAC,GAAG,CAAE,IAAI,CAAC,KAAa,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAC7C;6BACE,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC;6BAC3C,MAAM,CAAC,OAAO,CAAa;wBACjC,CAAC,CAAC,EAAE,CAAC;oBACN,MAAM,qBAAqB,GAAG,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBACvE,MAAM,oBAAoB,GAAG,yBAAyB,CACpD,qBAAqB,CAAC,oBAAoB,EAC1C,IAAI,CAAC,YAAY,EAAE,oBAAoB,EACvC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAA,CAAC,CAAC,SAAS,CACvD,CAAC;oBACF,MAAM,WAAW,GAAqB;wBACpC,QAAQ,EACN,IAAI,CAAC,YAAY,EAAE,QAAQ,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAA,CAAC,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE;wBAChH,GAAG,qBAAqB;wBACxB,GAAG,IAAI,CAAC,YAAY;wBACpB,sBAAsB,EACpB,IAAI,CAAC,YAAY,EAAE,sBAAsB;+BACtC,qBAAqB,CAAC,sBAAsB;+BAC5C,UAAU;wBACf,oBAAoB;wBACpB,oBAAoB,EAClB,IAAI,CAAC,YAAY,EAAE,oBAAoB;+BACpC,qBAAqB,CAAC,oBAAoB;wBAC/C,UAAU,EACR,IAAI,CAAC,YAAY,EAAE,UAAU;+BAC1B,qBAAqB,CAAC,UAAU;qBACtC,CAAC;oBACF,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAC/C,WAAW,EACX,SAAS,CACV,CAAC;oBACF,IAAI,WAAW,EAAE,CAAC;wBAChB,UAAU;4BACR,WAAW,CAAC,SAAS,EAAE,UAAU,IAAI,UAAU,CAAC;wBAClD,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;oBAChC,CAAC;gBACH,CAAC;gBAAC,OAAO,SAAS,EAAE,CAAC;oBACnB,OAAO,CAAC,IAAI,CACV,oEAAoE,EACpE,SAAS,CACV,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,MAAM,QAAQ,GAAG,eAAe,CAAC,UAAU,EAAE,OAAO,EAAE;gBACpD,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAC;YACH,kBAAkB,GAAG,QAAQ,CAAC,UAAU,CAAC;YACzC,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC;YACnC,0DAA0D;YAC1D,gEAAgE;YAChE,iBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACxC,cAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAElC,6CAA6C;YAC7C,gEAAgE;YAChE,6DAA6D;YAC7D,8DAA8D;YAC9D,IAAI,uBAAuB,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBACxD,MAAM,KAAK,GAAG,uBAAuB,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACpE,MAAM,GAAG,GAAoC,IAAI,KAAK,CACpD,mBAAmB,QAAQ,CAAC,UAAU,4BAA4B,KAAK,EAAE,mBAAmB,IAAI,CAAC,IAAI,CACtG,CAAC;gBACF,GAAG,CAAC,IAAI,GAAG,6BAA6B,CAAC;gBACzC,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;gBACrB,MAAM,GAAG,CAAC;YACZ,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC1D,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,YAAY,QAAQ,CAAC,UAAU,iBAAiB,CAAC,CAAC;YAEjF,QAAQ,EAAE,YAAY,CAAC,cAAc,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC5D,QAAQ,EAAE,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;YAEtD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAiB,CAAC;YACzC,KAAK,MAAM,IAAI,IAAI,KAAK;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACvD,MAAM,eAAe,GAAG,UAAU,EAAE,CAAC;YAErC,MAAM,QAAQ,GAAmC,EAAE,CAAC;YAEpD,MAAM,cAAc,GAAG,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAClE,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAClC,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACpD,iDAAiD;gBACjD,IAAI,cAAc,IAAI,QAAQ,EAAE,CAAC;oBAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM;wBAC/B,CAAC,CAAC,GAAG,cAAc,OAAO,IAAI,CAAC,MAAM,EAAE;wBACxC,CAAC,CAAC,cAAc,CAAC;oBAClB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;gBAC5D,CAAC;qBAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,+EAA+E;gBAC/E,MAAM,MAAM,GAAG,IAAI,CAAC,MAA0D,CAAC;gBAC/E,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACjC,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,WAAoB,EAAE,EAAE,CAAA,CAAC,CAAC,EAAE,CAAC;iBACnF,CAAC,CAAC,CAAC;gBAEJ,IAAI,cAAc,IAAI,QAAQ,EAAE,CAAC;oBAC/B,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;gBACjE,CAAC;gBAED,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YACpD,CAAC;YAED,IAAI,IAAI,CAAC,QAAQ;gBACf,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ;oBAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACrF,IAAI,IAAI,CAAC,MAAM;gBAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAEvE,QAAQ,EAAE,YAAY,CAAC,wBAAwB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAE/D,MAAM,WAAW,GACf,KAAK,CAAC,MAAM,GAAG,CAAC;gBACd,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBACnB,IAAI,EAAE,UAAmB;oBACzB,QAAQ,EAAE;wBACR,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC7B,UAAU,EAAE,IAAI,CAAC,WAAW;qBAC7B;iBACF,CAAC,CAAC;gBACN,CAAC,CAAC,SAAS,CAAC;YAEf,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;YACpC,QAAQ,EAAE,YAAY,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAC;YAC1D,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;YACxC,QAAQ,EAAE,YAAY,CAAC,8BAA8B,EAAE,eAAe,CAAC,CAAC;YAExE,IAAI,eAAe,EAAE,CAAC;gBACpB,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAA,CAAC,CAAC,SAAS,CAAC;gBAChF,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;gBAC/D,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjD,MAAM,YAAY,GAAG,MAAM,UAAU,CACnC,QAAQ,EACR,QAAQ,CAAC,OAAO,EAChB,YAAY,EACZ,SAAS,EACT,UAAU,EACV,KAAK,CACN,CAAC;gBAEF,IAAI,YAAY,EAAE,CAAC;oBACjB,MAAM,UAAU,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;oBACrD,MAAM,cAAc,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;oBACtE,MAAM,SAAS,GAAG,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAA,CAAC,CAAC,cAAc,CAAC;oBAC1E,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;oBACvE,QAAQ,EAAE,YAAY,CAAC,wBAAwB,EAAE,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC9E,CAAC;YACH,CAAC;YAED,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;gBAC3C,kCAAkC;gBAClC,IAAI,iBAAiB,GAAG,QAAQ,CAAC;gBACjC,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAC5B,IAAI,CAAC;wBACH,MAAM,OAAO,GAA0B;4BACrC,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAQ;4BAC9B,MAAM,EAAE,IAAI,CAAC,MAAM;4BACnB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;4BACnC,KAAK,EAAE,QAAQ,CAAC,OAAO;4BACvB,QAAQ,EAAE,QAAQ,CAAC,UAAU;4BAC7B,IAAI;4BACJ,MAAM,EAAE,IAAI,CAAC,MAAM;yBACpB,CAAC;wBACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;wBACxD,IAAI,QAAQ,EAAE,CAAC;4BACb,iBAAiB,GAAG,QAAQ,CAAC,QAAe,CAAC;wBAC/C,CAAC;oBACH,CAAC;oBAAC,OAAO,OAAO,EAAE,CAAC;wBACjB,OAAO,CAAC,IAAI,CAAC,0CAA0C,EAAE,OAAO,CAAC,CAAC;oBACpE,CAAC;gBACH,CAAC;gBAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,8BAA8B,EAAE;oBAChE,UAAU,EAAE;wBACV,cAAc,EAAE,QAAQ,CAAC,UAAU;wBACnC,WAAW,EAAE,QAAQ,CAAC,OAAO;wBAC7B,kBAAkB,EAAE,IAAI,GAAG,CAAC;wBAC5B,wBAAwB,EAAE,KAAK,CAAC,MAAM;qBACvC;iBACF,CAAC,CAAC;gBACH,MAAM,MAAM,GAAG,QAAQ,CAAC,wBAAwB,CAC9C,QAAQ,CAAC,OAAO,EAChB,iBAAwB,EACxB;oBACE,KAAK,EAAE,WAAW;oBAClB,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;iBACnB,CACT,CAAC;gBAEF,MAAM,aAAa,GAAG,IAAI,sBAAsB,EAAE,CAAC;gBAEnD,IAAI,CAAC;oBACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;wBACjC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBAE1B,MAAM,SAAS,GAAG,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC;wBAChD,IAAI,SAAS,EAAE,CAAC;4BACd,MAAM,IAAI,GAAe,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;4BAC3D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BACjB,MAAM,IAAI,CAAC;wBACb,CAAC;wBAED,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;4BAChB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;4BAC7C,MAAM,IAAI,GAAe,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;4BAClD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BACjB,MAAM,IAAI,CAAC;4BACX,YAAY,GAAG,OAAO,CAAC;4BACvB,WAAY,CAAC,SAAS,CAAC,CAAC;4BACxB,YAAa,CAAC,KAAK,CAAC,CAAC;4BACrB,gBAAiB,CAAC,YAAY,CAAC,CAAC;4BAChC,OAAO;wBACT,CAAC;wBAED,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;4BACjC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;4BACpD,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,KAAK,CAAC,gBAAgB,IAAI,CAAC,CAAC;4BAC5D,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;4BAClD,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gCAC5C,KAAK,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;4BAC7D,CAAC;4BACD,yDAAyD;4BACzD,2CAA2C;4BAC3C,sDAAsD;4BACtD,iDAAiD;4BACjD,sDAAsD;4BACtD,wDAAwD;4BACxD,cAAc;4BACd,MAAM,SAAS,GAAI,KAAK,CAAC,KAA2C,CAAC,oBAAoB,CAAC;4BAC1F,MAAM,WAAW,GAAI,KAAK,CAAC,KAA+C,CAAC,wBAAwB,CAAC;4BACpG,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;gCAClC,KAAK,CAAC,eAAe,GAAG,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;4BACnE,CAAC;4BACD,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;gCACpC,KAAK,CAAC,mBAAmB,GAAG,CAAC,KAAK,CAAC,mBAAmB,IAAI,CAAC,CAAC,GAAG,WAAW,CAAC;4BAC7E,CAAC;4BACD,qBAAqB,CAAC,QAAQ,EAAE;gCAC9B,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,YAAY;gCACtC,gBAAgB,EAAE,KAAK,CAAC,KAAK,CAAC,gBAAgB;gCAC9C,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW;gCACpC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO;6BAC7B,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC;wBAAS,CAAC;oBACT,QAAQ,EAAE,GAAG,EAAE,CAAC;gBAClB,CAAC;gBAED,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;gBAC7C,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,EAAE,CAAC;gBACjD,IAAI,iBAAiB,GAAG,uBAAuB,CAC7C,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU;oBAC7C,aAAa;yBACV,YAAY,EAAE;yBACd,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI,CAAC;yBAClD,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;wBAClB,EAAE,EAAE,QAAQ,CAAC,EAAG;wBAChB,IAAI,EAAE,UAAmB;wBACzB,QAAQ,EAAE;4BACR,IAAI,EAAE,QAAQ,CAAC,IAAK;4BACpB,SAAS,EAAE,QAAQ,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC;yBAC7E;qBACF,CAAC,CAAC,EACL;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI;oBACJ,cAAc,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC;iBACjC,CACF,CAAC;gBAEF,iCAAiC;gBACjC,IAAI,iBAAiB,GAAG,QAAQ,CAAC;gBACjC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBAC3B,IAAI,CAAC;wBACH,MAAM,SAAS,GAAe;4BAC5B,YAAY,EAAE,KAAK,CAAC,YAAY;4BAChC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;4BACxC,WAAW,EAAE,KAAK,CAAC,WAAW;4BAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;4BACtB,eAAe,EAAE,KAAK,CAAC,eAAe;4BACtC,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;yBAC/C,CAAC;wBACF,MAAM,eAAe,GAAqB,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,CAAC;4BACpF,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE;4BAC7B,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,IAAI,IAAI;yBACrC,CAAC,CAAC,CAAC;wBACJ,MAAM,UAAU,GAAyB;4BACvC,IAAI,EAAE,QAAQ;4BACd,SAAS,EAAE,eAAe;4BAC1B,KAAK,EAAE,SAAS;4BAChB,IAAI;yBACL,CAAC;wBACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;wBAC1D,IAAI,QAAQ,EAAE,CAAC;4BACb,iBAAiB,GAAG,QAAQ,CAAC,IAAI,CAAC;4BAClC,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gCACzF,iBAAiB,GAAG,EAAE,CAAC;4BACzB,CAAC;wBACH,CAAC;oBACH,CAAC;oBAAC,OAAO,OAAO,EAAE,CAAC;wBACjB,OAAO,CAAC,IAAI,CAAC,yCAAyC,EAAE,OAAO,CAAC,CAAC;oBACnE,CAAC;gBACH,CAAC;gBAED,qEAAqE;gBACrE,0DAA0D;gBAC1D,IAAI,iBAAiB,EAAE,CAAC;oBACtB,SAAS,GAAG,iBAAiB,CAAC;gBAChC,CAAC;gBAED,IAAI,CAAC,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzD,QAAQ,EAAE,YAAY,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC;oBAC5D,QAAQ,EAAE,YAAY,CAAC,wBAAwB,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;oBACtE,qBAAqB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;oBACvC,WAAY,CAAC,SAAS,CAAC,CAAC;oBACxB,YAAa,CAAC,KAAK,CAAC,CAAC;oBACrB,gBAAiB,CAAC,YAAY,CAAC,CAAC;oBAChC,OAAO;gBACT,CAAC;gBAED,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,iBAAiB,IAAI,IAAI;oBAClC,UAAU,EAAE,iBAAiB;iBACvB,CAAC,CAAC;gBAEV,KAAK,MAAM,QAAQ,IAAI,iBAAiB,EAAE,CAAC;oBACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;oBAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,SAAS,IAAI,IAAI,CAAC;oBACrD,MAAM,UAAU,GAAG,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;oBACrC,MAAM,cAAc,GAAmB;wBACrC,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,OAAO;qBACd,CAAC;oBACF,IAAI,UAAmB,CAAC;oBAExB,IAAI,CAAC;wBACH,UAAU,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA,CAAC,CAAC,OAAO,CAAC;wBACxE,cAAc,CAAC,IAAI,GAAG,UAAU,CAAC;oBACnC,CAAC;oBAAC,MAAM,CAAC;wBACP,cAAc,CAAC,KAAK,GAAG,SAAS,MAAM,kCAAkC,CAAC;wBACzE,MAAM,UAAU,GAAe;4BAC7B,IAAI,EAAE,aAAa;4BACnB,QAAQ,EAAE,MAAM;4BAChB,MAAM,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,EAAE;yBACxC,CAAC;wBACF,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBACvB,MAAM,UAAU,CAAC;wBACjB,QAAQ,CAAC,IAAI,CAAC;4BACZ,IAAI,EAAE,MAAM;4BACZ,YAAY,EAAE,UAAU;4BACxB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,EAAE,CAAC;yBAClD,CAAC,CAAC;wBACV,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;wBAClC,SAAS;oBACX,CAAC;oBACD,MAAM,WAAW,GAAe,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;oBAC1F,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBACxB,MAAM,WAAW,CAAC;oBAElB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBACjC,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,cAAc,CAAC,KAAK,GAAG,SAAS,MAAM,cAAc,CAAC;wBACrD,MAAM,UAAU,GAAe;4BAC7B,IAAI,EAAE,aAAa;4BACnB,QAAQ,EAAE,MAAM;4BAChB,MAAM,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,EAAE;yBACxC,CAAC;wBACF,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBACvB,MAAM,UAAU,CAAC;wBACjB,QAAQ,CAAC,IAAI,CAAC;4BACZ,IAAI,EAAE,MAAM;4BACZ,YAAY,EAAE,UAAU;4BACxB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,EAAE,CAAC;yBAClD,CAAC,CAAC;wBACV,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;wBAClC,SAAS;oBACX,CAAC;oBAED,qCAAqC;oBACrC,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;wBAC/B,IAAI,CAAC;4BACH,MAAM,QAAQ,GAAqB;gCACjC,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,UAAqC;gCAC3C,EAAE,EAAE,UAAU,IAAI,EAAE;gCACpB,IAAI;6BACL,CAAC;4BACF,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;4BAC9D,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gCACxB,cAAc,CAAC,KAAK,GAAG,uCAAuC,CAAC;gCAC/D,MAAM,UAAU,GAAe;oCAC7B,IAAI,EAAE,aAAa;oCACnB,QAAQ,EAAE,MAAM;oCAChB,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;iCAC1B,CAAC;gCACF,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gCACvB,MAAM,UAAU,CAAC;gCACjB,QAAQ,CAAC,IAAI,CAAC;oCACZ,IAAI,EAAE,MAAM;oCACZ,YAAY,EAAE,UAAU;oCACxB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;iCACpC,CAAC,CAAC;gCACV,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gCAClC,SAAS;4BACX,CAAC;4BACD,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC;wBAC/B,CAAC;wBAAC,OAAO,OAAO,EAAE,CAAC;4BACjB,OAAO,CAAC,IAAI,CAAC,6CAA6C,EAAE,OAAO,CAAC,CAAC;wBACvE,CAAC;oBACH,CAAC;oBAED,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B,UAAiB,EACjB,+BAA+B,CAC7B,YAAY,EACZ,eAAe,EACf,IAAI,EACJ,UAAU,IAAI,SAAS,CACxB,CACF,CAAC;wBACF,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;wBACtC,cAAc,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAA,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;wBAChE,MAAM,UAAU,GAAe;4BAC7B,IAAI,EAAE,aAAa;4BACnB,QAAQ,EAAE,MAAM;4BAChB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE;yBACjD,CAAC;wBACF,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBACvB,MAAM,UAAU,CAAC;wBACjB,QAAQ,CAAC,IAAI,CAAC;4BACZ,IAAI,EAAE,MAAM;4BACZ,YAAY,EAAE,UAAU;4BACxB,OAAO,EAAE,IAAI,CAAC,SAAS,CACrB,MAAM,CAAC,MAAM,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,wBAAwB,EAAE,CACrE;yBACK,CAAC,CAAC;oBACZ,CAAC;oBAAC,OAAO,GAAQ,EAAE,CAAC;wBAClB,cAAc,CAAC,KAAK,GAAG,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;wBACnD,MAAM,UAAU,GAAe;4BAC7B,IAAI,EAAE,aAAa;4BACnB,QAAQ,EAAE,MAAM;4BAChB,MAAM,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,EAAE;yBACxC,CAAC;wBACF,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBACvB,MAAM,UAAU,CAAC;wBACjB,QAAQ,CAAC,IAAI,CAAC;4BACZ,IAAI,EAAE,MAAM;4BACZ,YAAY,EAAE,UAAU;4BACxB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,EAAE,CAAC;yBAClD,CAAC,CAAC;oBACZ,CAAC;oBAED,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;YAED,WAAY,CAAC,SAAS,CAAC,CAAC;YACxB,YAAa,CAAC,KAAK,CAAC,CAAC;YACrB,gBAAiB,CAAC,YAAY,CAAC,CAAC;YAChC,gEAAgE;YAChE,gDAAgD;YAChD,qCAAqC;YACrC,IAAI,kBAAkB,EAAE,CAAC;gBACvB,uBAAuB,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAA,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAEjE,gEAAgE;YAChE,4DAA4D;YAC5D,8DAA8D;YAC9D,IAAI,kBAAkB,IAAI,KAAK,CAAC,IAAI,KAAK,6BAA6B,EAAE,CAAC;gBACvE,uBAAuB,CAAC,aAAa,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;YACnE,CAAC;YAED,iEAAiE;YACjE,6DAA6D;YAC7D,iEAAiE;YACjE,kEAAkE;YAClE,6DAA6D;YAC7D,mEAAmE;YACnE,6DAA6D;YAC7D,MAAM,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,KAAK,SAAS;gBAC7D,CAAC,CAAC,kBAAkB,CAAC,kBAAkB,CAAC;gBACzC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC;YAE1B,IAAI,kBAAkB,CAAC,MAAM,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzD,IAAI,iBAAiB,GAAU,KAAK,CAAC;gBACrC,IAAI,iBAAiB,GAAG,KAAK,CAAC;gBAC9B,IAAI,OAAO,GAAG,CAAC,CAAC;gBAEhB,KAAK,MAAM,EAAE,IAAI,kBAAkB,EAAE,CAAC;oBACpC,OAAO,IAAI,CAAC,CAAC;oBACb,4DAA4D;oBAC5D,4DAA4D;oBAC5D,yDAAyD;oBACzD,sBAAsB;oBACtB,IAAI,uBAAuB,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAChD,cAAc,CAAC,IAAI,CAAC,oDAAoD,EAAE;4BACxE,KAAK,EAAE,+BAA+B;4BACtC,GAAG,EAAE,YAAY;4BACjB,eAAe,EAAE,kBAAkB;4BACnC,gBAAgB,EAAE,EAAE,CAAC,QAAQ;4BAC7B,aAAa,EAAE,EAAE,CAAC,KAAK;4BACvB,OAAO;yBACR,CAAC,CAAC;wBACH,SAAS;oBACX,CAAC;oBACD,IAAI,CAAC;wBACH,cAAc,CAAC,IAAI,CAAC,uCAAuC,EAAE;4BAC3D,KAAK,EAAE,gBAAgB;4BACvB,GAAG,EAAE,YAAY;4BACjB,eAAe,EAAE,kBAAkB;4BACnC,gBAAgB,EAAE,EAAE,CAAC,QAAQ;4BAC7B,aAAa,EAAE,EAAE,CAAC,KAAK;4BACvB,SAAS,EAAE,iBAAiB,CAAC,IAAI;4BACjC,YAAY,EAAE,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;4BACrD,OAAO;yBACR,CAAC,CAAC;wBACH,IAAI,CAAC,UAAU,EAAE,CAAC,iBAAiB,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;wBAClD,MAAM,cAAc,GAAG,UAAU,CAAC;4BAChC,GAAG,IAAI;4BACP,QAAQ,EAAE,EAAE,CAAC,QAAQ;4BACrB,KAAK,EAAE,EAAE,CAAC,KAAK;4BACf,MAAM,EAAE,SAAS;4BACjB,OAAO,EAAE,SAAS;4BAClB,iBAAiB,EAAE,SAAS;4BAC5B,UAAU,EAAE,SAAS;yBACtB,CAAC,CAAC;wBAEH,0DAA0D;wBAC1D,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,cAAc,CAAC,UAAU,EAAE,CAAC;4BACrD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;4BACnB,MAAM,MAAM,CAAC;wBACf,CAAC;wBAED,uDAAuD;wBACvD,SAAS,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC;wBACtC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC;wBAC3C,KAAK,CAAC,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;wBAC3C,KAAK,CAAC,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,CAAC;wBACnD,KAAK,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;wBACzC,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;4BACxC,KAAK,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;wBACzD,CAAC;wBACD,IAAI,OAAO,OAAO,CAAC,eAAe,KAAK,QAAQ,EAAE,CAAC;4BAChD,KAAK,CAAC,eAAe,GAAG,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;wBACjF,CAAC;wBACD,IAAI,OAAO,OAAO,CAAC,mBAAmB,KAAK,QAAQ,EAAE,CAAC;4BACpD,KAAK,CAAC,mBAAmB,GAAG,CAAC,KAAK,CAAC,mBAAmB,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC;wBAC7F,CAAC;wBAED,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC;wBACnD,YAAY,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;wBAElC,cAAc,CAAC,IAAI,CAAC,uCAAuC,EAAE;4BAC3D,KAAK,EAAE,oBAAoB;4BAC3B,GAAG,EAAE,YAAY;4BACjB,eAAe,EAAE,kBAAkB;4BACnC,gBAAgB,EAAE,EAAE,CAAC,QAAQ;4BAC7B,aAAa,EAAE,EAAE,CAAC,KAAK;4BACvB,OAAO;yBACR,CAAC,CAAC;wBACH,iBAAiB,GAAG,IAAI,CAAC;wBACzB,MAAM;oBACR,CAAC;oBAAC,OAAO,KAAU,EAAE,CAAC;wBACpB,iBAAiB,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC/E,CAAC;gBACH,CAAC;gBAED,IAAI,iBAAiB,EAAE,CAAC;oBACtB,WAAY,CAAC,SAAS,CAAC,CAAC;oBACxB,YAAa,CAAC,KAAK,CAAC,CAAC;oBACrB,gBAAiB,CAAC,YAAY,CAAC,CAAC;gBAClC,CAAC;qBAAM,CAAC;oBACN,cAAc,CAAC,IAAI,CAAC,wCAAwC,EAAE;wBAC5D,KAAK,EAAE,oBAAoB;wBAC3B,GAAG,EAAE,YAAY;wBACjB,eAAe,EAAE,kBAAkB;wBACnC,QAAQ,EAAE,OAAO;wBACjB,SAAS,EAAE,iBAAiB,CAAC,IAAI;wBACjC,YAAY,EAAE,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;qBACtD,CAAC,CAAC;oBACH,YAAY,GAAG,OAAO,CAAC;oBACvB,MAAM,SAAS,GAAe,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC;oBAC1E,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACtB,MAAM,SAAS,CAAC;oBAChB,WAAY,CAAC,SAAS,CAAC,CAAC;oBACxB,YAAa,CAAC,KAAK,CAAC,CAAC;oBACrB,gBAAiB,CAAC,YAAY,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,YAAY,GAAG,OAAO,CAAC;gBACvB,MAAM,IAAI,GAAe,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;gBAClD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjB,MAAM,IAAI,CAAC;gBACX,WAAY,CAAC,SAAS,CAAC,CAAC;gBACxB,YAAa,CAAC,KAAK,CAAC,CAAC;gBACrB,gBAAiB,CAAC,YAAY,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,8DAA8D;YAC9D,gEAAgE;YAChE,+DAA+D;YAC/D,8DAA8D;YAC9D,yCAAyC;YACzC,iBAAkB,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;YAC7C,cAAe,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;YACvC,QAAQ,EAAE,YAAY,CAAC,wBAAwB,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;YACtE,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;gBAC7B,QAAQ,EAAE,YAAY,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC;YAC/D,CAAC;iBAAM,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjD,QAAQ,EAAE,YAAY,CAAC,2BAA2B,EAAE,YAAY,CAAC,CAAC;YACpE,CAAC;YACD,qBAAqB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACvC,QAAQ,EAAE,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,MAAM,sBAAsB,CAAC;oBAC3B,UAAU,EAAE,kBAAkB;oBAC9B,OAAO,EAAE,eAAe;oBACxB,KAAK;oBACL,OAAO,EAAE;wBACP,GAAG,IAAI,CAAC,WAAW;wBACnB,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,IAAI,YAAY;qBACjD;iBACF,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,gFAAgF;YAClF,CAAC;YACD,wBAAwB,CAAC;gBACvB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;gBAClC,MAAM,EAAE,YAAY;gBACpB,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC;aAChC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,kBAAkB,GAAG,SAAS,EAAE,CAAC;IAEvC,MAAM,kBAAkB,GAA0B;QAChD,CAAC,MAAM,CAAC,aAAa,CAAC;YACpB,MAAM,KAAK,GAAG,kBAAkB,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;YACzD,OAAO;gBACL,KAAK,CAAC,IAAI;oBACR,OAAO,IAAI,EAAE,CAAC;wBACZ,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;wBAC3C,IAAI,IAAI;4BAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;wBAClD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;4BAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;oBACvE,CAAC;gBACH,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;IAEF,OAAO;QACL,UAAU,EAAE,kBAAkB;QAC9B,UAAU,EAAE,kBAAkB;QAC9B,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,YAAY;QACnB,SAAS,EAAE,gBAAgB;QAC3B,QAAQ,EAAE,eAAe;QACzB,KAAK,EAAE,YAAY;KACpB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * @file LLMProviderHealthRegistry.ts
3
+ * @module @framers/agentos/core/safety/LLMProviderHealthRegistry
4
+ * @description
5
+ * Process-lifetime memory of LLM provider health, indexed by `providerId`.
6
+ *
7
+ * **The problem this solves.** The `generateText` / `streamText` fallback
8
+ * chain walks providers correctly inside a single call (try OpenRouter ->
9
+ * on 402, fall back to OpenAI). But each *new* call starts over from
10
+ * scratch. When OpenRouter is in a sustained 402 state (credits
11
+ * exhausted), every subsequent call still tries OpenRouter first, eats
12
+ * the TLS round-trip + the 402 response, then falls back. Across a long
13
+ * batch job (compile-time enrichment, backfill sweeps), this stacks up
14
+ * to minutes of pure wasted latency.
15
+ *
16
+ * **What this adds.** A status-aware circuit breaker per provider.
17
+ * After the first 402 / 401 / 403, subsequent `isOpen()` checks return
18
+ * `true` for a cooldown window, so the caller can skip that provider
19
+ * entirely without retrying. Transient classes (429, 5xx) require a
20
+ * small streak before tripping the breaker, matching the "still worth
21
+ * trying" semantics of rate limits and intermittent server errors.
22
+ *
23
+ * | Error class | Threshold | Cooldown |
24
+ * | -------------------------- | --------- | -------- |
25
+ * | 402 insufficient credits | 1 fail | 5 min |
26
+ * | 401, 403 auth/forbidden | 1 fail | 30 min |
27
+ * | 429 rate limit | 3 fails | 30 s |
28
+ * | 5xx + unclassifiable | 5 fails | 60 s |
29
+ *
30
+ * The cooldown numbers reflect operational realities: a 402 might
31
+ * resolve in minutes once the operator tops up credits, while a 401
32
+ * usually means a bad key that needs an env change + redeploy, so a
33
+ * longer cool-down avoids hammering the provider while the human fix
34
+ * is in flight. 429 cool-downs are intentionally short because rate
35
+ * limits typically lift in a single billing interval.
36
+ *
37
+ * **Design constraints.**
38
+ * - Pure in-process state. No external store, no IPC. The registry is
39
+ * reset on every server restart by design: provider state is
40
+ * ephemeral and rediscovered on the next call.
41
+ * - Time-source via `Date.now()` so vitest's `vi.useFakeTimers()` can
42
+ * advance the clock deterministically in tests.
43
+ * - The error classifier is intentionally forgiving: it reads from a
44
+ * `[NNN]` prefix in the message (the shape `OpenRouterProvider`
45
+ * already emits), from `error.statusCode`, OR from `error.status`
46
+ * (the Anthropic SDK shape). An error with no extractable code is
47
+ * treated as transient: better to under-protect than to lock out a
48
+ * healthy provider on a one-off network blip.
49
+ * - `recordSuccess()` clears the streak counter but does NOT shorten a
50
+ * currently-open cooldown. The breaker stays open until the cooldown
51
+ * expires; a successful probe doesn't reset the wall clock, since
52
+ * the breaker is open precisely because we want to stop probing for
53
+ * a window.
54
+ *
55
+ * **Why not reuse the existing `CircuitBreaker`?** That primitive uses
56
+ * a single failure-threshold + cooldown pair per instance. The
57
+ * status-aware policy here needs per-error-class behavior: a single
58
+ * config can't express "open on 1 failure for 402 but 3 for 429" with
59
+ * the same instance. A bespoke registry is shorter and clearer than
60
+ * juggling four breakers per provider.
61
+ *
62
+ * @example Wiring into the fallback router
63
+ * ```ts
64
+ * import { globalLLMProviderHealth } from '../../core/safety/LLMProviderHealthRegistry';
65
+ *
66
+ * // Before the primary call:
67
+ * if (globalLLMProviderHealth.isOpen(primaryProviderId)) {
68
+ * // Skip the primary entirely; go straight to the fallback chain.
69
+ * return tryFallbackChain(...);
70
+ * }
71
+ *
72
+ * try {
73
+ * const result = await callPrimary();
74
+ * globalLLMProviderHealth.recordSuccess(primaryProviderId);
75
+ * return result;
76
+ * } catch (err) {
77
+ * globalLLMProviderHealth.recordFailure(primaryProviderId, err);
78
+ * throw err;
79
+ * }
80
+ * ```
81
+ */
82
+ /** Snapshot of breaker state for a single provider. */
83
+ export interface LLMProviderHealthStats {
84
+ /** Provider id this snapshot describes. */
85
+ providerId: string;
86
+ /** Whether the breaker is currently open. */
87
+ state: 'closed' | 'open';
88
+ /** Milliseconds remaining until the breaker re-closes (0 when closed). */
89
+ cooldownRemainingMs: number;
90
+ /** Number of failures accumulated within the streak window. */
91
+ failureCount: number;
92
+ /** Last HTTP status code observed for this provider (null if never failed). */
93
+ lastStatusCode: number | null;
94
+ /** Wall-clock ms when the last failure was recorded. */
95
+ lastFailureAt: number | null;
96
+ /** Total number of times this provider has tripped open. */
97
+ totalTrips: number;
98
+ }
99
+ /**
100
+ * Extract an HTTP status code from a thrown error. Reads, in order:
101
+ * 1. `[NNN] ...` prefix in `error.message`: matches the shape
102
+ * `OpenRouterProvider` decorates its errors with so the existing
103
+ * `isRetryableError` regex can route on them.
104
+ * 2. `error.statusCode` numeric property: `OpenRouterProviderError`
105
+ * sets this explicitly.
106
+ * 3. `error.status` numeric property: the Anthropic / OpenAI SDK
107
+ * shape.
108
+ *
109
+ * Returns `null` when no status code can be extracted; the caller
110
+ * treats that as the conservative transient class.
111
+ *
112
+ * @internal
113
+ */
114
+ export declare function classifyErrorStatus(error: unknown): number | null;
115
+ /**
116
+ * Per-process registry of provider health. Construct once per agentos
117
+ * runtime; the module-level `globalLLMProviderHealth` singleton is
118
+ * what the in-tree router code uses. Tests instantiate their own
119
+ * registry to keep state isolated per test case.
120
+ *
121
+ * @public
122
+ */
123
+ export declare class LLMProviderHealthRegistry {
124
+ private readonly records;
125
+ /**
126
+ * Returns `true` when the named provider's breaker is open. Callers
127
+ * should skip the provider entirely while open: going past `isOpen`
128
+ * defeats the whole point of the registry (paying the network
129
+ * round-trip for a known-bad provider).
130
+ */
131
+ isOpen(providerId: string): boolean;
132
+ /**
133
+ * Record a failed attempt against the provider. Classifies the
134
+ * error by HTTP status (see {@link classifyErrorStatus}) and either
135
+ * trips the breaker (for permanent classes 401/402/403) or
136
+ * increments the streak counter toward the threshold for transient
137
+ * classes (429, 5xx, unclassifiable).
138
+ *
139
+ * Safe to call regardless of whether the breaker is already open:
140
+ * a repeat failure on an open breaker just refreshes the
141
+ * cooldown for the new error class.
142
+ */
143
+ recordFailure(providerId: string, error: unknown): void;
144
+ /**
145
+ * Record a successful attempt against the provider. Resets the
146
+ * streak counter so a future transient failure starts fresh, but
147
+ * does NOT shorten an already-open cooldown (the breaker is open
148
+ * precisely because we want to stop probing).
149
+ */
150
+ recordSuccess(providerId: string): void;
151
+ /**
152
+ * Clear all state for a single provider, or for every provider
153
+ * when called without an id. Used by tests to isolate state across
154
+ * cases; production callers generally don't need this: the
155
+ * cooldown logic + success path handles everything.
156
+ */
157
+ reset(providerId?: string): void;
158
+ /**
159
+ * Read-only snapshot for diagnostics / admin endpoints. Returns
160
+ * `null` when the provider has never been touched (no failures, no
161
+ * successes recorded).
162
+ */
163
+ getStats(providerId: string): LLMProviderHealthStats | null;
164
+ private makeRecord;
165
+ }
166
+ /**
167
+ * Process-singleton registry that the in-tree `generateText` /
168
+ * `streamText` fallback router consults before every primary-provider
169
+ * attempt. Tests should construct their own `LLMProviderHealthRegistry`
170
+ * instance and inject it via the dependency-injected `opts.healthRegistry`
171
+ * field rather than reaching into this singleton: that keeps the
172
+ * global state stable across the test run.
173
+ */
174
+ export declare const globalLLMProviderHealth: LLMProviderHealthRegistry;
175
+ //# sourceMappingURL=LLMProviderHealthRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LLMProviderHealthRegistry.d.ts","sourceRoot":"","sources":["../../../src/core/safety/LLMProviderHealthRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgFG;AAEH,uDAAuD;AACvD,MAAM,WAAW,sBAAsB;IACrC,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,KAAK,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB,0EAA0E;IAC1E,mBAAmB,EAAE,MAAM,CAAC;IAC5B,+DAA+D;IAC/D,YAAY,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,wDAAwD;IACxD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;CACpB;AA2BD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAoBjE;AAUD;;;;;;;GAOG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgD;IAExE;;;;;OAKG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAcnC;;;;;;;;;;OAUG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAkBvD;;;;;OAKG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAMvC;;;;;OAKG;IACH,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IAQhC;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI;IAiB3D,OAAO,CAAC,UAAU;CASnB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,EAAE,yBAA2D,CAAC"}
@@ -0,0 +1,261 @@
1
+ /**
2
+ * @file LLMProviderHealthRegistry.ts
3
+ * @module @framers/agentos/core/safety/LLMProviderHealthRegistry
4
+ * @description
5
+ * Process-lifetime memory of LLM provider health, indexed by `providerId`.
6
+ *
7
+ * **The problem this solves.** The `generateText` / `streamText` fallback
8
+ * chain walks providers correctly inside a single call (try OpenRouter ->
9
+ * on 402, fall back to OpenAI). But each *new* call starts over from
10
+ * scratch. When OpenRouter is in a sustained 402 state (credits
11
+ * exhausted), every subsequent call still tries OpenRouter first, eats
12
+ * the TLS round-trip + the 402 response, then falls back. Across a long
13
+ * batch job (compile-time enrichment, backfill sweeps), this stacks up
14
+ * to minutes of pure wasted latency.
15
+ *
16
+ * **What this adds.** A status-aware circuit breaker per provider.
17
+ * After the first 402 / 401 / 403, subsequent `isOpen()` checks return
18
+ * `true` for a cooldown window, so the caller can skip that provider
19
+ * entirely without retrying. Transient classes (429, 5xx) require a
20
+ * small streak before tripping the breaker, matching the "still worth
21
+ * trying" semantics of rate limits and intermittent server errors.
22
+ *
23
+ * | Error class | Threshold | Cooldown |
24
+ * | -------------------------- | --------- | -------- |
25
+ * | 402 insufficient credits | 1 fail | 5 min |
26
+ * | 401, 403 auth/forbidden | 1 fail | 30 min |
27
+ * | 429 rate limit | 3 fails | 30 s |
28
+ * | 5xx + unclassifiable | 5 fails | 60 s |
29
+ *
30
+ * The cooldown numbers reflect operational realities: a 402 might
31
+ * resolve in minutes once the operator tops up credits, while a 401
32
+ * usually means a bad key that needs an env change + redeploy, so a
33
+ * longer cool-down avoids hammering the provider while the human fix
34
+ * is in flight. 429 cool-downs are intentionally short because rate
35
+ * limits typically lift in a single billing interval.
36
+ *
37
+ * **Design constraints.**
38
+ * - Pure in-process state. No external store, no IPC. The registry is
39
+ * reset on every server restart by design: provider state is
40
+ * ephemeral and rediscovered on the next call.
41
+ * - Time-source via `Date.now()` so vitest's `vi.useFakeTimers()` can
42
+ * advance the clock deterministically in tests.
43
+ * - The error classifier is intentionally forgiving: it reads from a
44
+ * `[NNN]` prefix in the message (the shape `OpenRouterProvider`
45
+ * already emits), from `error.statusCode`, OR from `error.status`
46
+ * (the Anthropic SDK shape). An error with no extractable code is
47
+ * treated as transient: better to under-protect than to lock out a
48
+ * healthy provider on a one-off network blip.
49
+ * - `recordSuccess()` clears the streak counter but does NOT shorten a
50
+ * currently-open cooldown. The breaker stays open until the cooldown
51
+ * expires; a successful probe doesn't reset the wall clock, since
52
+ * the breaker is open precisely because we want to stop probing for
53
+ * a window.
54
+ *
55
+ * **Why not reuse the existing `CircuitBreaker`?** That primitive uses
56
+ * a single failure-threshold + cooldown pair per instance. The
57
+ * status-aware policy here needs per-error-class behavior: a single
58
+ * config can't express "open on 1 failure for 402 but 3 for 429" with
59
+ * the same instance. A bespoke registry is shorter and clearer than
60
+ * juggling four breakers per provider.
61
+ *
62
+ * @example Wiring into the fallback router
63
+ * ```ts
64
+ * import { globalLLMProviderHealth } from '../../core/safety/LLMProviderHealthRegistry';
65
+ *
66
+ * // Before the primary call:
67
+ * if (globalLLMProviderHealth.isOpen(primaryProviderId)) {
68
+ * // Skip the primary entirely; go straight to the fallback chain.
69
+ * return tryFallbackChain(...);
70
+ * }
71
+ *
72
+ * try {
73
+ * const result = await callPrimary();
74
+ * globalLLMProviderHealth.recordSuccess(primaryProviderId);
75
+ * return result;
76
+ * } catch (err) {
77
+ * globalLLMProviderHealth.recordFailure(primaryProviderId, err);
78
+ * throw err;
79
+ * }
80
+ * ```
81
+ */
82
+ const POLICY_402 = { threshold: 1, cooldownMs: 5 * 60000 };
83
+ const POLICY_AUTH = { threshold: 1, cooldownMs: 30 * 60000 };
84
+ const POLICY_429 = { threshold: 3, cooldownMs: 30000 };
85
+ const POLICY_TRANSIENT = { threshold: 5, cooldownMs: 60000 };
86
+ /**
87
+ * Extract an HTTP status code from a thrown error. Reads, in order:
88
+ * 1. `[NNN] ...` prefix in `error.message`: matches the shape
89
+ * `OpenRouterProvider` decorates its errors with so the existing
90
+ * `isRetryableError` regex can route on them.
91
+ * 2. `error.statusCode` numeric property: `OpenRouterProviderError`
92
+ * sets this explicitly.
93
+ * 3. `error.status` numeric property: the Anthropic / OpenAI SDK
94
+ * shape.
95
+ *
96
+ * Returns `null` when no status code can be extracted; the caller
97
+ * treats that as the conservative transient class.
98
+ *
99
+ * @internal
100
+ */
101
+ export function classifyErrorStatus(error) {
102
+ if (!error || typeof error !== 'object')
103
+ return null;
104
+ const obj = error;
105
+ // 1. Prefix in message
106
+ if (typeof obj.message === 'string') {
107
+ const match = obj.message.match(/^\[(\d{3})\]/);
108
+ if (match) {
109
+ const code = parseInt(match[1], 10);
110
+ if (Number.isFinite(code) && code >= 100 && code < 600)
111
+ return code;
112
+ }
113
+ }
114
+ // 2. statusCode property
115
+ if (typeof obj.statusCode === 'number' && obj.statusCode >= 100 && obj.statusCode < 600) {
116
+ return obj.statusCode;
117
+ }
118
+ // 3. status property
119
+ if (typeof obj.status === 'number' && obj.status >= 100 && obj.status < 600) {
120
+ return obj.status;
121
+ }
122
+ return null;
123
+ }
124
+ function policyForStatus(status) {
125
+ if (status === 402)
126
+ return POLICY_402;
127
+ if (status === 401 || status === 403)
128
+ return POLICY_AUTH;
129
+ if (status === 429)
130
+ return POLICY_429;
131
+ // 5xx + null (unclassifiable) all fall through to transient.
132
+ return POLICY_TRANSIENT;
133
+ }
134
+ /**
135
+ * Per-process registry of provider health. Construct once per agentos
136
+ * runtime; the module-level `globalLLMProviderHealth` singleton is
137
+ * what the in-tree router code uses. Tests instantiate their own
138
+ * registry to keep state isolated per test case.
139
+ *
140
+ * @public
141
+ */
142
+ export class LLMProviderHealthRegistry {
143
+ constructor() {
144
+ this.records = new Map();
145
+ }
146
+ /**
147
+ * Returns `true` when the named provider's breaker is open. Callers
148
+ * should skip the provider entirely while open: going past `isOpen`
149
+ * defeats the whole point of the registry (paying the network
150
+ * round-trip for a known-bad provider).
151
+ */
152
+ isOpen(providerId) {
153
+ const record = this.records.get(providerId);
154
+ if (!record)
155
+ return false;
156
+ if (record.openUntil === 0)
157
+ return false;
158
+ if (Date.now() >= record.openUntil) {
159
+ // Cooldown elapsed: half-close: reset the breaker so the next
160
+ // failure starts a fresh streak count, but allow the call through.
161
+ record.openUntil = 0;
162
+ record.failureCount = 0;
163
+ return false;
164
+ }
165
+ return true;
166
+ }
167
+ /**
168
+ * Record a failed attempt against the provider. Classifies the
169
+ * error by HTTP status (see {@link classifyErrorStatus}) and either
170
+ * trips the breaker (for permanent classes 401/402/403) or
171
+ * increments the streak counter toward the threshold for transient
172
+ * classes (429, 5xx, unclassifiable).
173
+ *
174
+ * Safe to call regardless of whether the breaker is already open:
175
+ * a repeat failure on an open breaker just refreshes the
176
+ * cooldown for the new error class.
177
+ */
178
+ recordFailure(providerId, error) {
179
+ const status = classifyErrorStatus(error);
180
+ const policy = policyForStatus(status);
181
+ const record = this.records.get(providerId) ?? this.makeRecord();
182
+ record.failureCount += 1;
183
+ record.lastStatusCode = status;
184
+ record.lastFailureAt = Date.now();
185
+ if (record.failureCount >= policy.threshold) {
186
+ // Trip: but only count this as a new trip event if the
187
+ // breaker was previously closed.
188
+ if (record.openUntil === 0 || Date.now() >= record.openUntil) {
189
+ record.totalTrips += 1;
190
+ }
191
+ record.openUntil = Date.now() + policy.cooldownMs;
192
+ }
193
+ this.records.set(providerId, record);
194
+ }
195
+ /**
196
+ * Record a successful attempt against the provider. Resets the
197
+ * streak counter so a future transient failure starts fresh, but
198
+ * does NOT shorten an already-open cooldown (the breaker is open
199
+ * precisely because we want to stop probing).
200
+ */
201
+ recordSuccess(providerId) {
202
+ const record = this.records.get(providerId);
203
+ if (!record)
204
+ return;
205
+ record.failureCount = 0;
206
+ }
207
+ /**
208
+ * Clear all state for a single provider, or for every provider
209
+ * when called without an id. Used by tests to isolate state across
210
+ * cases; production callers generally don't need this: the
211
+ * cooldown logic + success path handles everything.
212
+ */
213
+ reset(providerId) {
214
+ if (providerId === undefined) {
215
+ this.records.clear();
216
+ return;
217
+ }
218
+ this.records.delete(providerId);
219
+ }
220
+ /**
221
+ * Read-only snapshot for diagnostics / admin endpoints. Returns
222
+ * `null` when the provider has never been touched (no failures, no
223
+ * successes recorded).
224
+ */
225
+ getStats(providerId) {
226
+ const record = this.records.get(providerId);
227
+ if (!record)
228
+ return null;
229
+ const now = Date.now();
230
+ const cooldownRemainingMs = Math.max(0, record.openUntil - now);
231
+ const state = cooldownRemainingMs > 0 ? 'open' : 'closed';
232
+ return {
233
+ providerId,
234
+ state,
235
+ cooldownRemainingMs,
236
+ failureCount: record.failureCount,
237
+ lastStatusCode: record.lastStatusCode,
238
+ lastFailureAt: record.lastFailureAt,
239
+ totalTrips: record.totalTrips,
240
+ };
241
+ }
242
+ makeRecord() {
243
+ return {
244
+ openUntil: 0,
245
+ failureCount: 0,
246
+ lastStatusCode: null,
247
+ lastFailureAt: null,
248
+ totalTrips: 0,
249
+ };
250
+ }
251
+ }
252
+ /**
253
+ * Process-singleton registry that the in-tree `generateText` /
254
+ * `streamText` fallback router consults before every primary-provider
255
+ * attempt. Tests should construct their own `LLMProviderHealthRegistry`
256
+ * instance and inject it via the dependency-injected `opts.healthRegistry`
257
+ * field rather than reaching into this singleton: that keeps the
258
+ * global state stable across the test run.
259
+ */
260
+ export const globalLLMProviderHealth = new LLMProviderHealthRegistry();
261
+ //# sourceMappingURL=LLMProviderHealthRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LLMProviderHealthRegistry.js","sourceRoot":"","sources":["../../../src/core/safety/LLMProviderHealthRegistry.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,4 @@
1
1
  export * from '../../safety/runtime/index.js';
2
+ export { LLMProviderHealthRegistry, globalLLMProviderHealth, } from './LLMProviderHealthRegistry.js';
3
+ export type { LLMProviderHealthStats } from './LLMProviderHealthRegistry.js';
2
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/safety/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/safety/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EACL,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC"}