@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.
Files changed (185) hide show
  1. package/README.md +447 -2
  2. package/dist/collective-closed-loop-action.d.ts +80 -0
  3. package/dist/collective-closed-loop-action.d.ts.map +1 -0
  4. package/dist/collective-closed-loop-action.js +471 -0
  5. package/dist/collective-closed-loop-action.js.map +1 -0
  6. package/dist/collective-closed-loop-contracts.d.ts +75 -0
  7. package/dist/collective-closed-loop-contracts.d.ts.map +1 -0
  8. package/dist/collective-closed-loop-contracts.js +420 -0
  9. package/dist/collective-closed-loop-contracts.js.map +1 -0
  10. package/dist/collective-closed-loop-fault-matrix.d.ts +101 -0
  11. package/dist/collective-closed-loop-fault-matrix.d.ts.map +1 -0
  12. package/dist/collective-closed-loop-fault-matrix.js +253 -0
  13. package/dist/collective-closed-loop-fault-matrix.js.map +1 -0
  14. package/dist/collective-closed-loop-recovery.d.ts +70 -0
  15. package/dist/collective-closed-loop-recovery.d.ts.map +1 -0
  16. package/dist/collective-closed-loop-recovery.js +823 -0
  17. package/dist/collective-closed-loop-recovery.js.map +1 -0
  18. package/dist/collective-closed-loop-reference.d.ts +54 -0
  19. package/dist/collective-closed-loop-reference.d.ts.map +1 -0
  20. package/dist/collective-closed-loop-reference.js +1696 -0
  21. package/dist/collective-closed-loop-reference.js.map +1 -0
  22. package/dist/collective-closed-loop-replanning.d.ts +27 -0
  23. package/dist/collective-closed-loop-replanning.d.ts.map +1 -0
  24. package/dist/collective-closed-loop-replanning.js +151 -0
  25. package/dist/collective-closed-loop-replanning.js.map +1 -0
  26. package/dist/collective-closed-loop-resilience-campaign.d.ts +22 -0
  27. package/dist/collective-closed-loop-resilience-campaign.d.ts.map +1 -0
  28. package/dist/collective-closed-loop-resilience-campaign.js +196 -0
  29. package/dist/collective-closed-loop-resilience-campaign.js.map +1 -0
  30. package/dist/collective-closed-loop-resilience-contracts.d.ts +138 -0
  31. package/dist/collective-closed-loop-resilience-contracts.d.ts.map +1 -0
  32. package/dist/collective-closed-loop-resilience-contracts.js +677 -0
  33. package/dist/collective-closed-loop-resilience-contracts.js.map +1 -0
  34. package/dist/collective-closed-loop-runner.d.ts +133 -0
  35. package/dist/collective-closed-loop-runner.d.ts.map +1 -0
  36. package/dist/collective-closed-loop-runner.js +1429 -0
  37. package/dist/collective-closed-loop-runner.js.map +1 -0
  38. package/dist/collective-closed-loop-runtime.d.ts +95 -0
  39. package/dist/collective-closed-loop-runtime.d.ts.map +1 -0
  40. package/dist/collective-closed-loop-runtime.js +1192 -0
  41. package/dist/collective-closed-loop-runtime.js.map +1 -0
  42. package/dist/collective-effect-provenance.d.ts +5 -0
  43. package/dist/collective-effect-provenance.d.ts.map +1 -0
  44. package/dist/collective-effect-provenance.js +32 -0
  45. package/dist/collective-effect-provenance.js.map +1 -0
  46. package/dist/collective-environment.d.ts +49 -0
  47. package/dist/collective-environment.d.ts.map +1 -0
  48. package/dist/collective-environment.js +907 -0
  49. package/dist/collective-environment.js.map +1 -0
  50. package/dist/collective-progressive-scale-overlay.d.ts +39 -0
  51. package/dist/collective-progressive-scale-overlay.d.ts.map +1 -0
  52. package/dist/collective-progressive-scale-overlay.js +147 -0
  53. package/dist/collective-progressive-scale-overlay.js.map +1 -0
  54. package/dist/collective-progressive-scale.d.ts +202 -0
  55. package/dist/collective-progressive-scale.d.ts.map +1 -0
  56. package/dist/collective-progressive-scale.js +755 -0
  57. package/dist/collective-progressive-scale.js.map +1 -0
  58. package/dist/collective-statistical-campaign-aggregation.d.ts +97 -0
  59. package/dist/collective-statistical-campaign-aggregation.d.ts.map +1 -0
  60. package/dist/collective-statistical-campaign-aggregation.js +446 -0
  61. package/dist/collective-statistical-campaign-aggregation.js.map +1 -0
  62. package/dist/collective-statistical-campaign-artifact-stream.d.ts +66 -0
  63. package/dist/collective-statistical-campaign-artifact-stream.d.ts.map +1 -0
  64. package/dist/collective-statistical-campaign-artifact-stream.js +207 -0
  65. package/dist/collective-statistical-campaign-artifact-stream.js.map +1 -0
  66. package/dist/collective-statistical-campaign-bundle.d.ts +151 -0
  67. package/dist/collective-statistical-campaign-bundle.d.ts.map +1 -0
  68. package/dist/collective-statistical-campaign-bundle.js +885 -0
  69. package/dist/collective-statistical-campaign-bundle.js.map +1 -0
  70. package/dist/collective-statistical-campaign-executor.d.ts +131 -0
  71. package/dist/collective-statistical-campaign-executor.d.ts.map +1 -0
  72. package/dist/collective-statistical-campaign-executor.js +856 -0
  73. package/dist/collective-statistical-campaign-executor.js.map +1 -0
  74. package/dist/collective-statistical-campaign-normative-analysis.d.ts +85 -0
  75. package/dist/collective-statistical-campaign-normative-analysis.d.ts.map +1 -0
  76. package/dist/collective-statistical-campaign-normative-analysis.js +483 -0
  77. package/dist/collective-statistical-campaign-normative-analysis.js.map +1 -0
  78. package/dist/collective-statistical-campaign-normative-operation.d.ts +89 -0
  79. package/dist/collective-statistical-campaign-normative-operation.d.ts.map +1 -0
  80. package/dist/collective-statistical-campaign-normative-operation.js +266 -0
  81. package/dist/collective-statistical-campaign-normative-operation.js.map +1 -0
  82. package/dist/collective-statistical-campaign-normative-registry.d.ts +24 -0
  83. package/dist/collective-statistical-campaign-normative-registry.d.ts.map +1 -0
  84. package/dist/collective-statistical-campaign-normative-registry.js +163 -0
  85. package/dist/collective-statistical-campaign-normative-registry.js.map +1 -0
  86. package/dist/collective-statistical-campaign-registered-adapter.d.ts +16 -0
  87. package/dist/collective-statistical-campaign-registered-adapter.d.ts.map +1 -0
  88. package/dist/collective-statistical-campaign-registered-adapter.js +518 -0
  89. package/dist/collective-statistical-campaign-registered-adapter.js.map +1 -0
  90. package/dist/collective-statistical-campaign-scale.d.ts +85 -0
  91. package/dist/collective-statistical-campaign-scale.d.ts.map +1 -0
  92. package/dist/collective-statistical-campaign-scale.js +349 -0
  93. package/dist/collective-statistical-campaign-scale.js.map +1 -0
  94. package/dist/collective-trace-journal.d.ts +20 -0
  95. package/dist/collective-trace-journal.d.ts.map +1 -0
  96. package/dist/collective-trace-journal.js +105 -0
  97. package/dist/collective-trace-journal.js.map +1 -0
  98. package/dist/index.d.ts +25 -0
  99. package/dist/index.d.ts.map +1 -1
  100. package/dist/index.js +25 -0
  101. package/dist/index.js.map +1 -1
  102. package/dist/multi-domain-environment-contracts.d.ts +122 -0
  103. package/dist/multi-domain-environment-contracts.d.ts.map +1 -0
  104. package/dist/multi-domain-environment-contracts.js +14 -0
  105. package/dist/multi-domain-environment-contracts.js.map +1 -0
  106. package/dist/multi-domain-environment-runtime.d.ts +25 -0
  107. package/dist/multi-domain-environment-runtime.d.ts.map +1 -0
  108. package/dist/multi-domain-environment-runtime.js +493 -0
  109. package/dist/multi-domain-environment-runtime.js.map +1 -0
  110. package/dist/multi-domain-environment-validation.d.ts +33 -0
  111. package/dist/multi-domain-environment-validation.d.ts.map +1 -0
  112. package/dist/multi-domain-environment-validation.js +415 -0
  113. package/dist/multi-domain-environment-validation.js.map +1 -0
  114. package/dist/multi-domain-environment.d.ts +4 -0
  115. package/dist/multi-domain-environment.d.ts.map +1 -0
  116. package/dist/multi-domain-environment.js +4 -0
  117. package/dist/multi-domain-environment.js.map +1 -0
  118. package/dist/reducer-scenario.d.ts.map +1 -1
  119. package/dist/reducer-scenario.js +67 -19
  120. package/dist/reducer-scenario.js.map +1 -1
  121. package/dist/scalable-evaluation-contracts.d.ts +835 -0
  122. package/dist/scalable-evaluation-contracts.d.ts.map +1 -0
  123. package/dist/scalable-evaluation-contracts.js +22 -0
  124. package/dist/scalable-evaluation-contracts.js.map +1 -0
  125. package/dist/scalable-evaluation-durability.d.ts +16 -0
  126. package/dist/scalable-evaluation-durability.d.ts.map +1 -0
  127. package/dist/scalable-evaluation-durability.js +339 -0
  128. package/dist/scalable-evaluation-durability.js.map +1 -0
  129. package/dist/scalable-evaluation-evidence.d.ts +93 -0
  130. package/dist/scalable-evaluation-evidence.d.ts.map +1 -0
  131. package/dist/scalable-evaluation-evidence.js +470 -0
  132. package/dist/scalable-evaluation-evidence.js.map +1 -0
  133. package/dist/scalable-evaluation-reference-integrated.d.ts +87 -0
  134. package/dist/scalable-evaluation-reference-integrated.d.ts.map +1 -0
  135. package/dist/scalable-evaluation-reference-integrated.js +1318 -0
  136. package/dist/scalable-evaluation-reference-integrated.js.map +1 -0
  137. package/dist/scalable-evaluation-runner.d.ts +8 -0
  138. package/dist/scalable-evaluation-runner.d.ts.map +1 -0
  139. package/dist/scalable-evaluation-runner.js +1810 -0
  140. package/dist/scalable-evaluation-runner.js.map +1 -0
  141. package/dist/scalable-evaluation-runtime.d.ts +86 -0
  142. package/dist/scalable-evaluation-runtime.d.ts.map +1 -0
  143. package/dist/scalable-evaluation-runtime.js +1310 -0
  144. package/dist/scalable-evaluation-runtime.js.map +1 -0
  145. package/dist/scalable-evaluation-validation.d.ts +59 -0
  146. package/dist/scalable-evaluation-validation.d.ts.map +1 -0
  147. package/dist/scalable-evaluation-validation.js +377 -0
  148. package/dist/scalable-evaluation-validation.js.map +1 -0
  149. package/dist/scalable-evaluation.d.ts +8 -0
  150. package/dist/scalable-evaluation.d.ts.map +1 -0
  151. package/dist/scalable-evaluation.js +8 -0
  152. package/dist/scalable-evaluation.js.map +1 -0
  153. package/dist/sharded-simulation-contracts.d.ts +240 -0
  154. package/dist/sharded-simulation-contracts.d.ts.map +1 -0
  155. package/dist/sharded-simulation-contracts.js +199 -0
  156. package/dist/sharded-simulation-contracts.js.map +1 -0
  157. package/dist/sharded-simulation-runtime.d.ts +64 -0
  158. package/dist/sharded-simulation-runtime.d.ts.map +1 -0
  159. package/dist/sharded-simulation-runtime.js +755 -0
  160. package/dist/sharded-simulation-runtime.js.map +1 -0
  161. package/dist/sharded-simulation-validation.d.ts +10 -0
  162. package/dist/sharded-simulation-validation.d.ts.map +1 -0
  163. package/dist/sharded-simulation-validation.js +250 -0
  164. package/dist/sharded-simulation-validation.js.map +1 -0
  165. package/dist/sharded-simulation.d.ts +46 -0
  166. package/dist/sharded-simulation.d.ts.map +1 -0
  167. package/dist/sharded-simulation.js +32 -0
  168. package/dist/sharded-simulation.js.map +1 -0
  169. package/dist/verified-benchmark-contracts.d.ts +132 -0
  170. package/dist/verified-benchmark-contracts.d.ts.map +1 -0
  171. package/dist/verified-benchmark-contracts.js +2 -0
  172. package/dist/verified-benchmark-contracts.js.map +1 -0
  173. package/dist/verified-benchmark-runtime.d.ts +20 -0
  174. package/dist/verified-benchmark-runtime.d.ts.map +1 -0
  175. package/dist/verified-benchmark-runtime.js +199 -0
  176. package/dist/verified-benchmark-runtime.js.map +1 -0
  177. package/dist/verified-benchmark-validation.d.ts +64 -0
  178. package/dist/verified-benchmark-validation.d.ts.map +1 -0
  179. package/dist/verified-benchmark-validation.js +481 -0
  180. package/dist/verified-benchmark-validation.js.map +1 -0
  181. package/dist/verified-benchmark.d.ts +4 -0
  182. package/dist/verified-benchmark.d.ts.map +1 -0
  183. package/dist/verified-benchmark.js +4 -0
  184. package/dist/verified-benchmark.js.map +1 -0
  185. package/package.json +18 -8
