@agentplat/trust 0.3.0-beta.3 → 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/dist/evidence-fusion-strategy.d.ts +28 -0
- package/dist/evidence-fusion-strategy.d.ts.map +1 -0
- package/dist/evidence-fusion-strategy.js +61 -0
- package/dist/evidence-fusion-strategy.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/propagation.d.ts +51 -0
- package/dist/propagation.d.ts.map +1 -0
- package/dist/propagation.js +88 -0
- package/dist/propagation.js.map +1 -0
- package/package.json +10 -2
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { EvidenceFusionDecisionV1, EvidenceFusionEvaluationRequestV1, EvidenceTrustStateV1 } from "./types.js";
|
|
2
|
+
/** Stable descriptor for a pluggable evidence-fusion algorithm. */
|
|
3
|
+
export interface EvidenceFusionStrategyDescriptorV1 {
|
|
4
|
+
readonly schemaVersion: 1;
|
|
5
|
+
readonly strategyId: string;
|
|
6
|
+
readonly strategyVersion: number;
|
|
7
|
+
readonly capabilities: readonly string[];
|
|
8
|
+
readonly descriptorDigest: string;
|
|
9
|
+
}
|
|
10
|
+
export interface EvidenceFusionStrategyV1 extends EvidenceFusionStrategyDescriptorV1 {
|
|
11
|
+
evaluate(input: {
|
|
12
|
+
readonly state: EvidenceTrustStateV1;
|
|
13
|
+
readonly request: EvidenceFusionEvaluationRequestV1;
|
|
14
|
+
readonly logicalTimeMs: number;
|
|
15
|
+
}): EvidenceFusionDecisionV1;
|
|
16
|
+
}
|
|
17
|
+
export declare function digestEvidenceFusionStrategyDescriptorV1(descriptor: Pick<EvidenceFusionStrategyDescriptorV1, "schemaVersion" | "strategyId" | "strategyVersion" | "capabilities">): string;
|
|
18
|
+
export declare function validateEvidenceFusionStrategyDescriptorV1(descriptor: EvidenceFusionStrategyDescriptorV1): EvidenceFusionStrategyDescriptorV1;
|
|
19
|
+
/** Registry with deterministic replacement semantics for strategy versions. */
|
|
20
|
+
export declare class EvidenceFusionStrategyRegistryV1 {
|
|
21
|
+
#private;
|
|
22
|
+
register(strategy: EvidenceFusionStrategyV1): this;
|
|
23
|
+
get(strategyId: string, strategyVersion: number): EvidenceFusionStrategyV1;
|
|
24
|
+
list(): readonly EvidenceFusionStrategyDescriptorV1[];
|
|
25
|
+
}
|
|
26
|
+
export declare const referenceEvidenceFusionStrategyV1: EvidenceFusionStrategyV1;
|
|
27
|
+
export declare const defaultEvidenceFusionStrategyV1: EvidenceFusionStrategyV1;
|
|
28
|
+
//# sourceMappingURL=evidence-fusion-strategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence-fusion-strategy.d.ts","sourceRoot":"","sources":["../src/evidence-fusion-strategy.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,wBAAwB,EACxB,iCAAiC,EACjC,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAEpB,mEAAmE;AACnE,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,wBACf,SAAQ,kCAAkC;IAC1C,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;QACrC,QAAQ,CAAC,OAAO,EAAE,iCAAiC,CAAC;QACpD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;KAChC,GAAG,wBAAwB,CAAC;CAC9B;AAcD,wBAAgB,wCAAwC,CACtD,UAAU,EAAE,IAAI,CACd,kCAAkC,EAClC,eAAe,GAAG,YAAY,GAAG,iBAAiB,GAAG,cAAc,CACpE,GACA,MAAM,CAKR;AAED,wBAAgB,0CAA0C,CACxD,UAAU,EAAE,kCAAkC,GAC7C,kCAAkC,CAapC;AAED,+EAA+E;AAC/E,qBAAa,gCAAgC;;IAG3C,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,GAAG,IAAI;IASlD,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,wBAAwB;IAM1E,IAAI,IAAI,SAAS,kCAAkC,EAAE;CAOtD;AAeD,eAAO,MAAM,iCAAiC,EAAE,wBAI9C,CAAC;AAEH,eAAO,MAAM,+BAA+B,0BAAoC,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { digestTrustJsonV1, TrustValidationError } from "./canonical.js";
|
|
2
|
+
import { evaluateEvidenceFusionV1 } from "./fusion.js";
|
|
3
|
+
const descriptorPayload = (strategy) => ({
|
|
4
|
+
schemaVersion: strategy.schemaVersion,
|
|
5
|
+
strategyId: strategy.strategyId,
|
|
6
|
+
strategyVersion: strategy.strategyVersion,
|
|
7
|
+
capabilities: [...strategy.capabilities],
|
|
8
|
+
});
|
|
9
|
+
export function digestEvidenceFusionStrategyDescriptorV1(descriptor) {
|
|
10
|
+
return digestTrustJsonV1("trace", descriptorPayload(descriptor));
|
|
11
|
+
}
|
|
12
|
+
export function validateEvidenceFusionStrategyDescriptorV1(descriptor) {
|
|
13
|
+
if (descriptor.schemaVersion !== 1 ||
|
|
14
|
+
!descriptor.strategyId ||
|
|
15
|
+
!Number.isSafeInteger(descriptor.strategyVersion) ||
|
|
16
|
+
descriptor.strategyVersion < 1 ||
|
|
17
|
+
!Array.isArray(descriptor.capabilities) ||
|
|
18
|
+
descriptor.capabilities.some((item) => typeof item !== "string") ||
|
|
19
|
+
[...descriptor.capabilities].sort().some((item, index, all) => index > 0 && item === all[index - 1]) ||
|
|
20
|
+
descriptor.descriptorDigest !== digestEvidenceFusionStrategyDescriptorV1(descriptor))
|
|
21
|
+
throw new TrustValidationError("evidence fusion strategy descriptor is invalid");
|
|
22
|
+
return Object.freeze({ ...descriptor, capabilities: Object.freeze([...descriptor.capabilities]) });
|
|
23
|
+
}
|
|
24
|
+
/** Registry with deterministic replacement semantics for strategy versions. */
|
|
25
|
+
export class EvidenceFusionStrategyRegistryV1 {
|
|
26
|
+
#strategies = new Map();
|
|
27
|
+
register(strategy) {
|
|
28
|
+
const validated = validateEvidenceFusionStrategyDescriptorV1(strategy);
|
|
29
|
+
const key = `${validated.strategyId}\0${validated.strategyVersion}`;
|
|
30
|
+
if (this.#strategies.has(key))
|
|
31
|
+
throw new TrustValidationError("evidence fusion strategy version already registered");
|
|
32
|
+
this.#strategies.set(key, strategy);
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
get(strategyId, strategyVersion) {
|
|
36
|
+
const strategy = this.#strategies.get(`${strategyId}\0${strategyVersion}`);
|
|
37
|
+
if (!strategy)
|
|
38
|
+
throw new TrustValidationError("evidence fusion strategy is unavailable");
|
|
39
|
+
return strategy;
|
|
40
|
+
}
|
|
41
|
+
list() {
|
|
42
|
+
return Object.freeze([...this.#strategies.values()]
|
|
43
|
+
.sort((a, b) => `${a.strategyId}\0${a.strategyVersion}`.localeCompare(`${b.strategyId}\0${b.strategyVersion}`))
|
|
44
|
+
.map(({ evaluate: _evaluate, ...descriptor }) => Object.freeze(descriptor)));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/** Reference implementation preserving the existing deterministic fusion algorithm. */
|
|
48
|
+
const referenceEvaluateV1 = ({ state, request, logicalTimeMs }) => evaluateEvidenceFusionV1(state, request, logicalTimeMs);
|
|
49
|
+
const referenceDescriptorV1 = {
|
|
50
|
+
schemaVersion: 1,
|
|
51
|
+
strategyId: "weighted-threshold",
|
|
52
|
+
strategyVersion: 1,
|
|
53
|
+
capabilities: Object.freeze(["deterministic", "weighted-threshold", "dependency-aware"]),
|
|
54
|
+
};
|
|
55
|
+
export const referenceEvidenceFusionStrategyV1 = Object.freeze({
|
|
56
|
+
...referenceDescriptorV1,
|
|
57
|
+
descriptorDigest: digestEvidenceFusionStrategyDescriptorV1(referenceDescriptorV1),
|
|
58
|
+
evaluate: referenceEvaluateV1,
|
|
59
|
+
});
|
|
60
|
+
export const defaultEvidenceFusionStrategyV1 = referenceEvidenceFusionStrategyV1;
|
|
61
|
+
//# sourceMappingURL=evidence-fusion-strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence-fusion-strategy.js","sourceRoot":"","sources":["../src/evidence-fusion-strategy.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -11,4 +11,6 @@ export * from "./quarantine.js";
|
|
|
11
11
|
export * from "./state.js";
|
|
12
12
|
export * from "./lifecycle.js";
|
|
13
13
|
export * from "./peer-credibility.js";
|
|
14
|
+
export * from "./propagation.js";
|
|
15
|
+
export * from "./evidence-fusion-strategy.js";
|
|
14
16
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/** A bounded, content-bound hop in a propagated message's custody chain. */
|
|
2
|
+
export interface PropagationHopV1 {
|
|
3
|
+
readonly hopIndex: number;
|
|
4
|
+
readonly senderId: string;
|
|
5
|
+
readonly receiverId: string;
|
|
6
|
+
readonly previousHopDigest: string | null;
|
|
7
|
+
readonly hopDigest: string;
|
|
8
|
+
}
|
|
9
|
+
export type PropagationDispositionV1 = "active" | "quarantined" | "blocked";
|
|
10
|
+
/**
|
|
11
|
+
* Transport-neutral envelope for content that may cross agent boundaries.
|
|
12
|
+
* The envelope is deliberately independent of a transport or model provider.
|
|
13
|
+
*/
|
|
14
|
+
export interface PropagatedContentV1 {
|
|
15
|
+
readonly schemaVersion: 1;
|
|
16
|
+
readonly contentDigest: string;
|
|
17
|
+
readonly originId: string;
|
|
18
|
+
readonly originProofDigest: string;
|
|
19
|
+
readonly hops: readonly PropagationHopV1[];
|
|
20
|
+
readonly propagationBudget: number;
|
|
21
|
+
readonly forwardsUsed: number;
|
|
22
|
+
readonly disposition: PropagationDispositionV1;
|
|
23
|
+
readonly quarantineReason: string | null;
|
|
24
|
+
}
|
|
25
|
+
export interface PropagationPolicyV1 {
|
|
26
|
+
readonly maximumHops: number;
|
|
27
|
+
readonly maximumForwards: number;
|
|
28
|
+
readonly quarantineOnBudgetExhaustion: boolean;
|
|
29
|
+
readonly quarantineOnOriginMismatch: boolean;
|
|
30
|
+
readonly blockQuarantinedForwarding: boolean;
|
|
31
|
+
}
|
|
32
|
+
export interface PropagationAssessmentV1 {
|
|
33
|
+
readonly allowed: boolean;
|
|
34
|
+
readonly disposition: PropagationDispositionV1;
|
|
35
|
+
readonly reasonCodes: readonly ("origin_invalid" | "hop_invalid" | "budget_exhausted" | "quarantine_active" | "forwarding_blocked")[];
|
|
36
|
+
readonly envelope: PropagatedContentV1;
|
|
37
|
+
}
|
|
38
|
+
export declare function propagationHopDigestV1(hop: Omit<PropagationHopV1, "hopDigest"> & {
|
|
39
|
+
readonly contentDigest: string;
|
|
40
|
+
}): string;
|
|
41
|
+
export declare function createPropagatedContentV1(input: {
|
|
42
|
+
readonly contentDigest: string;
|
|
43
|
+
readonly originId: string;
|
|
44
|
+
readonly originProofDigest?: string;
|
|
45
|
+
readonly propagationBudget: number;
|
|
46
|
+
}): PropagatedContentV1;
|
|
47
|
+
export declare function appendPropagationHopV1(envelope: PropagatedContentV1, senderId: string, receiverId: string, policy: PropagationPolicyV1): PropagationAssessmentV1;
|
|
48
|
+
export declare function assessPropagationV1(envelope: PropagatedContentV1, policy: PropagationPolicyV1): PropagationAssessmentV1;
|
|
49
|
+
export declare const canForwardPropagatedContentV1: (envelope: PropagatedContentV1, policy: PropagationPolicyV1) => boolean;
|
|
50
|
+
export declare function validatePropagationEnvelopeV1(value: unknown): asserts value is PropagatedContentV1;
|
|
51
|
+
//# sourceMappingURL=propagation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"propagation.d.ts","sourceRoot":"","sources":["../src/propagation.ts"],"names":[],"mappings":"AAIA,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,MAAM,wBAAwB,GAAG,QAAQ,GAAG,aAAa,GAAG,SAAS,CAAC;AAE5E;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC3C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,wBAAwB,CAAC;IAC/C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,4BAA4B,EAAE,OAAO,CAAC;IAC/C,QAAQ,CAAC,0BAA0B,EAAE,OAAO,CAAC;IAC7C,QAAQ,CAAC,0BAA0B,EAAE,OAAO,CAAC;CAC9C;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,wBAAwB,CAAC;IAC/C,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,gBAAgB,GAAG,aAAa,GAAG,kBAAkB,GAAG,mBAAmB,GAAG,oBAAoB,CAAC,EAAE,CAAC;IACtI,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;CACxC;AAcD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,GAAG;IAAE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAG5H;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC,GAAG,mBAAmB,CAQtB;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,uBAAuB,CAgBhK;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,MAAM,EAAE,mBAAmB,GAAG,uBAAuB,CAKvH;AAED,eAAO,MAAM,6BAA6B,GAAI,UAAU,mBAAmB,EAAE,QAAQ,mBAAmB,KAAG,OAAwD,CAAC;AAMpK,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,mBAAmB,CAgBlG"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { deepFreeze, digestTrustJsonV1, TrustValidationError } from "./canonical.js";
|
|
2
|
+
import { assertExactKeys, assertIdentifier, assertSafeInteger, assertTrustDigest } from "./validation.js";
|
|
3
|
+
const dispositionValues = ["active", "quarantined", "blocked"];
|
|
4
|
+
const digest = (value) => digestTrustJsonV1("origin-proof", value);
|
|
5
|
+
const hopPayload = (hopIndex, senderId, receiverId, previousHopDigest, contentDigest) => ({
|
|
6
|
+
schemaVersion: 1, hopIndex, senderId, receiverId, previousHopDigest, contentDigest,
|
|
7
|
+
});
|
|
8
|
+
function validatePolicy(policy) {
|
|
9
|
+
assertSafeInteger(policy.maximumHops, "maximumHops");
|
|
10
|
+
assertSafeInteger(policy.maximumForwards, "maximumForwards");
|
|
11
|
+
if (policy.maximumHops < 0 || policy.maximumForwards < 0)
|
|
12
|
+
throw new TrustValidationError("propagation limits must be non-negative");
|
|
13
|
+
}
|
|
14
|
+
export function propagationHopDigestV1(hop) {
|
|
15
|
+
assertTrustDigest(hop.contentDigest, "contentDigest");
|
|
16
|
+
return digest(hopPayload(hop.hopIndex, hop.senderId, hop.receiverId, hop.previousHopDigest, hop.contentDigest));
|
|
17
|
+
}
|
|
18
|
+
export function createPropagatedContentV1(input) {
|
|
19
|
+
assertTrustDigest(input.contentDigest, "contentDigest");
|
|
20
|
+
assertIdentifier(input.originId, "originId");
|
|
21
|
+
assertSafeInteger(input.propagationBudget, "propagationBudget");
|
|
22
|
+
if (input.propagationBudget < 0)
|
|
23
|
+
throw new TrustValidationError("propagationBudget must be non-negative");
|
|
24
|
+
const originProofDigest = input.originProofDigest ?? digest({ schemaVersion: 1, contentDigest: input.contentDigest, originId: input.originId });
|
|
25
|
+
assertTrustDigest(originProofDigest, "originProofDigest");
|
|
26
|
+
return deepFreeze({ schemaVersion: 1, contentDigest: input.contentDigest, originId: input.originId, originProofDigest, hops: [], propagationBudget: input.propagationBudget, forwardsUsed: 0, disposition: "active", quarantineReason: null });
|
|
27
|
+
}
|
|
28
|
+
export function appendPropagationHopV1(envelope, senderId, receiverId, policy) {
|
|
29
|
+
validatePropagationEnvelopeV1(envelope);
|
|
30
|
+
validatePolicy(policy);
|
|
31
|
+
assertIdentifier(senderId, "senderId");
|
|
32
|
+
assertIdentifier(receiverId, "receiverId");
|
|
33
|
+
if (envelope.disposition !== "active" && policy.blockQuarantinedForwarding)
|
|
34
|
+
return assess(envelope, "forwarding_blocked", "blocked");
|
|
35
|
+
const nextIndex = envelope.hops.length;
|
|
36
|
+
const previous = envelope.hops.at(-1)?.hopDigest ?? null;
|
|
37
|
+
if (nextIndex >= policy.maximumHops || envelope.forwardsUsed >= policy.maximumForwards || envelope.propagationBudget <= 0) {
|
|
38
|
+
const disposition = policy.quarantineOnBudgetExhaustion ? "quarantined" : "blocked";
|
|
39
|
+
return assess({ ...envelope, disposition, quarantineReason: "budget_exhausted" }, "budget_exhausted", disposition);
|
|
40
|
+
}
|
|
41
|
+
const hopBase = { hopIndex: nextIndex, senderId, receiverId, previousHopDigest: previous };
|
|
42
|
+
const hop = {
|
|
43
|
+
...hopBase,
|
|
44
|
+
hopDigest: propagationHopDigestV1({ ...hopBase, contentDigest: envelope.contentDigest }),
|
|
45
|
+
};
|
|
46
|
+
const next = { ...envelope, hops: [...envelope.hops, hop], forwardsUsed: envelope.forwardsUsed + 1, propagationBudget: envelope.propagationBudget - 1 };
|
|
47
|
+
return { allowed: true, disposition: "active", reasonCodes: [], envelope: deepFreeze(next) };
|
|
48
|
+
}
|
|
49
|
+
export function assessPropagationV1(envelope, policy) {
|
|
50
|
+
validatePropagationEnvelopeV1(envelope);
|
|
51
|
+
validatePolicy(policy);
|
|
52
|
+
if (envelope.disposition !== "active")
|
|
53
|
+
return assess(envelope, envelope.disposition === "blocked" ? "forwarding_blocked" : "quarantine_active", envelope.disposition);
|
|
54
|
+
if (envelope.hops.length > policy.maximumHops || envelope.forwardsUsed > policy.maximumForwards || envelope.propagationBudget < 0)
|
|
55
|
+
return assess(envelope, "budget_exhausted", policy.quarantineOnBudgetExhaustion ? "quarantined" : "blocked");
|
|
56
|
+
return { allowed: true, disposition: "active", reasonCodes: [], envelope };
|
|
57
|
+
}
|
|
58
|
+
export const canForwardPropagatedContentV1 = (envelope, policy) => assessPropagationV1(envelope, policy).allowed;
|
|
59
|
+
function assess(envelope, reason, disposition) {
|
|
60
|
+
return { allowed: false, disposition, reasonCodes: [reason], envelope: deepFreeze(envelope) };
|
|
61
|
+
}
|
|
62
|
+
export function validatePropagationEnvelopeV1(value) {
|
|
63
|
+
assertExactKeys(value, ["schemaVersion", "contentDigest", "originId", "originProofDigest", "hops", "propagationBudget", "forwardsUsed", "disposition", "quarantineReason"], "propagation envelope");
|
|
64
|
+
const envelope = value;
|
|
65
|
+
if (envelope.schemaVersion !== 1 || !dispositionValues.includes(envelope.disposition))
|
|
66
|
+
throw new TrustValidationError("propagation envelope is invalid");
|
|
67
|
+
assertTrustDigest(envelope.contentDigest, "contentDigest");
|
|
68
|
+
assertTrustDigest(envelope.originProofDigest, "originProofDigest");
|
|
69
|
+
assertIdentifier(envelope.originId, "originId");
|
|
70
|
+
assertSafeInteger(envelope.propagationBudget, "propagationBudget");
|
|
71
|
+
assertSafeInteger(envelope.forwardsUsed, "forwardsUsed");
|
|
72
|
+
if (envelope.propagationBudget < 0 || envelope.forwardsUsed < 0 || !Array.isArray(envelope.hops))
|
|
73
|
+
throw new TrustValidationError("propagation counters are invalid");
|
|
74
|
+
let previous = null;
|
|
75
|
+
envelope.hops.forEach((candidate, index) => {
|
|
76
|
+
const hop = candidate;
|
|
77
|
+
assertExactKeys(hop, ["hopIndex", "senderId", "receiverId", "previousHopDigest", "hopDigest"], "propagation hop");
|
|
78
|
+
if (hop.hopIndex !== index || hop.previousHopDigest !== previous)
|
|
79
|
+
throw new TrustValidationError("propagation hop chain is invalid");
|
|
80
|
+
assertIdentifier(hop.senderId, "hop senderId");
|
|
81
|
+
assertIdentifier(hop.receiverId, "hop receiverId");
|
|
82
|
+
assertTrustDigest(hop.hopDigest, "hopDigest");
|
|
83
|
+
if (propagationHopDigestV1({ hopIndex: hop.hopIndex, senderId: hop.senderId, receiverId: hop.receiverId, previousHopDigest: hop.previousHopDigest, contentDigest: envelope.contentDigest }) !== hop.hopDigest)
|
|
84
|
+
throw new TrustValidationError("propagation hop digest is invalid");
|
|
85
|
+
previous = hop.hopDigest;
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=propagation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"propagation.js","sourceRoot":"","sources":["../src/propagation.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentplat/trust",
|
|
3
|
-
"version": "0.3.0-beta.
|
|
3
|
+
"version": "0.3.0-beta.4",
|
|
4
4
|
"description": "Browser-safe deterministic evidence and trust primitives for AgentPlat.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -19,6 +19,14 @@
|
|
|
19
19
|
"./peer-credibility": {
|
|
20
20
|
"types": "./dist/peer-credibility.d.ts",
|
|
21
21
|
"import": "./dist/peer-credibility.js"
|
|
22
|
+
},
|
|
23
|
+
"./propagation": {
|
|
24
|
+
"types": "./dist/propagation.d.ts",
|
|
25
|
+
"import": "./dist/propagation.js"
|
|
26
|
+
},
|
|
27
|
+
"./evidence-fusion-strategy": {
|
|
28
|
+
"types": "./dist/evidence-fusion-strategy.d.ts",
|
|
29
|
+
"import": "./dist/evidence-fusion-strategy.js"
|
|
22
30
|
}
|
|
23
31
|
},
|
|
24
32
|
"files": [
|
|
@@ -26,7 +34,7 @@
|
|
|
26
34
|
"README.md"
|
|
27
35
|
],
|
|
28
36
|
"dependencies": {
|
|
29
|
-
"@agentplat/core": "^0.3.0-beta.
|
|
37
|
+
"@agentplat/core": "^0.3.0-beta.4"
|
|
30
38
|
},
|
|
31
39
|
"engines": {
|
|
32
40
|
"node": ">=20.19.3"
|