saros-proxy 0.10.1 → 0.11.0

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 (73) hide show
  1. package/README.md +187 -29
  2. package/dist/cli/daemon.d.ts +38 -6
  3. package/dist/cli/daemon.js +524 -109
  4. package/dist/cli/daemon.js.map +1 -1
  5. package/dist/cli/dsh-config.js +34 -9
  6. package/dist/cli/dsh-config.js.map +1 -1
  7. package/dist/cli/help.js +3 -0
  8. package/dist/cli/help.js.map +1 -1
  9. package/dist/cli/key-state.d.ts +21 -0
  10. package/dist/cli/key-state.js +57 -0
  11. package/dist/cli/key-state.js.map +1 -0
  12. package/dist/cli/keys.d.ts +28 -0
  13. package/dist/cli/keys.js +185 -0
  14. package/dist/cli/keys.js.map +1 -0
  15. package/dist/cli/opencode-config.js +3 -3
  16. package/dist/cli/opencode-config.js.map +1 -1
  17. package/dist/cli/overview.js +6 -1
  18. package/dist/cli/overview.js.map +1 -1
  19. package/dist/cli/secret.d.ts +31 -0
  20. package/dist/cli/secret.js +89 -0
  21. package/dist/cli/secret.js.map +1 -0
  22. package/dist/cli/usage.js +7 -0
  23. package/dist/cli/usage.js.map +1 -1
  24. package/dist/config.d.ts +15 -1
  25. package/dist/config.js +98 -25
  26. package/dist/config.js.map +1 -1
  27. package/dist/constants.d.ts +2 -1
  28. package/dist/constants.js +2 -160
  29. package/dist/constants.js.map +1 -1
  30. package/dist/debug-buffer.d.ts +58 -0
  31. package/dist/debug-buffer.js +42 -0
  32. package/dist/debug-buffer.js.map +1 -0
  33. package/dist/index.js +30 -4
  34. package/dist/index.js.map +1 -1
  35. package/dist/log-redact.d.ts +18 -0
  36. package/dist/log-redact.js +41 -0
  37. package/dist/log-redact.js.map +1 -0
  38. package/dist/logger.d.ts +6 -0
  39. package/dist/logger.js +30 -0
  40. package/dist/logger.js.map +1 -1
  41. package/dist/models-catalog.d.ts +20 -0
  42. package/dist/models-catalog.js +55 -0
  43. package/dist/models-catalog.js.map +1 -0
  44. package/dist/models-fetcher.d.ts +2 -2
  45. package/dist/models-fetcher.js +4 -4
  46. package/dist/models-fetcher.js.map +1 -1
  47. package/dist/models-sync.d.ts +1 -1
  48. package/dist/models-sync.js +3 -3
  49. package/dist/models-sync.js.map +1 -1
  50. package/dist/providers/infer.d.ts +11 -0
  51. package/dist/providers/infer.js.map +1 -1
  52. package/dist/proxy-logic.d.ts +74 -3
  53. package/dist/proxy-logic.js +111 -9
  54. package/dist/proxy-logic.js.map +1 -1
  55. package/dist/proxy.d.ts +33 -1
  56. package/dist/proxy.js +351 -49
  57. package/dist/proxy.js.map +1 -1
  58. package/dist/secrets/boot.d.ts +33 -0
  59. package/dist/secrets/boot.js +65 -0
  60. package/dist/secrets/boot.js.map +1 -0
  61. package/dist/secrets/envelope.d.ts +44 -0
  62. package/dist/secrets/envelope.js +132 -0
  63. package/dist/secrets/envelope.js.map +1 -0
  64. package/dist/secrets/source.d.ts +130 -0
  65. package/dist/secrets/source.js +332 -0
  66. package/dist/secrets/source.js.map +1 -0
  67. package/dist/token-usage.js +6 -3
  68. package/dist/token-usage.js.map +1 -1
  69. package/dist/validation.d.ts +3 -3
  70. package/dist/validation.js +3 -3
  71. package/dist/validation.js.map +1 -1
  72. package/models.json +1440 -0
  73. package/package.json +2 -1
