@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.
- package/dist/command-retention.d.ts +1 -1
- package/dist/command-retention.d.ts.map +1 -1
- package/dist/command-retention.js +20 -4
- package/dist/command-retention.js.map +1 -1
- package/dist/continuation-admission.d.ts +11 -0
- package/dist/continuation-admission.d.ts.map +1 -0
- package/dist/continuation-admission.js +16 -0
- package/dist/continuation-admission.js.map +1 -0
- package/dist/credential-generation.d.ts +18 -0
- package/dist/credential-generation.d.ts.map +1 -0
- package/dist/credential-generation.js +43 -0
- package/dist/credential-generation.js.map +1 -0
- package/dist/credential-unusable-ledger.d.ts +26 -22
- package/dist/credential-unusable-ledger.d.ts.map +1 -1
- package/dist/credential-unusable-ledger.js +178 -38
- package/dist/credential-unusable-ledger.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/journal-fold-policy.d.ts.map +1 -1
- package/dist/journal-fold-policy.js +26 -2
- package/dist/journal-fold-policy.js.map +1 -1
- package/dist/pre-progress-refusal-ledger.d.ts +3 -6
- package/dist/pre-progress-refusal-ledger.d.ts.map +1 -1
- package/dist/pre-progress-refusal-ledger.js +7 -16
- package/dist/pre-progress-refusal-ledger.js.map +1 -1
- package/dist/project-partitions.d.ts +4 -0
- package/dist/project-partitions.d.ts.map +1 -1
- package/dist/project-partitions.js +7 -0
- package/dist/project-partitions.js.map +1 -1
- package/dist/quota-poll-lanes.d.ts +27 -9
- package/dist/quota-poll-lanes.d.ts.map +1 -1
- package/dist/quota-poll-lanes.js +95 -20
- package/dist/quota-poll-lanes.js.map +1 -1
- package/dist/quota-poll-pacer.d.ts +33 -36
- package/dist/quota-poll-pacer.d.ts.map +1 -1
- package/dist/quota-poll-pacer.js +115 -63
- package/dist/quota-poll-pacer.js.map +1 -1
- package/dist/quota-registry-support.d.ts +74 -0
- package/dist/quota-registry-support.d.ts.map +1 -1
- package/dist/quota-registry-support.js +154 -8
- package/dist/quota-registry-support.js.map +1 -1
- package/dist/quota-registry.d.ts +32 -7
- package/dist/quota-registry.d.ts.map +1 -1
- package/dist/quota-registry.js +76 -73
- package/dist/quota-registry.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -1
- package/dist/server.js.map +1 -1
- package/dist/terminal-authority.d.ts +1 -0
- package/dist/terminal-authority.d.ts.map +1 -1
- package/dist/thread-store-support.d.ts.map +1 -1
- package/dist/thread-store-support.js +10 -1
- package/dist/thread-store-support.js.map +1 -1
- package/dist/threads.d.ts +3 -1
- package/dist/threads.d.ts.map +1 -1
- package/dist/threads.js +2 -2
- package/dist/threads.js.map +1 -1
- 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
|
|
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":"
|
|
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 {
|
|
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
|
|
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 (
|
|
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) ||
|
|
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":"
|
|
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
|
|
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
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
45
|
+
private store;
|
|
46
|
+
/** Unhealed observations; hidden witnesses keep their bounds until expiry. */
|
|
39
47
|
live(): readonly CredentialUnusableObservation[];
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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":"
|
|
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
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
/**
|
|
161
|
+
/** Unhealed observations; hidden witnesses keep their bounds until expiry. */
|
|
63
162
|
live() {
|
|
64
163
|
this.prune();
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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 (
|
|
86
|
-
|
|
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":"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"}
|
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";
|