@@ -0,0 +1,415 @@
1
+ import { deepFreezePlanning, } from "@agentplat/collective-planning";
2
+ import { MULTI_DOMAIN_ENVIRONMENT_DOMAINS_V1, MULTI_DOMAIN_ENVIRONMENT_MODALITIES_V1, } from "./multi-domain-environment-contracts.js";
3
+ import { shardedSimulationDigestV1, shardedSimulationScaleProfileV1, } from "./sharded-simulation-contracts.js";
4
+ const DIGEST = /^sha256:[0-9a-f]{64}$/u;
5
+ const MAXIMUM_SCHEMAS = 64;
6
+ const MAXIMUM_CAPABILITIES = 64;
7
+ const MAXIMUM_PAYLOAD_BYTES = 16 * 1024 * 1024;
8
+ const encoder = new TextEncoder();
9
+ export function multiDomainEnvironmentDigestV1(domain, value) {
10
+ return shardedSimulationDigestV1(`multi-domain-environment/${domain}/v1`, value);
11
+ }
12
+ export function createMultiDomainEnvironmentDescriptorV1(input) {
13
+ identifier(input.adapterId, "adapter_id");
14
+ positive(input.adapterVersion, "adapter_version");
15
+ digest(input.implementationDigest, "implementation_digest");
16
+ const domains = canonicalDomains(input.domains);
17
+ const capabilities = canonicalIdentifiers(input.capabilities, MAXIMUM_CAPABILITIES, "capabilities");
18
+ const observationSchemas = canonicalObservationSchemas(input.observationSchemas, domains);
19
+ const actionSchemas = canonicalActionSchemas(input.actionSchemas, domains, capabilities);
20
+ const limits = validateMultiDomainEnvironmentLimitsV1(input.limits);
21
+ if (typeof input.deterministicReplay !== "boolean")
22
+ fail("deterministic_replay_invalid");
23
+ const body = {
24
+ schemaVersion: 1,
25
+ adapterId: input.adapterId,
26
+ adapterVersion: input.adapterVersion,
27
+ implementationDigest: input.implementationDigest,
28
+ domains,
29
+ capabilities,
30
+ observationSchemas,
31
+ actionSchemas,
32
+ limits,
33
+ deterministicReplay: input.deterministicReplay,
34
+ };
35
+ return freeze({
36
+ ...body,
37
+ descriptorDigest: multiDomainEnvironmentDigestV1("descriptor", body),
38
+ });
39
+ }
40
+ export function validateMultiDomainEnvironmentDescriptorV1(input) {
41
+ const value = object(input, "descriptor");
42
+ exact(value, [
43
+ "schemaVersion",
44
+ "adapterId",
45
+ "adapterVersion",
46
+ "implementationDigest",
47
+ "domains",
48
+ "capabilities",
49
+ "observationSchemas",
50
+ "actionSchemas",
51
+ "limits",
52
+ "deterministicReplay",
53
+ "descriptorDigest",
54
+ ], "descriptor");
55
+ if (value.schemaVersion !== 1)
56
+ fail("descriptor_schema_invalid");
57
+ const rebuilt = createMultiDomainEnvironmentDescriptorV1(value);
58
+ if (!same(value, rebuilt))
59
+ fail("descriptor_digest_invalid");
60
+ return rebuilt;
61
+ }
62
+ export function createMultiDomainScenarioManifestV1(input) {
63
+ const descriptor = validateMultiDomainEnvironmentDescriptorV1(input.descriptor);
64
+ const definition = validateScenarioDefinition(input.definition, descriptor);
65
+ const body = {
66
+ schemaVersion: 1,
67
+ scenarioId: definition.scenarioId,
68
+ adapterDescriptorDigest: descriptor.descriptorDigest,
69
+ scaleProfileId: definition.scaleProfileId,
70
+ seed: definition.seed,
71
+ domains: definition.domains,
72
+ entityCount: definition.entityCount,
73
+ topologyDigest: definition.topologyDigest,
74
+ transitionPolicyDigest: definition.transitionPolicyDigest,
75
+ visibilityPolicyDigest: definition.visibilityPolicyDigest,
76
+ faultModelDigest: definition.faultModelDigest,
77
+ resourceBudget: definition.resourceBudget,
78
+ };
79
+ return freeze({
80
+ ...body,
81
+ manifestDigest: multiDomainEnvironmentDigestV1("scenario-manifest", body),
82
+ });
83
+ }
84
+ export function validateMultiDomainScenarioManifestV1(input, descriptor) {
85
+ const value = object(input, "scenario_manifest");
86
+ exact(value, [
87
+ "schemaVersion",
88
+ "scenarioId",
89
+ "adapterDescriptorDigest",
90
+ "scaleProfileId",
91
+ "seed",
92
+ "domains",
93
+ "entityCount",
94
+ "topologyDigest",
95
+ "transitionPolicyDigest",
96
+ "visibilityPolicyDigest",
97
+ "faultModelDigest",
98
+ "resourceBudget",
99
+ "manifestDigest",
100
+ ], "scenario_manifest");
101
+ if (value.schemaVersion !== 1)
102
+ fail("scenario_manifest_schema_invalid");
103
+ if (value.adapterDescriptorDigest !== descriptor.descriptorDigest)
104
+ fail("scenario_adapter_binding_invalid");
105
+ const rebuilt = createMultiDomainScenarioManifestV1({
106
+ descriptor,
107
+ definition: {
108
+ schemaVersion: 1,
109
+ scenarioId: value.scenarioId,
110
+ scaleProfileId: value.scaleProfileId,
111
+ seed: value.seed,
112
+ domains: value.domains,
113
+ entityCount: value.entityCount,
114
+ topologyDigest: value.topologyDigest,
115
+ transitionPolicyDigest: value.transitionPolicyDigest,
116
+ visibilityPolicyDigest: value.visibilityPolicyDigest,
117
+ faultModelDigest: value.faultModelDigest,
118
+ resourceBudget: value.resourceBudget,
119
+ },
120
+ });
121
+ if (!same(value, rebuilt))
122
+ fail("scenario_manifest_digest_invalid");
123
+ return rebuilt;
124
+ }
125
+ export function createMultiDomainObservationEnvelopeV1(input) {
126
+ const descriptor = validateMultiDomainEnvironmentDescriptorV1(input.descriptor);
127
+ identifier(input.observationId, "observation_id");
128
+ identifier(input.entityId, "entity_id");
129
+ nonNegative(input.logicalTime, "observation_logical_time");
130
+ const schema = descriptor.observationSchemas.find((candidate) => candidate.domain === input.domain &&
131
+ candidate.modality === input.modality &&
132
+ candidate.schemaDigest === input.schemaDigest);
133
+ if (!schema)
134
+ fail("observation_schema_not_registered");
135
+ strictJson(input.payload, "observation_payload");
136
+ if (jsonBytes(input.payload) > descriptor.limits.maximumObservationBytes)
137
+ fail("observation_payload_limit_exceeded");
138
+ const body = {
139
+ schemaVersion: 1,
140
+ observationId: input.observationId,
141
+ domain: input.domain,
142
+ entityId: input.entityId,
143
+ modality: input.modality,
144
+ schemaDigest: input.schemaDigest,
145
+ logicalTime: input.logicalTime,
146
+ payload: freeze(input.payload),
147
+ };
148
+ return freeze({
149
+ ...body,
150
+ observationDigest: multiDomainEnvironmentDigestV1("observation", body),
151
+ });
152
+ }
153
+ export function validateMultiDomainObservationEnvelopeV1(input, descriptor) {
154
+ const value = object(input, "observation");
155
+ exact(value, [
156
+ "schemaVersion",
157
+ "observationId",
158
+ "domain",
159
+ "entityId",
160
+ "modality",
161
+ "schemaDigest",
162
+ "logicalTime",
163
+ "payload",
164
+ "observationDigest",
165
+ ], "observation");
166
+ if (value.schemaVersion !== 1)
167
+ fail("observation_schema_version_invalid");
168
+ const rebuilt = createMultiDomainObservationEnvelopeV1({
169
+ descriptor,
170
+ ...value,
171
+ });
172
+ if (!same(value, rebuilt))
173
+ fail("observation_digest_invalid");
174
+ return rebuilt;
175
+ }
176
+ export function validateMultiDomainActionEnvelopeV1(input, descriptor) {
177
+ const value = object(input, "action");
178
+ exact(value, [
179
+ "schemaVersion",
180
+ "domain",
181
+ "entityId",
182
+ "capability",
183
+ "schemaDigest",
184
+ "payload",
185
+ ], "action");
186
+ if (value.schemaVersion !== 1)
187
+ fail("action_schema_version_invalid");
188
+ identifier(value.entityId, "action_entity_id");
189
+ identifier(value.capability, "action_capability");
190
+ digest(value.schemaDigest, "action_schema_digest");
191
+ strictJson(value.payload, "action_payload");
192
+ const schema = descriptor.actionSchemas.find((candidate) => candidate.domain === value.domain &&
193
+ candidate.capability === value.capability &&
194
+ candidate.schemaDigest === value.schemaDigest);
195
+ if (!schema)
196
+ fail("action_capability_not_registered");
197
+ if (jsonBytes(value.payload) > descriptor.limits.maximumActionBytes)
198
+ fail("action_payload_limit_exceeded");
199
+ return freeze({ ...value, payload: freeze(value.payload) });
200
+ }
201
+ function validateScenarioDefinition(input, descriptor) {
202
+ const value = object(input, "scenario_definition");
203
+ exact(value, [
204
+ "schemaVersion",
205
+ "scenarioId",
206
+ "scaleProfileId",
207
+ "seed",
208
+ "domains",
209
+ "entityCount",
210
+ "topologyDigest",
211
+ "transitionPolicyDigest",
212
+ "visibilityPolicyDigest",
213
+ "faultModelDigest",
214
+ "resourceBudget",
215
+ ], "scenario_definition");
216
+ if (value.schemaVersion !== 1)
217
+ fail("scenario_definition_schema_invalid");
218
+ identifier(value.scenarioId, "scenario_id");
219
+ nonNegative(value.seed, "scenario_seed");
220
+ const scaleProfile = profileFor(value.scaleProfileId);
221
+ const domains = canonicalDomains(value.domains);
222
+ if (domains.some((domain) => !descriptor.domains.includes(domain)))
223
+ fail("scenario_domain_not_supported");
224
+ positive(value.entityCount, "entity_count");
225
+ if (value.entityCount > scaleProfile.logicalPeerCount ||
226
+ value.entityCount > descriptor.limits.maximumEntities)
227
+ fail("scenario_entity_limit_exceeded");
228
+ for (const [label, candidate] of [
229
+ ["topology_digest", value.topologyDigest],
230
+ ["transition_policy_digest", value.transitionPolicyDigest],
231
+ ["visibility_policy_digest", value.visibilityPolicyDigest],
232
+ ["fault_model_digest", value.faultModelDigest],
233
+ ])
234
+ digest(candidate, label);
235
+ const budget = validateResourceBudget(value.resourceBudget);
236
+ if (budget.maximumInteractions > scaleProfile.interactionCeiling ||
237
+ budget.maximumObservationBytes >
238
+ descriptor.limits.maximumObservationBytes ||
239
+ budget.maximumActionBytes > descriptor.limits.maximumActionBytes ||
240
+ budget.maximumCheckpointBytes > descriptor.limits.maximumCheckpointBytes)
241
+ fail("scenario_resource_budget_exceeded");
242
+ return freeze({ ...value, domains, resourceBudget: budget });
243
+ }
244
+ function validateMultiDomainEnvironmentLimitsV1(input) {
245
+ const value = object(input, "limits");
246
+ exact(value, [
247
+ "maximumEntities",
248
+ "maximumObservationBytes",
249
+ "maximumActionBytes",
250
+ "maximumObservationsPerPull",
251
+ "maximumCheckpointBytes",
252
+ ], "limits");
253
+ positive(value.maximumEntities, "maximum_entities");
254
+ positive(value.maximumObservationBytes, "maximum_observation_bytes");
255
+ positive(value.maximumActionBytes, "maximum_action_bytes");
256
+ positive(value.maximumObservationsPerPull, "maximum_observations_per_pull");
257
+ positive(value.maximumCheckpointBytes, "maximum_checkpoint_bytes");
258
+ if (value.maximumEntities > 100_000 ||
259
+ value.maximumObservationBytes > MAXIMUM_PAYLOAD_BYTES ||
260
+ value.maximumActionBytes > MAXIMUM_PAYLOAD_BYTES ||
261
+ value.maximumObservationsPerPull > 1_024 ||
262
+ value.maximumCheckpointBytes > MAXIMUM_PAYLOAD_BYTES)
263
+ fail("limits_exceed_protocol_ceiling");
264
+ return freeze({ ...value });
265
+ }
266
+ function validateResourceBudget(input) {
267
+ const value = object(input, "resource_budget");
268
+ exact(value, [
269
+ "maximumInteractions",
270
+ "maximumObservationBytes",
271
+ "maximumActionBytes",
272
+ "maximumCheckpointBytes",
273
+ ], "resource_budget");
274
+ for (const [label, candidate] of Object.entries(value))
275
+ positive(candidate, label);
276
+ return freeze({ ...value });
277
+ }
278
+ function canonicalObservationSchemas(input, domains) {
279
+ if (!Array.isArray(input) ||
280
+ input.length === 0 ||
281
+ input.length > MAXIMUM_SCHEMAS)
282
+ fail("observation_schemas_invalid");
283
+ const allowedDomains = new Set(domains.filter((domain) => domain !== "hybrid"));
284
+ const result = input
285
+ .map((schema) => {
286
+ exact(object(schema, "observation_schema"), ["schemaVersion", "domain", "modality", "schemaId", "schemaDigest"], "observation_schema");
287
+ if (schema.schemaVersion !== 1 || !allowedDomains.has(schema.domain))
288
+ fail("observation_schema_domain_invalid");
289
+ if (!MULTI_DOMAIN_ENVIRONMENT_MODALITIES_V1.includes(schema.modality))
290
+ fail("observation_schema_modality_invalid");
291
+ identifier(schema.schemaId, "observation_schema_id");
292
+ digest(schema.schemaDigest, "observation_schema_digest");
293
+ return freeze({ ...schema });
294
+ })
295
+ .sort((left, right) => left.domain.localeCompare(right.domain) ||
296
+ left.modality.localeCompare(right.modality) ||
297
+ left.schemaId.localeCompare(right.schemaId));
298
+ const keys = result.map((schema) => `${schema.domain}\0${schema.modality}\0${schema.schemaId}`);
299
+ if (new Set(keys).size !== keys.length)
300
+ fail("observation_schema_duplicate");
301
+ return Object.freeze(result);
302
+ }
303
+ function canonicalActionSchemas(input, domains, capabilities) {
304
+ if (!Array.isArray(input) ||
305
+ input.length === 0 ||
306
+ input.length > MAXIMUM_SCHEMAS)
307
+ fail("action_schemas_invalid");
308
+ const allowedDomains = new Set(domains.filter((domain) => domain !== "hybrid"));
309
+ const allowedCapabilities = new Set(capabilities);
310
+ const result = input
311
+ .map((schema) => {
312
+ exact(object(schema, "action_schema"), ["schemaVersion", "domain", "capability", "schemaId", "schemaDigest"], "action_schema");
313
+ if (schema.schemaVersion !== 1 ||
314
+ !allowedDomains.has(schema.domain) ||
315
+ !allowedCapabilities.has(schema.capability))
316
+ fail("action_schema_binding_invalid");
317
+ identifier(schema.capability, "action_schema_capability");
318
+ identifier(schema.schemaId, "action_schema_id");
319
+ digest(schema.schemaDigest, "action_schema_digest");
320
+ return freeze({ ...schema });
321
+ })
322
+ .sort((left, right) => left.domain.localeCompare(right.domain) ||
323
+ left.capability.localeCompare(right.capability) ||
324
+ left.schemaId.localeCompare(right.schemaId));
325
+ const keys = result.map((schema) => `${schema.domain}\0${schema.capability}\0${schema.schemaId}`);
326
+ if (new Set(keys).size !== keys.length)
327
+ fail("action_schema_duplicate");
328
+ return Object.freeze(result);
329
+ }
330
+ function canonicalDomains(input) {
331
+ if (!Array.isArray(input) || input.length === 0 || input.length > 4)
332
+ fail("domains_invalid");
333
+ const allowed = new Set(MULTI_DOMAIN_ENVIRONMENT_DOMAINS_V1);
334
+ if (input.some((domain) => !allowed.has(domain)))
335
+ fail("domain_invalid");
336
+ const result = [...new Set(input)].sort();
337
+ if (result.length !== input.length)
338
+ fail("domain_duplicate");
339
+ if (result.includes("hybrid") && result.length < 3)
340
+ fail("hybrid_domain_requires_multiple_domains");
341
+ return Object.freeze(result);
342
+ }
343
+ function canonicalIdentifiers(input, maximum, label) {
344
+ if (!Array.isArray(input) || input.length === 0 || input.length > maximum)
345
+ fail(`${label}_invalid`);
346
+ for (const value of input)
347
+ identifier(value, label);
348
+ const result = [...new Set(input)].sort();
349
+ if (result.length !== input.length)
350
+ fail(`${label}_duplicate`);
351
+ return Object.freeze(result);
352
+ }
353
+ function profileFor(id) {
354
+ try {
355
+ return shardedSimulationScaleProfileV1(id);
356
+ }
357
+ catch {
358
+ fail("scale_profile_invalid");
359
+ }
360
+ }
361
+ function object(value, label) {
362
+ if (value === null || typeof value !== "object" || Array.isArray(value))
363
+ fail(`${label}_invalid`);
364
+ const proto = Object.getPrototypeOf(value);
365
+ if (proto !== Object.prototype && proto !== null)
366
+ fail(`${label}_prototype_invalid`);
367
+ const descriptors = Object.getOwnPropertyDescriptors(value);
368
+ if (Object.values(descriptors).some((entry) => "get" in entry || "set" in entry))
369
+ fail(`${label}_accessor_invalid`);
370
+ return value;
371
+ }
372
+ function exact(value, keys, label) {
373
+ const actual = Object.keys(value).sort();
374
+ const expected = [...keys].sort();
375
+ if (actual.length !== expected.length ||
376
+ actual.some((key, index) => key !== expected[index]))
377
+ fail(`${label}_shape_invalid`);
378
+ }
379
+ function identifier(value, label) {
380
+ if (typeof value !== "string" || value.length === 0 || value.length > 256)
381
+ fail(`${label}_invalid`);
382
+ }
383
+ function digest(value, label) {
384
+ if (typeof value !== "string" || !DIGEST.test(value))
385
+ fail(`${label}_invalid`);
386
+ }
387
+ function positive(value, label) {
388
+ if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 1)
389
+ fail(`${label}_invalid`);
390
+ }
391
+ function nonNegative(value, label) {
392
+ if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 0)
393
+ fail(`${label}_invalid`);
394
+ }
395
+ function strictJson(value, label) {
396
+ try {
397
+ deepFreezePlanning(value);
398
+ }
399
+ catch {
400
+ fail(`${label}_invalid`);
401
+ }
402
+ }
403
+ function jsonBytes(value) {
404
+ return encoder.encode(JSON.stringify(value)).byteLength;
405
+ }
406
+ function freeze(value) {
407
+ return deepFreezePlanning(value);
408
+ }
409
+ function same(left, right) {
410
+ return JSON.stringify(left) === JSON.stringify(right);
411
+ }
412
+ function fail(code) {
413
+ throw new TypeError(`multi_domain_environment_${code}`);
414
+ }
415
+ //# sourceMappingURL=multi-domain-environment-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-domain-environment-validation.js","sourceRoot":"","sources":["../src/multi-domain-environment-validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from "./multi-domain-environment-contracts.js";
2
+ export * from "./multi-domain-environment-validation.js";
3
+ export * from "./multi-domain-environment-runtime.js";
4
+ //# sourceMappingURL=multi-domain-environment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-domain-environment.d.ts","sourceRoot":"","sources":["../src/multi-domain-environment.ts"],"names":[],"mappings":"AAAA,cAAc,yCAAyC,CAAC;AACxD,cAAc,0CAA0C,CAAC;AACzD,cAAc,uCAAuC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./multi-domain-environment-contracts.js";
2
+ export * from "./multi-domain-environment-validation.js";
3
+ export * from "./multi-domain-environment-runtime.js";
4
+ //# sourceMappingURL=multi-domain-environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-domain-environment.js","sourceRoot":"","sources":["../src/multi-domain-environment.ts"],"names":[],"mappings":"AAAA,cAAc,yCAAyC,CAAC;AACxD,cAAc,0CAA0C,CAAC;AACzD,cAAc,uCAAuC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"reducer-scenario.d.ts","sourceRoot":"","sources":["../src/reducer-scenario.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reducer-scenario.d.ts","sourceRoot":"","sources":["../src/reducer-scenario.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { canonicalizeMeshJsonBytes } from '@agentplat/mesh-protocol';
2
2
  import { MESH_SIMULATION_FAULT_LIMITS, } from './index.js';
