@claudexor/daemon 3.19.0 → 3.22.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 (60) hide show
  1. package/dist/command-retention.d.ts +1 -1
  2. package/dist/command-retention.d.ts.map +1 -1
  3. package/dist/command-retention.js +20 -4
  4. package/dist/command-retention.js.map +1 -1
  5. package/dist/continuation-admission.d.ts +11 -0
  6. package/dist/continuation-admission.d.ts.map +1 -0
  7. package/dist/continuation-admission.js +16 -0
  8. package/dist/continuation-admission.js.map +1 -0
  9. package/dist/credential-generation.d.ts +18 -0
  10. package/dist/credential-generation.d.ts.map +1 -0
  11. package/dist/credential-generation.js +43 -0
  12. package/dist/credential-generation.js.map +1 -0
  13. package/dist/credential-unusable-ledger.d.ts +26 -22
  14. package/dist/credential-unusable-ledger.d.ts.map +1 -1
  15. package/dist/credential-unusable-ledger.js +178 -38
  16. package/dist/credential-unusable-ledger.js.map +1 -1
  17. package/dist/index.d.ts +1 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +1 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/journal-fold-policy.d.ts.map +1 -1
  22. package/dist/journal-fold-policy.js +26 -2
  23. package/dist/journal-fold-policy.js.map +1 -1
  24. package/dist/pre-progress-refusal-ledger.d.ts +3 -6
  25. package/dist/pre-progress-refusal-ledger.d.ts.map +1 -1
  26. package/dist/pre-progress-refusal-ledger.js +7 -16
  27. package/dist/pre-progress-refusal-ledger.js.map +1 -1
  28. package/dist/project-partitions.d.ts +4 -0
  29. package/dist/project-partitions.d.ts.map +1 -1
  30. package/dist/project-partitions.js +7 -0
  31. package/dist/project-partitions.js.map +1 -1
  32. package/dist/quota-poll-lanes.d.ts +27 -9
  33. package/dist/quota-poll-lanes.d.ts.map +1 -1
  34. package/dist/quota-poll-lanes.js +95 -20
  35. package/dist/quota-poll-lanes.js.map +1 -1
  36. package/dist/quota-poll-pacer.d.ts +33 -36
  37. package/dist/quota-poll-pacer.d.ts.map +1 -1
  38. package/dist/quota-poll-pacer.js +115 -63
  39. package/dist/quota-poll-pacer.js.map +1 -1
  40. package/dist/quota-registry-support.d.ts +74 -0
  41. package/dist/quota-registry-support.d.ts.map +1 -1
  42. package/dist/quota-registry-support.js +154 -8
  43. package/dist/quota-registry-support.js.map +1 -1
  44. package/dist/quota-registry.d.ts +32 -7
  45. package/dist/quota-registry.d.ts.map +1 -1
  46. package/dist/quota-registry.js +76 -73
  47. package/dist/quota-registry.js.map +1 -1
  48. package/dist/server.d.ts.map +1 -1
  49. package/dist/server.js +2 -1
  50. package/dist/server.js.map +1 -1
  51. package/dist/terminal-authority.d.ts +1 -0
  52. package/dist/terminal-authority.d.ts.map +1 -1
  53. package/dist/thread-store-support.d.ts.map +1 -1
  54. package/dist/thread-store-support.js +10 -1
  55. package/dist/thread-store-support.js.map +1 -1
  56. package/dist/threads.d.ts +3 -1
  57. package/dist/threads.d.ts.map +1 -1
  58. package/dist/threads.js +2 -2
  59. package/dist/threads.js.map +1 -1
  60. package/package.json +6 -5