@@ -13,6 +13,17 @@ export interface KeyEntry {
13
13
  key: string;
14
14
  /** Explicit provider from config.yaml; wins over inference when present. */
15
15
  provider?: ProviderId;
16
+ /**
17
+ * false retires the key without deleting it: it never enters rotation and is
18
+ * never counted as a failure. Absent means enabled.
19
+ */
20
+ enabled?: boolean;
21
+ /**
22
+ * Set in memory by config loading when the value was an `enc:` envelope.
23
+ * Never written by `keys encrypt` (the envelope itself is the on-disk mark);
24
+ * reported by /health so operators can see which keys are encrypted.
25
+ */
26
+ encrypted?: boolean;
16
27
  }
17
28
  /**
18
29
  * Infer the provider for a key entry.
@@ -1 +1 @@
1
- {"version":3,"file":"infer.js","sourceRoot":"","sources":["../../src/providers/infer.ts"],"names":[],"mappings":"AAkBA;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,KAAe;IAC3C,IAAI,KAAK,CAAC,QAAQ,KAAK,aAAa,IAAI,KAAK,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;QACzE,OAAO,KAAK,CAAC,QAAQ,CAAC;IACxB,CAAC;IACD,OAAO,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC;AACvE,CAAC"}
1
+ {"version":3,"file":"infer.js","sourceRoot":"","sources":["../../src/providers/infer.ts"],"names":[],"mappings":"AA6BA;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,KAAe;IAC3C,IAAI,KAAK,CAAC,QAAQ,KAAK,aAAa,IAAI,KAAK,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;QACzE,OAAO,KAAK,CAAC,QAAQ,CAAC;IACxB,CAAC;IACD,OAAO,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC;AACvE,CAAC"}
@@ -30,6 +30,57 @@ interface ApiKey {
30
30
  entitled: boolean;
31
31
  /** Smooth weighted round-robin state (nginx-style). */
32
32
  currentWeight: number;
33
+ /** Why the key last left rotation — reported by /health and the 503 body. */
34
+ lastError: KeyFailure | null;
35
+ /**
36
+ * True when the key was retired in config (`enabled: false`). Separate from
37
+ * `enabled` so a success (or a cooldown) can never put it back in rotation.
38
+ */
39
+ disabledByConfig: boolean;
40
+ /** True when the credential arrived as an `enc:` envelope in config. */
41
+ encrypted: boolean;
42
+ }
43
+ /** Why a key is out of rotation, derived from the upstream verdict. */
44
+ export type KeyFailureReason = 'auth' | 'quota' | 'rate_limit' | 'server';
45
+ export interface KeyFailure {
46
+ /** Upstream HTTP status, when the failure came from a response. */
47
+ status: number | null;
48
+ reason: KeyFailureReason;
49
+ /** Epoch ms. */
50
+ at: number;
51
+ /** Short upstream message (≤200 chars). Never contains the credential. */
52
+ detail: string | null;
53
+ }
54
+ /** Upstream context for a failure, passed by the caller that saw it. */
55
+ export interface KeyFailureInfo {
56
+ status?: number;
57
+ body?: string;
58
+ }
59
+ /** Public projection of one key's state — never contains the credential. */
60
+ export interface KeyHealthReport {
61
+ label: string;
62
+ provider: string;
63
+ enabled: boolean;
64
+ entitled: boolean;
65
+ /** True when the key was retired in config (`enabled: false`). */
66
+ disabledByConfig: boolean;
67
+ /** True when the credential is stored as an `enc:` envelope, never its value. */
68
+ encrypted: boolean;
69
+ consecutiveFailures: number;
70
+ disabledAt: string | null;
71
+ retryAfterMs: number | null;
72
+ lastError: {
73
+ status: number | null;
74
+ reason: KeyFailureReason;
75
+ at: string;
76
+ } | null;
77
+ usagePercent: number | null;
78
+ }
79
+ /** Fields needed to answer "can this key be used right now?". */
80
+ export interface KeyAvailability {
81
+ enabled: boolean;
82
+ consecutiveFailures: number;
83
+ disabledAt: number | null;
33
84
  }
34
85
  /** Read-only projection returned to callers — cannot mutate internal state. */