3
+ const MAX_SCENARIO_PEERS = 1_024;
3
4
  const reducerScenarioCanonicalLimits = Object.freeze({
4
5
  maximumEnvelopeBytes: 64 * 1024 * 1024,
5
6
  maximumPayloadBytes: 64 * 1024 * 1024,
@@ -10,6 +11,7 @@ const reducerScenarioCanonicalLimits = Object.freeze({
10
11
  maximumArrayItems: 1_000_000,
11
12
  maximumStringBytes: 1_048_576,
12
13
  });
14
+ const validatedScenarioPairs = new WeakMap();
13
15
  /**
14
16
  * Runs a closed serialized schedule against a caller supplied production reducer
15
17
  * dispatch table. Faults mutate only driver availability, links, clocks, or the
@@ -56,6 +58,9 @@ export async function runMeshReducerScenario(inputConfig, inputRuntime) {
56
58
  });
57
59
  const faultPlanDigest = await digest(config.faultPlan);
58
60
  const states = new Map(config.peers.map(({ peerId, state }) => [peerId, deepFreezeData(state)]));
61
+ const stateRecordDigest = new IncrementalPeerRecordDigest();
62
+ const projectionRecordDigest = new IncrementalPeerRecordDigest();
63
+ const projectionCache = new WeakMap();
59
64
  const availability = new Map(config.peers.map(({ peerId }) => [peerId, true]));
60
65
  const clockOffsets = new Map(config.peers.map(({ peerId }) => [peerId, 0]));
61
66
  const links = new Map(config.links.map((link) => [linkKey(link.fromPeerId, link.toPeerId), link]));
@@ -88,6 +93,7 @@ export async function runMeshReducerScenario(inputConfig, inputRuntime) {
88
93
  const faultRecords = [];
89
94
  let chainDigest = configurationDigest;
90
95
  let logicalTime = 0;
96
+ let queueNeedsSort = false;
91
97
  let reducerCalls = 0;
92
98
  let acceptedReducerCalls = 0;
93
99
  let rejectedReducerCalls = 0;
@@ -112,6 +118,9 @@ export async function runMeshReducerScenario(inputConfig, inputRuntime) {
112
118
  if (event.fault !== undefined) {
113
119
  kind = 'fault';
114
120
  const applied = applyFault(event.fault, queue, availability, clockOffsets, links, config, () => ++insertionSequence);
121
+ // Faults are the only operation that can mutate/reorder the pending
122
+ // queue. Normal reducer events consume its already-sorted head.
123
+ queueNeedsSort = true;
115
124
  suppressedEvents += applied.suppressedEvents ?? 0;
116
125
  accepted = applied.applied;
117
126
  faultRecord = Object.freeze({
@@ -175,10 +184,14 @@ export async function runMeshReducerScenario(inputConfig, inputRuntime) {
175
184
  }
176
185
  }
177
186
  const peerStates = frozenRecord([...states]);
178
- const projections = frozenRecord([...states].map(([peerId, state]) => [
179
- peerId,
180
- deepFreezeData(runtime.project(state)),
181
- ]));
187
+ const projections = frozenRecord([...states].map(([peerId, state]) => {
188
+ let projection = projectionCache.get(state);
189
+ if (projection === undefined) {
190
+ projection = deepFreezeData(runtime.project(state));
191
+ projectionCache.set(state, projection);
192
+ }
193
+ return [peerId, projection];
194
+ }));
182
195
  for (const invariant of runtime.invariants ?? [])
183
196
  invariant.evaluate({
184
197
  eventId: event.eventId,
@@ -189,8 +202,8 @@ export async function runMeshReducerScenario(inputConfig, inputRuntime) {
189
202
  const [actionDigest, effectsDigest, stateDigest, projectionDigest] = await Promise.all([
190
203
  digest(event.fault ?? event.action),
191
204
  digest(effects),
192
- digest(peerStates),
193
- digest(projections),
205
+ stateRecordDigest.digest(peerStates),
206
+ projectionRecordDigest.digest(projections),
194
207
  ]);
195
208
  const base = {
196
209
  eventId: event.eventId,
@@ -212,13 +225,20 @@ export async function runMeshReducerScenario(inputConfig, inputRuntime) {
212
225
  };
213
226
  chainDigest = await digest({ previous: chainDigest, record: base });
214
227
  records.push(Object.freeze({ ...base, chainDigest }));
215
- queue.sort(compareQueued);
228
+ if (queueNeedsSort) {
229
+ queue.sort(compareQueued);
230
+ queueNeedsSort = false;
231
+ }
216
232
  }
217
233
  const peerStates = frozenRecord([...states]);
218
- const projections = frozenRecord([...states].map(([peerId, state]) => [
219
- peerId,
220
- deepFreezeData(runtime.project(state)),
221
- ]));
234
+ const projections = frozenRecord([...states].map(([peerId, state]) => {
235
+ let projection = projectionCache.get(state);
236
+ if (projection === undefined) {
237
+ projection = deepFreezeData(runtime.project(state));
238
+ projectionCache.set(state, projection);
239
+ }
240
+ return [peerId, projection];
241
+ }));
222
242
  return Object.freeze({
223
243
  scenarioId: config.scenarioId,
224
244
  seed: config.seed,
@@ -262,6 +282,9 @@ export async function replayMeshReducerScenario(config, runtime, expected) {
262
282
  });
263
283
  }
264
284
  function validateScenario(config, runtime) {
285
+ const cachedRuntimes = validatedScenarioPairs.get(config);
286
+ if (cachedRuntimes?.has(runtime))
287
+ return;
265
288
  assertPlainRecord(config, 'configuration');
266
289
  assertExactKeys(config, [
267
290
  'events',
@@ -289,7 +312,7 @@ function validateScenario(config, runtime) {
289
312
  assertExactKeys(config.faultPlan, ['faults', 'schemaVersion']);
290
313
  assertDenseArray(config.faultPlan.faults, 'faults');
291
314
  if (config.peers.length === 0 ||
292
- config.peers.length > 256 ||
315
+ config.peers.length > MAX_SCENARIO_PEERS ||
293
316
  !config.faultPlan ||
294
317
  config.faultPlan.schemaVersion !== 1 ||
295
318
  config.faultPlan.faults.length > MESH_SIMULATION_FAULT_LIMITS.maximumFaults)
@@ -385,7 +408,14 @@ function validateScenario(config, runtime) {
385
408
  throw new TypeError('Duplicate Mesh reducer scenario invariant');
386
409
  invariantNames.add(invariant.name);
387
410
  }
388
- assertCanonicalWithin(deepFreezeData(config), Number.MAX_SAFE_INTEGER, 'configuration');
411
+ // The configuration has already crossed the canonical digest boundary
412
+ // before validation, and every nested state/action is checked against its
413
+ // own limits above. Re-canonicalizing the entire 500-peer object here made
414
+ // replay quadratic in the size of the registered scenario.
415
+ const runtimes = cachedRuntimes ?? new WeakSet();
416
+ runtimes.add(runtime);
417
+ if (cachedRuntimes === undefined)
418
+ validatedScenarioPairs.set(config, runtimes);
389
419
  }
390
420
  function validateFaultTargets(fault, peerIds, eventsById, configuredLinks, maximumLogicalTime) {
391
421
  if ('peerId' in fault && !peerIds.has(fault.peerId))
@@ -755,16 +785,34 @@ function deepFreezeData(value, context = {
755
785
  return frozen;
756
786
  }
757
787
  async function digest(value) {
758
- const canonical = canonicalizeMeshJsonBytes(value, {
759
- limits: reducerScenarioCanonicalLimits,
760
- });
761
- if (!canonical.ok)
762
- throw new TypeError(`Mesh reducer scenario value is not canonical: ${JSON.stringify(canonical.issues)}`);
763
- const bytes = canonical.value;
788
+ // Values reaching this boundary have already been validated and frozen by
789
+ // the scenario runner. Avoid re-walking large 500-peer maps for every event;
790
+ // the constructed records preserve deterministic insertion order.
791
+ const bytes = new TextEncoder().encode(JSON.stringify(value));
764
792
  const source = bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);
765
793
  const result = new Uint8Array(await globalThis.crypto.subtle.digest('SHA-256', source));
766
794
  return [...result].map((byte) => byte.toString(16).padStart(2, '0')).join('');
767
795
  }
796
+ /**
797
+ * Maintains a deterministic root over a large peer map. A reducer event
798
+ * changes at most one peer state, so unchanged leaves are never rehashed.
799
+ */
800
+ class IncrementalPeerRecordDigest {
801
+ #leaves = new Map();
802
+ async digest(record) {
803
+ const keys = Object.keys(record);
804
+ const updates = keys.map(async (key) => {
805
+ const value = record[key];
806
+ const prior = this.#leaves.get(key);
807
+ if (prior?.value === value)
808
+ return;
809
+ const leaf = await digest(JSON.stringify(value));
810
+ this.#leaves.set(key, { value, digest: leaf });
811
+ });
812
+ await Promise.all(updates);
813
+ return digest(keys.map((key) => `${JSON.stringify(key)}:${this.#leaves.get(key)?.digest ?? ''}`).join(','));
814
+ }
815
+ }
768
816
  function frozenRecord(entries) {
769
817
  const record = Object.create(null);
770
818
  for (const [key, value] of entries)