@agentplat/mesh-sim 0.3.0-beta.2 → 0.3.0-beta.4
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/README.md +447 -2
- package/dist/collective-closed-loop-action.d.ts +80 -0
- package/dist/collective-closed-loop-action.d.ts.map +1 -0
- package/dist/collective-closed-loop-action.js +471 -0
- package/dist/collective-closed-loop-action.js.map +1 -0
- package/dist/collective-closed-loop-contracts.d.ts +75 -0
- package/dist/collective-closed-loop-contracts.d.ts.map +1 -0
- package/dist/collective-closed-loop-contracts.js +420 -0
- package/dist/collective-closed-loop-contracts.js.map +1 -0
- package/dist/collective-closed-loop-fault-matrix.d.ts +101 -0
- package/dist/collective-closed-loop-fault-matrix.d.ts.map +1 -0
- package/dist/collective-closed-loop-fault-matrix.js +253 -0
- package/dist/collective-closed-loop-fault-matrix.js.map +1 -0
- package/dist/collective-closed-loop-recovery.d.ts +70 -0
- package/dist/collective-closed-loop-recovery.d.ts.map +1 -0
- package/dist/collective-closed-loop-recovery.js +823 -0
- package/dist/collective-closed-loop-recovery.js.map +1 -0
- package/dist/collective-closed-loop-reference.d.ts +54 -0
- package/dist/collective-closed-loop-reference.d.ts.map +1 -0
- package/dist/collective-closed-loop-reference.js +1696 -0
- package/dist/collective-closed-loop-reference.js.map +1 -0
- package/dist/collective-closed-loop-replanning.d.ts +27 -0
- package/dist/collective-closed-loop-replanning.d.ts.map +1 -0
- package/dist/collective-closed-loop-replanning.js +151 -0
- package/dist/collective-closed-loop-replanning.js.map +1 -0
- package/dist/collective-closed-loop-resilience-campaign.d.ts +22 -0
- package/dist/collective-closed-loop-resilience-campaign.d.ts.map +1 -0
- package/dist/collective-closed-loop-resilience-campaign.js +196 -0
- package/dist/collective-closed-loop-resilience-campaign.js.map +1 -0
- package/dist/collective-closed-loop-resilience-contracts.d.ts +138 -0
- package/dist/collective-closed-loop-resilience-contracts.d.ts.map +1 -0
- package/dist/collective-closed-loop-resilience-contracts.js +677 -0
- package/dist/collective-closed-loop-resilience-contracts.js.map +1 -0
- package/dist/collective-closed-loop-runner.d.ts +133 -0
- package/dist/collective-closed-loop-runner.d.ts.map +1 -0
- package/dist/collective-closed-loop-runner.js +1429 -0
- package/dist/collective-closed-loop-runner.js.map +1 -0
- package/dist/collective-closed-loop-runtime.d.ts +95 -0
- package/dist/collective-closed-loop-runtime.d.ts.map +1 -0
- package/dist/collective-closed-loop-runtime.js +1192 -0
- package/dist/collective-closed-loop-runtime.js.map +1 -0
- package/dist/collective-effect-provenance.d.ts +5 -0
- package/dist/collective-effect-provenance.d.ts.map +1 -0
- package/dist/collective-effect-provenance.js +32 -0
- package/dist/collective-effect-provenance.js.map +1 -0
- package/dist/collective-environment.d.ts +49 -0
- package/dist/collective-environment.d.ts.map +1 -0
- package/dist/collective-environment.js +907 -0
- package/dist/collective-environment.js.map +1 -0
- package/dist/collective-progressive-scale-overlay.d.ts +39 -0
- package/dist/collective-progressive-scale-overlay.d.ts.map +1 -0
- package/dist/collective-progressive-scale-overlay.js +147 -0
- package/dist/collective-progressive-scale-overlay.js.map +1 -0
- package/dist/collective-progressive-scale.d.ts +202 -0
- package/dist/collective-progressive-scale.d.ts.map +1 -0
- package/dist/collective-progressive-scale.js +755 -0
- package/dist/collective-progressive-scale.js.map +1 -0
- package/dist/collective-statistical-campaign-aggregation.d.ts +97 -0
- package/dist/collective-statistical-campaign-aggregation.d.ts.map +1 -0
- package/dist/collective-statistical-campaign-aggregation.js +446 -0
- package/dist/collective-statistical-campaign-aggregation.js.map +1 -0
- package/dist/collective-statistical-campaign-artifact-stream.d.ts +66 -0
- package/dist/collective-statistical-campaign-artifact-stream.d.ts.map +1 -0
- package/dist/collective-statistical-campaign-artifact-stream.js +207 -0
- package/dist/collective-statistical-campaign-artifact-stream.js.map +1 -0
- package/dist/collective-statistical-campaign-bundle.d.ts +151 -0
- package/dist/collective-statistical-campaign-bundle.d.ts.map +1 -0
- package/dist/collective-statistical-campaign-bundle.js +885 -0
- package/dist/collective-statistical-campaign-bundle.js.map +1 -0
- package/dist/collective-statistical-campaign-executor.d.ts +131 -0
- package/dist/collective-statistical-campaign-executor.d.ts.map +1 -0
- package/dist/collective-statistical-campaign-executor.js +856 -0
- package/dist/collective-statistical-campaign-executor.js.map +1 -0
- package/dist/collective-statistical-campaign-normative-analysis.d.ts +85 -0
- package/dist/collective-statistical-campaign-normative-analysis.d.ts.map +1 -0
- package/dist/collective-statistical-campaign-normative-analysis.js +483 -0
- package/dist/collective-statistical-campaign-normative-analysis.js.map +1 -0
- package/dist/collective-statistical-campaign-normative-operation.d.ts +89 -0
- package/dist/collective-statistical-campaign-normative-operation.d.ts.map +1 -0
- package/dist/collective-statistical-campaign-normative-operation.js +266 -0
- package/dist/collective-statistical-campaign-normative-operation.js.map +1 -0
- package/dist/collective-statistical-campaign-normative-registry.d.ts +24 -0
- package/dist/collective-statistical-campaign-normative-registry.d.ts.map +1 -0
- package/dist/collective-statistical-campaign-normative-registry.js +163 -0
- package/dist/collective-statistical-campaign-normative-registry.js.map +1 -0
- package/dist/collective-statistical-campaign-registered-adapter.d.ts +16 -0
- package/dist/collective-statistical-campaign-registered-adapter.d.ts.map +1 -0
- package/dist/collective-statistical-campaign-registered-adapter.js +518 -0
- package/dist/collective-statistical-campaign-registered-adapter.js.map +1 -0
- package/dist/collective-statistical-campaign-scale.d.ts +85 -0
- package/dist/collective-statistical-campaign-scale.d.ts.map +1 -0
- package/dist/collective-statistical-campaign-scale.js +349 -0
- package/dist/collective-statistical-campaign-scale.js.map +1 -0
- package/dist/collective-trace-journal.d.ts +20 -0
- package/dist/collective-trace-journal.d.ts.map +1 -0
- package/dist/collective-trace-journal.js +105 -0
- package/dist/collective-trace-journal.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -1
- package/dist/multi-domain-environment-contracts.d.ts +122 -0
- package/dist/multi-domain-environment-contracts.d.ts.map +1 -0
- package/dist/multi-domain-environment-contracts.js +14 -0
- package/dist/multi-domain-environment-contracts.js.map +1 -0
- package/dist/multi-domain-environment-runtime.d.ts +25 -0
- package/dist/multi-domain-environment-runtime.d.ts.map +1 -0
- package/dist/multi-domain-environment-runtime.js +493 -0
- package/dist/multi-domain-environment-runtime.js.map +1 -0
- package/dist/multi-domain-environment-validation.d.ts +33 -0
- package/dist/multi-domain-environment-validation.d.ts.map +1 -0
- package/dist/multi-domain-environment-validation.js +415 -0
- package/dist/multi-domain-environment-validation.js.map +1 -0
- package/dist/multi-domain-environment.d.ts +4 -0
- package/dist/multi-domain-environment.d.ts.map +1 -0
- package/dist/multi-domain-environment.js +4 -0
- package/dist/multi-domain-environment.js.map +1 -0
- package/dist/reducer-scenario.d.ts.map +1 -1
- package/dist/reducer-scenario.js +67 -19
- package/dist/reducer-scenario.js.map +1 -1
- package/dist/scalable-evaluation-contracts.d.ts +835 -0
- package/dist/scalable-evaluation-contracts.d.ts.map +1 -0
- package/dist/scalable-evaluation-contracts.js +22 -0
- package/dist/scalable-evaluation-contracts.js.map +1 -0
- package/dist/scalable-evaluation-durability.d.ts +16 -0
- package/dist/scalable-evaluation-durability.d.ts.map +1 -0
- package/dist/scalable-evaluation-durability.js +339 -0
- package/dist/scalable-evaluation-durability.js.map +1 -0
- package/dist/scalable-evaluation-evidence.d.ts +93 -0
- package/dist/scalable-evaluation-evidence.d.ts.map +1 -0
- package/dist/scalable-evaluation-evidence.js +470 -0
- package/dist/scalable-evaluation-evidence.js.map +1 -0
- package/dist/scalable-evaluation-reference-integrated.d.ts +87 -0
- package/dist/scalable-evaluation-reference-integrated.d.ts.map +1 -0
- package/dist/scalable-evaluation-reference-integrated.js +1318 -0
- package/dist/scalable-evaluation-reference-integrated.js.map +1 -0
- package/dist/scalable-evaluation-runner.d.ts +8 -0
- package/dist/scalable-evaluation-runner.d.ts.map +1 -0
- package/dist/scalable-evaluation-runner.js +1810 -0
- package/dist/scalable-evaluation-runner.js.map +1 -0
- package/dist/scalable-evaluation-runtime.d.ts +86 -0
- package/dist/scalable-evaluation-runtime.d.ts.map +1 -0
- package/dist/scalable-evaluation-runtime.js +1310 -0
- package/dist/scalable-evaluation-runtime.js.map +1 -0
- package/dist/scalable-evaluation-validation.d.ts +59 -0
- package/dist/scalable-evaluation-validation.d.ts.map +1 -0
- package/dist/scalable-evaluation-validation.js +377 -0
- package/dist/scalable-evaluation-validation.js.map +1 -0
- package/dist/scalable-evaluation.d.ts +8 -0
- package/dist/scalable-evaluation.d.ts.map +1 -0
- package/dist/scalable-evaluation.js +8 -0
- package/dist/scalable-evaluation.js.map +1 -0
- package/dist/sharded-simulation-contracts.d.ts +240 -0
- package/dist/sharded-simulation-contracts.d.ts.map +1 -0
- package/dist/sharded-simulation-contracts.js +199 -0
- package/dist/sharded-simulation-contracts.js.map +1 -0
- package/dist/sharded-simulation-runtime.d.ts +64 -0
- package/dist/sharded-simulation-runtime.d.ts.map +1 -0
- package/dist/sharded-simulation-runtime.js +755 -0
- package/dist/sharded-simulation-runtime.js.map +1 -0
- package/dist/sharded-simulation-validation.d.ts +10 -0
- package/dist/sharded-simulation-validation.d.ts.map +1 -0
- package/dist/sharded-simulation-validation.js +250 -0
- package/dist/sharded-simulation-validation.js.map +1 -0
- package/dist/sharded-simulation.d.ts +46 -0
- package/dist/sharded-simulation.d.ts.map +1 -0
- package/dist/sharded-simulation.js +32 -0
- package/dist/sharded-simulation.js.map +1 -0
- package/dist/verified-benchmark-contracts.d.ts +132 -0
- package/dist/verified-benchmark-contracts.d.ts.map +1 -0
- package/dist/verified-benchmark-contracts.js +2 -0
- package/dist/verified-benchmark-contracts.js.map +1 -0
- package/dist/verified-benchmark-runtime.d.ts +20 -0
- package/dist/verified-benchmark-runtime.d.ts.map +1 -0
- package/dist/verified-benchmark-runtime.js +199 -0
- package/dist/verified-benchmark-runtime.js.map +1 -0
- package/dist/verified-benchmark-validation.d.ts +64 -0
- package/dist/verified-benchmark-validation.d.ts.map +1 -0
- package/dist/verified-benchmark-validation.js +481 -0
- package/dist/verified-benchmark-validation.js.map +1 -0
- package/dist/verified-benchmark.d.ts +4 -0
- package/dist/verified-benchmark.d.ts.map +1 -0
- package/dist/verified-benchmark.js +4 -0
- package/dist/verified-benchmark.js.map +1 -0
- package/package.json +18 -8
|
@@ -0,0 +1,420 @@
|
|
|
1
|
+
import { deepFreezePlanning, digestPlanningJsonV1, validateMissionIntentV1, validateMissionObservationV1, validatePlanFragmentProposalV1, validatePlanSelectionPolicyV1, validatePlanViewV1, } from "@agentplat/collective-planning";
|
|
2
|
+
import { validateCollectiveEvaluationRegistrationBindingV1 } from "@agentplat/collective-planning/evaluation";
|
|
3
|
+
import { validateDelegationMandateV1 } from "@agentplat/collective-control";
|
|
4
|
+
const peerKeys = Object.freeze([
|
|
5
|
+
"schemaVersion",
|
|
6
|
+
"peerId",
|
|
7
|
+
"peerInstanceId",
|
|
8
|
+
"capabilityKeys",
|
|
9
|
+
"neighborPeerIds",
|
|
10
|
+
]);
|
|
11
|
+
const contextKeys = Object.freeze([
|
|
12
|
+
"schemaVersion",
|
|
13
|
+
"peerId",
|
|
14
|
+
"peerInstanceId",
|
|
15
|
+
"missionIntent",
|
|
16
|
+
"observations",
|
|
17
|
+
"planView",
|
|
18
|
+
"logicalTimeMs",
|
|
19
|
+
]);
|
|
20
|
+
const centralizedContextKeys = Object.freeze([
|
|
21
|
+
"schemaVersion",
|
|
22
|
+
"ownerPeerId",
|
|
23
|
+
"ownerPeerInstanceId",
|
|
24
|
+
"missionIntent",
|
|
25
|
+
"observations",
|
|
26
|
+
"logicalTimeMs",
|
|
27
|
+
]);
|
|
28
|
+
const definitionBodyKeys = Object.freeze([
|
|
29
|
+
"schemaVersion",
|
|
30
|
+
"registration",
|
|
31
|
+
"missionIntent",
|
|
32
|
+
"selectionPolicy",
|
|
33
|
+
"mandate",
|
|
34
|
+
"peers",
|
|
35
|
+
"maximumLogicalTimeMs",
|
|
36
|
+
]);
|
|
37
|
+
const definitionKeys = Object.freeze([
|
|
38
|
+
...definitionBodyKeys,
|
|
39
|
+
"definitionDigest",
|
|
40
|
+
]);
|
|
41
|
+
const runBodyKeys = Object.freeze([
|
|
42
|
+
"schemaVersion",
|
|
43
|
+
"registrationBindingDigest",
|
|
44
|
+
"runner",
|
|
45
|
+
"stopReason",
|
|
46
|
+
"finalLogicalTimeMs",
|
|
47
|
+
"planningStateRoots",
|
|
48
|
+
"meshStateRoots",
|
|
49
|
+
"governanceStateRoots",
|
|
50
|
+
"publicArtifacts",
|
|
51
|
+
]);
|
|
52
|
+
const runKeys = Object.freeze([...runBodyKeys, "runDigest"]);
|
|
53
|
+
const digestPattern = /^sha256:[0-9a-f]{64}$/u;
|
|
54
|
+
const tokenPattern = /^[A-Za-z0-9][A-Za-z0-9._:@/-]*$/u;
|
|
55
|
+
// Keep the public definition contract aligned with the closed-loop runtime and
|
|
56
|
+
// registered campaign, both of which support deterministic runs through 500
|
|
57
|
+
// peers. Neighbor validation must allow a fully connected owner at that scale.
|
|
58
|
+
const MINIMUM_PEERS = 3;
|
|
59
|
+
const MAXIMUM_PEERS = 500;
|
|
60
|
+
const MAXIMUM_NEIGHBORS = MAXIMUM_PEERS - 1;
|
|
61
|
+
function exact(value, keys, label) {
|
|
62
|
+
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
63
|
+
throw new TypeError(`${label} must be a plain object`);
|
|
64
|
+
const names = Object.getOwnPropertyNames(value).sort();
|
|
65
|
+
const expected = [...keys].sort();
|
|
66
|
+
const prototype = Object.getPrototypeOf(value);
|
|
67
|
+
if ((prototype !== Object.prototype && prototype !== null) ||
|
|
68
|
+
Object.getOwnPropertySymbols(value).length !== 0 ||
|
|
69
|
+
names.length !== expected.length ||
|
|
70
|
+
names.some((name, index) => name !== expected[index]))
|
|
71
|
+
throw new TypeError(`${label} has an invalid shape`);
|
|
72
|
+
for (const name of names) {
|
|
73
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, name);
|
|
74
|
+
if (!descriptor || !descriptor.enumerable || !("value" in descriptor))
|
|
75
|
+
throw new TypeError(`${label} must contain enumerable data properties`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function denseArray(value, label) {
|
|
79
|
+
if (!Array.isArray(value) ||
|
|
80
|
+
Object.getPrototypeOf(value) !== Array.prototype ||
|
|
81
|
+
Object.getOwnPropertySymbols(value).length !== 0 ||
|
|
82
|
+
Object.getOwnPropertyNames(value).length !== value.length + 1)
|
|
83
|
+
throw new TypeError(`${label} must be a dense array`);
|
|
84
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
85
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
|
|
86
|
+
if (!descriptor || !descriptor.enumerable || !("value" in descriptor))
|
|
87
|
+
throw new TypeError(`${label} must contain enumerable data properties`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function identifier(value, label) {
|
|
91
|
+
if (typeof value !== "string" ||
|
|
92
|
+
value.length === 0 ||
|
|
93
|
+
value.length > 256 ||
|
|
94
|
+
/[\u0000-\u001f\u007f]/u.test(value))
|
|
95
|
+
throw new TypeError(`${label} must be a bounded identifier`);
|
|
96
|
+
}
|
|
97
|
+
function token(value, label) {
|
|
98
|
+
if (typeof value !== "string" ||
|
|
99
|
+
value.length > 128 ||
|
|
100
|
+
!tokenPattern.test(value))
|
|
101
|
+
throw new TypeError(`${label} must be a bounded token`);
|
|
102
|
+
}
|
|
103
|
+
function safeInteger(value, label, minimum = 0) {
|
|
104
|
+
if (!Number.isSafeInteger(value) ||
|
|
105
|
+
value < minimum ||
|
|
106
|
+
Object.is(value, -0))
|
|
107
|
+
throw new TypeError(`${label} must be a safe integer`);
|
|
108
|
+
}
|
|
109
|
+
function digest(value, label) {
|
|
110
|
+
if (typeof value !== "string" || !digestPattern.test(value))
|
|
111
|
+
throw new TypeError(`${label} must be a digest`);
|
|
112
|
+
}
|
|
113
|
+
function sortedStrings(value, label, maximum) {
|
|
114
|
+
denseArray(value, label);
|
|
115
|
+
if (value.length > maximum)
|
|
116
|
+
throw new TypeError(`${label} is too large`);
|
|
117
|
+
const result = [];
|
|
118
|
+
let previous = null;
|
|
119
|
+
for (const item of value) {
|
|
120
|
+
token(item, label);
|
|
121
|
+
if (previous !== null && previous >= item)
|
|
122
|
+
throw new TypeError(`${label} must be sorted and unique`);
|
|
123
|
+
previous = item;
|
|
124
|
+
result.push(item);
|
|
125
|
+
}
|
|
126
|
+
return Object.freeze(result);
|
|
127
|
+
}
|
|
128
|
+
function validatePeer(value) {
|
|
129
|
+
exact(value, peerKeys, "closed-loop peer");
|
|
130
|
+
if (value.schemaVersion !== 1)
|
|
131
|
+
throw new TypeError("closed-loop peer schema is invalid");
|
|
132
|
+
identifier(value.peerId, "peerId");
|
|
133
|
+
identifier(value.peerInstanceId, "peerInstanceId");
|
|
134
|
+
const capabilityKeys = sortedStrings(value.capabilityKeys, "capabilityKeys", 256);
|
|
135
|
+
const neighborPeerIds = sortedStrings(value.neighborPeerIds, "neighborPeerIds", MAXIMUM_NEIGHBORS);
|
|
136
|
+
if (neighborPeerIds.includes(value.peerId))
|
|
137
|
+
throw new TypeError("a peer may not be its own neighbor");
|
|
138
|
+
return deepFreezePlanning({
|
|
139
|
+
schemaVersion: 1,
|
|
140
|
+
peerId: value.peerId,
|
|
141
|
+
peerInstanceId: value.peerInstanceId,
|
|
142
|
+
capabilityKeys,
|
|
143
|
+
neighborPeerIds,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
function sameStrings(left, right) {
|
|
147
|
+
return (left.length === right.length &&
|
|
148
|
+
left.every((item, index) => item === right[index]));
|
|
149
|
+
}
|
|
150
|
+
function normalizedDefinitionBody(value) {
|
|
151
|
+
if (value.schemaVersion !== 1)
|
|
152
|
+
throw new TypeError("closed-loop definition schema is invalid");
|
|
153
|
+
const registration = validateCollectiveEvaluationRegistrationBindingV1(value.registration);
|
|
154
|
+
if (registration.stratum !== "nominal")
|
|
155
|
+
throw new TypeError("closed-loop Increment 5 supports nominal runs only");
|
|
156
|
+
const missionIntent = validateMissionIntentV1(value.missionIntent);
|
|
157
|
+
const selectionPolicy = validatePlanSelectionPolicyV1(value.selectionPolicy);
|
|
158
|
+
const mandate = validateDelegationMandateV1(value.mandate);
|
|
159
|
+
denseArray(value.peers, "peers");
|
|
160
|
+
if (value.peers.length < MINIMUM_PEERS ||
|
|
161
|
+
value.peers.length > MAXIMUM_PEERS)
|
|
162
|
+
throw new TypeError("closed-loop peer count is invalid");
|
|
163
|
+
const peers = value.peers.map(validatePeer);
|
|
164
|
+
safeInteger(value.maximumLogicalTimeMs, "maximumLogicalTimeMs", 1);
|
|
165
|
+
let previousPeerKey = "";
|
|
166
|
+
const peerIds = new Set();
|
|
167
|
+
const peerInstances = new Set();
|
|
168
|
+
for (const peer of peers) {
|
|
169
|
+
const key = `${peer.peerId}\u0000${peer.peerInstanceId}`;
|
|
170
|
+
if (previousPeerKey !== "" && previousPeerKey >= key)
|
|
171
|
+
throw new TypeError("peers must be sorted and unique");
|
|
172
|
+
previousPeerKey = key;
|
|
173
|
+
if (peerIds.has(peer.peerId) || peerInstances.has(peer.peerInstanceId))
|
|
174
|
+
throw new TypeError("peer identities must be unique");
|
|
175
|
+
peerIds.add(peer.peerId);
|
|
176
|
+
peerInstances.add(peer.peerInstanceId);
|
|
177
|
+
if (peer.capabilityKeys.some((capability) => !missionIntent.permittedCapabilityKeys.includes(capability)))
|
|
178
|
+
throw new TypeError("peer capability widens the mission intent");
|
|
179
|
+
}
|
|
180
|
+
for (const peer of peers)
|
|
181
|
+
for (const neighborId of peer.neighborPeerIds) {
|
|
182
|
+
const neighbor = peers.find((candidate) => candidate.peerId === neighborId);
|
|
183
|
+
if (!neighbor || !neighbor.neighborPeerIds.includes(peer.peerId))
|
|
184
|
+
throw new TypeError("closed-loop topology must be known and symmetric");
|
|
185
|
+
}
|
|
186
|
+
const statement = mandate.statement;
|
|
187
|
+
const sortedPeerIds = [...peerIds].sort();
|
|
188
|
+
if (registration.tenantId !== missionIntent.tenantId ||
|
|
189
|
+
registration.missionIntentId !== missionIntent.missionIntentId ||
|
|
190
|
+
registration.intentRevision !== missionIntent.revision ||
|
|
191
|
+
registration.intentDigest !== missionIntent.intentDigest ||
|
|
192
|
+
missionIntent.selectionPolicyDigest !== selectionPolicy.policyDigest ||
|
|
193
|
+
missionIntent.mandateDigest !== mandate.mandateDigest ||
|
|
194
|
+
statement.tenantId !== missionIntent.tenantId ||
|
|
195
|
+
statement.policyDomainId !== missionIntent.policyDomainId ||
|
|
196
|
+
statement.objective.meshId !== missionIntent.objective.meshId ||
|
|
197
|
+
statement.objective.objectiveId !== missionIntent.objective.objectiveId ||
|
|
198
|
+
statement.objective.objectiveDocumentId !==
|
|
199
|
+
missionIntent.objective.objectiveDocumentId ||
|
|
200
|
+
missionIntent.objective.objectiveRevision <
|
|
201
|
+
statement.objective.minimumObjectiveRevision ||
|
|
202
|
+
missionIntent.objective.objectiveRevision >
|
|
203
|
+
statement.objective.maximumObjectiveRevision ||
|
|
204
|
+
statement.work.workItemIds.length !== 0 ||
|
|
205
|
+
!sameStrings(statement.subjectPeerIds, sortedPeerIds) ||
|
|
206
|
+
missionIntent.permittedCapabilityKeys.some((capability) => !statement.permittedCapabilityKeys.includes(capability)) ||
|
|
207
|
+
Date.parse(missionIntent.validFrom) < Date.parse(statement.validFrom) ||
|
|
208
|
+
Date.parse(missionIntent.validUntil) > Date.parse(statement.validUntil))
|
|
209
|
+
throw new TypeError("closed-loop definition widens or conflicts with its registered authority");
|
|
210
|
+
return deepFreezePlanning({
|
|
211
|
+
schemaVersion: 1,
|
|
212
|
+
registration,
|
|
213
|
+
missionIntent,
|
|
214
|
+
selectionPolicy,
|
|
215
|
+
mandate,
|
|
216
|
+
peers,
|
|
217
|
+
maximumLogicalTimeMs: value.maximumLogicalTimeMs,
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
export function collectiveClosedLoopDefinitionDigestV1(value) {
|
|
221
|
+
exact(value, definitionBodyKeys, "closed-loop definition body");
|
|
222
|
+
const body = normalizedDefinitionBody(value);
|
|
223
|
+
return digestPlanningJsonV1("environment-state-v1", body, {
|
|
224
|
+
maximumBytes: 67_108_864,
|
|
225
|
+
maximumDepth: 64,
|
|
226
|
+
maximumNodes: 2_000_000,
|
|
227
|
+
maximumKeysPerObject: 4_096,
|
|
228
|
+
maximumItemsPerArray: 262_144,
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
export function createCollectiveClosedLoopDefinitionV1(input) {
|
|
232
|
+
exact(input, definitionBodyKeys, "closed-loop definition input");
|
|
233
|
+
const body = normalizedDefinitionBody(input);
|
|
234
|
+
return deepFreezePlanning({
|
|
235
|
+
...body,
|
|
236
|
+
definitionDigest: collectiveClosedLoopDefinitionDigestV1(body),
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
export function validateCollectiveClosedLoopDefinitionV1(value) {
|
|
240
|
+
exact(value, definitionKeys, "closed-loop definition");
|
|
241
|
+
digest(value.definitionDigest, "definitionDigest");
|
|
242
|
+
const body = normalizedDefinitionBody(value);
|
|
243
|
+
const definitionDigest = collectiveClosedLoopDefinitionDigestV1(body);
|
|
244
|
+
if (value.definitionDigest !== definitionDigest)
|
|
245
|
+
throw new TypeError("closed-loop definition digest is invalid");
|
|
246
|
+
return deepFreezePlanning({ ...body, definitionDigest });
|
|
247
|
+
}
|
|
248
|
+
export function validateCollectivePlanningDecisionContextV1(value) {
|
|
249
|
+
exact(value, contextKeys, "planning decision context");
|
|
250
|
+
if (value.schemaVersion !== 1)
|
|
251
|
+
throw new TypeError("planning decision context schema is invalid");
|
|
252
|
+
identifier(value.peerId, "peerId");
|
|
253
|
+
identifier(value.peerInstanceId, "peerInstanceId");
|
|
254
|
+
safeInteger(value.logicalTimeMs, "logicalTimeMs");
|
|
255
|
+
const missionIntent = validateMissionIntentV1(value.missionIntent);
|
|
256
|
+
const planView = validatePlanViewV1(value.planView);
|
|
257
|
+
denseArray(value.observations, "observations");
|
|
258
|
+
const observations = value.observations.map(validateMissionObservationV1);
|
|
259
|
+
const digests = new Set();
|
|
260
|
+
for (const observation of observations) {
|
|
261
|
+
if (digests.has(observation.observationDigest) ||
|
|
262
|
+
observation.observerPeerId !== value.peerId ||
|
|
263
|
+
observation.observerInstanceId !== value.peerInstanceId ||
|
|
264
|
+
observation.missionIntentId !== missionIntent.missionIntentId ||
|
|
265
|
+
observation.intentRevision !== missionIntent.revision ||
|
|
266
|
+
observation.intentDigest !== missionIntent.intentDigest ||
|
|
267
|
+
observation.logicalTimeMs > value.logicalTimeMs)
|
|
268
|
+
throw new TypeError("planning decision observation is not peer-local");
|
|
269
|
+
digests.add(observation.observationDigest);
|
|
270
|
+
}
|
|
271
|
+
if (planView.missionIntentId !== missionIntent.missionIntentId ||
|
|
272
|
+
planView.intentRevision !== missionIntent.revision ||
|
|
273
|
+
planView.intentDigest !== missionIntent.intentDigest ||
|
|
274
|
+
planView.logicalTimeHighWaterMs > value.logicalTimeMs)
|
|
275
|
+
throw new TypeError("planning decision view is not current");
|
|
276
|
+
return deepFreezePlanning({
|
|
277
|
+
schemaVersion: 1,
|
|
278
|
+
peerId: value.peerId,
|
|
279
|
+
peerInstanceId: value.peerInstanceId,
|
|
280
|
+
missionIntent,
|
|
281
|
+
observations,
|
|
282
|
+
planView,
|
|
283
|
+
logicalTimeMs: value.logicalTimeMs,
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
export function validateCollectiveCentralizedPlanningDecisionContextV1(value) {
|
|
287
|
+
exact(value, centralizedContextKeys, "centralized planning decision context");
|
|
288
|
+
if (value.schemaVersion !== 1)
|
|
289
|
+
throw new TypeError("centralized planning decision context schema is invalid");
|
|
290
|
+
identifier(value.ownerPeerId, "ownerPeerId");
|
|
291
|
+
identifier(value.ownerPeerInstanceId, "ownerPeerInstanceId");
|
|
292
|
+
safeInteger(value.logicalTimeMs, "logicalTimeMs");
|
|
293
|
+
const missionIntent = validateMissionIntentV1(value.missionIntent);
|
|
294
|
+
denseArray(value.observations, "observations");
|
|
295
|
+
const observations = value.observations.map(validateMissionObservationV1);
|
|
296
|
+
const digests = new Set();
|
|
297
|
+
let ownerObservationFound = false;
|
|
298
|
+
for (const observation of observations) {
|
|
299
|
+
if (digests.has(observation.observationDigest) ||
|
|
300
|
+
observation.missionIntentId !== missionIntent.missionIntentId ||
|
|
301
|
+
observation.intentRevision !== missionIntent.revision ||
|
|
302
|
+
observation.intentDigest !== missionIntent.intentDigest ||
|
|
303
|
+
observation.logicalTimeMs > value.logicalTimeMs)
|
|
304
|
+
throw new TypeError("centralized planning observation is not current");
|
|
305
|
+
digests.add(observation.observationDigest);
|
|
306
|
+
if (observation.observerPeerId === value.ownerPeerId &&
|
|
307
|
+
observation.observerInstanceId === value.ownerPeerInstanceId)
|
|
308
|
+
ownerObservationFound = true;
|
|
309
|
+
}
|
|
310
|
+
if (!ownerObservationFound)
|
|
311
|
+
throw new TypeError("centralized planning owner observation is missing");
|
|
312
|
+
return deepFreezePlanning({
|
|
313
|
+
schemaVersion: 1,
|
|
314
|
+
ownerPeerId: value.ownerPeerId,
|
|
315
|
+
ownerPeerInstanceId: value.ownerPeerInstanceId,
|
|
316
|
+
missionIntent,
|
|
317
|
+
observations,
|
|
318
|
+
logicalTimeMs: value.logicalTimeMs,
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
export function validateCollectivePlanningDecisionV1(value) {
|
|
322
|
+
const kindDescriptor = value !== null && typeof value === "object"
|
|
323
|
+
? Object.getOwnPropertyDescriptor(value, "kind")
|
|
324
|
+
: undefined;
|
|
325
|
+
if (value !== null &&
|
|
326
|
+
typeof value === "object" &&
|
|
327
|
+
!Array.isArray(value) &&
|
|
328
|
+
kindDescriptor !== undefined &&
|
|
329
|
+
"value" in kindDescriptor &&
|
|
330
|
+
kindDescriptor.value === "proposal") {
|
|
331
|
+
exact(value, ["schemaVersion", "kind", "proposal"], "planning decision");
|
|
332
|
+
if (value.schemaVersion !== 1)
|
|
333
|
+
throw new TypeError("planning decision schema is invalid");
|
|
334
|
+
return deepFreezePlanning({
|
|
335
|
+
schemaVersion: 1,
|
|
336
|
+
kind: "proposal",
|
|
337
|
+
proposal: validatePlanFragmentProposalV1(value.proposal),
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
exact(value, ["schemaVersion", "kind", "reasonCode"], "planning decision");
|
|
341
|
+
if (value.schemaVersion !== 1 ||
|
|
342
|
+
(value.kind !== "challenge" && value.kind !== "abstain"))
|
|
343
|
+
throw new TypeError("planning decision kind is invalid");
|
|
344
|
+
token(value.reasonCode, "reasonCode");
|
|
345
|
+
return deepFreezePlanning({
|
|
346
|
+
schemaVersion: 1,
|
|
347
|
+
kind: value.kind,
|
|
348
|
+
reasonCode: value.reasonCode,
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
function sortedDigests(value, label) {
|
|
352
|
+
denseArray(value, label);
|
|
353
|
+
const result = [];
|
|
354
|
+
let previous = null;
|
|
355
|
+
for (const item of value) {
|
|
356
|
+
digest(item, label);
|
|
357
|
+
if (previous !== null && previous >= item)
|
|
358
|
+
throw new TypeError(`${label} must be sorted and unique`);
|
|
359
|
+
previous = item;
|
|
360
|
+
result.push(item);
|
|
361
|
+
}
|
|
362
|
+
return Object.freeze(result);
|
|
363
|
+
}
|
|
364
|
+
function normalizedRunBody(value) {
|
|
365
|
+
if (value.schemaVersion !== 1)
|
|
366
|
+
throw new TypeError("closed-loop run result schema is invalid");
|
|
367
|
+
digest(value.registrationBindingDigest, "registrationBindingDigest");
|
|
368
|
+
if (value.runner !== "adaptive_collective" &&
|
|
369
|
+
value.runner !== "centralized_planner")
|
|
370
|
+
throw new TypeError("closed-loop runner is invalid");
|
|
371
|
+
if (value.stopReason !== "plan_completed" &&
|
|
372
|
+
value.stopReason !== "hard_bound" &&
|
|
373
|
+
value.stopReason !== "interaction_limit" &&
|
|
374
|
+
value.stopReason !== "explicit_failure")
|
|
375
|
+
throw new TypeError("closed-loop stop reason is invalid");
|
|
376
|
+
safeInteger(value.finalLogicalTimeMs, "finalLogicalTimeMs");
|
|
377
|
+
const planningStateRoots = sortedDigests(value.planningStateRoots, "planningStateRoots");
|
|
378
|
+
const meshStateRoots = sortedDigests(value.meshStateRoots, "meshStateRoots");
|
|
379
|
+
const governanceStateRoots = sortedDigests(value.governanceStateRoots, "governanceStateRoots");
|
|
380
|
+
denseArray(value.publicArtifacts, "publicArtifacts");
|
|
381
|
+
digestPlanningJsonV1("environment-state-v1", {
|
|
382
|
+
publicArtifacts: value.publicArtifacts,
|
|
383
|
+
});
|
|
384
|
+
const publicArtifacts = deepFreezePlanning(structuredClone(value.publicArtifacts));
|
|
385
|
+
return deepFreezePlanning({
|
|
386
|
+
schemaVersion: 1,
|
|
387
|
+
registrationBindingDigest: value.registrationBindingDigest,
|
|
388
|
+
runner: value.runner,
|
|
389
|
+
stopReason: value.stopReason,
|
|
390
|
+
finalLogicalTimeMs: value.finalLogicalTimeMs,
|
|
391
|
+
planningStateRoots,
|
|
392
|
+
meshStateRoots,
|
|
393
|
+
governanceStateRoots,
|
|
394
|
+
publicArtifacts,
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
function runDigestV1(body) {
|
|
398
|
+
return digestPlanningJsonV1("environment-state-v1", body, {
|
|
399
|
+
maximumBytes: 67_108_864,
|
|
400
|
+
maximumDepth: 64,
|
|
401
|
+
maximumNodes: 2_000_000,
|
|
402
|
+
maximumKeysPerObject: 4_096,
|
|
403
|
+
maximumItemsPerArray: 262_144,
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
export function createCollectiveClosedLoopRunResultV1(input) {
|
|
407
|
+
exact(input, runBodyKeys, "closed-loop run result input");
|
|
408
|
+
const body = normalizedRunBody(input);
|
|
409
|
+
return deepFreezePlanning({ ...body, runDigest: runDigestV1(body) });
|
|
410
|
+
}
|
|
411
|
+
export function validateCollectiveClosedLoopRunResultV1(value) {
|
|
412
|
+
exact(value, runKeys, "closed-loop run result");
|
|
413
|
+
digest(value.runDigest, "runDigest");
|
|
414
|
+
const body = normalizedRunBody(value);
|
|
415
|
+
const runDigest = runDigestV1(body);
|
|
416
|
+
if (value.runDigest !== runDigest)
|
|
417
|
+
throw new TypeError("closed-loop run result digest is invalid");
|
|
418
|
+
return deepFreezePlanning({ ...body, runDigest });
|
|
419
|
+
}
|
|
420
|
+
//# sourceMappingURL=collective-closed-loop-contracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collective-closed-loop-contracts.js","sourceRoot":"","sources":["../src/collective-closed-loop-contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { type PlanningDigestV1 } from '@agentplat/collective-planning';
|
|
2
|
+
import { type MeshReducerScenarioConfig, type MeshReducerScenarioRecord, type MeshReducerScenarioReplayResult, type MeshReducerScenarioRuntime, type MeshReducerScenarioTrace } from './reducer-scenario.js';
|
|
3
|
+
/**
|
|
4
|
+
* A compact, runner-neutral fault schedule. The transport faults are always
|
|
5
|
+
* executed by the simulation driver; capability and assignment faults are
|
|
6
|
+
* normal reducer events so an adapter cannot mistake a trace annotation for a
|
|
7
|
+
* domain transition.
|
|
8
|
+
*/
|
|
9
|
+
export declare const COLLECTIVE_CLOSED_LOOP_FAULT_MATRIX_LIMITS_V1: Readonly<{
|
|
10
|
+
maximumFaults: 8;
|
|
11
|
+
maximumScenarioEvents: 5000;
|
|
12
|
+
maximumObservers: 8;
|
|
13
|
+
}>;
|
|
14
|
+
export type CollectiveClosedLoopFaultMatrixFamilyV1 = 'capability.withdraw' | 'assignment.decline' | 'peer.crash' | 'peer.restart' | 'network.partition' | 'network.heal';
|
|
15
|
+
export interface CollectiveClosedLoopFaultMatrixEventInjectionV1 {
|
|
16
|
+
readonly schemaVersion: 1;
|
|
17
|
+
readonly kind: 'reducer_event';
|
|
18
|
+
readonly eventId: string;
|
|
19
|
+
}
|
|
20
|
+
export interface CollectiveClosedLoopFaultMatrixDriverInjectionV1 {
|
|
21
|
+
readonly schemaVersion: 1;
|
|
22
|
+
readonly kind: 'driver_fault';
|
|
23
|
+
readonly simulationFaultId: string;
|
|
24
|
+
}
|
|
25
|
+
export type CollectiveClosedLoopFaultMatrixInjectionV1 = CollectiveClosedLoopFaultMatrixEventInjectionV1 | CollectiveClosedLoopFaultMatrixDriverInjectionV1;
|
|
26
|
+
interface CollectiveClosedLoopFaultMatrixBaseV1 {
|
|
27
|
+
readonly schemaVersion: 1;
|
|
28
|
+
readonly faultId: string;
|
|
29
|
+
readonly family: CollectiveClosedLoopFaultMatrixFamilyV1;
|
|
30
|
+
readonly logicalTime: number;
|
|
31
|
+
readonly injection: CollectiveClosedLoopFaultMatrixInjectionV1;
|
|
32
|
+
/** Explicit predecessor keeps restart/heal causality independent of timing. */
|
|
33
|
+
readonly causalPredecessorFaultId: string | null;
|
|
34
|
+
}
|
|
35
|
+
export interface CollectiveClosedLoopCapabilityWithdrawalFaultV1 extends CollectiveClosedLoopFaultMatrixBaseV1 {
|
|
36
|
+
readonly family: 'capability.withdraw';
|
|
37
|
+
readonly injection: CollectiveClosedLoopFaultMatrixEventInjectionV1;
|
|
38
|
+
}
|
|
39
|
+
export interface CollectiveClosedLoopAssignmentDeclineFaultV1 extends CollectiveClosedLoopFaultMatrixBaseV1 {
|
|
40
|
+
readonly family: 'assignment.decline';
|
|
41
|
+
readonly injection: CollectiveClosedLoopFaultMatrixEventInjectionV1;
|
|
42
|
+
readonly reofferEventId: string;
|
|
43
|
+
readonly declinedOfferAttempt: number;
|
|
44
|
+
readonly reofferAttempt: number;
|
|
45
|
+
}
|
|
46
|
+
export interface CollectiveClosedLoopTransportFaultV1 extends CollectiveClosedLoopFaultMatrixBaseV1 {
|
|
47
|
+
readonly family: 'peer.crash' | 'peer.restart' | 'network.partition' | 'network.heal';
|
|
48
|
+
readonly injection: CollectiveClosedLoopFaultMatrixDriverInjectionV1;
|
|
49
|
+
}
|
|
50
|
+
export type CollectiveClosedLoopFaultMatrixFaultV1 = CollectiveClosedLoopCapabilityWithdrawalFaultV1 | CollectiveClosedLoopAssignmentDeclineFaultV1 | CollectiveClosedLoopTransportFaultV1;
|
|
51
|
+
export interface CollectiveClosedLoopFaultMatrixObservationV1<State, Projection> {
|
|
52
|
+
readonly faultId: string;
|
|
53
|
+
/**
|
|
54
|
+
* Domain adapters assert the post-condition against the actual reducer
|
|
55
|
+
* trace. For example, a withdrawal must no longer be eligible for matching.
|
|
56
|
+
*/
|
|
57
|
+
observe(input: {
|
|
58
|
+
readonly trace: MeshReducerScenarioTrace<State, Projection>;
|
|
59
|
+
readonly injectedRecord: MeshReducerScenarioRecord;
|
|
60
|
+
}): boolean;
|
|
61
|
+
}
|
|
62
|
+
export interface CollectiveClosedLoopFaultMatrixInputV1<State, Action, Effect = unknown, Projection = State> {
|
|
63
|
+
readonly schemaVersion: 1;
|
|
64
|
+
readonly scenario: MeshReducerScenarioConfig<State, Action>;
|
|
65
|
+
readonly runtime: MeshReducerScenarioRuntime<State, Action, Effect, Projection>;
|
|
66
|
+
readonly faults: readonly CollectiveClosedLoopFaultMatrixFaultV1[];
|
|
67
|
+
readonly observations: readonly CollectiveClosedLoopFaultMatrixObservationV1<State, Projection>[];
|
|
68
|
+
}
|
|
69
|
+
export interface CollectiveClosedLoopFaultMatrixRecordV1 {
|
|
70
|
+
readonly schemaVersion: 1;
|
|
71
|
+
readonly faultId: string;
|
|
72
|
+
readonly family: CollectiveClosedLoopFaultMatrixFamilyV1;
|
|
73
|
+
readonly scheduledEventDigest: PlanningDigestV1;
|
|
74
|
+
readonly injectedEventDigest: PlanningDigestV1;
|
|
75
|
+
readonly observedEventDigest: PlanningDigestV1;
|
|
76
|
+
readonly injectedRecordId: string;
|
|
77
|
+
readonly observed: true;
|
|
78
|
+
}
|
|
79
|
+
export interface CollectiveClosedLoopFaultMatrixResultV1<State, Projection> {
|
|
80
|
+
readonly schemaVersion: 1;
|
|
81
|
+
readonly scenarioDigest: string;
|
|
82
|
+
readonly trace: MeshReducerScenarioTrace<State, Projection>;
|
|
83
|
+
readonly records: readonly CollectiveClosedLoopFaultMatrixRecordV1[];
|
|
84
|
+
readonly matrixDigest: PlanningDigestV1;
|
|
85
|
+
}
|
|
86
|
+
export interface CollectiveClosedLoopFaultMatrixReplayResultV1 {
|
|
87
|
+
readonly matches: boolean;
|
|
88
|
+
readonly expectedMatrixDigest: PlanningDigestV1;
|
|
89
|
+
readonly actualMatrixDigest: PlanningDigestV1;
|
|
90
|
+
readonly replay: MeshReducerScenarioReplayResult;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Executes a bounded mixed fault campaign. This function intentionally does
|
|
94
|
+
* not inject domain faults itself: the supplied Mesh reducer adapter receives
|
|
95
|
+
* the signed/verified withdrawal or decline event from its normal schedule.
|
|
96
|
+
*/
|
|
97
|
+
export declare function runCollectiveClosedLoopFaultMatrixV1<State, Action, Effect = unknown, Projection = State>(input: CollectiveClosedLoopFaultMatrixInputV1<State, Action, Effect, Projection>): Promise<CollectiveClosedLoopFaultMatrixResultV1<State, Projection>>;
|
|
98
|
+
/** Re-runs the exact schedule and requires both driver and matrix evidence. */
|
|
99
|
+
export declare function replayCollectiveClosedLoopFaultMatrixV1<State, Action, Effect = unknown, Projection = State>(input: CollectiveClosedLoopFaultMatrixInputV1<State, Action, Effect, Projection>, expected: CollectiveClosedLoopFaultMatrixResultV1<State, Projection>): Promise<CollectiveClosedLoopFaultMatrixReplayResultV1>;
|
|
100
|
+
export {};
|
|
101
|
+
//# sourceMappingURL=collective-closed-loop-fault-matrix.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collective-closed-loop-fault-matrix.d.ts","sourceRoot":"","sources":["../src/collective-closed-loop-fault-matrix.ts"],"names":[],"mappings":"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"}
|