llm-relay 0.30.0 → 0.32.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.
@@ -22,6 +22,11 @@ export function materializeScope(template, provider, model) {
22
22
  * but not forever, so a mistaken reject heals on its own rather than needing a file edited by hand.
23
23
  */
24
24
  export const IGNORED_TTL_MS = 30 * 24 * 60 * 60 * 1000;
25
+ /**
26
+ * The longest reset any of these providers publishes. Beyond it a value is a parse artifact or a
27
+ * mistaken assertion, and believing it would strand a deployment far past any real window.
28
+ */
29
+ const MAX_RESET_MS = 7 * 24 * 60 * 60 * 1000;
25
30
  let _store = null;
26
31
  let _path = null;
27
32
  const writer = new WriteBehindTimer();
@@ -156,11 +161,112 @@ export function parseStatedResetMs(body) {
156
161
  const ms = Number(m[1]) * scale;
157
162
  // A week is the longest window any of these providers publish; beyond that it is a parse
158
163
  // artifact, and believing it would strand a deployment far past any real reset.
159
- if (Number.isFinite(ms) && ms > 0 && ms <= 7 * 24 * 60 * 60 * 1000)
164
+ if (Number.isFinite(ms) && ms > 0 && ms <= MAX_RESET_MS)
160
165
  return Math.round(ms);
161
166
  }
162
167
  return null;
163
168
  }
