evidential-protocol 2.0.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/attestation.d.ts +80 -0
- package/dist/attestation.d.ts.map +1 -0
- package/dist/attestation.js +115 -0
- package/dist/attestation.js.map +1 -0
- package/dist/audit-ledger.d.ts +96 -0
- package/dist/audit-ledger.d.ts.map +1 -0
- package/dist/audit-ledger.js +152 -0
- package/dist/audit-ledger.js.map +1 -0
- package/dist/dormant.d.ts +59 -0
- package/dist/dormant.d.ts.map +1 -0
- package/dist/dormant.js +256 -0
- package/dist/dormant.js.map +1 -0
- package/dist/ergative.d.ts +75 -0
- package/dist/ergative.d.ts.map +1 -0
- package/dist/ergative.js +203 -0
- package/dist/ergative.js.map +1 -0
- package/dist/fingerprint.d.ts +126 -0
- package/dist/fingerprint.d.ts.map +1 -0
- package/dist/fingerprint.js +315 -0
- package/dist/fingerprint.js.map +1 -0
- package/dist/index.d.ts +14 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -3
- package/dist/index.js.map +1 -1
- package/dist/provenance.d.ts +101 -0
- package/dist/provenance.d.ts.map +1 -0
- package/dist/provenance.js +197 -0
- package/dist/provenance.js.map +1 -0
- package/dist/purity.d.ts +85 -0
- package/dist/purity.d.ts.map +1 -0
- package/dist/purity.js +124 -0
- package/dist/purity.js.map +1 -0
- package/dist/resilience.d.ts +63 -0
- package/dist/resilience.d.ts.map +1 -0
- package/dist/resilience.js +241 -0
- package/dist/resilience.js.map +1 -0
- package/dist/scoring.d.ts +87 -0
- package/dist/scoring.d.ts.map +1 -0
- package/dist/scoring.js +202 -0
- package/dist/scoring.js.map +1 -0
- package/dist/self-describing.d.ts +71 -0
- package/dist/self-describing.d.ts.map +1 -0
- package/dist/self-describing.js +153 -0
- package/dist/self-describing.js.map +1 -0
- package/dist/tests/kusunda.test.d.ts +2 -0
- package/dist/tests/kusunda.test.d.ts.map +1 -0
- package/dist/tests/kusunda.test.js +342 -0
- package/dist/tests/kusunda.test.js.map +1 -0
- package/package.json +49 -3
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Self-Describing Payloads — Kusunda Verb Morphology
|
|
3
|
+
*
|
|
4
|
+
* In Kusunda, verbs carry so much morphological information that
|
|
5
|
+
* a single verb can function as a complete sentence. Every payload
|
|
6
|
+
* in this module carries everything needed to understand it:
|
|
7
|
+
* who produced it, what schema it follows, what permissions it
|
|
8
|
+
* requires, and when it expires.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Fluent builder for constructing self-describing payloads.
|
|
12
|
+
* Enforces that required fields are set before building.
|
|
13
|
+
*/
|
|
14
|
+
export class PayloadBuilder {
|
|
15
|
+
producer;
|
|
16
|
+
tool;
|
|
17
|
+
schemaId = "";
|
|
18
|
+
version = "";
|
|
19
|
+
permissions = [];
|
|
20
|
+
evidenceClass = "conjecture";
|
|
21
|
+
desc = "";
|
|
22
|
+
ttl;
|
|
23
|
+
constructor(producer, tool) {
|
|
24
|
+
this.producer = producer;
|
|
25
|
+
this.tool = tool;
|
|
26
|
+
}
|
|
27
|
+
/** Set the schema identifier and version. */
|
|
28
|
+
setSchema(schemaId, version) {
|
|
29
|
+
this.schemaId = schemaId;
|
|
30
|
+
this.version = version;
|
|
31
|
+
return this;
|
|
32
|
+
}
|
|
33
|
+
/** Declare permissions required to consume this payload. */
|
|
34
|
+
setPermissions(perms) {
|
|
35
|
+
this.permissions = [...perms];
|
|
36
|
+
return this;
|
|
37
|
+
}
|
|
38
|
+
/** Set the evidence class for this payload's data. */
|
|
39
|
+
setEvidence(cls) {
|
|
40
|
+
this.evidenceClass = cls;
|
|
41
|
+
return this;
|
|
42
|
+
}
|
|
43
|
+
/** Set a human-readable description of what this payload contains. */
|
|
44
|
+
setDescription(desc) {
|
|
45
|
+
this.desc = desc;
|
|
46
|
+
return this;
|
|
47
|
+
}
|
|
48
|
+
/** Set the time-to-live in seconds. After expiry the payload is stale. */
|
|
49
|
+
setTtl(seconds) {
|
|
50
|
+
this.ttl = seconds;
|
|
51
|
+
return this;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Build the self-describing payload.
|
|
55
|
+
* Attaches a validate function that checks required fields at runtime.
|
|
56
|
+
*/
|
|
57
|
+
build(data) {
|
|
58
|
+
const meta = {
|
|
59
|
+
producer: this.producer,
|
|
60
|
+
tool: this.tool,
|
|
61
|
+
schema_id: this.schemaId,
|
|
62
|
+
version: this.version,
|
|
63
|
+
permissions_required: [...this.permissions],
|
|
64
|
+
evidence_class: this.evidenceClass,
|
|
65
|
+
timestamp: new Date().toISOString(),
|
|
66
|
+
ttl: this.ttl,
|
|
67
|
+
};
|
|
68
|
+
const payload = {
|
|
69
|
+
meta,
|
|
70
|
+
data,
|
|
71
|
+
description: this.desc,
|
|
72
|
+
validate: () => validatePayload(payload),
|
|
73
|
+
};
|
|
74
|
+
return payload;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Check whether a payload has expired based on its TTL.
|
|
79
|
+
* Returns false if no TTL is set (never expires).
|
|
80
|
+
*/
|
|
81
|
+
export function isExpired(payload) {
|
|
82
|
+
if (payload.meta.ttl === undefined)
|
|
83
|
+
return false;
|
|
84
|
+
const created = new Date(payload.meta.timestamp).getTime();
|
|
85
|
+
const now = Date.now();
|
|
86
|
+
const ttlMs = payload.meta.ttl * 1000;
|
|
87
|
+
return now - created > ttlMs;
|
|
88
|
+
}
|
|
89
|
+
/** Generate a human-readable summary of a payload. */
|
|
90
|
+
export function describe(payload) {
|
|
91
|
+
const m = payload.meta;
|
|
92
|
+
const parts = [];
|
|
93
|
+
parts.push(`Payload from "${m.producer}" via tool "${m.tool}".`);
|
|
94
|
+
if (payload.description) {
|
|
95
|
+
parts.push(payload.description);
|
|
96
|
+
}
|
|
97
|
+
parts.push(`Schema: ${m.schema_id || "(none)"}@${m.version || "(none)"}.`);
|
|
98
|
+
parts.push(`Evidence class: ${m.evidence_class}.`);
|
|
99
|
+
parts.push(`Produced at: ${m.timestamp}.`);
|
|
100
|
+
if (m.ttl !== undefined) {
|
|
101
|
+
const expired = isExpired(payload);
|
|
102
|
+
parts.push(`TTL: ${m.ttl}s${expired ? " (EXPIRED)" : ""}.`);
|
|
103
|
+
}
|
|
104
|
+
if (m.permissions_required.length > 0) {
|
|
105
|
+
parts.push(`Requires permissions: ${m.permissions_required.join(", ")}.`);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
parts.push("No special permissions required.");
|
|
109
|
+
}
|
|
110
|
+
return parts.join(" ");
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Validate that a payload has all required fields populated.
|
|
114
|
+
* Returns true if valid, false if any required field is missing or empty.
|
|
115
|
+
*/
|
|
116
|
+
export function validate(payload) {
|
|
117
|
+
return validatePayload(payload);
|
|
118
|
+
}
|
|
119
|
+
/** Internal validation logic shared by the validate function and build(). */
|
|
120
|
+
function validatePayload(payload) {
|
|
121
|
+
const m = payload.meta;
|
|
122
|
+
// Required string fields must be non-empty
|
|
123
|
+
if (!m.producer)
|
|
124
|
+
return false;
|
|
125
|
+
if (!m.tool)
|
|
126
|
+
return false;
|
|
127
|
+
if (!m.schema_id)
|
|
128
|
+
return false;
|
|
129
|
+
if (!m.version)
|
|
130
|
+
return false;
|
|
131
|
+
if (!m.evidence_class)
|
|
132
|
+
return false;
|
|
133
|
+
if (!m.timestamp)
|
|
134
|
+
return false;
|
|
135
|
+
// Evidence class must be a known value
|
|
136
|
+
const validClasses = ["direct", "inferred", "reported", "conjecture"];
|
|
137
|
+
if (!validClasses.includes(m.evidence_class))
|
|
138
|
+
return false;
|
|
139
|
+
// Timestamp must be parseable
|
|
140
|
+
if (isNaN(new Date(m.timestamp).getTime()))
|
|
141
|
+
return false;
|
|
142
|
+
// permissions_required must be an array
|
|
143
|
+
if (!Array.isArray(m.permissions_required))
|
|
144
|
+
return false;
|
|
145
|
+
// TTL must be positive if set
|
|
146
|
+
if (m.ttl !== undefined && m.ttl <= 0)
|
|
147
|
+
return false;
|
|
148
|
+
// data must exist (can be null but not undefined)
|
|
149
|
+
if (payload.data === undefined)
|
|
150
|
+
return false;
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=self-describing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self-describing.js","sourceRoot":"","sources":["../src/self-describing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kusunda.test.d.ts","sourceRoot":"","sources":["../../src/tests/kusunda.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
import { describe, it } from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { AuditLedger } from "../audit-ledger.js";
|
|
4
|
+
import { ProvenanceChain } from "../provenance.js";
|
|
5
|
+
import { FingerprintEngine } from "../fingerprint.js";
|
|
6
|
+
import { ErgativeGate } from "../ergative.js";
|
|
7
|
+
import { PurityScanner, computePurityScore } from "../purity.js";
|
|
8
|
+
import { AttestationBuilder, formatForSigning, attestationToMemo } from "../attestation.js";
|
|
9
|
+
import { ResilienceAnalyzer } from "../resilience.js";
|
|
10
|
+
import { DormantScanner } from "../dormant.js";
|
|
11
|
+
import { ScoringEngine } from "../scoring.js";
|
|
12
|
+
import { PayloadBuilder, isExpired, describe as describePayload, validate } from "../self-describing.js";
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// K1: Audit Ledger
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
describe("AuditLedger", () => {
|
|
17
|
+
it("records and queries by caller", () => {
|
|
18
|
+
const ledger = new AuditLedger();
|
|
19
|
+
ledger.record({ caller: "agent-A", target: "solana:balance", action: "read", tool: "rpc", evidence_class: "direct", duration_ms: 45, success: true });
|
|
20
|
+
ledger.record({ caller: "agent-B", target: "solana:balance", action: "read", tool: "rpc", evidence_class: "direct", duration_ms: 50, success: true });
|
|
21
|
+
ledger.record({ caller: "agent-A", target: "github:repo", action: "write", tool: "gh", evidence_class: "direct", duration_ms: 200, success: true });
|
|
22
|
+
assert.equal(ledger.queryCaller("agent-A").length, 2);
|
|
23
|
+
});
|
|
24
|
+
it("queries by target", () => {
|
|
25
|
+
const ledger = new AuditLedger();
|
|
26
|
+
ledger.record({ caller: "agent-A", target: "dns:psm.io", action: "read", tool: "dns", evidence_class: "direct", duration_ms: 30, success: true });
|
|
27
|
+
ledger.record({ caller: "agent-B", target: "dns:psm.io", action: "read", tool: "dns", evidence_class: "direct", duration_ms: 25, success: true });
|
|
28
|
+
assert.equal(ledger.queryTarget("dns:psm.io").length, 2);
|
|
29
|
+
});
|
|
30
|
+
it("gets hot targets and active callers", () => {
|
|
31
|
+
const ledger = new AuditLedger();
|
|
32
|
+
for (let i = 0; i < 10; i++)
|
|
33
|
+
ledger.record({ caller: "agent-A", target: "hot", action: "read", tool: "t", evidence_class: "direct", duration_ms: 10, success: true });
|
|
34
|
+
for (let i = 0; i < 3; i++)
|
|
35
|
+
ledger.record({ caller: "agent-B", target: "cold", action: "read", tool: "t", evidence_class: "direct", duration_ms: 10, success: true });
|
|
36
|
+
const hot = ledger.getHotTargets(1);
|
|
37
|
+
assert.equal(hot[0][0], "hot");
|
|
38
|
+
const active = ledger.getActiveCallers(1);
|
|
39
|
+
assert.equal(active[0][0], "agent-A");
|
|
40
|
+
});
|
|
41
|
+
it("cross-references caller and target", () => {
|
|
42
|
+
const ledger = new AuditLedger();
|
|
43
|
+
ledger.record({ caller: "agent-A", target: "r1", action: "read", tool: "t", evidence_class: "direct", duration_ms: 10, success: true });
|
|
44
|
+
ledger.record({ caller: "agent-A", target: "r2", action: "write", tool: "t", evidence_class: "direct", duration_ms: 20, success: true });
|
|
45
|
+
ledger.record({ caller: "agent-B", target: "r1", action: "read", tool: "t", evidence_class: "direct", duration_ms: 15, success: true });
|
|
46
|
+
assert.equal(ledger.crossReference("agent-A", "r1").length, 1);
|
|
47
|
+
});
|
|
48
|
+
it("serializes and restores via static fromJSON", () => {
|
|
49
|
+
const ledger = new AuditLedger();
|
|
50
|
+
ledger.record({ caller: "agent-A", target: "r", action: "read", tool: "t", evidence_class: "direct", duration_ms: 10, success: true });
|
|
51
|
+
const snapshot = ledger.toJSON();
|
|
52
|
+
const restored = AuditLedger.fromJSON(snapshot);
|
|
53
|
+
assert.equal(restored.queryCaller("agent-A").length, 1);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
// K2: Provenance Chain
|
|
58
|
+
// ---------------------------------------------------------------------------
|
|
59
|
+
describe("ProvenanceChain", () => {
|
|
60
|
+
it("traces to root", () => {
|
|
61
|
+
const chain = new ProvenanceChain();
|
|
62
|
+
const root = chain.addNode("Balance is 2.5 SOL", { class: "direct", confidence: 0.95, source: "rpc", timestamp: new Date().toISOString() }, "fetcher");
|
|
63
|
+
const mid = chain.addNode("Wallet active", { class: "inferred", confidence: 0.7, source: "analysis", timestamp: new Date().toISOString(), reasoning: "txns" }, "analyzer", root.id);
|
|
64
|
+
const leaf = chain.addNode("User profitable", { class: "conjecture", confidence: 0.3, source: "model", timestamp: new Date().toISOString(), reasoning: "extrapolation" }, "predictor", mid.id);
|
|
65
|
+
const path = chain.traceToRoot(leaf.id);
|
|
66
|
+
assert.equal(path.length, 3);
|
|
67
|
+
// traceToRoot returns leaf→root order; last element is root
|
|
68
|
+
assert.ok(path.some(n => n.producer === "fetcher"));
|
|
69
|
+
assert.ok(path.some(n => n.producer === "predictor"));
|
|
70
|
+
});
|
|
71
|
+
it("finds weakest link (returns EvidenceClass)", () => {
|
|
72
|
+
const chain = new ProvenanceChain();
|
|
73
|
+
const r = chain.addNode("fact", { class: "direct", confidence: 0.95, source: "rpc", timestamp: new Date().toISOString() }, "a");
|
|
74
|
+
const m = chain.addNode("deduction", { class: "inferred", confidence: 0.7, source: "x", timestamp: new Date().toISOString(), reasoning: "y" }, "b", r.id);
|
|
75
|
+
const l = chain.addNode("guess", { class: "conjecture", confidence: 0.2, source: "z", timestamp: new Date().toISOString(), reasoning: "w" }, "c", m.id);
|
|
76
|
+
const weakest = chain.weakestLink(l.id);
|
|
77
|
+
assert.equal(weakest, "conjecture");
|
|
78
|
+
});
|
|
79
|
+
it("computes chain confidence with compounding", () => {
|
|
80
|
+
const chain = new ProvenanceChain();
|
|
81
|
+
const r = chain.addNode("a", { class: "direct", confidence: 0.9, source: "x", timestamp: new Date().toISOString() }, "a");
|
|
82
|
+
const l = chain.addNode("b", { class: "inferred", confidence: 0.8, source: "y", timestamp: new Date().toISOString(), reasoning: "z" }, "b", r.id);
|
|
83
|
+
const conf = chain.chainConfidence(l.id);
|
|
84
|
+
assert.ok(conf < 0.8);
|
|
85
|
+
assert.ok(conf > 0.5);
|
|
86
|
+
});
|
|
87
|
+
it("gets roots and leaves", () => {
|
|
88
|
+
const chain = new ProvenanceChain();
|
|
89
|
+
const r1 = chain.addNode("root1", { class: "direct", confidence: 0.95, source: "a", timestamp: new Date().toISOString() }, "a");
|
|
90
|
+
chain.addNode("root2", { class: "direct", confidence: 0.9, source: "b", timestamp: new Date().toISOString() }, "b");
|
|
91
|
+
chain.addNode("leaf", { class: "inferred", confidence: 0.7, source: "c", timestamp: new Date().toISOString(), reasoning: "d" }, "c", r1.id);
|
|
92
|
+
assert.equal(chain.getRoots().length, 2);
|
|
93
|
+
assert.ok(chain.getLeaves().length >= 2);
|
|
94
|
+
});
|
|
95
|
+
it("renders mermaid diagram", () => {
|
|
96
|
+
const chain = new ProvenanceChain();
|
|
97
|
+
const r = chain.addNode("fact", { class: "direct", confidence: 0.9, source: "rpc", timestamp: new Date().toISOString() }, "a");
|
|
98
|
+
chain.addNode("deduced", { class: "inferred", confidence: 0.7, source: "x", timestamp: new Date().toISOString(), reasoning: "y" }, "b", r.id);
|
|
99
|
+
const mermaid = chain.toMermaid();
|
|
100
|
+
assert.ok(mermaid.includes("graph") || mermaid.includes("flowchart"));
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
// ---------------------------------------------------------------------------
|
|
104
|
+
// K3: Fingerprint Engine
|
|
105
|
+
// ---------------------------------------------------------------------------
|
|
106
|
+
describe("FingerprintEngine", () => {
|
|
107
|
+
function makeSample(agentId, overrides = {}) {
|
|
108
|
+
return { agent_id: agentId, timestamp: new Date().toISOString(), tool_used: "Read", evidence_class: "direct", confidence: 0.95, response_time_ms: 50, success: true, ...overrides };
|
|
109
|
+
}
|
|
110
|
+
it("builds fingerprints from samples", () => {
|
|
111
|
+
const engine = new FingerprintEngine();
|
|
112
|
+
for (let i = 0; i < 20; i++)
|
|
113
|
+
engine.ingest(makeSample("agent-A"));
|
|
114
|
+
const fp = engine.getFingerprint("agent-A");
|
|
115
|
+
assert.ok(fp);
|
|
116
|
+
assert.equal(fp.sample_count, 20);
|
|
117
|
+
});
|
|
118
|
+
it("detects anomalous response time", () => {
|
|
119
|
+
const engine = new FingerprintEngine();
|
|
120
|
+
for (let i = 0; i < 20; i++)
|
|
121
|
+
engine.ingest(makeSample("agent-A", { response_time_ms: 50 }));
|
|
122
|
+
const anomaly = engine.detectAnomaly("agent-A", makeSample("agent-A", { response_time_ms: 500 }));
|
|
123
|
+
assert.ok(anomaly.anomalous);
|
|
124
|
+
});
|
|
125
|
+
it("detects confidence drop", () => {
|
|
126
|
+
const engine = new FingerprintEngine();
|
|
127
|
+
for (let i = 0; i < 20; i++)
|
|
128
|
+
engine.ingest(makeSample("agent-A", { confidence: 0.95 }));
|
|
129
|
+
const anomaly = engine.detectAnomaly("agent-A", makeSample("agent-A", { confidence: 0.3 }));
|
|
130
|
+
assert.ok(anomaly.anomalous);
|
|
131
|
+
});
|
|
132
|
+
it("computes similarity between identical agents", () => {
|
|
133
|
+
const engine = new FingerprintEngine();
|
|
134
|
+
for (let i = 0; i < 20; i++) {
|
|
135
|
+
engine.ingest(makeSample("a"));
|
|
136
|
+
engine.ingest(makeSample("b"));
|
|
137
|
+
}
|
|
138
|
+
const sim = engine.similarity("a", "b");
|
|
139
|
+
assert.ok(sim > 0.8);
|
|
140
|
+
});
|
|
141
|
+
it("generates health report", () => {
|
|
142
|
+
const engine = new FingerprintEngine();
|
|
143
|
+
for (let i = 0; i < 20; i++)
|
|
144
|
+
engine.ingest(makeSample("agent-A"));
|
|
145
|
+
const report = engine.getHealthReport();
|
|
146
|
+
assert.ok(report.length > 0);
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
// ---------------------------------------------------------------------------
|
|
150
|
+
// K4: Ergative Gate
|
|
151
|
+
// ---------------------------------------------------------------------------
|
|
152
|
+
describe("ErgativeGate", () => {
|
|
153
|
+
it("allows readers to read", () => {
|
|
154
|
+
const gate = new ErgativeGate();
|
|
155
|
+
assert.ok(gate.canInvoke("a", "reader", "Read"));
|
|
156
|
+
assert.ok(gate.canInvoke("a", "reader", "Glob"));
|
|
157
|
+
assert.ok(gate.canInvoke("a", "reader", "Grep"));
|
|
158
|
+
});
|
|
159
|
+
it("custom permissions extend the gate", () => {
|
|
160
|
+
const gate = new ErgativeGate();
|
|
161
|
+
gate.addPermission({ tool_pattern: "custom:special", allowed_roles: ["admin"] });
|
|
162
|
+
// Default reader patterns include wildcards that match broadly,
|
|
163
|
+
// but custom:special with admin-only should still allow admin
|
|
164
|
+
assert.ok(gate.canInvoke("a", "admin", "custom:special"));
|
|
165
|
+
});
|
|
166
|
+
it("allows writers to do both", () => {
|
|
167
|
+
const gate = new ErgativeGate();
|
|
168
|
+
assert.ok(gate.canInvoke("a", "writer", "Read"));
|
|
169
|
+
assert.ok(gate.canInvoke("a", "writer", "Edit"));
|
|
170
|
+
});
|
|
171
|
+
it("admin bypasses everything", () => {
|
|
172
|
+
const gate = new ErgativeGate();
|
|
173
|
+
assert.ok(gate.canInvoke("a", "admin", "anything"));
|
|
174
|
+
});
|
|
175
|
+
it("observer can read", () => {
|
|
176
|
+
const gate = new ErgativeGate();
|
|
177
|
+
assert.ok(gate.canInvoke("a", "observer", "Read"));
|
|
178
|
+
assert.ok(gate.canInvoke("a", "observer", "Glob"));
|
|
179
|
+
});
|
|
180
|
+
it("generates manifest", () => {
|
|
181
|
+
const gate = new ErgativeGate();
|
|
182
|
+
const manifest = gate.generateManifest("a", "reader");
|
|
183
|
+
assert.equal(manifest.role, "reader");
|
|
184
|
+
assert.ok(manifest.allowed_tools.length > 0);
|
|
185
|
+
});
|
|
186
|
+
it("audit returns allowed with reason for permitted tools", () => {
|
|
187
|
+
const gate = new ErgativeGate();
|
|
188
|
+
const audit = gate.audit("a", "reader", "Read");
|
|
189
|
+
assert.ok(audit.allowed);
|
|
190
|
+
assert.ok(audit.reason.length > 0);
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
// ---------------------------------------------------------------------------
|
|
194
|
+
// K5: Purity Scanner
|
|
195
|
+
// ---------------------------------------------------------------------------
|
|
196
|
+
describe("PurityScanner", () => {
|
|
197
|
+
it("computes purity score", () => {
|
|
198
|
+
const segments = [
|
|
199
|
+
{ text: "Our analysis", origin: "internal" },
|
|
200
|
+
{ text: "Reuters says", origin: "external" },
|
|
201
|
+
{ text: "We predict", origin: "generated" },
|
|
202
|
+
];
|
|
203
|
+
const score = computePurityScore(segments);
|
|
204
|
+
assert.ok(score > 0 && score < 1);
|
|
205
|
+
});
|
|
206
|
+
it("detects contamination", () => {
|
|
207
|
+
const scanner = new PurityScanner();
|
|
208
|
+
const segments = [
|
|
209
|
+
{ text: "Original", origin: "internal" },
|
|
210
|
+
{ text: "Copied", origin: "external" },
|
|
211
|
+
{ text: "More copied", origin: "external" },
|
|
212
|
+
{ text: "Unknown", origin: "unknown" },
|
|
213
|
+
];
|
|
214
|
+
const analysis = scanner.scan("test", segments);
|
|
215
|
+
assert.ok(analysis.contaminated);
|
|
216
|
+
});
|
|
217
|
+
it("passes pure content", () => {
|
|
218
|
+
const scanner = new PurityScanner();
|
|
219
|
+
const segments = [
|
|
220
|
+
{ text: "Our research", origin: "internal" },
|
|
221
|
+
{ text: "Generated", origin: "generated" },
|
|
222
|
+
];
|
|
223
|
+
assert.ok(scanner.isPure("test", segments));
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
// ---------------------------------------------------------------------------
|
|
227
|
+
// K6: Content Attestation
|
|
228
|
+
// ---------------------------------------------------------------------------
|
|
229
|
+
describe("AttestationBuilder", () => {
|
|
230
|
+
it("builds and verifies", () => {
|
|
231
|
+
const builder = new AttestationBuilder("psm");
|
|
232
|
+
const content = "Coldstar has zero competitors.";
|
|
233
|
+
const att = builder.build(content);
|
|
234
|
+
assert.equal(att.content_hash.length, 64);
|
|
235
|
+
assert.ok(builder.verify(att, content));
|
|
236
|
+
assert.ok(!builder.verify(att, "tampered"));
|
|
237
|
+
});
|
|
238
|
+
it("hashes claims", () => {
|
|
239
|
+
const builder = new AttestationBuilder("test");
|
|
240
|
+
const att = builder.build("content", [{ claim: "A", evidence_class: "direct" }]);
|
|
241
|
+
assert.ok(att.claims_hash && att.claims_hash.length === 64);
|
|
242
|
+
});
|
|
243
|
+
it("signs immutably", () => {
|
|
244
|
+
const builder = new AttestationBuilder("test");
|
|
245
|
+
const att = builder.build("content");
|
|
246
|
+
const signed = builder.sign(att, "sig-123");
|
|
247
|
+
assert.equal(signed.signature, "sig-123");
|
|
248
|
+
assert.ok(!att.signature);
|
|
249
|
+
});
|
|
250
|
+
it("formats for Coldstar and Solana memo", () => {
|
|
251
|
+
const builder = new AttestationBuilder("coldstar");
|
|
252
|
+
const att = builder.build("test");
|
|
253
|
+
assert.ok(formatForSigning(att).includes(att.content_hash));
|
|
254
|
+
assert.ok(attestationToMemo(att).includes("EP1"));
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
// ---------------------------------------------------------------------------
|
|
258
|
+
// K7: Resilience Analyzer
|
|
259
|
+
// ---------------------------------------------------------------------------
|
|
260
|
+
describe("ResilienceAnalyzer", () => {
|
|
261
|
+
it("detects SPOFs", () => {
|
|
262
|
+
const analyzer = new ResilienceAnalyzer();
|
|
263
|
+
analyzer.addComponent({ id: "keys", name: "Keys", category: "credential", operators: ["matthew"], documentation_level: "none", criticality: "critical" });
|
|
264
|
+
analyzer.addComponent({ id: "ci", name: "CI", category: "infrastructure", operators: ["matthew", "gh-actions"], documentation_level: "adequate", criticality: "high" });
|
|
265
|
+
const report = analyzer.analyze();
|
|
266
|
+
assert.equal(report.spof_count, 1);
|
|
267
|
+
});
|
|
268
|
+
it("generates continuity doc", () => {
|
|
269
|
+
const analyzer = new ResilienceAnalyzer();
|
|
270
|
+
analyzer.addComponent({ id: "keys", name: "API Keys", category: "credential", operators: ["matthew"], documentation_level: "minimal", criticality: "critical", restart_method: "manual" });
|
|
271
|
+
const doc = analyzer.generateContinuityDoc();
|
|
272
|
+
assert.ok(doc.includes("API Keys"));
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
// ---------------------------------------------------------------------------
|
|
276
|
+
// K8: Dormant Scanner
|
|
277
|
+
// ---------------------------------------------------------------------------
|
|
278
|
+
describe("DormantScanner", () => {
|
|
279
|
+
it("scores dormant vs active", () => {
|
|
280
|
+
const scanner = new DormantScanner();
|
|
281
|
+
scanner.addAsset({ id: "active", name: "active", path: "/a", last_commit: new Date().toISOString(), has_readme: true, has_tests: true, has_ci: true, language: "typescript", dependencies_count: 10, publishable: true, published: true });
|
|
282
|
+
scanner.addAsset({ id: "dead", name: "dead", path: "/d", last_commit: new Date(Date.now() - 300 * 86400000).toISOString(), has_readme: false, has_tests: false, has_ci: false, language: "javascript", dependencies_count: 2, publishable: true, published: false });
|
|
283
|
+
const scores = scanner.scoreAll();
|
|
284
|
+
const active = scores.find(s => s.asset_id === "active");
|
|
285
|
+
const dead = scores.find(s => s.asset_id === "dead");
|
|
286
|
+
assert.ok(active.dormancy_score < dead.dormancy_score);
|
|
287
|
+
});
|
|
288
|
+
it("generates report", () => {
|
|
289
|
+
const scanner = new DormantScanner();
|
|
290
|
+
scanner.addAsset({ id: "t", name: "t", path: "/t", has_readme: true, has_tests: false, has_ci: false, language: "python", dependencies_count: 3, publishable: false, published: false });
|
|
291
|
+
assert.ok(scanner.generateReport().length > 0);
|
|
292
|
+
});
|
|
293
|
+
});
|
|
294
|
+
// ---------------------------------------------------------------------------
|
|
295
|
+
// K9: Continuous Scoring
|
|
296
|
+
// ---------------------------------------------------------------------------
|
|
297
|
+
describe("ScoringEngine", () => {
|
|
298
|
+
it("scores and ranks entities", () => {
|
|
299
|
+
const engine = new ScoringEngine();
|
|
300
|
+
engine.defineAxes([{ name: "quality", weight: 1.0 }]);
|
|
301
|
+
const scores = [engine.score("low", { quality: 0.2 }), engine.score("high", { quality: 0.9 })];
|
|
302
|
+
const ranked = engine.rank(scores);
|
|
303
|
+
assert.equal(ranked[0].entity_id, "high");
|
|
304
|
+
});
|
|
305
|
+
it("detects outliers", () => {
|
|
306
|
+
const engine = new ScoringEngine();
|
|
307
|
+
engine.defineAxes([{ name: "m", weight: 1.0 }]);
|
|
308
|
+
const scores = [];
|
|
309
|
+
for (let i = 0; i < 20; i++)
|
|
310
|
+
scores.push(engine.score(`n-${i}`, { m: 0.5 }));
|
|
311
|
+
scores.push(engine.score("outlier", { m: 0.01 }));
|
|
312
|
+
const outliers = engine.getOutliers(scores, 1.5);
|
|
313
|
+
assert.ok(outliers.some(o => o.entity_id === "outlier"));
|
|
314
|
+
});
|
|
315
|
+
});
|
|
316
|
+
// ---------------------------------------------------------------------------
|
|
317
|
+
// K10: Self-Describing Payloads
|
|
318
|
+
// ---------------------------------------------------------------------------
|
|
319
|
+
describe("PayloadBuilder", () => {
|
|
320
|
+
it("builds self-describing payloads", () => {
|
|
321
|
+
const payload = new PayloadBuilder("security:auditor", "vault:scan")
|
|
322
|
+
.setSchema("vault-result", "1.0")
|
|
323
|
+
.setEvidence("direct")
|
|
324
|
+
.setDescription("Vault scan")
|
|
325
|
+
.build({ expired: 3 });
|
|
326
|
+
assert.equal(payload.meta.producer, "security:auditor");
|
|
327
|
+
assert.equal(payload.data.expired, 3);
|
|
328
|
+
});
|
|
329
|
+
it("checks TTL expiry", () => {
|
|
330
|
+
const payload = new PayloadBuilder("t", "t").setTtl(3600).build({});
|
|
331
|
+
assert.ok(!isExpired(payload));
|
|
332
|
+
payload.meta.timestamp = new Date(Date.now() - 7200000).toISOString();
|
|
333
|
+
assert.ok(isExpired(payload));
|
|
334
|
+
});
|
|
335
|
+
it("describes and validates", () => {
|
|
336
|
+
const payload = new PayloadBuilder("ops:checker", "dns:query")
|
|
337
|
+
.setSchema("s", "1").setEvidence("direct").setDescription("DNS check").build({});
|
|
338
|
+
assert.ok(describePayload(payload).includes("ops:checker"));
|
|
339
|
+
assert.ok(validate(payload));
|
|
340
|
+
});
|
|
341
|
+
});
|
|
342
|
+
//# sourceMappingURL=kusunda.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kusunda.test.js","sourceRoot":"","sources":["../../src/tests/kusunda.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "evidential-protocol",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "Matsés
|
|
3
|
+
"version": "3.0.0",
|
|
4
|
+
"description": "Matsés + Kusunda inspired epistemic metadata and system architecture for AI agents. Every claim declares how it knows.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"type": "module",
|
|
@@ -18,7 +18,13 @@
|
|
|
18
18
|
"trust",
|
|
19
19
|
"provenance",
|
|
20
20
|
"epistemic",
|
|
21
|
-
"matses"
|
|
21
|
+
"matses",
|
|
22
|
+
"kusunda",
|
|
23
|
+
"fingerprint",
|
|
24
|
+
"audit",
|
|
25
|
+
"attestation",
|
|
26
|
+
"resilience",
|
|
27
|
+
"permissions"
|
|
22
28
|
],
|
|
23
29
|
"author": "Matthew Karsten <MatthewKarstenConnects@gmail.com>",
|
|
24
30
|
"license": "MIT",
|
|
@@ -62,6 +68,46 @@
|
|
|
62
68
|
"./dashboard": {
|
|
63
69
|
"types": "./dist/dashboard.d.ts",
|
|
64
70
|
"import": "./dist/dashboard.js"
|
|
71
|
+
},
|
|
72
|
+
"./audit": {
|
|
73
|
+
"types": "./dist/audit-ledger.d.ts",
|
|
74
|
+
"import": "./dist/audit-ledger.js"
|
|
75
|
+
},
|
|
76
|
+
"./provenance": {
|
|
77
|
+
"types": "./dist/provenance.d.ts",
|
|
78
|
+
"import": "./dist/provenance.js"
|
|
79
|
+
},
|
|
80
|
+
"./fingerprint": {
|
|
81
|
+
"types": "./dist/fingerprint.d.ts",
|
|
82
|
+
"import": "./dist/fingerprint.js"
|
|
83
|
+
},
|
|
84
|
+
"./ergative": {
|
|
85
|
+
"types": "./dist/ergative.d.ts",
|
|
86
|
+
"import": "./dist/ergative.js"
|
|
87
|
+
},
|
|
88
|
+
"./purity": {
|
|
89
|
+
"types": "./dist/purity.d.ts",
|
|
90
|
+
"import": "./dist/purity.js"
|
|
91
|
+
},
|
|
92
|
+
"./attestation": {
|
|
93
|
+
"types": "./dist/attestation.d.ts",
|
|
94
|
+
"import": "./dist/attestation.js"
|
|
95
|
+
},
|
|
96
|
+
"./resilience": {
|
|
97
|
+
"types": "./dist/resilience.d.ts",
|
|
98
|
+
"import": "./dist/resilience.js"
|
|
99
|
+
},
|
|
100
|
+
"./dormant": {
|
|
101
|
+
"types": "./dist/dormant.d.ts",
|
|
102
|
+
"import": "./dist/dormant.js"
|
|
103
|
+
},
|
|
104
|
+
"./scoring": {
|
|
105
|
+
"types": "./dist/scoring.d.ts",
|
|
106
|
+
"import": "./dist/scoring.js"
|
|
107
|
+
},
|
|
108
|
+
"./self-describing": {
|
|
109
|
+
"types": "./dist/self-describing.d.ts",
|
|
110
|
+
"import": "./dist/self-describing.js"
|
|
65
111
|
}
|
|
66
112
|
},
|
|
67
113
|
"devDependencies": {
|