audit-tools 0.33.7 → 0.33.10

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 (68) hide show
  1. package/dist/audit/orchestrator/rollingDispatch.js +1 -1
  2. package/dist/audit/orchestrator/rollingDispatch.js.map +1 -1
  3. package/dist/remediate/steps/nextStep.js +1 -1
  4. package/dist/remediate/steps/nextStep.js.map +1 -1
  5. package/dist/shared/dispatch/admissionLeaseReconcile.js +1 -1
  6. package/dist/shared/dispatch/admissionLeaseReconcile.js.map +1 -1
  7. package/dist/shared/dispatch/admissionLoop.d.ts +42 -10
  8. package/dist/shared/dispatch/admissionLoop.d.ts.map +1 -1
  9. package/dist/shared/dispatch/admissionLoop.js +74 -7
  10. package/dist/shared/dispatch/admissionLoop.js.map +1 -1
  11. package/dist/shared/dispatch/dispatchQuotaContract.d.ts +82 -7
  12. package/dist/shared/dispatch/dispatchQuotaContract.d.ts.map +1 -1
  13. package/dist/shared/dispatch/hostDispatchWall.d.ts.map +1 -1
  14. package/dist/shared/dispatch/hostDispatchWall.js +8 -0
  15. package/dist/shared/dispatch/hostDispatchWall.js.map +1 -1
  16. package/dist/shared/dispatch/rollingDispatch.d.ts +17 -10
  17. package/dist/shared/dispatch/rollingDispatch.d.ts.map +1 -1
  18. package/dist/shared/dispatch/rollingDispatch.js +49 -33
  19. package/dist/shared/dispatch/rollingDispatch.js.map +1 -1
  20. package/dist/shared/dispatch/unifiedRolling.d.ts +3 -2
  21. package/dist/shared/dispatch/unifiedRolling.d.ts.map +1 -1
  22. package/dist/shared/dispatch/unifiedRolling.js +12 -4
  23. package/dist/shared/dispatch/unifiedRolling.js.map +1 -1
  24. package/dist/shared/index.d.ts +2 -2
  25. package/dist/shared/index.d.ts.map +1 -1
  26. package/dist/shared/index.js +5 -1
  27. package/dist/shared/index.js.map +1 -1
  28. package/dist/shared/providers/auditorSources.js +16 -0
  29. package/dist/shared/providers/auditorSources.js.map +1 -1
  30. package/dist/shared/quota/accountId.d.ts +70 -0
  31. package/dist/shared/quota/accountId.d.ts.map +1 -1
  32. package/dist/shared/quota/accountId.js +82 -5
  33. package/dist/shared/quota/accountId.js.map +1 -1
  34. package/dist/shared/quota/apiPool.d.ts.map +1 -1
  35. package/dist/shared/quota/apiPool.js +12 -1
  36. package/dist/shared/quota/apiPool.js.map +1 -1
  37. package/dist/shared/quota/capacity.d.ts +82 -0
  38. package/dist/shared/quota/capacity.d.ts.map +1 -1
  39. package/dist/shared/quota/capacity.js +42 -1
  40. package/dist/shared/quota/capacity.js.map +1 -1
  41. package/dist/shared/quota/claudeOAuthQuotaSource.d.ts.map +1 -1
  42. package/dist/shared/quota/claudeOAuthQuotaSource.js +46 -8
  43. package/dist/shared/quota/claudeOAuthQuotaSource.js.map +1 -1
  44. package/dist/shared/quota/quotaSource.d.ts +73 -2
  45. package/dist/shared/quota/quotaSource.d.ts.map +1 -1
  46. package/dist/shared/quota/quotaSource.js +57 -2
  47. package/dist/shared/quota/quotaSource.js.map +1 -1
  48. package/dist/shared/quota/reservationLedger.d.ts +98 -26
  49. package/dist/shared/quota/reservationLedger.d.ts.map +1 -1
  50. package/dist/shared/quota/reservationLedger.js +109 -37
  51. package/dist/shared/quota/reservationLedger.js.map +1 -1
  52. package/dist/shared/quota/scheduler.d.ts +25 -1
  53. package/dist/shared/quota/scheduler.d.ts.map +1 -1
  54. package/dist/shared/quota/scheduler.js +115 -10
  55. package/dist/shared/quota/scheduler.js.map +1 -1
  56. package/dist/shared/quota/state.d.ts +24 -9
  57. package/dist/shared/quota/state.d.ts.map +1 -1
  58. package/dist/shared/quota/state.js +43 -16
  59. package/dist/shared/quota/state.js.map +1 -1
  60. package/dist/shared/quota/types.d.ts +57 -6
  61. package/dist/shared/quota/types.d.ts.map +1 -1
  62. package/dist/shared/quota/types.js.map +1 -1
  63. package/dist/shared/quota/windowConstraints.d.ts +56 -0
  64. package/dist/shared/quota/windowConstraints.d.ts.map +1 -0
  65. package/dist/shared/quota/windowConstraints.js +71 -0
  66. package/dist/shared/quota/windowConstraints.js.map +1 -0
  67. package/docs/audit-pkg/operator-guide.md +4 -1
  68. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/shared/quota/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/shared/quota/state.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { readFile, rename } from "node:fs/promises";
2
2
  import { join } from "node:path";
3
3
  import { withFileLock } from "./fileLock.js";
4
4
  import { writeJsonFile } from "../io/json.js";
5
+ import { hasWindowScope, windowSlopeKey, } from "./quotaSource.js";
5
6
  let _statePath;
