@agentplat/mesh-sim 0.3.0-beta.2 → 0.3.0-beta.5
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,470 @@
|
|
|
1
|
+
import { scalableEvaluationDigestV1 } from "./scalable-evaluation-validation.js";
|
|
2
|
+
const DIGEST = /^sha256:[0-9a-f]{64}$/u;
|
|
3
|
+
const SIGNATURE = /^[A-Za-z0-9_-]{86}$/u;
|
|
4
|
+
const EVIDENCE_KINDS = new Set([
|
|
5
|
+
"perturbation_injection",
|
|
6
|
+
"recovery_measurement",
|
|
7
|
+
]);
|
|
8
|
+
const verifierBindings = new WeakMap();
|
|
9
|
+
const verifiedPerturbationReceipts = new WeakSet();
|
|
10
|
+
const verifiedRecoveryReceipts = new WeakSet();
|
|
11
|
+
export function createScalableEvaluationEvidenceProviderAuthorizationV1(input) {
|
|
12
|
+
identifier(input.authorizationId, "evidence authorization id");
|
|
13
|
+
identifier(input.providerId, "evidence provider id");
|
|
14
|
+
identifier(input.keyId, "evidence key id");
|
|
15
|
+
if (input.status !== "active" && input.status !== "revoked")
|
|
16
|
+
fail("evidence authorization status is invalid");
|
|
17
|
+
const evidenceKinds = sortedUnique(input.evidenceKinds, (value) => {
|
|
18
|
+
if (!EVIDENCE_KINDS.has(value))
|
|
19
|
+
fail("evidence authorization kind is invalid");
|
|
20
|
+
});
|
|
21
|
+
if (evidenceKinds.length === 0)
|
|
22
|
+
fail("evidence authorization requires at least one kind");
|
|
23
|
+
const teamIds = sortedUnique(input.teamIds, (value) => identifier(value, "evidence authorization team id"));
|
|
24
|
+
if (teamIds.length === 0)
|
|
25
|
+
fail("evidence authorization requires at least one team");
|
|
26
|
+
digest(input.evaluationDefinitionDigest, "evidence definition digest");
|
|
27
|
+
digest(input.scenarioManifestDigest, "evidence scenario digest");
|
|
28
|
+
digest(input.adapterDescriptorDigest, "evidence adapter digest");
|
|
29
|
+
const body = {
|
|
30
|
+
schemaVersion: 1,
|
|
31
|
+
authorizationId: input.authorizationId,
|
|
32
|
+
providerId: input.providerId,
|
|
33
|
+
keyId: input.keyId,
|
|
34
|
+
algorithm: "Ed25519",
|
|
35
|
+
status: input.status,
|
|
36
|
+
evidenceKinds,
|
|
37
|
+
evaluationDefinitionDigest: input.evaluationDefinitionDigest,
|
|
38
|
+
scenarioManifestDigest: input.scenarioManifestDigest,
|
|
39
|
+
adapterDescriptorDigest: input.adapterDescriptorDigest,
|
|
40
|
+
teamIds,
|
|
41
|
+
};
|
|
42
|
+
return freeze({
|
|
43
|
+
...body,
|
|
44
|
+
authorizationDigest: scalableEvaluationDigestV1("evidence-provider-authorization", body),
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
export function validateScalableEvaluationEvidenceProviderAuthorizationV1(input) {
|
|
48
|
+
if (!input || input.schemaVersion !== 1 || input.algorithm !== "Ed25519")
|
|
49
|
+
fail("evidence provider authorization is invalid");
|
|
50
|
+
const rebuilt = createScalableEvaluationEvidenceProviderAuthorizationV1(input);
|
|
51
|
+
if (rebuilt.authorizationDigest !== input.authorizationDigest)
|
|
52
|
+
fail("evidence provider authorization digest is invalid");
|
|
53
|
+
return rebuilt;
|
|
54
|
+
}
|
|
55
|
+
/** Concrete, construction-branded Ed25519 verifier for evaluation evidence. */
|
|
56
|
+
export class WebCryptoScalableEvaluationEvidenceVerifierV1 {
|
|
57
|
+
constructor(options) {
|
|
58
|
+
if (!options ||
|
|
59
|
+
Object.keys(options).some((key) => key !== "authorizations" && key !== "keys"))
|
|
60
|
+
fail("evaluation evidence verifier options are invalid");
|
|
61
|
+
if (!options?.authorizations ||
|
|
62
|
+
typeof options.authorizations.resolve !== "function")
|
|
63
|
+
fail("evaluation evidence authorization resolver is required");
|
|
64
|
+
if (!options.keys || typeof options.keys.resolve !== "function")
|
|
65
|
+
fail("evaluation evidence public-key resolver is required");
|
|
66
|
+
const crypto = globalThis.crypto;
|
|
67
|
+
if (!crypto?.subtle || typeof crypto.subtle.verify !== "function")
|
|
68
|
+
fail("evaluation evidence Web Crypto implementation is required");
|
|
69
|
+
verifierBindings.set(this, {
|
|
70
|
+
resolveAuthorization: options.authorizations.resolve.bind(options.authorizations),
|
|
71
|
+
resolveKey: options.keys.resolve.bind(options.keys),
|
|
72
|
+
verifySignature: crypto.subtle.verify.bind(crypto.subtle),
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
verify(input) {
|
|
76
|
+
return verifyWithBoundWebCrypto(this, input);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/** Fails closed unless the verifier was created by the concrete Web Crypto implementation. */
|
|
80
|
+
export function assertScalableEvaluationEvidenceVerifierV1(verifier) {
|
|
81
|
+
requireConcreteVerifier(verifier);
|
|
82
|
+
}
|
|
83
|
+
export async function issueScalableEvaluationPerturbationInjectionReceiptV1(input) {
|
|
84
|
+
requireSigner(input.signer);
|
|
85
|
+
const body = perturbationEvidenceBody(input);
|
|
86
|
+
const evidenceDigest = scalableEvaluationDigestV1("perturbation-injection-evidence", body);
|
|
87
|
+
const proof = await signProof(input, evidenceDigest);
|
|
88
|
+
const receiptBody = { ...body, evidenceDigest, proof };
|
|
89
|
+
return freeze({
|
|
90
|
+
...receiptBody,
|
|
91
|
+
receiptDigest: scalableEvaluationDigestV1("perturbation-injection-receipt", receiptBody),
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
export async function issueScalableEvaluationRecoveryMeasurementReceiptV1(input) {
|
|
95
|
+
requireSigner(input.signer);
|
|
96
|
+
const body = recoveryEvidenceBody(input);
|
|
97
|
+
const evidenceDigest = scalableEvaluationDigestV1("recovery-measurement-evidence", body);
|
|
98
|
+
const proof = await signProof(input, evidenceDigest);
|
|
99
|
+
const receiptBody = { ...body, evidenceDigest, proof };
|
|
100
|
+
return freeze({
|
|
101
|
+
...receiptBody,
|
|
102
|
+
receiptDigest: scalableEvaluationDigestV1("recovery-measurement-receipt", receiptBody),
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
export async function verifyScalableEvaluationPerturbationInjectionReceiptV1(input) {
|
|
106
|
+
requireConcreteVerifier(input.verifier);
|
|
107
|
+
const value = input.receipt;
|
|
108
|
+
const body = perturbationEvidenceBody(value);
|
|
109
|
+
const evidenceDigest = scalableEvaluationDigestV1("perturbation-injection-evidence", body);
|
|
110
|
+
if (value.evaluationDefinitionDigest !== input.definition.definitionDigest ||
|
|
111
|
+
value.scenarioManifestDigest !== input.definition.scenarioManifestDigest ||
|
|
112
|
+
value.adapterDescriptorDigest !==
|
|
113
|
+
input.definition.adapterDescriptorDigest ||
|
|
114
|
+
value.perturbationId !== input.perturbation.perturbationId ||
|
|
115
|
+
value.teamId !== input.teamId ||
|
|
116
|
+
value.perturbationConfigurationDigest !==
|
|
117
|
+
input.perturbation.configurationDigest ||
|
|
118
|
+
value.sessionId !== input.sessionId ||
|
|
119
|
+
value.episodeId !== input.episodeId ||
|
|
120
|
+
value.scheduledAtLogicalTime !==
|
|
121
|
+
input.perturbation.scheduledAtLogicalTime ||
|
|
122
|
+
value.injectedAtLogicalTime !== input.logicalTime ||
|
|
123
|
+
value.evidenceDigest !== evidenceDigest ||
|
|
124
|
+
!sameProofBinding(value) ||
|
|
125
|
+
value.receiptDigest !==
|
|
126
|
+
scalableEvaluationDigestV1("perturbation-injection-receipt", {
|
|
127
|
+
...body,
|
|
128
|
+
evidenceDigest,
|
|
129
|
+
proof: value.proof,
|
|
130
|
+
}))
|
|
131
|
+
fail("runner_perturbation_receipt_invalid");
|
|
132
|
+
if (!(await verifyWithBoundWebCrypto(input.verifier, {
|
|
133
|
+
evidenceKind: "perturbation_injection",
|
|
134
|
+
definition: input.definition,
|
|
135
|
+
teamId: input.teamId,
|
|
136
|
+
evidenceDigest,
|
|
137
|
+
proof: value.proof,
|
|
138
|
+
})))
|
|
139
|
+
fail("runner_perturbation_evidence_invalid");
|
|
140
|
+
const verified = freeze(value);
|
|
141
|
+
verifiedPerturbationReceipts.add(verified);
|
|
142
|
+
return verified;
|
|
143
|
+
}
|
|
144
|
+
export async function verifyScalableEvaluationRecoveryMeasurementReceiptV1(input) {
|
|
145
|
+
requireConcreteVerifier(input.verifier);
|
|
146
|
+
const value = input.receipt;
|
|
147
|
+
const body = recoveryEvidenceBody(value);
|
|
148
|
+
const evidenceDigest = scalableEvaluationDigestV1("recovery-measurement-evidence", body);
|
|
149
|
+
if (value.sampleId !== input.sampleId ||
|
|
150
|
+
value.evaluationDefinitionDigest !== input.definition.definitionDigest ||
|
|
151
|
+
value.scenarioManifestDigest !== input.definition.scenarioManifestDigest ||
|
|
152
|
+
value.adapterDescriptorDigest !==
|
|
153
|
+
input.definition.adapterDescriptorDigest ||
|
|
154
|
+
value.perturbationId !== input.perturbation.perturbationId ||
|
|
155
|
+
value.perturbationConfigurationDigest !==
|
|
156
|
+
input.perturbation.configurationDigest ||
|
|
157
|
+
value.teamId !== input.teamId ||
|
|
158
|
+
value.domain !== input.perturbation.domain ||
|
|
159
|
+
value.sessionId !== input.sessionId ||
|
|
160
|
+
value.episodeId !== input.episodeId ||
|
|
161
|
+
value.scheduledAtLogicalTime !==
|
|
162
|
+
input.perturbation.scheduledAtLogicalTime ||
|
|
163
|
+
value.logicalTime !== input.logicalTime ||
|
|
164
|
+
value.evidenceDigest !== evidenceDigest ||
|
|
165
|
+
!sameProofBinding(value) ||
|
|
166
|
+
value.receiptDigest !==
|
|
167
|
+
scalableEvaluationDigestV1("recovery-measurement-receipt", {
|
|
168
|
+
...body,
|
|
169
|
+
evidenceDigest,
|
|
170
|
+
proof: value.proof,
|
|
171
|
+
}))
|
|
172
|
+
fail("runner_recovery_measurement_invalid");
|
|
173
|
+
if (!(await verifyWithBoundWebCrypto(input.verifier, {
|
|
174
|
+
evidenceKind: "recovery_measurement",
|
|
175
|
+
definition: input.definition,
|
|
176
|
+
teamId: input.teamId,
|
|
177
|
+
evidenceDigest,
|
|
178
|
+
proof: value.proof,
|
|
179
|
+
})))
|
|
180
|
+
fail("runner_recovery_evidence_invalid");
|
|
181
|
+
const verified = freeze(value);
|
|
182
|
+
verifiedRecoveryReceipts.add(verified);
|
|
183
|
+
return verified;
|
|
184
|
+
}
|
|
185
|
+
/** @internal Runtime boundary check; structural receipts cannot acquire this brand. */
|
|
186
|
+
export function isVerifiedScalableEvaluationPerturbationReceiptV1(value) {
|
|
187
|
+
return Boolean(value &&
|
|
188
|
+
typeof value === "object" &&
|
|
189
|
+
verifiedPerturbationReceipts.has(value));
|
|
190
|
+
}
|
|
191
|
+
/** @internal Runtime boundary check; structural receipts cannot acquire this brand. */
|
|
192
|
+
export function isVerifiedScalableEvaluationRecoveryReceiptV1(value) {
|
|
193
|
+
return Boolean(value && typeof value === "object" && verifiedRecoveryReceipts.has(value));
|
|
194
|
+
}
|
|
195
|
+
function perturbationEvidenceBody(input) {
|
|
196
|
+
validateCommonEvidence(input);
|
|
197
|
+
identifier(input.perturbationId, "perturbation id");
|
|
198
|
+
nonNegativeInteger(input.scheduledAtLogicalTime, "perturbation schedule");
|
|
199
|
+
nonNegativeInteger(input.injectedAtLogicalTime, "perturbation injection time");
|
|
200
|
+
digest(input.perturbationConfigurationDigest, "perturbation configuration digest");
|
|
201
|
+
return {
|
|
202
|
+
schemaVersion: 1,
|
|
203
|
+
evaluationDefinitionDigest: input.evaluationDefinitionDigest,
|
|
204
|
+
scenarioManifestDigest: input.scenarioManifestDigest,
|
|
205
|
+
adapterDescriptorDigest: input.adapterDescriptorDigest,
|
|
206
|
+
perturbationId: input.perturbationId,
|
|
207
|
+
teamId: input.teamId,
|
|
208
|
+
perturbationConfigurationDigest: input.perturbationConfigurationDigest,
|
|
209
|
+
sessionId: input.sessionId,
|
|
210
|
+
episodeId: input.episodeId,
|
|
211
|
+
scheduledAtLogicalTime: input.scheduledAtLogicalTime,
|
|
212
|
+
injectedAtLogicalTime: input.injectedAtLogicalTime,
|
|
213
|
+
accepted: true,
|
|
214
|
+
sourceEvidenceDigest: input.sourceEvidenceDigest,
|
|
215
|
+
providerId: input.providerId,
|
|
216
|
+
keyId: input.keyId,
|
|
217
|
+
authorizationDigest: input.authorizationDigest,
|
|
218
|
+
algorithm: "Ed25519",
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
function recoveryEvidenceBody(input) {
|
|
222
|
+
validateCommonEvidence(input);
|
|
223
|
+
identifier(input.sampleId, "recovery sample id");
|
|
224
|
+
identifier(input.perturbationId, "recovery perturbation id");
|
|
225
|
+
if (!["physical", "social", "cyber"].includes(input.domain))
|
|
226
|
+
fail("recovery evidence domain is invalid");
|
|
227
|
+
nonNegativeInteger(input.scheduledAtLogicalTime, "recovery schedule");
|
|
228
|
+
nonNegativeInteger(input.logicalTime, "recovery sample time");
|
|
229
|
+
digest(input.perturbationConfigurationDigest, "recovery perturbation digest");
|
|
230
|
+
const metrics = normalizeMetrics(input.metrics);
|
|
231
|
+
return {
|
|
232
|
+
schemaVersion: 1,
|
|
233
|
+
sampleId: input.sampleId,
|
|
234
|
+
evaluationDefinitionDigest: input.evaluationDefinitionDigest,
|
|
235
|
+
scenarioManifestDigest: input.scenarioManifestDigest,
|
|
236
|
+
adapterDescriptorDigest: input.adapterDescriptorDigest,
|
|
237
|
+
perturbationId: input.perturbationId,
|
|
238
|
+
perturbationConfigurationDigest: input.perturbationConfigurationDigest,
|
|
239
|
+
teamId: input.teamId,
|
|
240
|
+
domain: input.domain,
|
|
241
|
+
sessionId: input.sessionId,
|
|
242
|
+
episodeId: input.episodeId,
|
|
243
|
+
scheduledAtLogicalTime: input.scheduledAtLogicalTime,
|
|
244
|
+
logicalTime: input.logicalTime,
|
|
245
|
+
metrics,
|
|
246
|
+
sourceEvidenceDigest: input.sourceEvidenceDigest,
|
|
247
|
+
providerId: input.providerId,
|
|
248
|
+
keyId: input.keyId,
|
|
249
|
+
authorizationDigest: input.authorizationDigest,
|
|
250
|
+
algorithm: "Ed25519",
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
function validateCommonEvidence(input) {
|
|
254
|
+
for (const value of [
|
|
255
|
+
input.evaluationDefinitionDigest,
|
|
256
|
+
input.scenarioManifestDigest,
|
|
257
|
+
input.adapterDescriptorDigest,
|
|
258
|
+
input.sourceEvidenceDigest,
|
|
259
|
+
input.authorizationDigest,
|
|
260
|
+
])
|
|
261
|
+
digest(value, "evaluation evidence digest");
|
|
262
|
+
for (const [label, value] of [
|
|
263
|
+
["team id", input.teamId],
|
|
264
|
+
["session id", input.sessionId],
|
|
265
|
+
["episode id", input.episodeId],
|
|
266
|
+
["provider id", input.providerId],
|
|
267
|
+
["key id", input.keyId],
|
|
268
|
+
])
|
|
269
|
+
identifier(value, label);
|
|
270
|
+
}
|
|
271
|
+
async function signProof(input, evidenceDigest) {
|
|
272
|
+
const value = await input.signer.sign({
|
|
273
|
+
providerId: input.providerId,
|
|
274
|
+
keyId: input.keyId,
|
|
275
|
+
algorithm: "Ed25519",
|
|
276
|
+
evidenceDigest,
|
|
277
|
+
});
|
|
278
|
+
if (!isCanonicalSignature(value))
|
|
279
|
+
fail("evaluation evidence signature is invalid");
|
|
280
|
+
return freeze({
|
|
281
|
+
algorithm: "Ed25519",
|
|
282
|
+
providerId: input.providerId,
|
|
283
|
+
keyId: input.keyId,
|
|
284
|
+
authorizationDigest: input.authorizationDigest,
|
|
285
|
+
value,
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
function sameProofBinding(input) {
|
|
289
|
+
return (input.algorithm === "Ed25519" &&
|
|
290
|
+
input.proof?.algorithm === input.algorithm &&
|
|
291
|
+
input.proof.providerId === input.providerId &&
|
|
292
|
+
input.proof.keyId === input.keyId &&
|
|
293
|
+
input.proof.authorizationDigest === input.authorizationDigest &&
|
|
294
|
+
isCanonicalSignature(input.proof.value));
|
|
295
|
+
}
|
|
296
|
+
async function verifyWithBoundWebCrypto(verifier, input) {
|
|
297
|
+
const binding = verifierBindings.get(verifier);
|
|
298
|
+
if (!binding)
|
|
299
|
+
fail("concrete evaluation evidence Ed25519 verifier is required");
|
|
300
|
+
if (!EVIDENCE_KINDS.has(input.evidenceKind) || !sameProof(input.proof))
|
|
301
|
+
return false;
|
|
302
|
+
const rawAuthorization = await binding.resolveAuthorization({
|
|
303
|
+
providerId: input.proof.providerId,
|
|
304
|
+
keyId: input.proof.keyId,
|
|
305
|
+
authorizationDigest: input.proof.authorizationDigest,
|
|
306
|
+
});
|
|
307
|
+
if (!rawAuthorization)
|
|
308
|
+
return false;
|
|
309
|
+
let authorization;
|
|
310
|
+
try {
|
|
311
|
+
authorization =
|
|
312
|
+
validateScalableEvaluationEvidenceProviderAuthorizationV1(rawAuthorization);
|
|
313
|
+
}
|
|
314
|
+
catch {
|
|
315
|
+
return false;
|
|
316
|
+
}
|
|
317
|
+
if (authorization.status !== "active" ||
|
|
318
|
+
authorization.providerId !== input.proof.providerId ||
|
|
319
|
+
authorization.keyId !== input.proof.keyId ||
|
|
320
|
+
authorization.authorizationDigest !== input.proof.authorizationDigest ||
|
|
321
|
+
!authorization.evidenceKinds.includes(input.evidenceKind) ||
|
|
322
|
+
authorization.evaluationDefinitionDigest !==
|
|
323
|
+
input.definition.definitionDigest ||
|
|
324
|
+
authorization.scenarioManifestDigest !==
|
|
325
|
+
input.definition.scenarioManifestDigest ||
|
|
326
|
+
authorization.adapterDescriptorDigest !==
|
|
327
|
+
input.definition.adapterDescriptorDigest ||
|
|
328
|
+
!authorization.teamIds.includes(input.teamId))
|
|
329
|
+
return false;
|
|
330
|
+
const key = await binding.resolveKey({
|
|
331
|
+
providerId: authorization.providerId,
|
|
332
|
+
keyId: authorization.keyId,
|
|
333
|
+
algorithm: authorization.algorithm,
|
|
334
|
+
});
|
|
335
|
+
if (!isEd25519VerificationKey(key))
|
|
336
|
+
return false;
|
|
337
|
+
let signature;
|
|
338
|
+
try {
|
|
339
|
+
signature = decodeBase64Url(input.proof.value);
|
|
340
|
+
}
|
|
341
|
+
catch {
|
|
342
|
+
return false;
|
|
343
|
+
}
|
|
344
|
+
if (signature.byteLength !== 64)
|
|
345
|
+
return false;
|
|
346
|
+
const signatureBuffer = new ArrayBuffer(signature.byteLength);
|
|
347
|
+
new Uint8Array(signatureBuffer).set(signature);
|
|
348
|
+
const message = new TextEncoder().encode(input.evidenceDigest);
|
|
349
|
+
try {
|
|
350
|
+
return await binding.verifySignature("Ed25519", key, signatureBuffer, message.buffer);
|
|
351
|
+
}
|
|
352
|
+
catch {
|
|
353
|
+
return false;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
function requireConcreteVerifier(verifier) {
|
|
357
|
+
if (!verifier || !verifierBindings.has(verifier))
|
|
358
|
+
fail("concrete evaluation evidence Ed25519 verifier is required");
|
|
359
|
+
}
|
|
360
|
+
function requireSigner(signer) {
|
|
361
|
+
if (!signer || typeof signer.sign !== "function")
|
|
362
|
+
fail("evaluation evidence signer is required");
|
|
363
|
+
}
|
|
364
|
+
function sameProof(value) {
|
|
365
|
+
return Boolean(value &&
|
|
366
|
+
value.algorithm === "Ed25519" &&
|
|
367
|
+
typeof value.providerId === "string" &&
|
|
368
|
+
typeof value.keyId === "string" &&
|
|
369
|
+
DIGEST.test(value.authorizationDigest) &&
|
|
370
|
+
isCanonicalSignature(value.value));
|
|
371
|
+
}
|
|
372
|
+
function isEd25519VerificationKey(value) {
|
|
373
|
+
return Boolean(value &&
|
|
374
|
+
value.type === "public" &&
|
|
375
|
+
value.algorithm?.name === "Ed25519" &&
|
|
376
|
+
value.usages.length === 1 &&
|
|
377
|
+
value.usages[0] === "verify");
|
|
378
|
+
}
|
|
379
|
+
function decodeBase64Url(value) {
|
|
380
|
+
if (!isCanonicalSignature(value))
|
|
381
|
+
fail("evaluation evidence signature is invalid");
|
|
382
|
+
const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
383
|
+
const normalized = value.replace(/-/gu, "+").replace(/_/gu, "/");
|
|
384
|
+
const output = [];
|
|
385
|
+
for (let index = 0; index < normalized.length; index += 4) {
|
|
386
|
+
const chars = normalized.slice(index, index + 4);
|
|
387
|
+
const values = [...chars].map((character) => alphabet.indexOf(character));
|
|
388
|
+
if (values.some((item) => item < 0))
|
|
389
|
+
fail("evaluation evidence signature is invalid");
|
|
390
|
+
const block = ((values[0] ?? 0) << 18) |
|
|
391
|
+
((values[1] ?? 0) << 12) |
|
|
392
|
+
((values[2] ?? 0) << 6) |
|
|
393
|
+
(values[3] ?? 0);
|
|
394
|
+
output.push((block >>> 16) & 255);
|
|
395
|
+
if (chars.length > 2)
|
|
396
|
+
output.push((block >>> 8) & 255);
|
|
397
|
+
if (chars.length > 3)
|
|
398
|
+
output.push(block & 255);
|
|
399
|
+
}
|
|
400
|
+
return new Uint8Array(output);
|
|
401
|
+
}
|
|
402
|
+
function isCanonicalSignature(value) {
|
|
403
|
+
if (!SIGNATURE.test(value))
|
|
404
|
+
return false;
|
|
405
|
+
const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
|
|
406
|
+
const finalSextet = alphabet.indexOf(value.at(-1));
|
|
407
|
+
return finalSextet >= 0 && (finalSextet & 0x0f) === 0;
|
|
408
|
+
}
|
|
409
|
+
function normalizeMetrics(input) {
|
|
410
|
+
if (!Array.isArray(input) || input.length === 0 || input.length > 64)
|
|
411
|
+
fail("recovery evidence metrics are invalid");
|
|
412
|
+
const metrics = input.map((metric) => {
|
|
413
|
+
identifier(metric.metricId, "recovery evidence metric id");
|
|
414
|
+
if (!Number.isSafeInteger(metric.valueBasisPoints))
|
|
415
|
+
fail("recovery evidence metric value is invalid");
|
|
416
|
+
return {
|
|
417
|
+
metricId: metric.metricId,
|
|
418
|
+
valueBasisPoints: metric.valueBasisPoints,
|
|
419
|
+
};
|
|
420
|
+
});
|
|
421
|
+
metrics.sort((left, right) => compareCodeUnits(left.metricId, right.metricId));
|
|
422
|
+
if (metrics.some((metric, index) => index > 0 && metrics[index - 1].metricId === metric.metricId))
|
|
423
|
+
fail("recovery evidence metric is duplicated");
|
|
424
|
+
return freeze(metrics);
|
|
425
|
+
}
|
|
426
|
+
function sortedUnique(input, validate) {
|
|
427
|
+
if (!Array.isArray(input) || input.length > 256)
|
|
428
|
+
fail("evaluation evidence list is invalid");
|
|
429
|
+
const result = [...input];
|
|
430
|
+
for (const value of result)
|
|
431
|
+
validate(value);
|
|
432
|
+
result.sort(compareCodeUnits);
|
|
433
|
+
if (new Set(result).size !== result.length)
|
|
434
|
+
fail("evaluation evidence list contains duplicates");
|
|
435
|
+
return freeze(result);
|
|
436
|
+
}
|
|
437
|
+
function compareCodeUnits(left, right) {
|
|
438
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
439
|
+
}
|
|
440
|
+
function identifier(value, label) {
|
|
441
|
+
if (typeof value !== "string" ||
|
|
442
|
+
value.length === 0 ||
|
|
443
|
+
value.length > 256 ||
|
|
444
|
+
!/^[A-Za-z0-9][A-Za-z0-9._:@/+=-]*$/u.test(value))
|
|
445
|
+
fail(`${label} is invalid`);
|
|
446
|
+
}
|
|
447
|
+
function digest(value, label) {
|
|
448
|
+
if (typeof value !== "string" || !DIGEST.test(value))
|
|
449
|
+
fail(`${label} is invalid`);
|
|
450
|
+
}
|
|
451
|
+
function nonNegativeInteger(value, label) {
|
|
452
|
+
if (!Number.isSafeInteger(value) || value < 0)
|
|
453
|
+
fail(`${label} is invalid`);
|
|
454
|
+
}
|
|
455
|
+
function freeze(value) {
|
|
456
|
+
const clone = structuredClone(value);
|
|
457
|
+
const visit = (item) => {
|
|
458
|
+
if (!item || typeof item !== "object" || Object.isFrozen(item))
|
|
459
|
+
return;
|
|
460
|
+
for (const child of Object.values(item))
|
|
461
|
+
visit(child);
|
|
462
|
+
Object.freeze(item);
|
|
463
|
+
};
|
|
464
|
+
visit(clone);
|
|
465
|
+
return clone;
|
|
466
|
+
}
|
|
467
|
+
function fail(message) {
|
|
468
|
+
throw new TypeError(message);
|
|
469
|
+
}
|
|
470
|
+
//# sourceMappingURL=scalable-evaluation-evidence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scalable-evaluation-evidence.js","sourceRoot":"","sources":["../src/scalable-evaluation-evidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { type MissionIntentV1, type PlanningDigestV1 } from "@agentplat/collective-planning";
|
|
2
|
+
import { type AssuranceExecutionAuthorityFenceV1, type ProtectedEffectReceiptV1 } from "@agentplat/collective-host/assurance-coupled-execution";
|
|
3
|
+
import type { DistributedCollectiveSparsePlanePortV1 } from "@agentplat/collective-host/distributed-protocol";
|
|
4
|
+
import { type ReferenceIntegratedCollectiveStackV1, type ReferenceRecoveryAssignmentAuthorityV1 } from "@agentplat/collective-host/reference-integrated-stack";
|
|
5
|
+
import { type MeshSparsePeerPlaneOptionsV1, type MeshSparsePeerPlanePublishResultV1 } from "@agentplat/mesh/overlay";
|
|
6
|
+
import type { MultiDomainEnvironmentDescriptorV1 } from "./multi-domain-environment-contracts.js";
|
|
7
|
+
import type { ScalableEvaluationTeamDescriptorV1, ScalableEvaluationDefinitionV1, ScalableEvaluationTeamPortV1 } from "./scalable-evaluation-contracts.js";
|
|
8
|
+
export declare const REFERENCE_INTEGRATED_SCALABLE_EVALUATION_IMPLEMENTATION_ID_V1: "agentplat.reference-integrated-collective-stack.v1";
|
|
9
|
+
export interface ReferenceIntegratedScalableEvaluationScopeV1 {
|
|
10
|
+
readonly tenantId: string;
|
|
11
|
+
readonly meshId: string;
|
|
12
|
+
readonly missionIntentId: string;
|
|
13
|
+
readonly objectiveId: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ReferenceIntegratedScalableEvaluationEgressOptionsV1 {
|
|
16
|
+
/** Real sparse-plane dependencies; the egress installs its nominal capture queue. */
|
|
17
|
+
readonly plane: Omit<MeshSparsePeerPlaneOptionsV1, "deliveryQueue">;
|
|
18
|
+
readonly descriptor: MultiDomainEnvironmentDescriptorV1;
|
|
19
|
+
readonly localPeerId: string;
|
|
20
|
+
readonly recoveryPeerId?: string;
|
|
21
|
+
readonly scope: ReferenceIntegratedScalableEvaluationScopeV1;
|
|
22
|
+
/** Digest of the exact objective binding used by the peer-local mission. */
|
|
23
|
+
readonly objectiveDigest: PlanningDigestV1;
|
|
24
|
+
readonly membershipConfigurationDigest: string;
|
|
25
|
+
readonly membershipEpoch: number;
|
|
26
|
+
readonly assignmentEpoch?: number;
|
|
27
|
+
readonly fencingTokenPrefix?: string;
|
|
28
|
+
readonly maximumCapturedDeliveries?: number;
|
|
29
|
+
readonly maximumCapturedEffects?: number;
|
|
30
|
+
readonly maximumSettledReceipts?: number;
|
|
31
|
+
readonly crypto?: Crypto;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Nominal evaluation boundary used as both the stack's sparse plane and its
|
|
35
|
+
* recovery-aware execution authority. Protected commits land in an outbox;
|
|
36
|
+
* only the outer evaluation runner applies them to the environment. Capture
|
|
37
|
+
* state is process-local evaluation state, not a production durable sink.
|
|
38
|
+
*/
|
|
39
|
+
export declare class ReferenceIntegratedScalableEvaluationEgressRuntimeV1 implements DistributedCollectiveSparsePlanePortV1, ReferenceRecoveryAssignmentAuthorityV1 {
|
|
40
|
+
constructor(options: ReferenceIntegratedScalableEvaluationEgressOptionsV1);
|
|
41
|
+
publish(input: Parameters<DistributedCollectiveSparsePlanePortV1["publish"]>[0]): Promise<MeshSparsePeerPlanePublishResultV1>;
|
|
42
|
+
resolve(input: Parameters<ReferenceRecoveryAssignmentAuthorityV1["resolve"]>[0]): Promise<AssuranceExecutionAuthorityFenceV1 | null>;
|
|
43
|
+
install(input: Parameters<ReferenceRecoveryAssignmentAuthorityV1["install"]>[0]): Promise<{
|
|
44
|
+
readonly assignmentEpoch: number;
|
|
45
|
+
readonly fencingToken: string;
|
|
46
|
+
readonly installedAtLogicalMs: number;
|
|
47
|
+
}>;
|
|
48
|
+
commit(input: Parameters<ReferenceRecoveryAssignmentAuthorityV1["commit"]>[0]): Promise<ProtectedEffectReceiptV1>;
|
|
49
|
+
reconcile(input: Parameters<ReferenceRecoveryAssignmentAuthorityV1["reconcile"]>[0]): Promise<ProtectedEffectReceiptV1 | null>;
|
|
50
|
+
}
|
|
51
|
+
export declare function isReferenceIntegratedScalableEvaluationEgressV1(value: unknown): value is ReferenceIntegratedScalableEvaluationEgressRuntimeV1;
|
|
52
|
+
export interface ReferenceIntegratedScalableEvaluationEgressSnapshotV1 {
|
|
53
|
+
readonly schemaVersion: 1;
|
|
54
|
+
readonly localPeerIndex: number;
|
|
55
|
+
readonly localPeerId: string;
|
|
56
|
+
readonly capturedDeliveryCount: number;
|
|
57
|
+
readonly capturedEffectCount: number;
|
|
58
|
+
readonly settledDeliveryCount: number;
|
|
59
|
+
readonly settledEffectCount: number;
|
|
60
|
+
readonly latestDeliveryCaptureDigest: PlanningDigestV1 | null;
|
|
61
|
+
readonly latestEffectCaptureDigest: PlanningDigestV1 | null;
|
|
62
|
+
}
|
|
63
|
+
/** Read-only bounded evidence about the nominal egress; payloads stay private. */
|
|
64
|
+
export declare function inspectReferenceIntegratedScalableEvaluationEgressV1(value: ReferenceIntegratedScalableEvaluationEgressRuntimeV1): ReferenceIntegratedScalableEvaluationEgressSnapshotV1;
|
|
65
|
+
export interface ReferenceIntegratedScalableEvaluationPeerV1 {
|
|
66
|
+
readonly schemaVersion: 1;
|
|
67
|
+
readonly peerIndex: number;
|
|
68
|
+
readonly stack: ReferenceIntegratedCollectiveStackV1;
|
|
69
|
+
readonly egress: ReferenceIntegratedScalableEvaluationEgressRuntimeV1;
|
|
70
|
+
readonly missionIntent: MissionIntentV1;
|
|
71
|
+
readonly observationSchemaDigest: PlanningDigestV1;
|
|
72
|
+
}
|
|
73
|
+
export declare function bindReferenceIntegratedScalableEvaluationPeerV1(input: {
|
|
74
|
+
readonly peerIndex: number;
|
|
75
|
+
readonly stack: ReferenceIntegratedCollectiveStackV1;
|
|
76
|
+
readonly egress: ReferenceIntegratedScalableEvaluationEgressRuntimeV1;
|
|
77
|
+
readonly missionIntent: MissionIntentV1;
|
|
78
|
+
readonly observationSchemaDigest: PlanningDigestV1;
|
|
79
|
+
}): ReferenceIntegratedScalableEvaluationPeerV1;
|
|
80
|
+
export declare function isReferenceIntegratedScalableEvaluationPeerV1(value: unknown): value is ReferenceIntegratedScalableEvaluationPeerV1;
|
|
81
|
+
export declare function createReferenceIntegratedScalableEvaluationTeamPortV1(input: {
|
|
82
|
+
readonly descriptor: ScalableEvaluationTeamDescriptorV1;
|
|
83
|
+
readonly definition: ScalableEvaluationDefinitionV1;
|
|
84
|
+
readonly peers: readonly ReferenceIntegratedScalableEvaluationPeerV1[];
|
|
85
|
+
}): ScalableEvaluationTeamPortV1;
|
|
86
|
+
export declare function isReferenceIntegratedScalableEvaluationTeamPortV1(value: unknown): value is ScalableEvaluationTeamPortV1;
|
|
87
|
+
//# sourceMappingURL=scalable-evaluation-reference-integrated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scalable-evaluation-reference-integrated.d.ts","sourceRoot":"","sources":["../src/scalable-evaluation-reference-integrated.ts"],"names":[],"mappings":"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"}
|