169
+ /**
170
+ * Apply a reviewed reset rule to one response body.
171
+ *
172
+ * Ranked below anything the response itself states — see `resolveResetMs` in `server.ts`. A
173
+ * `field` rule reads THIS response, so it is still a measurement; a `fixed` rule is the reviewer's
174
+ * knowledge of a window and is the last word before falling back to the kind's TTL.
175
+ */
176
+ export function applyResetRule(rule, body) {
177
+ if (!rule)
178
+ return null;
179
+ if (rule.kind === "fixed")
180
+ return rule.ms > 0 && rule.ms <= MAX_RESET_MS ? Math.round(rule.ms) : null;
181
+ const raw = findField(body, rule.field);
182
+ if (raw === null)
183
+ return null;
184
+ // Providers write durations as "3600s", "3600", or a number. Seconds is the universal unit here
185
+ // (Retry-After, RetryInfo, every JSON spelling seen), so anything without a unit is seconds.
186
+ const m = /(\d+(?:\.\d+)?)\s*(ms|s|m|h)?/i.exec(String(raw));
187
+ if (!m?.[1])
188
+ return null;
189
+ const scale = m[2]?.toLowerCase() === "ms" ? 1 : m[2]?.toLowerCase() === "m" ? 60_000 : m[2]?.toLowerCase() === "h" ? 3_600_000 : 1000;
190
+ const ms = Number(m[1]) * scale;
191
+ return Number.isFinite(ms) && ms > 0 && ms <= MAX_RESET_MS ? Math.round(ms) : null;
192
+ }
193
+ /** Deep lookup of a JSON key by NAME, wrapper-tolerant. Returns the first scalar found. */
194
+ function findField(body, field) {
195
+ const parse = (text) => {
196
+ try {
197
+ return JSON.parse(text);
198
+ }
199
+ catch {
200
+ const brace = text.search(/[[{]/);
201
+ if (brace <= 0)
202
+ return null;
203
+ try {
204
+ return JSON.parse(text.slice(brace));
205
+ }
206
+ catch {
207
+ return null;
208
+ }
209
+ }
210
+ };
211
+ const walk = (v, depth = 0) => {
212
+ if (depth > 8 || v === null || typeof v !== "object")
213
+ return null;
214
+ for (const [k, val] of Object.entries(v)) {
215
+ if (k === field && (typeof val === "string" || typeof val === "number"))
216
+ return val;
217
+ const found = walk(val, depth + 1);
218
+ if (found !== null)
219
+ return found;
220
+ }
221
+ return null;
222
+ };
223
+ return walk(parse(body.length > 8192 ? body.slice(0, 8192) : body));
224
+ }
225
+ /**
226
+ * Meaning read from a SELF-DESCRIBING error payload, rather than from prose.
227
+ *
228
+ * Some providers publish the fact in a structured, versioned envelope that names its own schema.
229
+ * Google's is the one in use here: a 429 carries `google.rpc.QuotaFailure` whose `quotaId` states
230
+ * both the window and what the limit is counted against —
231
+ * `GenerateRequestsPerDayPerProjectPerModel-FreeTier` says, unambiguously, that this is a *daily*
232
+ * allowance counted *per model* on the *free tier*. No wording to interpret.
233
+ *
234
+ * ⚠ This is NOT a per-provider switch, which this project refuses elsewhere (`catalog.ts` uses a
235
+ * generic field-alias list; `authEnv.ts` refuses to guess). The dispatch key is the payload's own
236
+ * `@type` URL — the message declares which schema it is speaking, and we read only schemas we
237
+ * understand. A provider adopting `google.rpc` gets this for free; one that does not is unaffected.
238
+ *
239
+ * Ranked ABOVE the prose seeds and BELOW an accepted human verdict: structured evidence beats a
240
+ * pattern guess, and an operator's explicit decision beats both.
241
+ */
242
+ function interpretStructured(status, body) {
243
+ if (!/google\.rpc\.QuotaFailure/.test(body))
244
+ return null;
245
+ // The quotaId is the load-bearing field; read it without trusting the surrounding shape, because
246
+ // a partial or wrapped body must degrade to "learned nothing" rather than throwing.
247
+ const m = /"quotaId"\s*:\s*"([^"]{1,200})"/.exec(body);
248
+ const quotaId = m?.[1];
249
+ if (!quotaId)
250
+ return null;
251
+ // WINDOW → which fact this is. Per-minute/second is throughput; per-hour and longer is an
252
+ // allowance. This is the rate-limit-vs-quota distinction read off a field instead of inferred
253
+ // from wording, which is exactly where reading wording got it wrong before.
254
+ const perShort = /Per(?:Second|Minute)/i.test(quotaId);
255
+ const perLong = /Per(?:Hour|Day|Week|Month)/i.test(quotaId);
256
+ if (!perShort && !perLong)
257
+ return null;
258
+ const kind = perShort ? "rate-limited" : "allowance-exhausted";
259
+ // SCOPE → what the limit is counted against. "PerProjectPerModel" is counted per model, so the
260
+ // project's other models are unaffected; "PerProject" alone covers the whole credential.
261
+ const scope = /PerModel/i.test(quotaId)
262
+ ? { kind: "deployment" }
263
+ : /Per(?:Project|User|Consumer|Client)/i.test(quotaId)
264
+ ? { kind: "provider" }
265
+ : { kind: "deployment" }; // Unrecognized dimension: assume the narrowest blast radius.
266
+ // A 429 is the only status this shape is published on; anything else naming QuotaFailure is not
267
+ // something we have seen and should not be guessed at.
268
+ return status === 429 || status === 403 ? { class: kind, scope } : null;
269
+ }
164
270
  /** The lookup key. Per (provider, model, normalized message) — see the header for why all three. */