6
7
  export function setQuotaStateDir(dir) {
7
8
  _statePath = join(dir, "quota-state.json");
@@ -202,7 +203,7 @@ export const MIN_SLOPE_DELTA_PERCENT = 0.5;
202
203
  * positive (≥ {@link MIN_SLOPE_DELTA_PERCENT}), when tokens are non-positive, or
203
204
  * when any input is non-finite. Never throws.
204
205
  */
205
- export function foldTokensPerPctObservation(prior, windowLabel, priorRemainingPct, newRemainingPct, tokensDispatched) {
206
+ export function foldTokensPerPctObservation(prior, slopeKey, priorRemainingPct, newRemainingPct, tokensDispatched) {
206
207
  const base = prior ?? {};
207
208
  if (!Number.isFinite(priorRemainingPct) ||
208
209
  !Number.isFinite(newRemainingPct) ||
@@ -217,11 +218,11 @@ export function foldTokensPerPctObservation(prior, windowLabel, priorRemainingPc
217
218
  const sampleSlope = tokensDispatched / deltaPercent;
218
219
  if (!Number.isFinite(sampleSlope) || sampleSlope <= 0)
219
220
  return base;
220
- const previous = base[windowLabel];
221
+ const previous = base[slopeKey];
221
222
  const blended = typeof previous === "number" && Number.isFinite(previous) && previous > 0
222
223
  ? previous * (1 - TOKENS_PER_PCT_EWMA_ALPHA) + sampleSlope * TOKENS_PER_PCT_EWMA_ALPHA
223
224
  : sampleSlope;
224
- return { ...base, [windowLabel]: blended };
225
+ return { ...base, [slopeKey]: blended };
225
226
  }
226
227
  // EWMA weight for a new output/input ratio observation. Shares the responsive-but-
227
228
  // not-jumpy 0.3 of the tokens_per_pct slope — a lens's output ratio is at least as
@@ -282,12 +283,12 @@ export async function recordOutputRatioObservation(providerModelKey, lens, actua
282
283
  * rebuilt ({@link readQuotaStateForUpdate}); a transient-unreadable one rejects.
283
284
  * An observation that doesn't move the slope leaves the file untouched-in-value.
284
285
  */
285
- export async function recordTokensPerPctObservation(providerModelKey, windowLabel, priorRemainingPct, newRemainingPct, tokensDispatched) {
286
+ export async function recordTokensPerPctObservation(providerModelKey, slopeKey, priorRemainingPct, newRemainingPct, tokensDispatched) {
286
287
  const lockPath = getQuotaStatePath() + ".lock";
287
288
  await withFileLock(lockPath, async () => {
288
289
  const state = await readQuotaStateForUpdate("recordTokensPerPctObservation");
289
290
  const entry = state.entries[providerModelKey] ?? blankEntry();
290
- const updated = foldTokensPerPctObservation(entry.tokens_per_pct, windowLabel, priorRemainingPct, newRemainingPct, tokensDispatched);
291
+ const updated = foldTokensPerPctObservation(entry.tokens_per_pct, slopeKey, priorRemainingPct, newRemainingPct, tokensDispatched);
291
292
  entry.tokens_per_pct = updated;
292
293
  entry.updated_at = new Date().toISOString();
293
294
  state.entries[providerModelKey] = entry;
@@ -295,14 +296,29 @@ export async function recordTokensPerPctObservation(providerModelKey, windowLabe
295
296
  });
296
297
  }
297
298
  /**
298
- * Build a window-label → {@link QuotaWindowPctReading} map from a quota usage
299
- * snapshot. Falls back to a single `"default"` label when the source has no
300
- * per-window breakdown (single-window providers). Returns an empty map for a
301
- * null/absent snapshot or one with no usable percent reading.
299
+ * Build a {@link windowSlopeKey} → {@link QuotaWindowPctReading} map from a quota
300
+ * usage snapshot. Falls back to a single account-scoped `"default"` window when the
301
+ * source has no per-window breakdown (single-window providers — matching the
302
+ * synthetic window the scheduler derives for the same case). Returns an empty map
303
+ * for a null/absent snapshot or one with no usable percent reading.
304
+ *
305
+ * Keyed by `(scope, label)` so a slope sample is attributed to the same partition
306
+ * the budget will later be metered against — keying by bare label would blend an
307
+ * account-wide and a model-scoped window that happen to share a group name.
302
308
  *
303
309
  * Single-sourced so the in-process rolling dispatcher and the host-dispatch
304
310
  * merge path attribute a slope sample against the SAME window semantics —
305
311
  * see {@link foldSlopeObservationFromSnapshots}.
312
+ *
313
+ * ⚠ A window with no usable `scope` is SKIPPED (loudly), never keyed. This path is
314
+ * fed PERSISTED snapshots — `dispatch-quota.json` written before scope existed, read
315
+ * back raw with no schema parse — so scope-less windows are real on disk, not a
316
+ * hypothetical. Two rejected alternatives: keying them anyway produces
317
+ * `"undefined:<label>"`, which no reader ever looks up, so the slope is silently
318
+ * orphaned; and THROWING would break {@link foldSlopeObservationFromSnapshots}'s
319
+ * documented "never throws" contract and kill slope learning on any run resumed
320
+ * across the upgrade. Skipping costs one window's slope sample, says so, and lets
321
+ * the rest of the fold proceed.
306
322
  */
307
323
  export function quotaSnapshotWindowPctMap(snapshot) {
308
324
  const map = new Map();
@@ -310,13 +326,24 @@ export function quotaSnapshotWindowPctMap(snapshot) {
310
326
  return map;
311
327
  if (snapshot.windows && snapshot.windows.length > 0) {
312
328
  for (const w of snapshot.windows) {
329
+ if (!hasWindowScope(w)) {
330
+ process.stderr.write(`[quota] window "${w.label}" from ${snapshot.source} carries no metering scope; ` +
331
+ `skipping its slope sample (a pre-scope persisted snapshot re-learns on the next probe)\n`);
332
+ continue;
333
+ }
313
334
  if (w.remaining_pct != null && Number.isFinite(w.remaining_pct)) {
314
- map.set(w.label, { remainingPct: w.remaining_pct, resetAt: w.reset_at ?? null });
335
+ map.set(windowSlopeKey(w.scope, w.label), {
336
+ remainingPct: w.remaining_pct,
337
+ resetAt: w.reset_at ?? null,
338
+ });
315
339
  }
316
340
  }
317
341
  }
318
342
  else if (snapshot.remaining_pct != null && Number.isFinite(snapshot.remaining_pct)) {
319
- map.set("default", { remainingPct: snapshot.remaining_pct, resetAt: snapshot.reset_at ?? null });
343
+ map.set(windowSlopeKey("account", "default"), {
344
+ remainingPct: snapshot.remaining_pct,
345
+ resetAt: snapshot.reset_at ?? null,
346
+ });
320
347
  }
321
348
  return map;
322
349
  }
@@ -360,12 +387,12 @@ export function quotaSnapshotWindowPctMap(snapshot) {
360
387
  * any fold (the in-process dispatcher) can tell whether one occurred without
361
388
  * re-deriving the same comparison.
362
389
  */
363
- export async function foldSlopeObservationFromPctMaps(providerModelKey, priorPctByLabel, currentPctByLabel, tokensDispatched) {
390
+ export async function foldSlopeObservationFromPctMaps(providerModelKey, priorPctByKey, currentPctByKey, tokensDispatched) {
364
391
  const folded = [];
365
392
  if (!Number.isFinite(tokensDispatched) || tokensDispatched <= 0)
366
393
  return folded;
367
- for (const [label, prior] of priorPctByLabel) {
368
- const current = currentPctByLabel.get(label);
394
+ for (const [slopeKey, prior] of priorPctByKey) {
395
+ const current = currentPctByKey.get(slopeKey);
369
396
  if (current == null)
370
397
  continue;
371
398
  if (prior.resetAt != null && current.resetAt != null && prior.resetAt !== current.resetAt) {
@@ -380,11 +407,11 @@ export async function foldSlopeObservationFromPctMaps(providerModelKey, priorPct
380
407
  if ((prior.remainingPct - current.remainingPct) * 100 < MIN_SLOPE_DELTA_PERCENT)
381
408
  continue;
382
409
  try {
383
- await recordTokensPerPctObservation(providerModelKey, label, prior.remainingPct, current.remainingPct, tokensDispatched);
410
+ await recordTokensPerPctObservation(providerModelKey, slopeKey, prior.remainingPct, current.remainingPct, tokensDispatched);
384
411
  // C2: push only AFTER a successful write — a throw below is caught and
385
412
  // swallowed (slope learning must never abort the caller) WITHOUT this
386
413
  // label being reported as folded.
387
- folded.push(label);
414
+ folded.push(slopeKey);
388
415
  }
389
416
  catch {
390
417
  // Non-fatal: slope learning must never abort the caller.
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/shared/quota/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG9C,IAAI,UAA8B,CAAC;AAEnC,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC7F,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtF,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;IAC/B,OAAO,CAAC,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC;AAChF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AACrC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IAExC;IAQA;IACA;IAVX,YACW,SAAiB;IAC1B;;;;;;OAMG;IACM,IAA8B,EAC9B,MAAc;QAEvB,KAAK,CAAC,kBAAkB,SAAS,iBAAiB,IAAI,MAAM,MAAM,EAAE,CAAC,CAAC;QAX7D,cAAS,GAAT,SAAS,CAAQ;QAQjB,SAAI,GAAJ,IAAI,CAA0B;QAC9B,WAAM,GAAN,MAAM,CAAQ;QAGvB,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;IACtC,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,eAAe,EAAE,CAAC;QAC3B,CAAC;QACD,MAAM,IAAI,0BAA0B,CAClC,SAAS,EACT,YAAY,EACZ,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;IACJ,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,0BAA0B,CAClC,SAAS,EACT,SAAS,EACT,mBAAmB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAC7E,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,0BAA0B,CAClC,SAAS,EACT,SAAS,EACT,4CAA4C,CAC7C,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAClD,KAAK,CAAC,qBAAqB,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAAe;IAC3D,IAAI,CAAC;QACH,OAAO,MAAM,cAAc,EAAE,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,WAAW,OAAO,KAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,2EAA2E,CAC5E,CAAC;QACF,OAAO,eAAe,EAAE,CAAC;IAC3B,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAAe;IAC3D,IAAI,CAAC;QACH,OAAO,MAAM,cAAc,EAAE,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,0BAA0B,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/E,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;QACtC,MAAM,cAAc,GAAG,GAAG,SAAS,YAAY,IAAI,IAAI,EAAE;aACtD,WAAW,EAAE;aACb,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;QAC3B,IAAI,WAAW,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,0EAA0E;YAC1E,qEAAqE;YACrE,WAAW,GAAG,KAAK,CAAC;QACtB,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,WAAW,OAAO,KAAK,KAAK,CAAC,OAAO,KAClC,WAAW,CAAC,CAAC,CAAC,kBAAkB,cAAc,EAAE,CAAC,CAAC,CAAC,yBACrD,wEAAwE,CACzE,CAAC;QACF,OAAO,eAAe,EAAE,CAAC;IAC3B,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAiB;IACrD,MAAM,OAAO,GAAoC,EAAE,CAAC;IACpD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,aAAa,CAAC,iBAAiB,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAuB,CAAC,CAAC;AACzF,CAAC;AAED;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,KAAsB;IAC5C,MAAM,UAAU,GAAoB;QAClC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,WAAW,EAAE,KAAK,CAAC,WAAW;KAC/B,CAAC;IACF,IAAI,KAAK,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;QAC9C,UAAU,CAAC,qBAAqB,GAAG,KAAK,CAAC,qBAAqB,CAAC;IACjE,CAAC;IACD,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS;QAAE,UAAU,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;IACzF,IAAI,KAAK,CAAC,gBAAgB,KAAK,SAAS;QAAE,UAAU,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;IAC/F,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,2EAA2E;AAC3E,8EAA8E;AAC9E,+DAA+D;AAC/D,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAC7C,8EAA8E;AAC9E,gFAAgF;AAChF,yDAAyD;AACzD,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAE3C;;;;;;;;;;GAUG;AACH,MAAM,UAAU,2BAA2B,CACzC,KAAyC,EACzC,WAAmB,EACnB,iBAAyB,EACzB,eAAuB,EACvB,gBAAwB;IAExB,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;IACzB,IACE,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QACnC,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC;QACjC,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAClC,gBAAgB,IAAI,CAAC,EACrB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,sEAAsE;IACtE,MAAM,YAAY,GAAG,CAAC,iBAAiB,GAAG,eAAe,CAAC,GAAG,GAAG,CAAC;IACjE,IAAI,YAAY,GAAG,uBAAuB;QAAE,OAAO,IAAI,CAAC;IACxD,MAAM,WAAW,GAAG,gBAAgB,GAAG,YAAY,CAAC;IACpD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;IACnC,MAAM,OAAO,GACX,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC;QACvE,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,yBAAyB,CAAC,GAAG,WAAW,GAAG,yBAAyB;QACtF,CAAC,CAAC,WAAW,CAAC;IAClB,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;AAC7C,CAAC;AAED,mFAAmF;AACnF,mFAAmF;AACnF,qFAAqF;AACrF,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAE3C;;;;;;;;;GASG;AACH,MAAM,UAAU,0BAA0B,CACxC,KAAyC,EACzC,IAAY,EACZ,iBAAyB,EACzB,kBAA0B;IAE1B,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;IACzB,IACE,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QACnC,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACpC,iBAAiB,IAAI,CAAC;QACtB,kBAAkB,IAAI,CAAC,EACvB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,WAAW,GAAG,kBAAkB,GAAG,iBAAiB,CAAC;IAC3D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,OAAO,GACX,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC;QACvE,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,uBAAuB,CAAC,GAAG,WAAW,GAAG,uBAAuB;QAClF,CAAC,CAAC,WAAW,CAAC;IAClB,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;AACtC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,gBAAwB,EACxB,IAAY,EACZ,iBAAyB,EACzB,kBAA0B;IAE1B,MAAM,QAAQ,GAAG,iBAAiB,EAAE,GAAG,OAAO,CAAC;IAC/C,MAAM,YAAY,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,KAAK,GAAG,MAAM,uBAAuB,CAAC,8BAA8B,CAAC,CAAC;QAC5E,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,UAAU,EAAE,CAAC;QAC9D,MAAM,OAAO,GAAG,0BAA0B,CACxC,KAAK,CAAC,gBAAgB,EACtB,IAAI,EACJ,iBAAiB,EACjB,kBAAkB,CACnB,CAAC;QACF,KAAK,CAAC,gBAAgB,GAAG,OAAO,CAAC;QACjC,KAAK,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC5C,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC;QACxC,MAAM,eAAe,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,gBAAwB,EACxB,WAAmB,EACnB,iBAAyB,EACzB,eAAuB,EACvB,gBAAwB;IAExB,MAAM,QAAQ,GAAG,iBAAiB,EAAE,GAAG,OAAO,CAAC;IAC/C,MAAM,YAAY,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,KAAK,GAAG,MAAM,uBAAuB,CAAC,+BAA+B,CAAC,CAAC;QAC7E,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,UAAU,EAAE,CAAC;QAC9D,MAAM,OAAO,GAAG,2BAA2B,CACzC,KAAK,CAAC,cAAc,EACpB,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,gBAAgB,CACjB,CAAC;QACF,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC;QAC/B,KAAK,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC5C,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC;QACxC,MAAM,eAAe,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC;AAcD;;;;;;;;;GASG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAA+C;IAE/C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAiC,CAAC;IACrD,IAAI,CAAC,QAAQ;QAAE,OAAO,GAAG,CAAC;IAC1B,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,CAAC,aAAa,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC;gBAChE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC,CAAC;YACnF,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,QAAQ,CAAC,aAAa,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACrF,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,YAAY,EAAE,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,QAAQ,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC,CAAC;IACnG,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,gBAAwB,EACxB,eAAmD,EACnD,iBAAqD,EACrD,gBAAwB;IAExB,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,gBAAgB,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IAC/E,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,eAAe,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,OAAO,IAAI,IAAI;YAAE,SAAS;QAC9B,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,IAAI,OAAO,CAAC,OAAO,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC;YAC1F,2EAA2E;YAC3E,SAAS;QACX,CAAC;QACD,wEAAwE;QACxE,wEAAwE;QACxE,4EAA4E;QAC5E,uEAAuE;QACvE,0DAA0D;QAC1D,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,GAAG,GAAG,uBAAuB;YAAE,SAAS;QAC1F,IAAI,CAAC;YACH,MAAM,6BAA6B,CACjC,gBAAgB,EAChB,KAAK,EACL,KAAK,CAAC,YAAY,EAClB,OAAO,CAAC,YAAY,EACpB,gBAAgB,CACjB,CAAC;YACF,uEAAuE;YACvE,sEAAsE;YACtE,kCAAkC;YAClC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,yDAAyD;QAC3D,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,gBAAwB,EACxB,aAAoD,EACpD,eAAsD,EACtD,gBAAwB;IAExB,OAAO,+BAA+B,CACpC,gBAAgB,EAChB,yBAAyB,CAAC,aAAa,CAAC,EACxC,yBAAyB,CAAC,eAAe,CAAC,EAC1C,gBAAgB,CACjB,CAAC;AACJ,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAC3F,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AACvC,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,GAAG,MAAM,CAAC;AAE3C,MAAM,UAAU,wBAAwB,CAAC,mBAA2B;IAClE,MAAM,EAAE,GAAG,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,GAAG,CAAC,CAAC,CAAC,CAAC;IAChF,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,gBAAwB,EACxB,OAA4B;IAE5B,MAAM,QAAQ,GAAG,iBAAiB,EAAE,GAAG,OAAO,CAAC;IAC/C,MAAM,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,uBAAuB,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,KAAK,UAAU,uBAAuB,CACpC,gBAAwB,EACxB,OAA4B;IAE5B,MAAM,KAAK,GAAG,MAAM,uBAAuB,CAAC,mBAAmB,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,UAAU,EAAE,CAAC;IAE9D,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,4EAA4E;QAC5E,4EAA4E;QAC5E,0EAA0E;QAC1E,4EAA4E;QAC5E,0EAA0E;QAC1E,wEAAwE;QACxE,oDAAoD;QACpD,MAAM,cAAc,GAClB,KAAK,CAAC,cAAc,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACxF,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,KAAK,CAAC,qBAAqB,GAAG,CAAC,CAAC;YAChC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;QAC9B,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,YAAY,GAAG,KAAK,CAAC,qBAAqB,IAAI,CAAC,CAAC;QACtD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,KAAK,cAAc,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QACzF,KAAK,CAAC,qBAAqB,GAAG,WAAW,CAAC;QAC1C,6EAA6E;QAC7E,yEAAyE;QACzE,0EAA0E;QAC1E,iEAAiE;QACjE,IAAI,OAAO,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;YACvC,KAAK,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC/C,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,KAAK,cAAc,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YAC1D,MAAM,SAAS,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAC;YACxD,KAAK,CAAC,cAAc,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QACxE,CAAC;aAAM,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAClC,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAChD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5C,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC;IACxC,MAAM,eAAe,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/shared/quota/state.ts"],"names":[],"mappings":"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"}
@@ -45,12 +45,17 @@ export interface QuotaStateEntry {
45
45
  last_429_at: string | null;
46
46
  consecutive_429_count?: number;
47
47
  /**
48
- * Learned tokens→percent slope (EWMA) for the token-budget gate, keyed PER
49
- * WINDOW LABEL (e.g. "session", "weekly"). `slope = Δtokens / Δpercent` where
50
- * percent = remaining_pct*100. Windows scale on different denominators, so
51
- * each learns its own slope; the gate multiplies the right slope by that
52
- * window's remaining percent to get its token budget and takes the MIN across
53
- * a pool's own windows. Absent until observed (cold start).
48
+ * Learned tokens→percent slope (EWMA), keyed by `windowSlopeKey(scope, label)`
49
+ * (e.g. "account:session", "model:session") — NOT by bare label: an account-scoped
50
+ * and a model-scoped window can share a group name while pricing different
51
+ * allowances. `slope = Δtokens / Δpercent` where percent = remaining_pct*100.
52
+ * Windows scale on different denominators, so each learns its own slope.
53
+ *
54
+ * Two consumers, and the distinction matters: the slope prices each window's
55
+ * remaining percent into a token budget for REPORTING (the MIN across a pool's
56
+ * windows), and it is the exchange rate ADMISSION uses to convert a packet's tokens
57
+ * into a draw against a percent-denominated window. Absent until observed (cold
58
+ * start), which reads as `calibrating`.
54
59
  */
55
60
  tokens_per_pct?: Record<string, number>;
56
61
  /**
@@ -90,6 +95,41 @@ export interface QuotaBindingWindow {
90
95
  /** The window's own remaining token budget (the value that won the MIN). */
91
96
  budget: number;
92
97
  }
98
+ /**
99
+ * One quota window's remaining allowance, expressed in THAT WINDOW'S OWN UNIT, as
100
+ * the metering unit admission reserves against. This is what replaces the MIN
101
+ * collapse as the basis for admission: the MIN survives only for REPORTING which
102
+ * window binds ({@link QuotaBindingWindow}).
103
+ *
104
+ * ⚠ There is no unit shared across windows, which is the whole reason this is a
105
+ * list rather than a number. A 5-hour `session` and a 7-day `weekly` scale on
106
+ * different denominators, so the same N tokens is a different fraction of each.
107
+ *
108
+ * `unit` is decided per window, by what the provider actually reported:
109
+ * - `tokens` — the window reported an ABSOLUTE `tokens_remaining`. Tokens are
110
+ * directly commensurable here because no exchange rate is involved, so even an
111
+ * account-scoped window shared by N models can meter in tokens.
112
+ * - `percent` — only `remaining_pct` is known, priced through the pool's own
113
+ * learned `tokensPerPct`. This is REQUIRED for an account-scoped percent window:
114
+ * N models share one percent allowance but each converts its tokens at its OWN
115
+ * rate, so percent is the only unit in which their draws are comparable.
116
+ *
117
+ * A window that can be priced in NEITHER unit is not represented here at all — it
118
+ * sets `calibrating`, which routes the pool through the cold-start clamp rather
119
+ * than being waved through unmetered.
120
+ */
121
+ export interface WindowBudget {
122
+ /** Which partition the allowance belongs to — decided at the producer, never re-derived. */
123
+ scope: import("./quotaSource.js").QuotaWindowScope;
124
+ label: string;
125
+ /** Remaining allowance, in `unit`. */
126
+ budget: number;
127
+ unit: "tokens" | "percent";
128
+ /** Tokens per percentage point for this pool+window. Present iff `unit === "percent"`. */
129
+ tokensPerPct?: number;
130
+ /** The window's reset, carried for wall reporting. */
131
+ reset_at: string | null;
132
+ }
93
133
  export interface WaveSchedule {
94
134
  max_concurrent: number;
95
135
  estimated_wave_tokens: number;
@@ -118,6 +158,17 @@ export interface WaveSchedule {
118
158
  * time when there is no cooldown. Absent/null at cold start / no live snapshot.
119
159
  */
120
160
  binding_window?: QuotaBindingWindow | null;
161
+ /**
162
+ * Every window this pool must fit inside, each in its own unit — the METERING
163
+ * basis. Admission reserves against ALL of them (all-or-nothing); an account-scoped
164
+ * entry is shared with every sibling model on the credential, which is what stops N
165
+ * models on one account from each admitting against their own copy of one allowance.
166
+ *
167
+ * Empty/absent when there is no live snapshot, or on the cooldown path where budget
168
+ * derivation is skipped entirely — admission then falls back to a single pool-keyed
169
+ * constraint carrying the scalar budget, i.e. exactly the pre-partition behaviour.
170
+ */
171
+ window_budgets?: WindowBudget[];
121
172
  /** Tokens already in flight against this pool when the wave was sized (0 default). */
122
173
  in_flight_tokens?: number;
123
174
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/shared/quota/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,iBAAiB,mIAQ5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,qBAAqB,sCAAoC,CAAC;AACvE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,gCAAgC,kHAY3C,CAAC;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAC9C,OAAO,gCAAgC,CACxC,CAAC;AAEF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;EAM5B,CAAC;AACZ,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;EAQtB,CAAC;AACZ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC1C;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,mFAO/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,eAAe,CAAC;IAC5B,MAAM,EAAE,WAAW,CAAC;IACpB,eAAe,EAAE,cAAc,CAAC;IAChC,sBAAsB,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACpD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,qBAAqB,CAAC,EAAE,OAAO,kBAAkB,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC7E;;;OAGG;IACH,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B;;;;;OAKG;IACH,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC;;;;OAIG;IACH,cAAc,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC3C,sFAAsF;IACtF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,eAAO,MAAM,kBAAkB;;;;;;;;;EAKpB,CAAC;AACZ,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,MAAM,WAAW,mBAAmB;IAClC;;;;;;;;;;;OAWG;IACH,OAAO,EAAE,SAAS,GAAG,cAAc,GAAG,SAAS,GAAG,OAAO,CAAC;IAC1D,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/shared/quota/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/shared/quota/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC;IACtC,iBAAiB;IACjB,uBAAuB;IACvB,iBAAiB;IACjB,WAAW;IACX,kBAAkB;IAClB,SAAS;IACT,SAAS;CACV,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAGvE,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC,IAAI,CAAC;IACrD,WAAW;IACX,eAAe;IACf,gBAAgB;IAChB,aAAa;IACb,wEAAwE;IACxE,yEAAyE;IACzE,mBAAmB;IACnB,6EAA6E;IAC7E,6EAA6E;IAC7E,0EAA0E;IAC1E,eAAe;CAChB,CAAC,CAAC;AAKH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC;KACxC,MAAM,CAAC;IACN,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,MAAM,EAAE,gCAAgC;IACxC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC/B,CAAC;KACD,MAAM,EAAE,CAAC;AAGZ,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC;KAClC,MAAM,CAAC;IACN,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACvD,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC3D,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC7D,CAAC;KACD,MAAM,EAAE,CAAC;AAmCZ;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC;IACzC,KAAK;IACL,KAAK;IACL,cAAc;IACd,UAAU;IACV,kBAAkB;IAClB,MAAM;CACP,CAAC,CAAC;AA2DH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,MAAM,CAAC;IACN,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC7C,CAAC;KACD,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/shared/quota/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC;IACtC,iBAAiB;IACjB,uBAAuB;IACvB,iBAAiB;IACjB,WAAW;IACX,kBAAkB;IAClB,SAAS;IACT,SAAS;CACV,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAGvE,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC,IAAI,CAAC;IACrD,WAAW;IACX,eAAe;IACf,gBAAgB;IAChB,aAAa;IACb,wEAAwE;IACxE,yEAAyE;IACzE,mBAAmB;IACnB,6EAA6E;IAC7E,6EAA6E;IAC7E,0EAA0E;IAC1E,eAAe;CAChB,CAAC,CAAC;AAKH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC;KACxC,MAAM,CAAC;IACN,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,MAAM,EAAE,gCAAgC;IACxC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC/B,CAAC;KACD,MAAM,EAAE,CAAC;AAGZ,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC;KAClC,MAAM,CAAC;IACN,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACvD,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC3D,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC7D,CAAC;KACD,MAAM,EAAE,CAAC;AAwCZ;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC;IACzC,KAAK;IACL,KAAK;IACL,cAAc;IACd,UAAU;IACV,kBAAkB;IAClB,MAAM;CACP,CAAC,CAAC;AA0GH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,MAAM,CAAC;IACN,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC7C,CAAC;KACD,MAAM,EAAE,CAAC"}
@@ -0,0 +1,56 @@
1
+ import type { AdmitConstraint } from "./reservationLedger.js";
2
+ import type { QuotaWindowScope } from "./quotaSource.js";
3
+ import type { WindowBudget } from "./types.js";
4
+ /**
5
+ * The ledger key one window meters against.
6
+ *
7
+ * - `account` → `(accountKey, label)`: ONE allowance shared by every model on the
8
+ * credential. `accountKey` comes from the PRODUCER (`CapacityPool.accountKey`,
9
+ * set from the source declaration) — it is deliberately NOT derived here from
10
+ * `poolId`, because an explicitly declared `source.id` is returned verbatim as the
11
+ * pool key and carries no recoverable credential. Parsing it back out is what kept
12
+ * the motivating `nim-nano`/`nim-super` case broken across five rounds.
13
+ * - `model` → `(poolId, label)`: applies to this model alone; sharing it would
14
+ * falsely throttle siblings the limit does not cover.
15
+ *
16
+ * ⚠ The two are NAMESPACED (`acct:` / `pool:`). Without that they collide whenever
17
+ * `accountKey === poolId` — which is exactly the unattributable-source fallback — and
18
+ * an account-scoped and a model-scoped window sharing a label would silently meter as
19
+ * one allowance, destroying the partition on the pool class that most needs it.
20
+ */
21
+ export declare function windowResourceKey(scope: QuotaWindowScope, label: string, poolId: string, accountKey: string): string;
22
+ /**
23
+ * What `tokens` costs against one window, in that window's own unit. Returns null
24
+ * when the window cannot price the draw — a `percent` window whose learned slope is
25
+ * missing or non-positive. A null must never be silently treated as free: the caller
26
+ * drops the whole pool to the cold-start path rather than admitting unmetered.
27
+ */
28
+ export declare function windowCost(window: WindowBudget, tokens: number): number | null;
29
+ /**
30
+ * Build the constraint array a packet of `tokens` must clear to be admitted on this
31
+ * pool — one constraint per window, all-or-nothing at the ledger.
32
+ *
33
+ * An EMPTY `windows` list falls back to a single pool-keyed constraint carrying
34
+ * `fallbackBudget` — the no-live-signal case (no snapshot, or the cooldown path where
35
+ * derivation is skipped). ⚠ The fallback MUST be the pool's own scalar budget, not
36
+ * `+Infinity`: a caller still holding a finite `remaining_token_budget` would
37
+ * otherwise have its ceiling silently discarded and over-admit. In production the two
38
+ * coincide (no windows ⇒ null budget ⇒ unbounded), so this is the belt that stops a
39
+ * future divergence from failing open.
40
+ *
41
+ * A window that cannot price the draw is DROPPED from the array and reported in
42
+ * `unpriced`, so the caller can refuse rather than admit against a partial set —
43
+ * silently omitting it would meter the packet against fewer allowances than apply to
44
+ * it, which is the fail-open direction.
45
+ */
46
+ export interface PoolConstraintResolution {
47
+ constraints: AdmitConstraint[];
48
+ /**
49
+ * Windows that apply to the packet but could not price it. NON-EMPTY MEANS REFUSE:
50
+ * admitting on `constraints` alone would meter the packet against fewer allowances
51
+ * than actually bind it.
52
+ */
53
+ unpriced: WindowBudget[];
54
+ }
55
+ export declare function windowConstraintsFor(poolId: string, accountKey: string, windows: WindowBudget[] | undefined, tokens: number, fallbackBudget?: number): PoolConstraintResolution;
56
+ //# sourceMappingURL=windowConstraints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windowConstraints.d.ts","sourceRoot":"","sources":["../../../src/shared/quota/windowConstraints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAe/C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,gBAAgB,EACvB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,MAAM,CAER;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM9E;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B;;;;OAIG;IACH,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,YAAY,EAAE,GAAG,SAAS,EACnC,MAAM,EAAE,MAAM,EACd,cAAc,GAAE,MAAiC,GAChD,wBAAwB,CAsB1B"}
@@ -0,0 +1,71 @@
1
+ // The one place that turns a pool's per-window allowances into ledger constraints.
2
+ //
3
+ // Both admission paths go through here — the host grant (`admissionLoop`) and the
4
+ // in-process rolling engine (`rollingDispatch`). That is deliberate: the metering
5
+ // PARTITION is decided at the producer (`WindowBudget.scope` and
6
+ // `CapacityPool.accountKey`) and merely CARRIED here, because the moment a call site
7
+ // composes its own resource key from pool identity it is re-deriving the partition —
8
+ // which is what five refused repair rounds each did differently and each got wrong.
9
+ //
10
+ // (`rollingDispatch` keeps a literal single-constraint fallback for the case where no
11
+ // resolver is wired at all; that is an absence-of-config path, not a second
12
+ // derivation.)
13
+ /**
14
+ * The ledger key one window meters against.
15
+ *
16
+ * - `account` → `(accountKey, label)`: ONE allowance shared by every model on the
17
+ * credential. `accountKey` comes from the PRODUCER (`CapacityPool.accountKey`,
18
+ * set from the source declaration) — it is deliberately NOT derived here from
19
+ * `poolId`, because an explicitly declared `source.id` is returned verbatim as the
20
+ * pool key and carries no recoverable credential. Parsing it back out is what kept
21
+ * the motivating `nim-nano`/`nim-super` case broken across five rounds.
22
+ * - `model` → `(poolId, label)`: applies to this model alone; sharing it would
23
+ * falsely throttle siblings the limit does not cover.
24
+ *
25
+ * ⚠ The two are NAMESPACED (`acct:` / `pool:`). Without that they collide whenever
26
+ * `accountKey === poolId` — which is exactly the unattributable-source fallback — and
27
+ * an account-scoped and a model-scoped window sharing a label would silently meter as
28
+ * one allowance, destroying the partition on the pool class that most needs it.
29
+ */
30
+ export function windowResourceKey(scope, label, poolId, accountKey) {
31
+ return scope === "account" ? `acct:${accountKey}::${label}` : `pool:${poolId}::${label}`;
32
+ }
33
+ /**
34
+ * What `tokens` costs against one window, in that window's own unit. Returns null
35
+ * when the window cannot price the draw — a `percent` window whose learned slope is
36
+ * missing or non-positive. A null must never be silently treated as free: the caller
37
+ * drops the whole pool to the cold-start path rather than admitting unmetered.
38
+ */
39
+ export function windowCost(window, tokens) {
40
+ const draw = Math.max(0, tokens);
41
+ if (window.unit === "tokens")
42
+ return draw;
43
+ const slope = window.tokensPerPct;
44
+ if (typeof slope !== "number" || !Number.isFinite(slope) || slope <= 0)
45
+ return null;
46
+ return draw / slope;
47
+ }
48
+ export function windowConstraintsFor(poolId, accountKey, windows, tokens, fallbackBudget = Number.POSITIVE_INFINITY) {
49
+ if (!windows || windows.length === 0) {
50
+ return {
51
+ constraints: [{ resourceKey: poolId, budget: fallbackBudget, cost: Math.max(0, tokens) }],
52
+ unpriced: [],
53
+ };
54
+ }
55
+ const constraints = [];
56
+ const unpriced = [];
57
+ for (const window of windows) {
58
+ const cost = windowCost(window, tokens);
59
+ if (cost === null) {
60
+ unpriced.push(window);
61
+ continue;
62
+ }
63
+ constraints.push({
64
+ resourceKey: windowResourceKey(window.scope, window.label, poolId, accountKey),
65
+ budget: window.budget,
66
+ cost,
67
+ });
68
+ }
69
+ return { constraints, unpriced };
70
+ }
71
+ //# sourceMappingURL=windowConstraints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windowConstraints.js","sourceRoot":"","sources":["../../../src/shared/quota/windowConstraints.ts"],"names":[],"mappings":"AAIA,mFAAmF;AACnF,EAAE;AACF,kFAAkF;AAClF,kFAAkF;AAClF,iEAAiE;AACjE,qFAAqF;AACrF,qFAAqF;AACrF,oFAAoF;AACpF,EAAE;AACF,sFAAsF;AACtF,4EAA4E;AAC5E,eAAe;AAEf;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAuB,EACvB,KAAa,EACb,MAAc,EACd,UAAkB;IAElB,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,UAAU,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,MAAM,KAAK,KAAK,EAAE,CAAC;AAC3F,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,MAAoB,EAAE,MAAc;IAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACpF,OAAO,IAAI,GAAG,KAAK,CAAC;AACtB,CAAC;AA6BD,MAAM,UAAU,oBAAoB,CAClC,MAAc,EACd,UAAkB,EAClB,OAAmC,EACnC,MAAc,EACd,iBAAyB,MAAM,CAAC,iBAAiB;IAEjD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO;YACL,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;YACzF,QAAQ,EAAE,EAAE;SACb,CAAC;IACJ,CAAC;IACD,MAAM,WAAW,GAAsB,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtB,SAAS;QACX,CAAC;QACD,WAAW,CAAC,IAAI,CAAC;YACf,WAAW,EAAE,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC;YAC9E,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;AACnC,CAAC"}
@@ -36,7 +36,10 @@ Shared install files:
36
36
  - `.audit-code/install/SKILL.md`
37
37
  - `.audit-code/install/GETTING-STARTED.md`
38
38
  - `.audit-code/install/manifest.json`
39
- - `.audit-tools/audit/session-config.json` when no backend fallback config exists
39
+
40
+ Separately, `.audit-tools/audit/session-config.json` is created with defaults the first time
41
+ `next-step`/`advance-audit` runs and no config file yet exists — this happens lazily during an
42
+ audit run, not during `install`/`ensure` bootstrap.
40
43
 
41
44
  Host-specific files may include:
42
45
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "audit-tools",
3
- "version": "0.33.7",
3
+ "version": "0.33.10",
4
4
  "private": false,
5
5
  "license": "ISC",
6
6
  "description": "Portable hybrid code auditing + remediation orchestrators for arbitrary repositories.",