35
86
  export interface KeySnapshot {
@@ -81,6 +132,8 @@ export declare function createProxyState(keys: Array<{
81
132
  label: string;
82
133
  key: string;
83
134
  provider?: string;
135
+ enabled?: boolean;
136
+ encrypted?: boolean;
84
137
  }>, options?: {
85
138
  circuitBreakerThreshold?: number;
86
139
  circuitBreakerCooldownMs?: number;
@@ -121,16 +174,34 @@ export declare function failoverRequest(state: ProxyState, requestId: string): K
121
174
  */
122
175
  export declare function completeRequest(state: ProxyState, requestId: string, success: boolean): void;
123
176
  /**
124
- * Mark a key as failed according to the error type (C2).
177
+ * Mark a key as failed according to the error type (C2) and record why.
125
178
  * - KeyFault / ServerFault: penalise the key (KeyFault disables immediately)
126
179
  * - RequestFault / NetworkFault: no penalisation (bad request, or network
127
180
  * trouble that is not the key's fault)
128
181
  */
129
- export declare function markKeyFailed(state: ProxyState, keyLabel: string, errorType: ErrorType): void;
182
+ export declare function markKeyFailed(state: ProxyState, keyLabel: string, errorType: ErrorType, info?: KeyFailureInfo): void;
130
183
  /**
131
- * Mark a key as succeeded — resets consecutive failures.
184
+ * Mark a key as succeeded — resets consecutive failures and clears any
185
+ * cooldown. `enabled` must come back too: a success can arrive after the key
186
+ * was disabled (tier 2 shares a key between concurrent requests, and a stream
187
+ * that fails after completeRequest(…, true) marks failure late). Leaving
188
+ * `enabled=false` with `disabledAt=null` made the key unselectable forever,
189
+ * because isKeyAvailable only revives keys that still carry a disabledAt.
132
190
  */
133
191
  export declare function markKeySucceeded(state: ProxyState, keyLabel: string): void;
192
+ /**
193
+ * Milliseconds until the key becomes selectable again, or null when nothing
194
+ * will bring it back (healthy, retired in config, or no cooldown recorded).
195
+ * A key past its cooldown but not yet lazily revived reports 0 — it is
196
+ * selectable on the next request, which is not "already selectable" here.
197
+ * Pure: unlike isKeyAvailable this never revives the key.
198
+ */
199
+ export declare function keyRetryAfterMs(state: Pick<ProxyState, 'circuitBreakerThreshold' | 'circuitBreakerCooldownMs'>, key: KeyAvailability, now?: number): number | null;
200
+ /**
201
+ * Per-key state for /health. Labels are already public (X-Proxy-Key-Label);
202
+ * the credential and the upstream message are not part of this projection.
203
+ */
204
+ export declare function describeKeys(state: ProxyState, now?: number): KeyHealthReport[];
134
205
  /**
135
206
  * Classify an HTTP error status + optional response body into an ErrorType.
136
207
  *
@@ -10,6 +10,7 @@
10
10
  * C4. Request-scoped key tracking (activeRequests map)
11
11
  */
12
12
  import { DEFAULT_CIRCUIT_BREAKER_COOLDOWN_MS } from './constants.js';
13
+ import { redactSecrets } from './log-redact.js';
13
14
  // ---------------------------------------------------------------------------
14
15
  // State Factory
15
16
  // ---------------------------------------------------------------------------
@@ -19,13 +20,16 @@ export function createProxyState(keys, options) {
19
20
  label: k.label,
20
21
  key: k.key,
21
22
  provider: k.provider ?? 'opencode-go',
22
- enabled: true,
23
+ enabled: k.enabled ?? true,
23
24
  consecutiveFailures: 0,
24
25
  lastUsed: null,
25
26
  disabledAt: null,
26
27
  usagePercent: null,
27
28
  entitled: true,
28
29
  currentWeight: 0,
30
+ lastError: null,
31
+ disabledByConfig: k.enabled === false,
32
+ encrypted: k.encrypted === true,
29
33
  })),
30
34
  currentIndex: 0,
31
35
  circuitBreakerThreshold: options?.circuitBreakerThreshold ?? 3,
@@ -49,6 +53,10 @@ function toSnapshot(key) {
49
53
  * (C1 — fixes dead-code cooldown).
50
54
  */
51
55
  function isKeyAvailable(state, key) {
56
+ // Retired in config: never re-enabled by a cooldown, a success or a restart
57
+ // without a config change.
58
+ if (key.disabledByConfig)
59
+ return false;
52
60
  // Entitlement is definitive, not transient: a key whose account has no
53
61
  // plan for this provider must not be retried until the usage refresh
54
62
  // clears the flag.
@@ -178,14 +186,21 @@ export function setKeyEntitlement(state, keyLabel, entitled) {
178
186
  // ---------------------------------------------------------------------------
179
187
  // Request-Scoped Key Tracking (C4)
180
188
  // ---------------------------------------------------------------------------
189
+ /**
190
+ * Split a model id into its model and its optional `@provider` pin.
191
+ * `'a@b@c'` → `{ model: 'a@b', provider: 'c' }`; no pin → `provider: null`.
192
+ */
193
+ function splitModelSuffix(modelId) {
194
+ const at = modelId.lastIndexOf('@');
195
+ if (at <= 0 || at === modelId.length - 1)
196
+ return { model: modelId, provider: null };
197
+ return { model: modelId.slice(0, at), provider: modelId.slice(at + 1) };
198
+ }
181
199
  /** Parse a trailing '@provider' suffix from a model id ('x@cc' → 'cc'). */
182
200
  function parseModelSuffix(modelId) {
183
201
  if (!modelId)
184
202
  return null;
185
- const at = modelId.lastIndexOf('@');
186
- if (at <= 0 || at === modelId.length - 1)
187
- return null;
188
- return modelId.slice(at + 1);
203
+ return splitModelSuffix(modelId).provider;
189
204
  }
190
205
  /**
191
206
  * Resolve the provider-preference predicate for a request.
@@ -199,6 +214,15 @@ function parseModelSuffix(modelId) {
199
214
  function makeProviderFilter(state, modelId) {
200
215
  if (!modelId)
201
216
  return undefined;
217
+ const { model, provider: pinned } = splitModelSuffix(modelId);
218
+ // A pin is an explicit user instruction, and providerForKey always routes the
219
+ // request to the pinned upstream. Selection must therefore stay inside that
220
+ // provider: the old code handed the raw id (`deepseek@commandcode`) to the
221
+ // catalogs, every provider answered 'no', the whole pool got excluded and
222
+ // every pinned request returned 503. Whether the provider can serve the model
223
+ // is the upstream's call — its error beats a generic 503.
224
+ if (pinned)
225
+ return (provider) => provider === pinned;
202
226
  const resolver = state.affinityResolver;
203
227
  if (!resolver)
204
228
  return undefined;
@@ -206,7 +230,7 @@ function makeProviderFilter(state, modelId) {
206
230
  for (const key of state.keys) {
207
231
  if (excluded.has(key.provider))
208
232
  continue;
209
- if (resolver(key.provider, modelId) === 'no') {
233
+ if (resolver(key.provider, model) === 'no') {
210
234
  excluded.add(key.provider);
211
235
  }
212
236
  }
@@ -312,17 +336,45 @@ export function completeRequest(state, requestId, success) {
312
336
  // Key Status Mutations
313
337
  // ---------------------------------------------------------------------------
314
338
  /**
315
- * Mark a key as failed according to the error type (C2).
339
+ * Map an upstream verdict onto the reason shown by /health and the 503 body.
340
+ * classifyHttpError already narrowed the class: KeyFault is a 401 or a 5xx
341
+ * carrying a quota/balance hint, ServerFault is 429 or any other 5xx.
342
+ */
343
+ function deriveKeyFailureReason(errorType, status, body) {
344
+ if (status === 401)
345
+ return 'auth';
346
+ if (status === 429)
347
+ return 'rate_limit';
348
+ // classifyHttpError treats any 5xx mentioning "limit" as KeyFault, so a
349
+ // rate-limited 5xx would otherwise be reported as a quota wall.
350
+ if (body && /rate.?limit/i.test(body))
351
+ return 'rate_limit';
352
+ if (errorType === 'KeyFault')
353
+ return 'quota';
354
+ return 'server';
355
+ }
356
+ /**
357
+ * Mark a key as failed according to the error type (C2) and record why.
316
358
  * - KeyFault / ServerFault: penalise the key (KeyFault disables immediately)
317
359
  * - RequestFault / NetworkFault: no penalisation (bad request, or network
318
360
  * trouble that is not the key's fault)
319
361
  */
320
- export function markKeyFailed(state, keyLabel, errorType) {
362
+ export function markKeyFailed(state, keyLabel, errorType, info) {
321
363
  if (errorType === 'RequestFault' || errorType === 'NetworkFault')
322
364
  return;
323
365
  const key = state.keys.find((k) => k.label === keyLabel);
324
366
  if (!key)
325
367
  return;
368
+ // Recorded even when the key stays in rotation (ServerFault below the
369
+ // threshold): this is what explains the state after a later disable.
370
+ key.lastError = {
371
+ status: info?.status ?? null,
372
+ reason: deriveKeyFailureReason(errorType, info?.status, info?.body),
373
+ at: Date.now(),
374
+ // The raw body travels to clients in the 503/502 diagnosis; a provider that
375
+ // echoes the submitted bearer must not leak a working key.
376
+ detail: info?.body ? redactSecrets(info.body.slice(0, 200)) : null,
377
+ };
326
378
  if (errorType === 'KeyFault') {
327
379
  // Disable immediately — the key is compromised / rate-limited
328
380
  key.consecutiveFailures = state.circuitBreakerThreshold;
@@ -339,12 +391,21 @@ export function markKeyFailed(state, keyLabel, errorType) {
339
391
  }
340
392
  }
341
393
  /**
342
- * Mark a key as succeeded — resets consecutive failures.
394
+ * Mark a key as succeeded — resets consecutive failures and clears any
395
+ * cooldown. `enabled` must come back too: a success can arrive after the key
396
+ * was disabled (tier 2 shares a key between concurrent requests, and a stream
397
+ * that fails after completeRequest(…, true) marks failure late). Leaving
398
+ * `enabled=false` with `disabledAt=null` made the key unselectable forever,
399
+ * because isKeyAvailable only revives keys that still carry a disabledAt.
343
400
  */
344
401
  export function markKeySucceeded(state, keyLabel) {
345
402
  const key = state.keys.find((k) => k.label === keyLabel);
346
403
  if (!key)
347
404
  return;
405
+ // A key retired in config stays out; only the config brings it back.
406
+ if (key.disabledByConfig)
407
+ return;
408
+ key.enabled = true;
348
409
  key.consecutiveFailures = 0;
349
410
  // C1: clear cooldown on success so next selection isn't penalised
350
411
  key.disabledAt = null;
@@ -352,6 +413,47 @@ export function markKeySucceeded(state, keyLabel) {
352
413
  // ---------------------------------------------------------------------------
353
414
  // Status Queries
354
415
  // ---------------------------------------------------------------------------
416
+ /**
417
+ * Milliseconds until the key becomes selectable again, or null when nothing
418
+ * will bring it back (healthy, retired in config, or no cooldown recorded).
419
+ * A key past its cooldown but not yet lazily revived reports 0 — it is
420
+ * selectable on the next request, which is not "already selectable" here.
421
+ * Pure: unlike isKeyAvailable this never revives the key.
422
+ */
423
+ export function keyRetryAfterMs(state, key, now = Date.now()) {
424
+ const usable = key.enabled && key.consecutiveFailures < state.circuitBreakerThreshold;
425
+ if (usable)
426
+ return null;
427
+ if (!key.enabled && key.disabledAt !== null) {
428
+ return Math.max(0, key.disabledAt + state.circuitBreakerCooldownMs - now);
429
+ }
430
+ return null;
431
+ }
432
+ /**
433
+ * Per-key state for /health. Labels are already public (X-Proxy-Key-Label);
434
+ * the credential and the upstream message are not part of this projection.
435
+ */
436
+ export function describeKeys(state, now = Date.now()) {
437
+ return state.keys.map((key) => ({
438
+ label: key.label,
439
+ provider: key.provider,
440
+ enabled: key.enabled,
441
+ entitled: key.entitled,
442
+ disabledByConfig: key.disabledByConfig,
443
+ encrypted: key.encrypted,
444
+ consecutiveFailures: key.consecutiveFailures,
445
+ disabledAt: key.disabledAt === null ? null : new Date(key.disabledAt).toISOString(),
446
+ retryAfterMs: keyRetryAfterMs(state, key, now),
447
+ lastError: key.lastError
448
+ ? {
449
+ status: key.lastError.status,
450
+ reason: key.lastError.reason,
451
+ at: new Date(key.lastError.at).toISOString(),
452
+ }
453
+ : null,
454
+ usagePercent: key.usagePercent,
455
+ }));
456
+ }
355
457
  // ---------------------------------------------------------------------------
356
458
  // Error Classification (C2)
357
459
  // ---------------------------------------------------------------------------
@@ -1 +1 @@
1
- {"version":3,"file":"proxy-logic.js","sourceRoot":"","sources":["../src/proxy-logic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proxy-logic.js","sourceRoot":"","sources":["../src/proxy-logic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,mCAAmC,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAmIhD,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,MAAM,UAAU,gBAAgB,CAC9B,IAME,EACF,OAGC;IAED,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACrB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,aAAa;YACrC,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,IAAI;YAC1B,mBAAmB,EAAE,CAAC;YACtB,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,IAAI;YACd,aAAa,EAAE,CAAC;YAChB,SAAS,EAAE,IAAI;YACf,gBAAgB,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK;YACrC,SAAS,EAAE,CAAC,CAAC,SAAS,KAAK,IAAI;SAChC,CAAC,CAAC;QACH,YAAY,EAAE,CAAC;QACf,uBAAuB,EAAE,OAAO,EAAE,uBAAuB,IAAI,CAAC;QAC9D,wBAAwB,EAAE,OAAO,EAAE,wBAAwB,IAAI,mCAAmC;QAClG,cAAc,EAAE,IAAI,GAAG,EAAE;KAC1B,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;;GAGG;AACH,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;AACpE,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAC,KAAiB,EAAE,GAAW;IACpD,4EAA4E;IAC5E,2BAA2B;IAC3B,IAAI,GAAG,CAAC,gBAAgB;QAAE,OAAO,KAAK,CAAC;IACvC,uEAAuE;IACvE,qEAAqE;IACrE,mBAAmB;IACnB,IAAI,CAAC,GAAG,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAEhC,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,mBAAmB,GAAG,KAAK,CAAC,uBAAuB,EAAE,CAAC;QAC3E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iDAAiD;IACjD,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC;QAC5C,IAAI,OAAO,IAAI,KAAK,CAAC,wBAAwB,EAAE,CAAC;YAC9C,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;YACnB,GAAG,CAAC,mBAAmB,GAAG,CAAC,CAAC;YAC5B,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,iBAAiB,CAAC,KAAiB;IAC1C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,KAAK,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QAC3C,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACnB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,WAAW,CAClB,KAAiB,EACjB,aAA0B,EAC1B,cAA8C;IAE9C,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;IAC5B,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACrD,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,SAAS;QAC3C,IAAI,cAAc,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,SAAS;QAC9D,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC;YAAE,SAAS;QAC1C,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzC,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC/C,KAAK,CAAC,YAAY,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAC1D,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CAAC,KAAiB,EAAE,UAAoB;IAC3D,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC;IAChE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;IAE7C,IAAI,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,yEAAyE;IACzE,oEAAoE;IACpE,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACnF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC1D,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,IAAI,WAAW,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;IAE5C,IAAI,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,UAAU,GAAG,CAAC,QAAQ,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,UAAU,CAAC,CAAC,CAAC,CAAC,aAAa,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,UAAU,EAAE,CAAC;YAC7C,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YACzC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,IAAI,CAAC,aAAa,IAAI,WAAW,CAAC;IAClC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,KAAiB,EAAE,KAA0B;IAC1E,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC;IAC9D,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAiB,EAAE,QAAgB,EAAE,QAAiB;IACtF,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;IACzD,IAAI,GAAG;QAAE,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACnC,CAAC;AAED,8EAA8E;AAC9E,mCAAmC;AACnC,8EAA8E;AAE9E;;;GAGG;AACH,SAAS,gBAAgB,CAAC,OAAe;IACvC,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACpF,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;AAC1E,CAAC;AAED,2EAA2E;AAC3E,SAAS,gBAAgB,CAAC,OAA2B;IACnD,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;AAC5C,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,kBAAkB,CACzB,KAAiB,EACjB,OAAgB;IAEhB,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC9D,8EAA8E;IAC9E,4EAA4E;IAC5E,2EAA2E;IAC3E,0EAA0E;IAC1E,8EAA8E;IAC9E,0DAA0D;IAC1D,IAAI,MAAM;QAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,MAAM,CAAC;IACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,gBAAgB,CAAC;IACxC,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,SAAS;QACzC,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;YAC3C,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAiB,EACjB,SAAiB,EACjB,OAAgB;IAEhB,qEAAqE;IACrE,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACrD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC,UAAU,CAAC;IAC7B,CAAC;IAED,0CAA0C;IAC1C,MAAM,GAAG,GAAmB,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC3E,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAEzC,MAAM,cAAc,GAAG,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1D,GAAG,CAAC,cAAc,GAAG,cAAc,CAAC;IACpC,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;IAEhD,0EAA0E;IAC1E,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACxC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;IAEjE,gEAAgE;IAChE,qEAAqE;IACrE,mCAAmC;IACnC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC,CAAC;IACxE,CAAC;IAED,oEAAoE;IACpE,qEAAqE;IACrE,+CAA+C;IAC/C,IAAI,CAAC,QAAQ,IAAI,cAAc,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAC/C,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC;IAC1B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAiB,EACjB,SAAiB;IAEjB,MAAM,GAAG,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAChD,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAEtB,8BAA8B;IAC9B,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QACnB,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,0EAA0E;IAC1E,0EAA0E;IAC1E,kDAAkD;IAClD,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,CAAC;IAClC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACxC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;IAEzD,uEAAuE;IACvE,gEAAgE;IAChE,8BAA8B;IAC9B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;IAChE,CAAC;IAED,yEAAyE;IACzE,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAC7B,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC;IAC1B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAiB,EACjB,SAAiB,EACjB,OAAgB;IAEhB,MAAM,GAAG,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAChD,IAAI,CAAC,GAAG;QAAE,OAAO;IAEjB,IAAI,OAAO,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QAC9B,gBAAgB,CAAC,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACzC,CAAC;AAED,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E;;;;GAIG;AACH,SAAS,sBAAsB,CAC7B,SAAoB,EACpB,MAAe,EACf,IAAa;IAEb,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,MAAM,CAAC;IAClC,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,YAAY,CAAC;IACxC,wEAAwE;IACxE,gEAAgE;IAChE,IAAI,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,YAAY,CAAC;IAC3D,IAAI,SAAS,KAAK,UAAU;QAAE,OAAO,OAAO,CAAC;IAC7C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAiB,EACjB,QAAgB,EAChB,SAAoB,EACpB,IAAqB;IAErB,IAAI,SAAS,KAAK,cAAc,IAAI,SAAS,KAAK,cAAc;QAAE,OAAO;IAEzE,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;IACzD,IAAI,CAAC,GAAG;QAAE,OAAO;IAEjB,sEAAsE;IACtE,qEAAqE;IACrE,GAAG,CAAC,SAAS,GAAG;QACd,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,IAAI;QAC5B,MAAM,EAAE,sBAAsB,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC;QACnE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;QACd,4EAA4E;QAC5E,2DAA2D;QAC3D,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;KACnE,CAAC;IAEF,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QAC7B,8DAA8D;QAC9D,GAAG,CAAC,mBAAmB,GAAG,KAAK,CAAC,uBAAuB,CAAC;QACxD,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC;QACpB,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,2BAA2B;IAC1D,CAAC;SAAM,CAAC;QACN,gDAAgD;QAChD,GAAG,CAAC,mBAAmB,EAAE,CAAC;QAC1B,IAAI,GAAG,CAAC,mBAAmB,IAAI,KAAK,CAAC,uBAAuB,EAAE,CAAC;YAC7D,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC;YACpB,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,2BAA2B;QAC1D,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAiB,EAAE,QAAgB;IAClE,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;IACzD,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,qEAAqE;IACrE,IAAI,GAAG,CAAC,gBAAgB;QAAE,OAAO;IACjC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;IACnB,GAAG,CAAC,mBAAmB,GAAG,CAAC,CAAC;IAC5B,kEAAkE;IAClE,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC;AACxB,CAAC;AAED,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,KAA+E,EAC/E,GAAoB,EACpB,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAEhB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,mBAAmB,GAAG,KAAK,CAAC,uBAAuB,CAAC;IACtF,IAAI,MAAM;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC,wBAAwB,GAAG,GAAG,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,KAAiB,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAC9D,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC9B,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;QACtC,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,mBAAmB,EAAE,GAAG,CAAC,mBAAmB;QAC5C,UAAU,EAAE,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE;QACnF,YAAY,EAAE,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC;QAC9C,SAAS,EAAE,GAAG,CAAC,SAAS;YACtB,CAAC,CAAC;gBACE,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,MAAM;gBAC5B,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,MAAM;gBAC5B,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE;aAC7C;YACH,CAAC,CAAC,IAAI;QACR,YAAY,EAAE,GAAG,CAAC,YAAY;KAC/B,CAAC,CAAC,CAAC;AACN,CAAC;AAED,8EAA8E;AAC9E,4BAA4B;AAC5B,8EAA8E;AAE9E;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,KAAc;IAC9D,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,wEAAwE;QACxE,yEAAyE;QACzE,qEAAqE;QACrE,IAAI,KAAK,IAAI,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,cAAc,CAAC;QAC5E,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,aAAa,CAAC;IACzC,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,cAAc,CAAC;IAChG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACvD,8EAA8E;QAC9E,IAAI,KAAK,IAAI,mCAAmC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7D,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC"}
package/dist/proxy.d.ts CHANGED
@@ -5,7 +5,8 @@
5
5
  * selection, circuit-breaker failover, and streaming pass-through.
6
6
  */
7
7
  import { Hono } from 'hono';
8
- import type { ProxyConfig } from './config.js';
8
+ import { type KeyFailureReason } from './proxy-logic.js';
9
+ import { type ProxyConfig } from './config.js';
9
10
  import type { KeyProvider } from './providers/index.js';
10
11
  /**
11
12
  * Resolve the upstream URL for one attempt: per-provider base URL + path
@@ -73,4 +74,35 @@ export declare function buildDownstreamHeaders(upstreamHeaders: Headers): Header
73
74
  * Check if a request body indicates streaming mode.
74
75
  */
75
76
  export declare function isStreamingRequest(bodyText: string): boolean;
77
+ /** One key that cannot serve a request, as reported in the 503 body. */
78
+ export interface UnavailableKey {
79
+ label: string;
80
+ provider: string;
81
+ state: 'disabled' | 'not_entitled' | 'disabled_by_config';
82
+ reason: KeyFailureReason | null;
83
+ lastStatus: number | null;
84
+ disabledAt: string | null;
85
+ retryAfterMs: number | null;
86
+ detail: string | null;
87
+ }
88
+ export interface NoKeysBody {
89
+ error: string;
90
+ message: string;
91
+ requestId: string;
92
+ retryAfterMs: number | null;
93
+ keys: UnavailableKey[];
94
+ causes: string[];
95
+ }
96
+ export interface KeyDiagnosis {
97
+ retryAfterMs: number | null;
98
+ keys: UnavailableKey[];
99
+ causes: string[];
100
+ }
101
+ /**
102
+ * Shared diagnosis for "no key can serve this": which keys are out, why, when
103
+ * one may return. Pure so it can be tested without an app instance.
104
+ */
105
+ export declare function buildKeyDiagnosis(keys: UnavailableKey[], modelId?: string, triedLabels?: string[]): KeyDiagnosis;
106
+ /** Build the 503 body sent when no key can be selected at all. */
107
+ export declare function buildNoKeysBody(keys: UnavailableKey[], requestId: string, modelId?: string, triedLabels?: string[]): NoKeysBody;
76
108
  export declare function createProxyApp(config: ProxyConfig): Hono;