165
271
  export function refusalSignature(provider, model, status, body) {
166
272
  return `${provider}|${model ?? "-"}|${status}|${normalizeRefusalMessage(body)}`;
@@ -170,6 +276,13 @@ export function refusalSignature(provider, model, status, body) {
170
276
  * a real account (probed 2026-08-08). These bind without review: they are deterministic code in
171
277
  * version control, and an operator who disagrees can override the entry.
172
278
  *
279
+ * ⚠ **This list is a BOOTSTRAP, not the mechanism.** Reaching for a new seed every time an
280
+ * unfamiliar message appears means the relay's author learned something and the relay did not —
281
+ * and it is the reflex this two-tier design exists to replace. A researched interpretation carries
282
+ * the same information, is reviewed the same way, and a future session inherits it without a
283
+ * release. Add a seed only for a message shape common enough that every install should start
284
+ * knowing it.
285
+ *
173
286
  * ⚠ These are matched as PATTERNS against the normalized message, not as exact signatures, because
174
287
  * a seed has to cover a provider it has never been run against. That is a deliberate exception to
175
288
  * the per-model keying rule above and the only one — a seed is reviewed source, whereas a
@@ -307,6 +420,19 @@ export function interpretRefusal(provider, model, status, body, opts = {}) {
307
420
  // A researched entry binds only once accepted; an unaccepted one is still sitting in review.
308
421
  if (hit && (hit.source === "seed" || hit.acceptedAt !== undefined))
309
422
  return hit;
423
+ // Structured evidence beats prose: the payload states its own schema and its own dimensions,
424
+ // where a seed only pattern-matches wording. Below an accepted human verdict, above the seeds.
425
+ const structured = interpretStructured(status, body);
426
+ if (structured) {
427
+ return {
428
+ class: structured.class,
429
+ scope: structured.scope,
430
+ source: "seed",
431
+ // The same envelope carries `google.rpc.RetryInfo`, so the reset is read from the response
432
+ // itself rather than falling back to the kind's default TTL.
433
+ reset: { kind: "field", field: "retryDelay" },
434
+ };
435
+ }
310
436
  const normalized = normalizeRefusalMessage(body);
311
437
  for (const seed of SEED_INTERPRETATIONS) {
312
438
  if (!seed.status(status))
@@ -417,12 +543,18 @@ export function acceptInterpretation(signature, opts = {}) {
417
543
  const path = opts.path ?? defaultPath();
418
544
  const store = load(path);
419
545
  const pending = store.unknown[signature];
420
- const verdict = opts.override ?? (pending?.proposed ? { class: pending.proposed.class, scope: pending.proposed.scope } : null);
546
+ const verdict = opts.override ?? (pending?.proposed
547
+ ? { class: pending.proposed.class, scope: pending.proposed.scope, reset: pending.proposed.reset }
548
+ : null);
421
549
  if (!verdict)
422
550
  return false;
551
+ // The reset travels with the verdict: accepting an interpretation commits everything known about
552
+ // that message shape — what it means, who it covers, and when it clears — not just a label.
553
+ const reset = verdict.reset ?? pending?.proposed?.reset;
423
554
  store.confirmed[signature] = {
424
555
  class: verdict.class,
425
556
  scope: verdict.scope,
557
+ ...(reset ? { reset } : {}),
426
558
  source: "researched",
427
559
  acceptedAt: opts.now ?? Date.now(),
428
560
  ...(pending?.proposed?.rationale ? { rationale: pending.proposed.rationale } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"refusal-interpretation.js","sourceRoot":"","sources":["../src/refusal-interpretation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"refusal-interpretation.js","sourceRoot":"","sources":["../src/refusal-interpretation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAyDrD,sFAAsF;AACtF,MAAM,UAAU,gBAAgB,CAAC,QAAuB,EAAE,QAAgB,EAAE,KAAa;IACvF,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,YAAY;YACf,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACjD,KAAK,UAAU;YACb,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACxC,KAAK,OAAO;YACV,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAClC,KAAK,OAAO;YACV,0FAA0F;YAC1F,8DAA8D;YAC9D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;IACpI,CAAC;AACH,CAAC;AA6ED;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEvD;;;GAGG;AACH,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE7C,IAAI,MAAM,GAA+B,IAAI,CAAC;AAC9C,IAAI,KAAK,GAAkB,IAAI,CAAC;AAChC,MAAM,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAEtC,mGAAmG;AACnG,MAAM,WAAW,GAAG,GAAG,CAAC;AACxB,4FAA4F;AAC5F,MAAM,YAAY,GAAG,GAAG,CAAC;AAEzB,SAAS,WAAW;IAClB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,kCAAkC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IACxC,MAAM,OAAO,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;IAC3F,OAAO,IAAI,CAAC,OAAO,EAAE,8BAA8B,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7D,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;SAClC,WAAW,EAAE;SACb,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC;SACnC,OAAO,CAAC,+DAA+D,EAAE,MAAM,CAAC;SAChF,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC;SACpC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC;SAC7B,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE;SACN,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACnB,CAAC;AAED,8FAA8F;AAC9F,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,UAAU,GAAa,CAAC,IAAI,CAAC,CAAC;IACpC,iFAAiF;IACjF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,KAAK,GAAG,CAAC;QAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAClD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAY,CAAC,CAAC;YAC5D,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,0CAA0C;QAC5C,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,sFAAsF;AACtF,SAAS,WAAW,CAAC,CAAU,EAAE,KAAK,GAAG,CAAC;IACxC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3B,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YACxC,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,CAA4B,CAAC;QACzC,KAAK,MAAM,KAAK,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;YAC5D,IAAI,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,QAAQ;gBAAE,OAAO,GAAG,CAAC,KAAK,CAAW,CAAC;YAChE,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACjD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;gBACjD,IAAI,KAAK;oBAAE,OAAO,KAAK,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7D,MAAM,QAAQ,GAAyC;QACrD,gEAAgE;QAChE,EAAE,EAAE,EAAE,+CAA+C,EAAE,KAAK,EAAE,IAAI,EAAE;QACpE,kEAAkE;QAClE,EAAE,EAAE,EAAE,+DAA+D,EAAE,KAAK,EAAE,IAAI,EAAE;QACpF,6EAA6E;QAC7E,EAAE,EAAE,EAAE,wEAAwE,EAAE,KAAK,EAAE,IAAI,EAAE;QAC7F,EAAE,EAAE,EAAE,sEAAsE,EAAE,KAAK,EAAE,MAAM,EAAE;QAC7F,EAAE,EAAE,EAAE,mEAAmE,EAAE,KAAK,EAAE,SAAS,EAAE;KAC9F,CAAC;IACF,KAAK,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,QAAQ,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAAE,SAAS;QACtB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QAChC,yFAAyF;QACzF,gFAAgF;QAChF,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,YAAY;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,IAA2B,EAAE,IAAY;IACtE,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACtG,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC9B,gGAAgG;IAChG,6FAA6F;IAC7F,MAAM,CAAC,GAAG,gCAAgC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IACvI,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAChC,OAAO,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACrF,CAAC;AAED,2FAA2F;AAC3F,SAAS,SAAS,CAAC,IAAY,EAAE,KAAa;IAC5C,MAAM,KAAK,GAAG,CAAC,IAAY,EAAW,EAAE;QACtC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAClC,IAAI,KAAK,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC5B,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAY,CAAC;YAClD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,CAAC,CAAU,EAAE,KAAK,GAAG,CAAC,EAA0B,EAAE;QAC7D,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAClE,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAA4B,CAAC,EAAE,CAAC;YACpE,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC;gBAAE,OAAO,GAAG,CAAC;YACpF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YACnC,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACtE,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,mBAAmB,CAC1B,MAAc,EACd,IAAY;IAEZ,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACzD,iGAAiG;IACjG,oFAAoF;IACpF,MAAM,CAAC,GAAG,iCAAiC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,0FAA0F;IAC1F,8FAA8F;IAC9F,4EAA4E;IAC5E,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5D,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,IAAI,GAAa,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,qBAAqB,CAAC;IAEzE,+FAA+F;IAC/F,yFAAyF;IACzF,MAAM,KAAK,GAAkB,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;QACpD,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE;QACxB,CAAC,CAAC,sCAAsC,CAAC,IAAI,CAAC,OAAO,CAAC;YACpD,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE;YACtB,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,6DAA6D;IAE3F,gGAAgG;IAChG,uDAAuD;IACvD,OAAO,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1E,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,KAAgC,EAAE,MAAc,EAAE,IAAY;IAC/G,OAAO,GAAG,QAAQ,IAAI,KAAK,IAAI,GAAG,IAAI,MAAM,IAAI,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;AAClF,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAM5B;IACH;QACE,+FAA+F;QAC/F,6FAA6F;QAC7F,EAAE;QACF,8FAA8F;QAC9F,2FAA2F;QAC3F,+FAA+F;QAC/F,yFAAyF;QACzF,yEAAyE;QACzE,EAAE;QACF,6FAA6F;QAC7F,2FAA2F;QAC3F,wFAAwF;QACxF,+FAA+F;QAC/F,+CAA+C;QAC/C,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG;QACrC,OAAO,EAAE,wNAAwN;QACjO,KAAK,EAAE,qBAAqB;QAC5B,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;QAC3B,IAAI,EAAE,qFAAqF;KAC5F;IACD;QACE,6FAA6F;QAC7F,uEAAuE;QACvE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG;QACxB,OAAO,EAAE,yIAAyI;QAClJ,KAAK,EAAE,qBAAqB;QAC5B,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;QAC3B,IAAI,EAAE,0DAA0D;KACjE;IACD;QACE,4FAA4F;QAC5F,8FAA8F;QAC9F,8CAA8C;QAC9C,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG;QACxB,OAAO,EAAE,4HAA4H;QACrI,KAAK,EAAE,uBAAuB;QAC9B,KAAK,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;QAC7B,IAAI,EAAE,gEAAgE;KACvE;IACD;QACE,8FAA8F;QAC9F,4FAA4F;QAC5F,2EAA2E;QAC3E,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG;QACrC,OAAO,EAAE,kGAAkG;QAC3G,KAAK,EAAE,cAAc;QACrB,KAAK,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;QAC7B,IAAI,EAAE,mCAAmC;KAC1C;IACD;QACE,6FAA6F;QAC7F,2FAA2F;QAC3F,8EAA8E;QAC9E,EAAE;QACF,gGAAgG;QAChG,0FAA0F;QAC1F,8FAA8F;QAC9F,8DAA8D;QAC9D,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG;QACrC,OAAO,EAAE,gLAAgL;QACzL,KAAK,EAAE,oBAAoB;QAC3B,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;QAC3B,IAAI,EAAE,gEAAgE;KACvE;IACD;QACE,0FAA0F;QAC1F,8FAA8F;QAC9F,EAAE;QACF,8FAA8F;QAC9F,oFAAoF;QACpF,4FAA4F;QAC5F,4DAA4D;QAC5D,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG;QACxB,OAAO,EAAE,iNAAiN;QAC1N,KAAK,EAAE,cAAc;QACrB,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;QAC3B,IAAI,EAAE,+DAA+D;KACtE;CACF,CAAC;AAGF,SAAS,IAAI,CAAC,IAAY;IACxB,IAAI,MAAM,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAC5C,KAAK,GAAG,IAAI,CAAC;IACb,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAiC,CAAC;QACtF,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YACzC,MAAM,GAAG;gBACP,OAAO,EAAE,CAAC;gBACV,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAmC;gBACrE,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAmC;gBACjE,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAmC;aAClE,CAAC;YACF,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,6FAA6F;QAC7F,6EAA6E;IAC/E,CAAC;IACD,MAAM,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACjE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,OAAO,CAAC,IAAY;IAC3B,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,IAAI,CAAC;QACH,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;QACzC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;QACnE,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,wFAAwF;IAC1F,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,KAAgC,EAChC,MAAc,EACd,IAAY,EACZ,OAA0B,EAAE;IAE5B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7E,6FAA6F;IAC7F,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC;QAAE,OAAO,GAAG,CAAC;IAE/E,6FAA6F;IAC7F,+FAA+F;IAC/F,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO;YACL,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,MAAM,EAAE,MAAM;YACd,2FAA2F;YAC3F,6DAA6D;YAC7D,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE;SAC9C,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,oBAAoB,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAAE,SAAS;QACnC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACrG,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAgB,EAChB,KAAgC,EAChC,MAAc,EACd,IAAY,EACZ,OAAwC,EAAE;IAE1C,MAAM,UAAU,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU;QAAE,OAAO;IACxB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5D,IAAI,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC;QAAE,OAAO;IACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IACnC,8FAA8F;IAC9F,yFAAyF;IACzF,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;IAC3C,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,GAAG,GAAG,SAAS,GAAG,cAAc;QAAE,OAAO;IAC9E,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;QACpB,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,IAAI,WAAW,EAAE,CAAC;YACrD,4FAA4F;YAC5F,oEAAoE;YACpE,IAAI,SAAS,GAAkB,IAAI,CAAC;YACpC,IAAI,QAAQ,GAAG,QAAQ,CAAC;YACxB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnD,IAAI,CAAC,CAAC,QAAQ,GAAG,QAAQ,EAAE,CAAC;oBAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;oBAAC,SAAS,GAAG,CAAC,CAAC;gBAAC,CAAC;YACtE,CAAC;YACD,IAAI,SAAS;gBAAE,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACjD,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG;YACnB,QAAQ;YACR,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;YAC/C,MAAM;YACN,UAAU;YACV,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI;YACvE,KAAK,EAAE,CAAC;YACR,SAAS,EAAE,GAAG;YACd,QAAQ,EAAE,GAAG;SACd,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,eAAe,CAAC,OAA0B,EAAE;IAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,gGAAgG;IAChG,iGAAiG;IACjG,gEAAgE;IAChE,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/D,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI;YAAE,SAAS;QACnC,IAAI,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,IAAI;YAAE,SAAS;QAC3G,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;IACD,IAAI,QAAQ;QAAE,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;SACjC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;SAC9C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;AAClE,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,qBAAqB,CACnC,SAAiB,EACjB,QAAyF,EACzF,OAAwC,EAAE;IAE1C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,OAAO,CAAC,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAC/D,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAAiB,EACjB,OAAiH,EAAE;IAEnH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE,QAAQ;QACjD,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE;QACjG,CAAC,CAAC,IAAI,CAAC,CAAC;IACV,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,iGAAiG;IACjG,4FAA4F;IAC5F,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC;IACxD,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG;QAC3B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,MAAM,EAAE,YAAY;QACpB,UAAU,EAAE,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE;QAClC,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnF,CAAC;IACF,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAiB,EAAE,OAAwC,EAAE;IAChG,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,KAAK,CAAC,OAAO,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC;IAC1F,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,oBAAoB,CAAC,OAA0B,EAAE;IAC/D,IAAI,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO;IAC1B,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,oBAAoB;IAClC,MAAM,GAAG,IAAI,CAAC;IACd,KAAK,GAAG,IAAI,CAAC;IACb,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC"}
package/dist/server.js CHANGED
@@ -7,7 +7,7 @@ import { reconstructFromSse } from "./sse.js";
7
7
  import { emitSse, emitSseTail, syntheticMessageId } from "./emitSse.js";
8
8
  import { repair, destructiveMatcher } from "./repair.js";
9
9
  import { FailoverReshaper, HttpReshaper } from "./reshaper.js";
10
- import { fetchBackend, fetchOpenAiFront, normalizeOpenAiErrorBody, parseRetryAfterMs, SERVED_BY_HEADER, POOL_ATTEMPTS_HEADER, UNKNOWN_REFUSAL_HEADER, DEGRADED_HEADER, errorOrigin } from "./backend.js";
10
+ import { fetchBackend, fetchOpenAiFront, normalizeOpenAiErrorBody, parseRetryAfterMs, SERVED_BY_HEADER, POOL_ATTEMPTS_HEADER, UNKNOWN_REFUSAL_HEADER, DEGRADED_HEADER, PAID_HEADER, errorOrigin } from "./backend.js";
11
11
  import { ModelCatalog } from "./catalog.js";
12
12
  import { handleAdminRoutes } from "./routes/admin.js";
13
13
  import { toolSchemaMap } from "./anthropic.js";
@@ -20,7 +20,7 @@ import { materializeDynamicPools } from "./dynamic-pools.js";
20
20
  import { baseLog } from "./request-log.js";
21
21
  import { looksLikeContextLengthError, parseStatedContextLimit, recordObservedContextLimit } from "./context-limits.js";
22
22
  import { clearFacts, cooldownUntil, isCostBlocked, recordFact } from "./target-facts.js";
23
- import { interpretRefusal, materializeScope, parseStatedResetMs, recordUnknownRefusal } from "./refusal-interpretation.js";
23
+ import { applyResetRule, interpretRefusal, materializeScope, parseStatedResetMs, recordUnknownRefusal } from "./refusal-interpretation.js";
24
24
  import { CONTROL_AUTHORIZATION_HEADER, createControlAuthorization, resolveControlAuthorizationConfigDir, validateControlAuthorization, } from "./control-authorization.js";
25
25
  export { baseLog, logSafePath } from "./request-log.js";
26
26
  const HOP_BY_HOP = new Set([
@@ -349,7 +349,7 @@ async function handle(req, res, cfg, h) {
349
349
  // free-lane traffic and never the vendor passthrough, and the guard can only ever refuse to
350
350
  // spend, so extending it there cannot cost anyone an answer they were entitled to.
351
351
  const addressesPool = typeof routedModel === "string" && routedModel.startsWith("pool/");
352
- if ((subSpec !== null || addressesPool) && offloadRule(cfg, requestClient).freeOnly === true) {
352
+ if ((subSpec !== null || addressesPool) && freeOnlyApplies(offloadRule(cfg, requestClient), subSpec !== null)) {
353
353
  const kept = [];
354
354
  let blocked = null;
355
355
  for (const t of targetCandidates) {
@@ -456,6 +456,7 @@ async function handle(req, res, cfg, h) {
456
456
  req,
457
457
  addressedPool,
458
458
  degradedSpecs,
459
+ cfg,
459
460
  }, h);
460
461
  return;
461
462
  }
@@ -590,7 +591,7 @@ async function handle(req, res, cfg, h) {
590
591
  else {
591
592
  const poolRetryAfterMs = pool429.overrideMs(backendRes.status, retryAfterMs);
592
593
  pool429.recordFinal(backendRes.status);
593
- await transparentPath(res, backendRes, timer, { tools, streamed, willValidate, started, path, hadTools, req, target, attempt, signal: controller.signal, retryAfterOverrideMs: poolRetryAfterMs, poolSummary: pool429.summary(), poolUnknownRefusals: pool429.unknownCount(), degraded: degradedLabel(addressedPool, degradedSpecs, target) }, h);
594
+ await transparentPath(res, backendRes, timer, { tools, streamed, willValidate, started, path, hadTools, req, target, attempt, signal: controller.signal, retryAfterOverrideMs: poolRetryAfterMs, poolSummary: pool429.summary(), poolUnknownRefusals: pool429.unknownCount(), degraded: degradedLabel(addressedPool, degradedSpecs, target), paid: paidLabel(cfg, h, target) }, h);
594
595
  }
595
596
  return;
596
597
  }
@@ -636,6 +637,16 @@ async function handle(req, res, cfg, h) {
636
637
  * at all" — but only because the caller is told. An unannounced downgrade is indistinguishable
637
638
  * from getting what you asked for.
638
639
  */
640
+ function paidLabel(cfg, h, target) {
641
+ // Only openai-kind targets carry a price we can assess; the anthropic passthrough is the
642
+ // caller's own subscription and is reported by the absence of any pool at all.
643
+ if (target.kind !== "openai" || !target.model)
644
+ return null;
645
+ const assessment = assessCost(target.model, h.catalog.cachedLimits(target.provider, target.model), cfg.providers[target.provider]?.tierType);
646
+ if (assessment.costClass === "free")
647
+ return null;
648
+ return `${specOfTarget(target)} (${assessment.costClass}, ${assessment.basis})`;
649
+ }
639
650
  function degradedLabel(pool, degraded, target) {
640
651
  if (pool === null || degraded === null)
641
652
  return null;
@@ -875,11 +886,8 @@ function observeEligibility(target, status, retryAfterMs, body) {
875
886
  // and model. A provider-scoped verdict therefore covers every deployment behind that
876
887
  // credential from one observation — which is the whole point: a stated credit balance or a
877
888
  // rejected key is one fact, and rediscovering it once per model is pure waste.
878
- // A reset the BODY stated outranks the header, and outranks the kind's default TTL. Gemini
879
- // says when a spent quota returns only in `google.rpc.RetryInfo` inside the error details, so
880
- // without this a 5-hourly or weekly quota is re-probed on a schedule the relay invented.
881
889
  recordFact(verdict.class, materializeScope(verdict.scope, target.provider, target.model), {
882
- retryAfterMs: retryAfterMs ?? parseStatedResetMs(body),
890
+ retryAfterMs: resolveResetMs(verdict, retryAfterMs, body),
883
891
  });
884
892
  }
885
893
  catch {
@@ -887,6 +895,56 @@ function observeEligibility(target, status, retryAfterMs, body) {
887
895
  }
888
896
  return false;
889
897
  }
898
+ /**
899
+ * Does the free-only guard bind this request?
900
+ *
901
+ * explicit `true` → always. The owner's standing "this lane never spends money", which a
902
+ * per-call `@relay:` directive and a dispatch cliLane must not outrank.
903
+ * explicit `false` → never. Spending was opted into deliberately.
904
+ * UNSET → defaults ON for offload-rerouted traffic, OFF for a directly addressed pool.
905
+ *
906
+ * ⚠ That asymmetry is the whole point, and it is why `loadConfig` keeps "unset" distinguishable
907
+ * from "false". Offload exists to spend somebody else's free capacity instead of your
908
+ * subscription, so an install that has never thought about cost must not discover the feature by
909
+ * being billed for it — the default belongs there. But a request that *names* `pool/<name>` is an
910
+ * explicit routing choice by someone who knows what a pool is, and silently gating all of it on a
911
+ * flag they never set would turn every unpriced deployment into a 503 for a decision they did not
912
+ * make. Defaulting both the same way was tried: it failed 29 tests, all of them pool traffic that
913
+ * had nothing to do with offload, which is exactly the surprise a user would have hit.
914
+ */
915
+ function freeOnlyApplies(rule, rerouted) {
916
+ return rule.freeOnly ?? rerouted;
917
+ }
918
+ /**
919
+ * When the condition this refusal describes clears, best evidence first.
920
+ *
921
+ * 1. `Retry-After` — the header, stated by THIS response.
922
+ * 2. A reviewed `field` rule — also read from THIS response, just from a place only a reviewer
923
+ * knew to look (Google's `retryDelay`, which no header carries).
924
+ * 3. The generic body parse — the same class of evidence, found without being told where.
925
+ * 4. A reviewed `fixed` window — a reviewer's knowledge of the provider, not a measurement of
926
+ * this response, so it ranks below everything the response actually said.
927
+ * 5. null ⇒ the fact kind's default TTL.
928
+ *
929
+ * ⚠ The ordering is the point. A reviewer may know MORE than the response (that a daily quota
930
+ * resets in hours when the body says nothing), but never more than the response about itself — so
931
+ * an assertion can fill a gap and can never overrule a statement.
932
+ */
933
+ function resolveResetMs(interpretation, headerMs, body) {
934
+ if (headerMs !== null)
935
+ return headerMs;
936
+ if (interpretation.reset?.kind === "field") {
937
+ const fromField = applyResetRule(interpretation.reset, body);
938
+ if (fromField !== null)
939
+ return fromField;
940
+ }
941
+ const generic = parseStatedResetMs(body);
942
+ if (generic !== null)
943
+ return generic;
944
+ if (interpretation.reset?.kind === "fixed")
945
+ return applyResetRule(interpretation.reset, body);
946
+ return null;
947
+ }
890
948
  /**
891
949
  * Statuses whose body can carry a durable fact.
892
950
  *
@@ -1134,6 +1192,9 @@ async function openAiFrontPath(res, candidates, ctx, h) {
1134
1192
  const degradedBy = degradedLabel(ctx.addressedPool ?? null, ctx.degradedSpecs ?? null, target);
1135
1193
  if (degradedBy)
1136
1194
  headers[DEGRADED_HEADER] = degradedBy;
1195
+ const paidBy = ctx.cfg ? paidLabel(ctx.cfg, h, target) : null;
1196
+ if (paidBy)
1197
+ headers[PAID_HEADER] = paidBy;
1137
1198
  // Same aggregate as the Anthropic path, from the same tracker — the two fronts having
1138
1199
  // separate copies of one policy is the defect this file has already shipped once.
1139
1200
  pool429.recordFinal(upstream.status);
@@ -1216,6 +1277,9 @@ async function transparentPath(res, backendRes, timer, ctx, h) {
1216
1277
  responseHeaders[UNKNOWN_REFUSAL_HEADER] = String(ctx.poolUnknownRefusals);
1217
1278
  if (ctx.degraded)
1218
1279
  responseHeaders[DEGRADED_HEADER] = ctx.degraded;
1280
+ // Spending is never silent — see PAID_HEADER.
1281
+ if (ctx.paid)
1282
+ responseHeaders[PAID_HEADER] = ctx.paid;
1219
1283
  res.writeHead(backendRes.status, responseHeaders);
1220
1284
  let assistant = null;
1221
1285
  try {