@@ -21,7 +21,7 @@ export declare function selectProductCommands(records: readonly JobRecord[], que
21
21
  * commands (journal sprint owner decision D3, release 1). Prompts stay inline
22
22
  * in the command journal, so once their sum passes this bound the OLDEST
23
23
  * terminal product commands are pruned regardless of age; the 500/30-day rule
24
- * is unchanged. Model-operation receipts and needs-decision runs are exempt;
24
+ * is unchanged. Model-operation receipts, needs-decision and continuation references are exempt;
25
25
  * delivery commands (`delivery-*`, which carry a copy of the applied run's
26
26
  * params) keep their own age/cap policy and neither count nor get pruned here. */
27
27
  export declare const MAX_RETAINED_COMMAND_PARAMS_BYTES: number;
@@ -1 +1 @@
1
- {"version":3,"file":"command-retention.d.ts","sourceRoot":"","sources":["../src/command-retention.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAO7C,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,EAAE,CAEhF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,EAAE,CAWjG;AAgCD;;;;;;kFAMkF;AAClF,eAAO,MAAM,iCAAiC,QAAoB,CAAC;AAEnE;;;gFAGgF;AAChF,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,SAAS,SAAS,EAAE,EAC7B,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,EACX,cAAc,SAAoC,GACjD,MAAM,EAAE,CA0CV"}
1
+ {"version":3,"file":"command-retention.d.ts","sourceRoot":"","sources":["../src/command-retention.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQ7C,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,EAAE,CAEhF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,EAAE,CAWjG;AAoDD;;;;;;kFAMkF;AAClF,eAAO,MAAM,iCAAiC,QAAoB,CAAC;AAEnE;;;gFAGgF;AAChF,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,SAAS,SAAS,EAAE,EAC7B,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,EACX,cAAc,SAAoC,GACjD,MAAM,EAAE,CA4CV"}
@@ -1,4 +1,5 @@
1
- import { CommandListQuery, directDelegatedChildrenFromRecords, isModelOperation, } from "@claudexor/schema";
1
+ import { retainedEnvelopeOfRun } from "@claudexor/workspace";
2
+ import { CommandListQuery, continuedRunOf, directDelegatedChildrenFromRecords, isModelOperation, } from "@claudexor/schema";
2
3
  export function productCommandRecords(records) {
3
4
  return records.filter((record) => !isDeliveryCommand(record) && !isModelOperation(record.params));
4
5
  }
@@ -57,11 +58,24 @@ function isNeedsDecision(record) {
57
58
  return false;
58
59
  return facts.review === "blocked" || facts.checks === "failed";
59
60
  }
61
+ /** Pure exemptions: keep custody addressable and claims while their predecessor is retained.
62
+ * The input is the current kept set; if a predecessor is removed in this pass,
63
+ * its successor becomes eligible on the next pass. No lifetime is invented. */
64
+ function continuationExemptions(records) {
65
+ const identities = new Set(records.flatMap((record) => [record.id, ...(record.runId ? [record.runId] : [])]));
66
+ return new Set(records
67
+ .filter((record) => {
68
+ const predecessor = continuedRunOf(record.params);
69
+ return ((predecessor !== null && identities.has(predecessor)) ||
70
+ !!(record.runDir && record.runId && retainedEnvelopeOfRun(record.runDir, record.runId)));
71
+ })
72
+ .map((record) => record.id));
73
+ }
60
74
  /** Cap on the serialized `params` bytes retained across terminal product
61
75
  * commands (journal sprint owner decision D3, release 1). Prompts stay inline
62
76
  * in the command journal, so once their sum passes this bound the OLDEST
63
77
  * terminal product commands are pruned regardless of age; the 500/30-day rule
64
- * is unchanged. Model-operation receipts and needs-decision runs are exempt;
78
+ * is unchanged. Model-operation receipts, needs-decision and continuation references are exempt;
65
79
  * delivery commands (`delivery-*`, which carry a copy of the applied run's
66
80
  * params) keep their own age/cap policy and neither count nor get pruned here. */
67
81
  export const MAX_RETAINED_COMMAND_PARAMS_BYTES = 256 * 1024 * 1024;
@@ -77,10 +91,12 @@ export function prunableCommandIds(records, cap, retentionMs, now, maxParamsByte
77
91
  .filter((record) => !isModelOperation(record.params) && !["running", "queued"].includes(record.state))
78
92
  .sort((a, b) => (a.createdAt < b.createdAt ? -1 : 1));
79
93
  const pruned = new Set();
94
+ const continuation = continuationExemptions(records);
95
+ const exempt = (record) => isNeedsDecision(record) || continuation.has(record.id);
80
96
  if (terminal.length > cap) {
81
97
  for (const record of terminal
82
98
  .filter((record) => {
83
- if (isNeedsDecision(record))
99
+ if (exempt(record))
84
100
  return false;
85
101
  const settledAt = Date.parse(record.finishedAt ?? "");
86
102
  return Number.isFinite(settledAt) && now - settledAt >= retentionMs;
@@ -97,7 +113,7 @@ export function prunableCommandIds(records, cap, retentionMs, now, maxParamsByte
97
113
  let bytes = 0;
98
114
  const sizes = new Map();
99
115
  for (const record of terminal) {
100
- if (pruned.has(record.id) || isNeedsDecision(record) || isDeliveryCommand(record))
116
+ if (pruned.has(record.id) || exempt(record) || isDeliveryCommand(record))
101
117
  continue;
102
118
  const size = paramsBytes(record);
103
119
  sizes.set(record.id, size);
@@ -1 +1 @@
1
- {"version":3,"file":"command-retention.js","sourceRoot":"","sources":["../src/command-retention.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command-retention.js","sourceRoot":"","sources":["../src/command-retention.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { JobRecord } from "./job-record.js";
2
+ /**
3
+ * Daemon-atomic admission of a `continueFrom` successor (INTERFACES §1). It
4
+ * runs synchronously inside the enqueue RPC immediately before the command is
5
+ * accepted, so the accepted successor command IS the durable claim: journaled
6
+ * before any spawn or adoption, shared by every ingress, and replayed with the
7
+ * command store after a restart. Two concurrent requests are serialized by the
8
+ * RPC loop: exactly one is accepted, the other refused with the chain head.
9
+ */
10
+ export declare function admitContinuationRequest(request: unknown, records: readonly JobRecord[]): unknown;
11
+ //# sourceMappingURL=continuation-admission.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"continuation-admission.d.ts","sourceRoot":"","sources":["../src/continuation-admission.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,SAAS,EAAE,GAAG,OAAO,CAIjG"}
@@ -0,0 +1,16 @@
1
+ import { continuationRefusal, continuationRefusalError } from "@claudexor/schema";
2
+ /**
3
+ * Daemon-atomic admission of a `continueFrom` successor (INTERFACES §1). It
4
+ * runs synchronously inside the enqueue RPC immediately before the command is
5
+ * accepted, so the accepted successor command IS the durable claim: journaled
6
+ * before any spawn or adoption, shared by every ingress, and replayed with the
7
+ * command store after a restart. Two concurrent requests are serialized by the
8
+ * RPC loop: exactly one is accepted, the other refused with the chain head.
9
+ */
10
+ export function admitContinuationRequest(request, records) {
11
+ const refusal = continuationRefusal(request, records);
12
+ if (refusal)
13
+ throw continuationRefusalError(refusal);
14
+ return request;
15
+ }
16
+ //# sourceMappingURL=continuation-admission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"continuation-admission.js","sourceRoot":"","sources":["../src/continuation-admission.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAGlF;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAgB,EAAE,OAA6B;IACtF,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACtD,IAAI,OAAO;QAAE,MAAM,wBAAwB,CAAC,OAAO,CAAC,CAAC;IACrD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { type CredentialExecutionBinding, type CredentialExecutionSubject } from "@claudexor/core";
2
+ /** Extracted from the pre-progress ledger: one managed lifecycle for all observations. */
3
+ export declare class CredentialGeneration {
4
+ private readonly mutating;
5
+ private changes;
6
+ private everyAccountChangedAt;
7
+ private defaultChangedAt;
8
+ private accountChangedAt;
9
+ private dispatchOrder;
10
+ constructor(mutating?: (harnessId: string) => boolean);
11
+ generation(harnessId: string, profileId: string | null): number;
12
+ bind(subject: CredentialExecutionSubject, startedAt?: string): CredentialExecutionBinding;
13
+ current(binding: CredentialExecutionBinding): boolean;
14
+ noteCredentialChange(): void;
15
+ clearSubject(harnessId: string, profileId: string | null): void;
16
+ clearDefaultSubjects(): void;
17
+ }
18
+ //# sourceMappingURL=credential-generation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-generation.d.ts","sourceRoot":"","sources":["../src/credential-generation.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAChC,MAAM,iBAAiB,CAAC;AAEzB,0FAA0F;AAC1F,qBAAa,oBAAoB;IAQ7B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAP3B,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,qBAAqB,CAAK;IAClC,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,gBAAgB,CAA6B;IACrD,OAAO,CAAC,aAAa,CAAK;IAE1B,YACmB,QAAQ,GAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAsC,EACtF;IAEJ,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAO9D;IAED,IAAI,CACF,OAAO,EAAE,0BAA0B,EACnC,SAAS,SAA2B,GACnC,0BAA0B,CAO5B;IAED,OAAO,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAIpD;IAED,oBAAoB,IAAI,IAAI,CAG3B;IAED,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAE9D;IAED,oBAAoB,IAAI,IAAI,CAE3B;CACF"}
@@ -0,0 +1,43 @@
1
+ import { credentialMutationWindowOpen, } from "@claudexor/core";
2
+ /** Extracted from the pre-progress ledger: one managed lifecycle for all observations. */
3
+ export class CredentialGeneration {
4
+ mutating;
5
+ changes = 0;
6
+ everyAccountChangedAt = 0;
7
+ defaultChangedAt = 0;
8
+ accountChangedAt = new Map();
9
+ dispatchOrder = 0;
10
+ constructor(mutating = credentialMutationWindowOpen) {
11
+ this.mutating = mutating;
12
+ }
13
+ generation(harnessId, profileId) {
14
+ if (this.mutating(harnessId))
15
+ return Number.NaN;
16
+ return Math.max(this.everyAccountChangedAt, profileId === null ? this.defaultChangedAt : 0, this.accountChangedAt.get(key(harnessId, profileId)) ?? 0);
17
+ }
18
+ bind(subject, startedAt = new Date().toISOString()) {
19
+ return {
20
+ subject,
21
+ generation: this.generation(subject.harnessId, subject.profileId),
22
+ order: ++this.dispatchOrder,
23
+ startedAt,
24
+ };
25
+ }
26
+ current(binding) {
27
+ return (this.generation(binding.subject.harnessId, binding.subject.profileId) === binding.generation);
28
+ }
29
+ noteCredentialChange() {
30
+ this.accountChangedAt.clear();
31
+ this.everyAccountChangedAt = ++this.changes;
32
+ }
33
+ clearSubject(harnessId, profileId) {
34
+ this.accountChangedAt.set(key(harnessId, profileId), ++this.changes);
35
+ }
36
+ clearDefaultSubjects() {
37
+ this.defaultChangedAt = ++this.changes;
38
+ }
39
+ }
40
+ function key(harnessId, profileId) {
41
+ return `${harnessId}\0${profileId ?? "\u0001"}`;
42
+ }
43
+ //# sourceMappingURL=credential-generation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-generation.js","sourceRoot":"","sources":["../src/credential-generation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,GAG7B,MAAM,iBAAiB,CAAC;AAEzB,0FAA0F;AAC1F,MAAM,OAAO,oBAAoB;IAQZ,QAAQ;IAPnB,OAAO,GAAG,CAAC,CAAC;IACZ,qBAAqB,GAAG,CAAC,CAAC;IAC1B,gBAAgB,GAAG,CAAC,CAAC;IACrB,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,aAAa,GAAG,CAAC,CAAC;IAE1B,YACmB,QAAQ,GAAmC,4BAA4B;wBAAvE,QAAQ;IACxB,CAAC;IAEJ,UAAU,CAAC,SAAiB,EAAE,SAAwB;QACpD,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC;QAChD,OAAO,IAAI,CAAC,GAAG,CACb,IAAI,CAAC,qBAAqB,EAC1B,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAC9C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,CAC1D,CAAC;IACJ,CAAC;IAED,IAAI,CACF,OAAmC,EACnC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAEpC,OAAO;YACL,OAAO;YACP,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC;YACjE,KAAK,EAAE,EAAE,IAAI,CAAC,aAAa;YAC3B,SAAS;SACV,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,OAAmC;QACzC,OAAO,CACL,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,UAAU,CAC7F,CAAC;IACJ,CAAC;IAED,oBAAoB;QAClB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,qBAAqB,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC;IAC9C,CAAC;IAED,YAAY,CAAC,SAAiB,EAAE,SAAwB;QACtD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACvE,CAAC;IAED,oBAAoB;QAClB,IAAI,CAAC,gBAAgB,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC;IACzC,CAAC;CACF;AAED,SAAS,GAAG,CAAC,SAAiB,EAAE,SAAwB;IACtD,OAAO,GAAG,SAAS,KAAK,SAAS,IAAI,QAAQ,EAAE,CAAC;AAClD,CAAC"}
@@ -1,20 +1,19 @@
1
- import type { CredentialUnusableObservation, HarnessEvent } from "@claudexor/schema";
1
+ import { type CredentialEvidenceAuthority, type CredentialExecutionBinding, type CredentialExecutionSubject, type CredentialHonoredObservation } from "@claudexor/core";
2
+ import type { CredentialUnusableObservation } from "@claudexor/schema";
3
+ import { CredentialGeneration } from "./credential-generation.js";
2
4
  /**
3
5
  * The daemon's bounded, self-expiring memory of typed `credential_unusable`
4
6
  * observations (A7): "this credential is DEAD, not quota-spent".
5
7
  *
6
- * Deliberately IN-MEMORY, never journaled: profile readiness is non-durable by
7
- * contract (the doctor's projection), the quota poller re-derives vendor
8
- * rejections within a poll cycle after a restart, and a restart usually
9
- * follows exactly the re-login that heals a dead credential — journaling would
10
- * buy rollback-compat risk to preserve evidence that expires anyway. The
11
- * `QuotaAbsence` channel is unsuitable on purpose: the registry hides an
12
- * absence while ANY live snapshot covers the subject, which is exactly how a
13
- * dead credential with a lingering cooldown snapshot would vanish.
8
+ * Only independent attempt/local failures are stored. Poller rejections already
9
+ * live in the quota registry; duplicating them here would outlive its recovery.
10
+ * Current decision events may still carry vendor_poller provenance.
14
11
  *
15
12
  * Clearing contract (all three, per the design roast):
16
13
  * 1. self-expiry — every row carries `expires_at`, clamped to 24h max;
17
- * 2. a successful model response for the same subject (`observeEvent`);
14
+ * 2. a covering dispatch-bound successful model response hides the live
15
+ * verdict; its bounded negative witnesses remain until expiry, generation
16
+ * clearing or memory eviction so concurrent refusals keep both boundaries;
18
17
  * 3. a credential-generation change voids the verdicts about the changed
19
18
  * generation: a login/logout clears the WHOLE ledger
20
19
  * (`noteCredentialChange`, wired in claudexord's setup lifecycle), while a
@@ -28,24 +27,29 @@ import type { CredentialUnusableObservation, HarnessEvent } from "@claudexor/sch
28
27
  * credential store (the daemon's setup-lifecycle window, #363): it would be
29
28
  * about a credential in flux, and the window's close clears the ledger.
30
29
  */
31
- export declare class CredentialUnusableLedger {
30
+ export declare class CredentialUnusableLedger implements CredentialEvidenceAuthority {
32
31
  private readonly now;
33
32
  private readonly mutating;
33
+ readonly credentials: CredentialGeneration;
34
34
  private rows;
35
- constructor(now?: () => Date, mutating?: (harnessId: string) => boolean);
35
+ private orders;
36
+ private successes;
37
+ constructor(now?: () => Date, mutating?: (harnessId: string) => boolean, credentials?: CredentialGeneration);
38
+ bind(subject: CredentialExecutionSubject): CredentialExecutionBinding;
39
+ current(binding: CredentialExecutionBinding): boolean;
40
+ recordBound(binding: CredentialExecutionBinding, value: CredentialUnusableObservation): void;
41
+ /** A dispatch cannot heal an observation from a newer concurrent dispatch. */
42
+ honorBound(binding: CredentialExecutionBinding, observedModel: string | null, observedAt?: string): void;
36
43
  /** Validate, clamp to the TTL bound, newest-wins per (subject, model). */
37
44
  record(value: CredentialUnusableObservation): void;
38
- /** Every un-expired observation (the read side of the orchestrator deps). */
45
+ private store;
46
+ /** Unhealed observations; hidden witnesses keep their bounds until expiry. */
39
47
  live(): readonly CredentialUnusableObservation[];
40
- /**
41
- * Success telemetry (wired where usage events already flow): a usage event
42
- * with served tokens proves the vendor honored this subject's credential,
43
- * so its credential-wide observations are stale. A model-SCOPED entitlement
44
- * observation clears only when the event's observed model matches exactly —
45
- * vendor display labels are not slugs, so an unprovable match honestly
46
- * leaves the row to its short TTL or a generation change.
47
- */
48
- observeEvent(harnessId: string, event: HarnessEvent): void;
48
+ honored(): readonly CredentialHonoredObservation[];
49
+ /** Exported proof obeys the same scope/order checks as row clearing. */
50
+ private refusesPositive;
51
+ private covers;
52
+ private positivePoints;
49
53
  /** Credential generation changed wholesale (login/logout): every verdict
50
54
  * about the old generation is void. */
51
55
  noteCredentialChange(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"credential-unusable-ledger.d.ts","sourceRoot":"","sources":["../src/credential-unusable-ledger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,6BAA6B,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAQrF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,wBAAwB;IAIjC,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAJ3B,OAAO,CAAC,IAAI,CAAoD;IAEhE,YACmB,GAAG,GAAE,MAAM,IAAuB,EAClC,QAAQ,GAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAsC,EACtF;IAEJ,0EAA0E;IAC1E,MAAM,CAAC,KAAK,EAAE,6BAA6B,GAAG,IAAI,CAgBjD;IAED,6EAA6E;IAC7E,IAAI,IAAI,SAAS,6BAA6B,EAAE,CAG/C;IAED;;;;;;;OAOG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CASzD;IAED;2CACuC;IACvC,oBAAoB,IAAI,IAAI,CAE3B;IAED;;2DAEuD;IACvD,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAI9D;IAED;;;yEAGqE;IACrE,oBAAoB,IAAI,IAAI,CAI3B;IAED,OAAO,CAAC,KAAK;CAOd"}
1
+ {"version":3,"file":"credential-unusable-ledger.d.ts","sourceRoot":"","sources":["../src/credential-unusable-ledger.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EAClC,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AAEvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAclE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,wBAAyB,YAAW,2BAA2B;IAMxE,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,QAAQ,CAAC,WAAW,EAAE,oBAAoB;IAP5C,OAAO,CAAC,IAAI,CAAoD;IAChE,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,SAAS,CAAgC;IAEjD,YACmB,GAAG,GAAE,MAAM,IAAuB,EAClC,QAAQ,GAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAsC,EAC/E,WAAW,GAAE,oBAAyD,EAC7E;IAEJ,IAAI,CAAC,OAAO,EAAE,0BAA0B,GAAG,0BAA0B,CAEpE;IAED,OAAO,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAEpD;IAED,WAAW,CAAC,OAAO,EAAE,0BAA0B,EAAE,KAAK,EAAE,6BAA6B,GAAG,IAAI,CAe3F;IAED,8EAA8E;IAC9E,UAAU,CACR,OAAO,EAAE,0BAA0B,EACnC,aAAa,EAAE,MAAM,GAAG,IAAI,EAC5B,UAAU,SAA2B,GACpC,IAAI,CAmDN;IAED,0EAA0E;IAC1E,MAAM,CAAC,KAAK,EAAE,6BAA6B,GAAG,IAAI,CAQjD;IAED,OAAO,CAAC,KAAK;IA6Bb,8EAA8E;IAC9E,IAAI,IAAI,SAAS,6BAA6B,EAAE,CAM/C;IAED,OAAO,IAAI,SAAS,4BAA4B,EAAE,CAajD;IAED,wEAAwE;IACxE,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,cAAc;IAItB;2CACuC;IACvC,oBAAoB,IAAI,IAAI,CAK3B;IAED;;2DAEuD;IACvD,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAU9D;IAED;;;yEAGqE;IACrE,oBAAoB,IAAI,IAAI,CAS3B;IAED,OAAO,CAAC,KAAK;CAed"}
@@ -1,5 +1,6 @@
1
- import { credentialMutationWindowOpen } from "@claudexor/core";
1
+ import { credentialMutationWindowOpen, } from "@claudexor/core";
2
2
  import { CredentialUnusableObservation as CredentialUnusableObservationSchema } from "@claudexor/schema";
3
+ import { CredentialGeneration } from "./credential-generation.js";
3
4
  /** No observation may outlive this bound, whatever its producer asked for. */
4
5
  const MAX_TTL_MS = 24 * 60 * 60_000;
5
6
  /** Bounded memory: the ledger holds evidence, not history. */
@@ -8,18 +9,15 @@ const MAX_ROWS = 64;
8
9
  * The daemon's bounded, self-expiring memory of typed `credential_unusable`
9
10
  * observations (A7): "this credential is DEAD, not quota-spent".
10
11
  *
11
- * Deliberately IN-MEMORY, never journaled: profile readiness is non-durable by
12
- * contract (the doctor's projection), the quota poller re-derives vendor
13
- * rejections within a poll cycle after a restart, and a restart usually
14
- * follows exactly the re-login that heals a dead credential — journaling would
15
- * buy rollback-compat risk to preserve evidence that expires anyway. The
16
- * `QuotaAbsence` channel is unsuitable on purpose: the registry hides an
17
- * absence while ANY live snapshot covers the subject, which is exactly how a
18
- * dead credential with a lingering cooldown snapshot would vanish.
12
+ * Only independent attempt/local failures are stored. Poller rejections already
13
+ * live in the quota registry; duplicating them here would outlive its recovery.
14
+ * Current decision events may still carry vendor_poller provenance.
19
15
  *
20
16
  * Clearing contract (all three, per the design roast):
21
17
  * 1. self-expiry — every row carries `expires_at`, clamped to 24h max;
22
- * 2. a successful model response for the same subject (`observeEvent`);
18
+ * 2. a covering dispatch-bound successful model response hides the live
19
+ * verdict; its bounded negative witnesses remain until expiry, generation
20
+ * clearing or memory eviction so concurrent refusals keep both boundaries;
23
21
  * 3. a credential-generation change voids the verdicts about the changed
24
22
  * generation: a login/logout clears the WHOLE ledger
25
23
  * (`noteCredentialChange`, wired in claudexord's setup lifecycle), while a
@@ -36,14 +34,105 @@ const MAX_ROWS = 64;
36
34
  export class CredentialUnusableLedger {
37
35
  now;
38
36
  mutating;
37
+ credentials;
39
38
  rows = new Map();
40
- constructor(now = () => new Date(), mutating = credentialMutationWindowOpen) {
39
+ orders = new Map();
40
+ successes = new Map();
41
+ constructor(now = () => new Date(), mutating = credentialMutationWindowOpen, credentials = new CredentialGeneration(mutating)) {
41
42
  this.now = now;
42
43
  this.mutating = mutating;
44
+ this.credentials = credentials;
45
+ }
46
+ bind(subject) {
47
+ return this.credentials.bind(subject, this.now().toISOString());
48
+ }
49
+ current(binding) {
50
+ return this.credentials.current(binding);
51
+ }
52
+ recordBound(binding, value) {
53
+ if (!this.current(binding))
54
+ return;
55
+ if (value.harness_id !== binding.subject.harnessId ||
56
+ value.profile_id !== binding.subject.profileId)
57
+ return;
58
+ if (value.credential_route !== undefined &&
59
+ binding.subject.route !== null &&
60
+ value.credential_route !== binding.subject.route)
61
+ return;
62
+ // Even a healed prefix contributes to a later concurrent refusal's bounds.
63
+ this.store(value, binding.order);
64
+ }
65
+ /** A dispatch cannot heal an observation from a newer concurrent dispatch. */
66
+ honorBound(binding, observedModel, observedAt = this.now().toISOString()) {
67
+ if (!this.current(binding))
68
+ return;
69
+ const observedTime = Date.parse(observedAt);
70
+ if (!Number.isFinite(observedTime))
71
+ return;
72
+ // A cached result predating dispatch proves no current-generation contact.
73
+ if (observedTime < Date.parse(binding.startedAt))
74
+ return;
75
+ this.prune();
76
+ for (const model of observedModel === null ? [null] : [null, observedModel]) {
77
+ const k = key({
78
+ harness_id: binding.subject.harnessId,
79
+ profile_id: binding.subject.profileId,
80
+ credential_route: binding.subject.route ?? undefined,
81
+ model,
82
+ });
83
+ const point = {
84
+ binding,
85
+ observation: {
86
+ harness_id: binding.subject.harnessId,
87
+ profile_id: binding.subject.profileId,
88
+ credential_route: binding.subject.route,
89
+ model,
90
+ observed_at: observedAt,
91
+ },
92
+ order: binding.order,
93
+ expires: this.now().getTime() + MAX_TTL_MS,
94
+ };
95
+ const previous = this.successes.get(k) ?? [];
96
+ if (previous.some((item) => dominates(item, point)))
97
+ continue;
98
+ // Keep real incomparable contacts, never a synthetic order/time maximum.
99
+ this.successes.set(k, [...previous.filter((item) => !dominates(point, item)), point]);
100
+ }
101
+ // Count points, not keys: a single subject can have incomparable contacts.
102
+ while (this.positivePoints().length > MAX_ROWS) {
103
+ const oldest = [...this.successes.entries()]
104
+ .flatMap(([k, points]) => points.map((point) => ({ k, point })))
105
+ .reduce((a, b) => (a.point.expires <= b.point.expires ? a : b));
106
+ const remaining = this.positivePoints().filter((point) => point !== oldest.point);
107
+ for (const [k, refusal] of this.rows) {
108
+ if (this.covers(k, refusal, oldest.point) &&
109
+ !remaining.some((point) => this.covers(k, refusal, point))) {
110
+ // Forgetting recovery proof must not resurrect an already-healed refusal.
111
+ this.rows.delete(k);
112
+ this.orders.delete(k);
113
+ }
114
+ }
115
+ const retained = this.successes.get(oldest.k).filter((point) => point !== oldest.point);
116
+ if (retained.length)
117
+ this.successes.set(oldest.k, retained);
118
+ else
119
+ this.successes.delete(oldest.k);
120
+ }
43
121
  }
44
122
  /** Validate, clamp to the TTL bound, newest-wins per (subject, model). */
45
123
  record(value) {
124
+ const binding = this.bind({
125
+ harnessId: value.harness_id,
126
+ profileId: value.profile_id,
127
+ route: value.credential_route ?? null,
128
+ requestedModel: value.model,
129
+ });
130
+ this.recordBound(binding, value);
131
+ }
132
+ store(value, order) {
46
133
  const obs = CredentialUnusableObservationSchema.parse(value);
134
+ if (obs.source === "vendor_poller")
135
+ return;
47
136
  if (this.mutating(obs.harness_id))
48
137
  return;
49
138
  const observed = Date.parse(obs.observed_at);
@@ -56,70 +145,121 @@ export class CredentialUnusableLedger {
56
145
  // Bounded: drop the earliest-expiring row rather than refusing evidence.
57
146
  const earliest = [...this.rows.entries()].reduce((a, b) => Date.parse(a[1].expires_at) <= Date.parse(b[1].expires_at) ? a : b);
58
147
  this.rows.delete(earliest[0]);
148
+ this.orders.delete(earliest[0]);
59
149
  }
60
- this.rows.set(key(obs), { ...obs, expires_at: new Date(expires).toISOString() });
150
+ const k = key(obs);
151
+ const previous = this.rows.get(k);
152
+ const previousTime = previous ? Date.parse(previous.observed_at) : -Infinity;
153
+ const previousOrder = this.orders.get(k) ?? order;
154
+ // A delayed completion cannot lower either independent negative boundary.
155
+ // Provenance and expiry belong to the latest actual observation, not arrival.
156
+ // Preserve the prior equal-time provenance against an older dispatch.
157
+ if (observed > previousTime || (observed === previousTime && order >= previousOrder))
158
+ this.rows.set(k, { ...obs, expires_at: new Date(expires).toISOString() });
159
+ this.orders.set(k, Math.max(previousOrder, order));
61
160
  }
62
- /** Every un-expired observation (the read side of the orchestrator deps). */
161
+ /** Unhealed observations; hidden witnesses keep their bounds until expiry. */
63
162
  live() {
64
163
  this.prune();
65
- return [...this.rows.values()];
66
- }
67
- /**
68
- * Success telemetry (wired where usage events already flow): a usage event
69
- * with served tokens proves the vendor honored this subject's credential,
70
- * so its credential-wide observations are stale. A model-SCOPED entitlement
71
- * observation clears only when the event's observed model matches exactly —
72
- * vendor display labels are not slugs, so an unprovable match honestly
73
- * leaves the row to its short TTL or a generation change.
74
- */
75
- observeEvent(harnessId, event) {
76
- if (event.type !== "usage")
77
- return;
78
- const served = (event.usage?.input_tokens ?? 0) > 0 || (event.usage?.output_tokens ?? 0) > 0;
79
- if (!served)
80
- return;
81
- const profileId = event.credential_profile_id ?? null;
82
- for (const [k, obs] of this.rows) {
83
- if (obs.harness_id !== harnessId || obs.profile_id !== profileId)
164
+ const positives = this.positivePoints();
165
+ return [...this.rows.entries()]
166
+ .filter(([k, obs]) => !positives.some((point) => this.covers(k, obs, point)))
167
+ .map(([, obs]) => obs);
168
+ }
169
+ honored() {
170
+ this.prune();
171
+ return this.positivePoints()
172
+ .filter((entry) => this.current(entry.binding) &&
173
+ !this.refusesPositive(entry.binding, entry.observation.model, Date.parse(entry.observation.observed_at)))
174
+ .map((entry) => ({ ...entry.observation }));
175
+ }
176
+ /** Exported proof obeys the same scope/order checks as row clearing. */
177
+ refusesPositive(binding, model, observedTime) {
178
+ for (const [k, refusal] of this.rows) {
179
+ if (!matches(refusal, binding.subject, model))
84
180
  continue;
85
- if (obs.model === null || obs.model === (event.observed_model ?? null))
86
- this.rows.delete(k);
181
+ if ((this.orders.get(k) ?? Infinity) > binding.order ||
182
+ Date.parse(refusal.observed_at) > observedTime)
183
+ return true;
87
184
  }
185
+ return false;
186
+ }
187
+ covers(k, refusal, point) {
188
+ return (matches(refusal, point.binding.subject, point.observation.model) &&
189
+ (this.orders.get(k) ?? Infinity) <= point.order &&
190
+ Date.parse(refusal.observed_at) <= Date.parse(point.observation.observed_at));
191
+ }
192
+ positivePoints() {
193
+ return [...this.successes.values()].flat();
88
194
  }
89
195
  /** Credential generation changed wholesale (login/logout): every verdict
90
196
  * about the old generation is void. */
91
197
  noteCredentialChange() {
92
198
  this.rows.clear();
199
+ this.orders.clear();
200
+ this.successes.clear();
201
+ this.credentials.noteCredentialChange();
93
202
  }
94
203
  /** ONE subject's credential changed (a control-API profile or profile-secret
95
204
  * mutation): only ITS verdicts are void, across every model scope.
96
205
  * `profileId` null = the harness's default subject. */
97
206
  clearSubject(harnessId, profileId) {
207
+ for (const k of this.successes.keys())
208
+ if (k.startsWith([harnessId, profileId ?? "", ""].join("\0")))
209
+ this.successes.delete(k);
98
210
  for (const [k, obs] of this.rows) {
99
- if (obs.harness_id === harnessId && obs.profile_id === profileId)
211
+ if (obs.harness_id === harnessId && obs.profile_id === profileId) {
100
212
  this.rows.delete(k);
213
+ this.orders.delete(k);
214
+ }
101
215
  }
216
+ this.credentials.clearSubject(harnessId, profileId);
102
217
  }
103
218
  /** A bare managed secret name changed an engine-DEFAULT credential slot.
104
219
  * WHICH harness reads that slot is adapter knowledge the daemon does not
105
220
  * duplicate, so every default subject's verdicts are voided — fail-open by
106
221
  * the clearing contract (costs at most one rediscovered refusal). */
107
222
  clearDefaultSubjects() {
223
+ this.credentials.clearDefaultSubjects();
224
+ for (const k of this.successes.keys())
225
+ if (k.split("\0")[1] === "")
226
+ this.successes.delete(k);
108
227
  for (const [k, obs] of this.rows) {
109
- if (obs.profile_id === null)
228
+ if (obs.profile_id === null) {
110
229
  this.rows.delete(k);
230
+ this.orders.delete(k);
231
+ }
111
232
  }
112
233
  }
113
234
  prune() {
114
235
  const now = this.now().getTime();
236
+ for (const [k, points] of this.successes) {
237
+ const retained = points.filter((point) => point.expires > now && this.current(point.binding));
238
+ if (retained.length)
239
+ this.successes.set(k, retained);
240
+ else
241
+ this.successes.delete(k);
242
+ }
115
243
  for (const [k, obs] of this.rows) {
116
244
  const expires = Date.parse(obs.expires_at);
117
- if (!Number.isFinite(expires) || expires <= now)
245
+ if (!Number.isFinite(expires) || expires <= now) {
118
246
  this.rows.delete(k);
247
+ this.orders.delete(k);
248
+ }
119
249
  }
120
250
  }
121
251
  }
252
+ function matches(refusal, subject, model) {
253
+ return (refusal.harness_id === subject.harnessId &&
254
+ refusal.profile_id === subject.profileId &&
255
+ (refusal.credential_route === undefined || refusal.credential_route === subject.route) &&
256
+ (refusal.model === null || refusal.model === model));
257
+ }
258
+ function dominates(left, right) {
259
+ return (left.order >= right.order &&
260
+ Date.parse(left.observation.observed_at) >= Date.parse(right.observation.observed_at));
261
+ }
122
262
  function key(obs) {
123
- return [obs.harness_id, obs.profile_id ?? "", obs.model ?? ""].join("\0");
263
+ return [obs.harness_id, obs.profile_id ?? "", obs.credential_route ?? "", obs.model ?? ""].join("\0");
124
264
  }
125
265
  //# sourceMappingURL=credential-unusable-ledger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"credential-unusable-ledger.js","sourceRoot":"","sources":["../src/credential-unusable-ledger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"credential-unusable-ledger.js","sourceRoot":"","sources":["../src/credential-unusable-ledger.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,GAK7B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,6BAA6B,IAAI,mCAAmC,EAAE,MAAM,mBAAmB,CAAC;AACzG,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,8EAA8E;AAC9E,MAAM,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;AACpC,8DAA8D;AAC9D,MAAM,QAAQ,GAAG,EAAE,CAAC;AASpB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,OAAO,wBAAwB;IAMhB,GAAG;IACH,QAAQ;IAChB,WAAW;IAPd,IAAI,GAAG,IAAI,GAAG,EAAyC,CAAC;IACxD,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACnC,SAAS,GAAG,IAAI,GAAG,EAAqB,CAAC;IAEjD,YACmB,GAAG,GAAe,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,EAClC,QAAQ,GAAmC,4BAA4B,EAC/E,WAAW,GAAyB,IAAI,oBAAoB,CAAC,QAAQ,CAAC;mBAF9D,GAAG;wBACH,QAAQ;2BAChB,WAAW;IACnB,CAAC;IAEJ,IAAI,CAAC,OAAmC;QACtC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,CAAC,OAAmC;QACzC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,WAAW,CAAC,OAAmC,EAAE,KAAoC;QACnF,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,OAAO;QACnC,IACE,KAAK,CAAC,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,SAAS;YAC9C,KAAK,CAAC,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,SAAS;YAE9C,OAAO;QACT,IACE,KAAK,CAAC,gBAAgB,KAAK,SAAS;YACpC,OAAO,CAAC,OAAO,CAAC,KAAK,KAAK,IAAI;YAC9B,KAAK,CAAC,gBAAgB,KAAK,OAAO,CAAC,OAAO,CAAC,KAAK;YAEhD,OAAO;QACT,2EAA2E;QAC3E,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,8EAA8E;IAC9E,UAAU,CACR,OAAmC,EACnC,aAA4B,EAC5B,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QAErC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,OAAO;QACnC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;YAAE,OAAO;QAC3C,2EAA2E;QAC3E,IAAI,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;YAAE,OAAO;QACzD,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,KAAK,MAAM,KAAK,IAAI,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC;YAC5E,MAAM,CAAC,GAAG,GAAG,CAAC;gBACZ,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS;gBACrC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS;gBACrC,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,SAAS;gBACpD,KAAK;aACN,CAAC,CAAC;YACH,MAAM,KAAK,GAAY;gBACrB,OAAO;gBACP,WAAW,EAAE;oBACX,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS;oBACrC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS;oBACrC,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK;oBACvC,KAAK;oBACL,WAAW,EAAE,UAAU;iBACxB;gBACD,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,UAAU;aAC3C,CAAC;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7C,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAAE,SAAS;YAC9D,yEAAyE;YACzE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QACxF,CAAC;QACD,2EAA2E;QAC3E,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;iBACzC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;iBAC/D,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClE,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;YAClF,KAAK,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACrC,IACE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;oBACrC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,EAC1D,CAAC;oBACD,0EAA0E;oBAC1E,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACpB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;YACzF,IAAI,QAAQ,CAAC,MAAM;gBAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;;gBACvD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,MAAM,CAAC,KAAoC;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;YACxB,SAAS,EAAE,KAAK,CAAC,UAAU;YAC3B,SAAS,EAAE,KAAK,CAAC,UAAU;YAC3B,KAAK,EAAE,KAAK,CAAC,gBAAgB,IAAI,IAAI;YACrC,cAAc,EAAE,KAAK,CAAC,KAAK;SAC5B,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IAEO,KAAK,CAAC,KAAoC,EAAE,KAAa;QAC/D,MAAM,GAAG,GAAG,mCAAmC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7D,IAAI,GAAG,CAAC,MAAM,KAAK,eAAe;YAAE,OAAO;QAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;YAAE,OAAO;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,UAAU,CAAC;QACvF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE;YAAE,OAAO;QACzE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC3D,yEAAyE;YACzE,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACxD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACnE,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC7E,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;QAClD,0EAA0E;QAC1E,8EAA8E;QAC9E,sEAAsE;QACtE,IAAI,QAAQ,GAAG,YAAY,IAAI,CAAC,QAAQ,KAAK,YAAY,IAAI,KAAK,IAAI,aAAa,CAAC;YAClF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,UAAU,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC5E,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,8EAA8E;IAC9E,IAAI;QACF,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;aAC5B,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;aAC5E,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,IAAI,CAAC,cAAc,EAAE;aACzB,MAAM,CACL,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;YAC3B,CAAC,IAAI,CAAC,eAAe,CACnB,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,WAAW,CAAC,KAAK,EACvB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAC1C,CACJ;aACA,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,wEAAwE;IAChE,eAAe,CACrB,OAAmC,EACnC,KAAoB,EACpB,YAAoB;QAEpB,KAAK,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACrC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;gBAAE,SAAS;YACxD,IACE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,GAAG,OAAO,CAAC,KAAK;gBAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,YAAY;gBAE9C,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,MAAM,CAAC,CAAS,EAAE,OAAsC,EAAE,KAAc;QAC9E,OAAO,CACL,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;YAChE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,KAAK;YAC/C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAC7E,CAAC;IACJ,CAAC;IAEO,cAAc;QACpB,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7C,CAAC;IAED;2CACuC;IACvC,oBAAoB;QAClB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAClB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE,CAAC;IAC1C,CAAC;IAED;;2DAEuD;IACvD,YAAY,CAAC,SAAiB,EAAE,SAAwB;QACtD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;YACnC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,SAAS,EAAE,SAAS,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1F,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBACjE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACtD,CAAC;IAED;;;yEAGqE;IACrE,oBAAoB;QAClB,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;YAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;gBAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC7F,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;gBAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QACjC,KAAK,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACzC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAC9F,IAAI,QAAQ,CAAC,MAAM;gBAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;;gBAChD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC;gBAChD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED,SAAS,OAAO,CACd,OAAsC,EACtC,OAAmC,EACnC,KAAoB;IAEpB,OAAO,CACL,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC,SAAS;QACxC,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC,SAAS;QACxC,CAAC,OAAO,CAAC,gBAAgB,KAAK,SAAS,IAAI,OAAO,CAAC,gBAAgB,KAAK,OAAO,CAAC,KAAK,CAAC;QACtF,CAAC,OAAO,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,CACpD,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,IAAa,EAAE,KAAc;IAC9C,OAAO,CACL,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK;QACzB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CACtF,CAAC;AACJ,CAAC;AAED,SAAS,GAAG,CACV,GAGC;IAED,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,EAAE,EAAE,GAAG,CAAC,gBAAgB,IAAI,EAAE,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAC7F,IAAI,CACL,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -27,6 +27,7 @@ export * from "./quota-projection.js";
27
27
  export * from "./quota-poll-lanes.js";
28
28
  export { quotaPacerFileStore } from "./quota-poll-pacer.js";
29
29
  export * from "./credential-unusable-ledger.js";
30
+ export * from "./credential-generation.js";
30
31
  export * from "./model-substitution-ledger.js";
31
32
  export * from "./pre-progress-refusal-ledger.js";
32
33
  export * from "./project-partitions.js";