@ninelives/agent-governance-sdk 5.0.1
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 +363 -0
- package/dist/audit.d.ts +26 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +107 -0
- package/dist/audit.js.map +1 -0
- package/dist/cascade-containment.d.ts +84 -0
- package/dist/cascade-containment.d.ts.map +1 -0
- package/dist/cascade-containment.js +387 -0
- package/dist/cascade-containment.js.map +1 -0
- package/dist/client.d.ts +34 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +112 -0
- package/dist/client.js.map +1 -0
- package/dist/context-poisoning.d.ts +58 -0
- package/dist/context-poisoning.d.ts.map +1 -0
- package/dist/context-poisoning.js +410 -0
- package/dist/context-poisoning.js.map +1 -0
- package/dist/credential-vault.d.ts +213 -0
- package/dist/credential-vault.d.ts.map +1 -0
- package/dist/credential-vault.js +567 -0
- package/dist/credential-vault.js.map +1 -0
- package/dist/discovery.d.ts +80 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +404 -0
- package/dist/discovery.js.map +1 -0
- package/dist/encryption/channel.d.ts +29 -0
- package/dist/encryption/channel.d.ts.map +1 -0
- package/dist/encryption/channel.js +78 -0
- package/dist/encryption/channel.js.map +1 -0
- package/dist/encryption/index.d.ts +9 -0
- package/dist/encryption/index.d.ts.map +1 -0
- package/dist/encryption/index.js +23 -0
- package/dist/encryption/index.js.map +1 -0
- package/dist/encryption/mesh-client.d.ts +281 -0
- package/dist/encryption/mesh-client.d.ts.map +1 -0
- package/dist/encryption/mesh-client.js +1110 -0
- package/dist/encryption/mesh-client.js.map +1 -0
- package/dist/encryption/ratchet.d.ts +38 -0
- package/dist/encryption/ratchet.d.ts.map +1 -0
- package/dist/encryption/ratchet.js +223 -0
- package/dist/encryption/ratchet.js.map +1 -0
- package/dist/encryption/registry-client.d.ts +136 -0
- package/dist/encryption/registry-client.d.ts.map +1 -0
- package/dist/encryption/registry-client.js +369 -0
- package/dist/encryption/registry-client.js.map +1 -0
- package/dist/encryption/x3dh.d.ts +80 -0
- package/dist/encryption/x3dh.d.ts.map +1 -0
- package/dist/encryption/x3dh.js +238 -0
- package/dist/encryption/x3dh.js.map +1 -0
- package/dist/framework-adapter.d.ts +63 -0
- package/dist/framework-adapter.d.ts.map +1 -0
- package/dist/framework-adapter.js +253 -0
- package/dist/framework-adapter.js.map +1 -0
- package/dist/identity.d.ts +124 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +446 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +95 -0
- package/dist/index.js.map +1 -0
- package/dist/kill-switch.d.ts +22 -0
- package/dist/kill-switch.d.ts.map +1 -0
- package/dist/kill-switch.js +60 -0
- package/dist/kill-switch.js.map +1 -0
- package/dist/lifecycle.d.ts +50 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +113 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/mcp.d.ts +41 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +233 -0
- package/dist/mcp.js.map +1 -0
- package/dist/metrics.d.ts +123 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +289 -0
- package/dist/metrics.js.map +1 -0
- package/dist/oci-manifest.d.ts +49 -0
- package/dist/oci-manifest.d.ts.map +1 -0
- package/dist/oci-manifest.js +182 -0
- package/dist/oci-manifest.js.map +1 -0
- package/dist/policy-backends/cedar.d.ts +15 -0
- package/dist/policy-backends/cedar.d.ts.map +1 -0
- package/dist/policy-backends/cedar.js +88 -0
- package/dist/policy-backends/cedar.js.map +1 -0
- package/dist/policy-backends/opa.d.ts +17 -0
- package/dist/policy-backends/opa.d.ts.map +1 -0
- package/dist/policy-backends/opa.js +74 -0
- package/dist/policy-backends/opa.js.map +1 -0
- package/dist/policy.d.ts +77 -0
- package/dist/policy.d.ts.map +1 -0
- package/dist/policy.js +760 -0
- package/dist/policy.js.map +1 -0
- package/dist/prompt-defense.d.ts +37 -0
- package/dist/prompt-defense.d.ts.map +1 -0
- package/dist/prompt-defense.js +229 -0
- package/dist/prompt-defense.js.map +1 -0
- package/dist/protocol-facets.d.ts +87 -0
- package/dist/protocol-facets.d.ts.map +1 -0
- package/dist/protocol-facets.js +728 -0
- package/dist/protocol-facets.js.map +1 -0
- package/dist/rings.d.ts +17 -0
- package/dist/rings.d.ts.map +1 -0
- package/dist/rings.js +61 -0
- package/dist/rings.js.map +1 -0
- package/dist/sandbox.d.ts +61 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +199 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/surface-parity.d.ts +45 -0
- package/dist/surface-parity.d.ts.map +1 -0
- package/dist/surface-parity.js +216 -0
- package/dist/surface-parity.js.map +1 -0
- package/dist/trust.d.ts +28 -0
- package/dist/trust.d.ts.map +1 -0
- package/dist/trust.js +209 -0
- package/dist/trust.js.map +1 -0
- package/dist/types.d.ts +422 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +29 -0
- package/dist/types.js.map +1 -0
- package/dist/verify.d.ts +135 -0
- package/dist/verify.d.ts.map +1 -0
- package/dist/verify.js +356 -0
- package/dist/verify.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright (c) Microsoft Corporation.
|
|
3
|
+
// Licensed under the MIT License.
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.CascadeContainmentManager = void 0;
|
|
6
|
+
const crypto_1 = require("crypto");
|
|
7
|
+
const metrics_1 = require("./metrics");
|
|
8
|
+
const DEFAULT_BLAST_RADIUS_POLICY = {
|
|
9
|
+
maxDependencyDepth: 5,
|
|
10
|
+
maxFanout: 10,
|
|
11
|
+
circuitBreakerThreshold: 5,
|
|
12
|
+
circuitBreakerResetMs: 30_000,
|
|
13
|
+
autoQuarantine: true,
|
|
14
|
+
autoRollback: false,
|
|
15
|
+
};
|
|
16
|
+
const TIER_DEFAULTS = {
|
|
17
|
+
Untrusted: {
|
|
18
|
+
maxDependencyDepth: 2,
|
|
19
|
+
maxFanout: 3,
|
|
20
|
+
circuitBreakerThreshold: 3,
|
|
21
|
+
autoQuarantine: true,
|
|
22
|
+
autoRollback: true,
|
|
23
|
+
},
|
|
24
|
+
Provisional: {
|
|
25
|
+
maxDependencyDepth: 3,
|
|
26
|
+
maxFanout: 5,
|
|
27
|
+
circuitBreakerThreshold: 4,
|
|
28
|
+
autoQuarantine: true,
|
|
29
|
+
autoRollback: false,
|
|
30
|
+
},
|
|
31
|
+
Trusted: {
|
|
32
|
+
maxDependencyDepth: 5,
|
|
33
|
+
maxFanout: 10,
|
|
34
|
+
circuitBreakerThreshold: 5,
|
|
35
|
+
autoQuarantine: false,
|
|
36
|
+
autoRollback: false,
|
|
37
|
+
},
|
|
38
|
+
Verified: {
|
|
39
|
+
maxDependencyDepth: 8,
|
|
40
|
+
maxFanout: 20,
|
|
41
|
+
circuitBreakerThreshold: 8,
|
|
42
|
+
autoQuarantine: false,
|
|
43
|
+
autoRollback: false,
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Manages cascading failure containment for multi-agent systems (OWASP ASI-08).
|
|
48
|
+
*
|
|
49
|
+
* Tracks agent dependency graphs, maintains per-link circuit breakers,
|
|
50
|
+
* and applies blast radius policies based on trust tier to contain
|
|
51
|
+
* failures before they propagate through the system.
|
|
52
|
+
*/
|
|
53
|
+
class CascadeContainmentManager {
|
|
54
|
+
nodes = new Map();
|
|
55
|
+
breakers = new Map();
|
|
56
|
+
events = [];
|
|
57
|
+
config;
|
|
58
|
+
constructor(config) {
|
|
59
|
+
this.config = {
|
|
60
|
+
defaultPolicy: { ...DEFAULT_BLAST_RADIUS_POLICY, ...config?.defaultPolicy },
|
|
61
|
+
tierPolicies: config?.tierPolicies,
|
|
62
|
+
cascadeThreshold: config?.cascadeThreshold ?? 3,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Register an agent in the dependency graph.
|
|
67
|
+
*/
|
|
68
|
+
registerAgent(agentId, trustTier = 'Provisional') {
|
|
69
|
+
if (this.nodes.has(agentId)) {
|
|
70
|
+
return this.nodes.get(agentId);
|
|
71
|
+
}
|
|
72
|
+
const node = {
|
|
73
|
+
agentId,
|
|
74
|
+
trustTier,
|
|
75
|
+
healthStatus: 'healthy',
|
|
76
|
+
dependencies: [],
|
|
77
|
+
dependents: [],
|
|
78
|
+
lastHealthCheck: new Date().toISOString(),
|
|
79
|
+
};
|
|
80
|
+
this.nodes.set(agentId, node);
|
|
81
|
+
return node;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Declare a dependency: `fromAgent` depends on `toAgent`.
|
|
85
|
+
* Creates a circuit breaker for this link.
|
|
86
|
+
*/
|
|
87
|
+
addDependency(fromAgent, toAgent) {
|
|
88
|
+
this.ensureAgent(fromAgent);
|
|
89
|
+
this.ensureAgent(toAgent);
|
|
90
|
+
const from = this.nodes.get(fromAgent);
|
|
91
|
+
const to = this.nodes.get(toAgent);
|
|
92
|
+
if (!from.dependencies.includes(toAgent)) {
|
|
93
|
+
const policy = this.getPolicyForAgent(fromAgent);
|
|
94
|
+
if (from.dependencies.length >= policy.maxFanout) {
|
|
95
|
+
throw new Error(`Agent "${fromAgent}" exceeds max fanout (${policy.maxFanout}) for tier ${from.trustTier}`);
|
|
96
|
+
}
|
|
97
|
+
const depth = this.getDepthTo(toAgent) + 1;
|
|
98
|
+
if (depth > policy.maxDependencyDepth) {
|
|
99
|
+
throw new Error(`Dependency depth ${depth} exceeds max (${policy.maxDependencyDepth}) for tier ${from.trustTier}`);
|
|
100
|
+
}
|
|
101
|
+
from.dependencies.push(toAgent);
|
|
102
|
+
to.dependents.push(fromAgent);
|
|
103
|
+
const linkKey = this.linkKey(fromAgent, toAgent);
|
|
104
|
+
if (!this.breakers.has(linkKey)) {
|
|
105
|
+
this.breakers.set(linkKey, new metrics_1.CircuitBreaker(policy.circuitBreakerThreshold, policy.circuitBreakerResetMs));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Check if an agent can call its dependency (circuit breaker is not open).
|
|
111
|
+
*/
|
|
112
|
+
canCall(fromAgent, toAgent) {
|
|
113
|
+
const breaker = this.breakers.get(this.linkKey(fromAgent, toAgent));
|
|
114
|
+
if (!breaker)
|
|
115
|
+
return true;
|
|
116
|
+
return breaker.canExecute();
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Record a successful call between agents.
|
|
120
|
+
*/
|
|
121
|
+
recordSuccess(fromAgent, toAgent) {
|
|
122
|
+
const breaker = this.breakers.get(this.linkKey(fromAgent, toAgent));
|
|
123
|
+
if (breaker) {
|
|
124
|
+
breaker.onSuccess();
|
|
125
|
+
}
|
|
126
|
+
const target = this.nodes.get(toAgent);
|
|
127
|
+
if (target && target.healthStatus !== 'healthy') {
|
|
128
|
+
target.healthStatus = 'healthy';
|
|
129
|
+
target.lastHealthCheck = new Date().toISOString();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Record a failed call between agents. May trigger containment actions.
|
|
134
|
+
*/
|
|
135
|
+
recordFailure(fromAgent, toAgent, reason = 'call failed') {
|
|
136
|
+
const triggered = [];
|
|
137
|
+
const breaker = this.breakers.get(this.linkKey(fromAgent, toAgent));
|
|
138
|
+
if (breaker) {
|
|
139
|
+
breaker.onFailure();
|
|
140
|
+
if (breaker.state === 'open') {
|
|
141
|
+
const evt = this.emitEvent(toAgent, [fromAgent], 'circuit_opened', reason);
|
|
142
|
+
triggered.push(evt);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Update health status of target agent
|
|
146
|
+
const target = this.nodes.get(toAgent);
|
|
147
|
+
if (target) {
|
|
148
|
+
const openBreakersToTarget = this.countOpenBreakersTo(toAgent);
|
|
149
|
+
if (openBreakersToTarget >= (this.config.cascadeThreshold ?? 3)) {
|
|
150
|
+
target.healthStatus = 'failing';
|
|
151
|
+
}
|
|
152
|
+
else if (openBreakersToTarget > 0) {
|
|
153
|
+
target.healthStatus = 'degraded';
|
|
154
|
+
}
|
|
155
|
+
target.lastHealthCheck = new Date().toISOString();
|
|
156
|
+
}
|
|
157
|
+
// Apply containment based on policy
|
|
158
|
+
const containmentEvents = this.applyContainment(toAgent, reason);
|
|
159
|
+
triggered.push(...containmentEvents);
|
|
160
|
+
return triggered;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Propagate health status through dependency graph.
|
|
164
|
+
* When a node fails, its dependents are notified and may degrade.
|
|
165
|
+
*/
|
|
166
|
+
propagateHealth(agentId) {
|
|
167
|
+
const triggered = [];
|
|
168
|
+
const node = this.nodes.get(agentId);
|
|
169
|
+
if (!node)
|
|
170
|
+
return triggered;
|
|
171
|
+
if (node.healthStatus !== 'failing' && node.healthStatus !== 'unreachable') {
|
|
172
|
+
return triggered;
|
|
173
|
+
}
|
|
174
|
+
const affected = [];
|
|
175
|
+
for (const dependentId of node.dependents) {
|
|
176
|
+
const dependent = this.nodes.get(dependentId);
|
|
177
|
+
if (dependent && dependent.healthStatus === 'healthy') {
|
|
178
|
+
dependent.healthStatus = 'degraded';
|
|
179
|
+
dependent.lastHealthCheck = new Date().toISOString();
|
|
180
|
+
affected.push(dependentId);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
if (affected.length > 0) {
|
|
184
|
+
const evt = this.emitEvent(agentId, affected, 'health_propagated', `Health degradation propagated from ${agentId}`);
|
|
185
|
+
triggered.push(evt);
|
|
186
|
+
// Recursive propagation for transitive dependents
|
|
187
|
+
for (const affectedId of affected) {
|
|
188
|
+
const deeper = this.propagateHealth(affectedId);
|
|
189
|
+
triggered.push(...deeper);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return triggered;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Compute the blast radius for a given agent: how many agents would
|
|
196
|
+
* be affected if this agent fails completely.
|
|
197
|
+
*/
|
|
198
|
+
computeBlastRadius(agentId) {
|
|
199
|
+
const visited = new Set();
|
|
200
|
+
this.collectDependents(agentId, visited);
|
|
201
|
+
visited.delete(agentId);
|
|
202
|
+
return visited.size;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Analyze the current state of the agent graph for cascade risk.
|
|
206
|
+
*/
|
|
207
|
+
analyze() {
|
|
208
|
+
let healthyAgents = 0;
|
|
209
|
+
let degradedAgents = 0;
|
|
210
|
+
let failingAgents = 0;
|
|
211
|
+
for (const node of this.nodes.values()) {
|
|
212
|
+
switch (node.healthStatus) {
|
|
213
|
+
case 'healthy':
|
|
214
|
+
healthyAgents++;
|
|
215
|
+
break;
|
|
216
|
+
case 'degraded':
|
|
217
|
+
degradedAgents++;
|
|
218
|
+
break;
|
|
219
|
+
case 'failing':
|
|
220
|
+
case 'unreachable':
|
|
221
|
+
failingAgents++;
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
let openCircuitBreakers = 0;
|
|
226
|
+
for (const breaker of this.breakers.values()) {
|
|
227
|
+
if (breaker.state === 'open') {
|
|
228
|
+
openCircuitBreakers++;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
const blastRadiusMap = {};
|
|
232
|
+
for (const agentId of this.nodes.keys()) {
|
|
233
|
+
blastRadiusMap[agentId] = this.computeBlastRadius(agentId);
|
|
234
|
+
}
|
|
235
|
+
const totalAgents = this.nodes.size;
|
|
236
|
+
const cascadeRisk = this.assessCascadeRisk(failingAgents, degradedAgents, totalAgents, openCircuitBreakers);
|
|
237
|
+
return {
|
|
238
|
+
totalAgents,
|
|
239
|
+
healthyAgents,
|
|
240
|
+
degradedAgents,
|
|
241
|
+
failingAgents,
|
|
242
|
+
openCircuitBreakers,
|
|
243
|
+
cascadeRisk,
|
|
244
|
+
blastRadiusMap,
|
|
245
|
+
events: [...this.events],
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Get the dependency graph as a list of agent nodes.
|
|
250
|
+
*/
|
|
251
|
+
getGraph() {
|
|
252
|
+
return [...this.nodes.values()].map((n) => ({ ...n }));
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Get the circuit breaker state for a specific link.
|
|
256
|
+
*/
|
|
257
|
+
getBreakerState(fromAgent, toAgent) {
|
|
258
|
+
return this.breakers.get(this.linkKey(fromAgent, toAgent))?.state;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Get all containment events.
|
|
262
|
+
*/
|
|
263
|
+
getEvents() {
|
|
264
|
+
return [...this.events];
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Get the effective blast radius policy for an agent.
|
|
268
|
+
*/
|
|
269
|
+
getPolicyForAgent(agentId) {
|
|
270
|
+
const node = this.nodes.get(agentId);
|
|
271
|
+
const tier = node?.trustTier ?? 'Provisional';
|
|
272
|
+
return this.getPolicyForTier(tier);
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Get the effective blast radius policy for a trust tier.
|
|
276
|
+
*/
|
|
277
|
+
getPolicyForTier(tier) {
|
|
278
|
+
const tierOverrides = this.config.tierPolicies?.[tier] ?? TIER_DEFAULTS[tier];
|
|
279
|
+
return { ...this.config.defaultPolicy, ...tierOverrides };
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Reset a specific agent back to healthy status.
|
|
283
|
+
*/
|
|
284
|
+
resetAgent(agentId) {
|
|
285
|
+
const node = this.nodes.get(agentId);
|
|
286
|
+
if (node) {
|
|
287
|
+
node.healthStatus = 'healthy';
|
|
288
|
+
node.lastHealthCheck = new Date().toISOString();
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
// ── Internal helpers ──
|
|
292
|
+
ensureAgent(agentId) {
|
|
293
|
+
if (!this.nodes.has(agentId)) {
|
|
294
|
+
this.registerAgent(agentId);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
linkKey(from, to) {
|
|
298
|
+
return `${from}->${to}`;
|
|
299
|
+
}
|
|
300
|
+
countOpenBreakersTo(agentId) {
|
|
301
|
+
const node = this.nodes.get(agentId);
|
|
302
|
+
if (!node)
|
|
303
|
+
return 0;
|
|
304
|
+
let count = 0;
|
|
305
|
+
for (const depId of node.dependents) {
|
|
306
|
+
const breaker = this.breakers.get(this.linkKey(depId, agentId));
|
|
307
|
+
if (breaker && breaker.state === 'open') {
|
|
308
|
+
count++;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return count;
|
|
312
|
+
}
|
|
313
|
+
getDepthTo(agentId, visited = new Set()) {
|
|
314
|
+
if (visited.has(agentId))
|
|
315
|
+
return 0;
|
|
316
|
+
visited.add(agentId);
|
|
317
|
+
const node = this.nodes.get(agentId);
|
|
318
|
+
if (!node || node.dependencies.length === 0)
|
|
319
|
+
return 0;
|
|
320
|
+
let maxDepth = 0;
|
|
321
|
+
for (const dep of node.dependencies) {
|
|
322
|
+
maxDepth = Math.max(maxDepth, 1 + this.getDepthTo(dep, visited));
|
|
323
|
+
}
|
|
324
|
+
return maxDepth;
|
|
325
|
+
}
|
|
326
|
+
collectDependents(agentId, visited) {
|
|
327
|
+
if (visited.has(agentId))
|
|
328
|
+
return;
|
|
329
|
+
visited.add(agentId);
|
|
330
|
+
const node = this.nodes.get(agentId);
|
|
331
|
+
if (!node)
|
|
332
|
+
return;
|
|
333
|
+
for (const depId of node.dependents) {
|
|
334
|
+
this.collectDependents(depId, visited);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
applyContainment(agentId, reason) {
|
|
338
|
+
const triggered = [];
|
|
339
|
+
const node = this.nodes.get(agentId);
|
|
340
|
+
if (!node)
|
|
341
|
+
return triggered;
|
|
342
|
+
const policy = this.getPolicyForAgent(agentId);
|
|
343
|
+
if (node.healthStatus === 'failing' && policy.autoQuarantine) {
|
|
344
|
+
node.healthStatus = 'unreachable';
|
|
345
|
+
const evt = this.emitEvent(agentId, [agentId], 'agent_quarantined', `Auto-quarantined: ${reason}`);
|
|
346
|
+
triggered.push(evt);
|
|
347
|
+
// Propagate health to dependents
|
|
348
|
+
const propagated = this.propagateHealth(agentId);
|
|
349
|
+
triggered.push(...propagated);
|
|
350
|
+
}
|
|
351
|
+
if (node.healthStatus === 'unreachable' && policy.autoRollback) {
|
|
352
|
+
const evt = this.emitEvent(agentId, [agentId], 'rollback_triggered', `Auto-rollback triggered: ${reason}`);
|
|
353
|
+
triggered.push(evt);
|
|
354
|
+
}
|
|
355
|
+
return triggered;
|
|
356
|
+
}
|
|
357
|
+
assessCascadeRisk(failing, degraded, total, openBreakers) {
|
|
358
|
+
if (total === 0)
|
|
359
|
+
return 'low';
|
|
360
|
+
const failRatio = failing / total;
|
|
361
|
+
const degradeRatio = degraded / total;
|
|
362
|
+
if (failRatio >= 0.3 || openBreakers >= 5)
|
|
363
|
+
return 'critical';
|
|
364
|
+
if (failRatio >= 0.15 || degradeRatio >= 0.3)
|
|
365
|
+
return 'high';
|
|
366
|
+
if (failRatio > 0 || degradeRatio >= 0.15)
|
|
367
|
+
return 'medium';
|
|
368
|
+
return 'low';
|
|
369
|
+
}
|
|
370
|
+
emitEvent(sourceAgentId, affectedAgentIds, action, reason) {
|
|
371
|
+
const blastRadius = this.computeBlastRadius(sourceAgentId);
|
|
372
|
+
const event = {
|
|
373
|
+
eventId: (0, crypto_1.randomUUID)(),
|
|
374
|
+
timestamp: new Date().toISOString(),
|
|
375
|
+
sourceAgentId,
|
|
376
|
+
affectedAgentIds,
|
|
377
|
+
action,
|
|
378
|
+
reason,
|
|
379
|
+
blastRadius,
|
|
380
|
+
containedAt: this.events.length,
|
|
381
|
+
};
|
|
382
|
+
this.events.push(event);
|
|
383
|
+
return event;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
exports.CascadeContainmentManager = CascadeContainmentManager;
|
|
387
|
+
//# sourceMappingURL=cascade-containment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cascade-containment.js","sourceRoot":"","sources":["../src/cascade-containment.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { AgentIdentity } from './identity';
|
|
2
|
+
import { TrustManager } from './trust';
|
|
3
|
+
import { PolicyEngine } from './policy';
|
|
4
|
+
import { AuditLogger } from './audit';
|
|
5
|
+
import { AgentMeshConfig, GovernanceResult, SkillAuditMetadata } from './types';
|
|
6
|
+
import { KillSwitch } from './kill-switch';
|
|
7
|
+
import { LifecycleManager } from './lifecycle';
|
|
8
|
+
import { RingEnforcer } from './rings';
|
|
9
|
+
/**
|
|
10
|
+
* Unified client that ties identity, trust, policy, and audit together
|
|
11
|
+
* into a single governance-aware entry point.
|
|
12
|
+
*/
|
|
13
|
+
export declare class AgentMeshClient {
|
|
14
|
+
readonly identity: AgentIdentity;
|
|
15
|
+
readonly trust: TrustManager;
|
|
16
|
+
readonly policy: PolicyEngine;
|
|
17
|
+
readonly audit: AuditLogger;
|
|
18
|
+
readonly lifecycle: LifecycleManager;
|
|
19
|
+
readonly ringEnforcer: RingEnforcer;
|
|
20
|
+
readonly killSwitch?: KillSwitch;
|
|
21
|
+
private readonly quarantineOnBreach;
|
|
22
|
+
private readonly killOnBreach;
|
|
23
|
+
constructor(config: AgentMeshConfig);
|
|
24
|
+
/** Convenience factory. */
|
|
25
|
+
static create(agentId: string, options?: Partial<AgentMeshConfig>): AgentMeshClient;
|
|
26
|
+
/**
|
|
27
|
+
* Execute an action through the full governance pipeline:
|
|
28
|
+
* 1. Evaluate policy
|
|
29
|
+
* 2. Check trust score
|
|
30
|
+
* 3. Log to audit trail
|
|
31
|
+
*/
|
|
32
|
+
executeWithGovernance(action: string, params?: Record<string, unknown>, skillAuditMetadata?: SkillAuditMetadata): Promise<GovernanceResult>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAkB,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAmB,YAAY,EAAE,MAAM,SAAS,CAAC;AAExD;;;GAGG;AACH,qBAAa,eAAe;IAC1B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAU;IAC7C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;gBAE3B,MAAM,EAAE,eAAe;IAYnC,2BAA2B;IAC3B,MAAM,CAAC,MAAM,CACX,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GACjC,eAAe;IAIlB;;;;;OAKG;IACG,qBAAqB,CACzB,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACpC,kBAAkB,CAAC,EAAE,kBAAkB,GACtC,OAAO,CAAC,gBAAgB,CAAC;CAwE7B"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AgentMeshClient = void 0;
|
|
4
|
+
// Copyright (c) Microsoft Corporation.
|
|
5
|
+
// Licensed under the MIT License.
|
|
6
|
+
const identity_1 = require("./identity");
|
|
7
|
+
const trust_1 = require("./trust");
|
|
8
|
+
const policy_1 = require("./policy");
|
|
9
|
+
const audit_1 = require("./audit");
|
|
10
|
+
const kill_switch_1 = require("./kill-switch");
|
|
11
|
+
const lifecycle_1 = require("./lifecycle");
|
|
12
|
+
const rings_1 = require("./rings");
|
|
13
|
+
/**
|
|
14
|
+
* Unified client that ties identity, trust, policy, and audit together
|
|
15
|
+
* into a single governance-aware entry point.
|
|
16
|
+
*/
|
|
17
|
+
class AgentMeshClient {
|
|
18
|
+
identity;
|
|
19
|
+
trust;
|
|
20
|
+
policy;
|
|
21
|
+
audit;
|
|
22
|
+
lifecycle;
|
|
23
|
+
ringEnforcer;
|
|
24
|
+
killSwitch;
|
|
25
|
+
quarantineOnBreach;
|
|
26
|
+
killOnBreach;
|
|
27
|
+
constructor(config) {
|
|
28
|
+
this.identity = identity_1.AgentIdentity.generate(config.agentId, config.capabilities);
|
|
29
|
+
this.trust = new trust_1.TrustManager(config.trust);
|
|
30
|
+
this.policy = new policy_1.PolicyEngine(config.policyRules);
|
|
31
|
+
this.audit = new audit_1.AuditLogger(config.audit);
|
|
32
|
+
this.lifecycle = new lifecycle_1.LifecycleManager(this.identity.did);
|
|
33
|
+
this.ringEnforcer = new rings_1.RingEnforcer(config.execution);
|
|
34
|
+
this.quarantineOnBreach = config.execution?.quarantineOnBreach ?? true;
|
|
35
|
+
this.killOnBreach = config.execution?.killOnBreach ?? false;
|
|
36
|
+
this.killSwitch = config.killSwitch?.enabled === false ? undefined : new kill_switch_1.KillSwitch(config.killSwitch);
|
|
37
|
+
}
|
|
38
|
+
/** Convenience factory. */
|
|
39
|
+
static create(agentId, options) {
|
|
40
|
+
return new AgentMeshClient({ agentId, ...options });
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Execute an action through the full governance pipeline:
|
|
44
|
+
* 1. Evaluate policy
|
|
45
|
+
* 2. Check trust score
|
|
46
|
+
* 3. Log to audit trail
|
|
47
|
+
*/
|
|
48
|
+
async executeWithGovernance(action, params = {}, skillAuditMetadata) {
|
|
49
|
+
const start = performance.now();
|
|
50
|
+
if (this.lifecycle.state === lifecycle_1.LifecycleState.Provisioning) {
|
|
51
|
+
this.lifecycle.activate('Governance pipeline initialized');
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
this.ringEnforcer.enforce(action);
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
if (error instanceof rings_1.RingBreachError) {
|
|
58
|
+
let lifecycleReason = error.message;
|
|
59
|
+
if (this.quarantineOnBreach && this.lifecycle.canTransition(lifecycle_1.LifecycleState.Quarantined)) {
|
|
60
|
+
this.lifecycle.quarantine(error.message);
|
|
61
|
+
}
|
|
62
|
+
const killSwitchResult = this.killOnBreach && this.killSwitch
|
|
63
|
+
? await this.killSwitch.kill(this.identity.did, {
|
|
64
|
+
action,
|
|
65
|
+
reason: error.message,
|
|
66
|
+
})
|
|
67
|
+
: undefined;
|
|
68
|
+
const auditEntry = this.audit.log({
|
|
69
|
+
agentId: this.identity.did,
|
|
70
|
+
action,
|
|
71
|
+
decision: 'deny',
|
|
72
|
+
});
|
|
73
|
+
this.trust.recordFailure(this.identity.did);
|
|
74
|
+
return {
|
|
75
|
+
decision: 'deny',
|
|
76
|
+
trustScore: this.trust.getTrustScore(this.identity.did),
|
|
77
|
+
auditEntry,
|
|
78
|
+
executionTime: Math.round((performance.now() - start) * 1000) / 1000,
|
|
79
|
+
ringViolation: error.violation,
|
|
80
|
+
killSwitchResult,
|
|
81
|
+
lifecycleState: this.lifecycle.state,
|
|
82
|
+
lifecycleReason,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
const decision = this.policy.evaluate(action, params);
|
|
88
|
+
const trustScore = this.trust.getTrustScore(this.identity.did);
|
|
89
|
+
const auditEntry = this.audit.log({
|
|
90
|
+
agentId: this.identity.did,
|
|
91
|
+
action,
|
|
92
|
+
decision,
|
|
93
|
+
skillAuditMetadata,
|
|
94
|
+
});
|
|
95
|
+
if (decision === 'allow') {
|
|
96
|
+
this.trust.recordSuccess(this.identity.did);
|
|
97
|
+
}
|
|
98
|
+
else if (decision === 'deny') {
|
|
99
|
+
this.trust.recordFailure(this.identity.did);
|
|
100
|
+
}
|
|
101
|
+
const executionTime = Math.round((performance.now() - start) * 1000) / 1000;
|
|
102
|
+
return {
|
|
103
|
+
decision,
|
|
104
|
+
trustScore,
|
|
105
|
+
auditEntry,
|
|
106
|
+
executionTime,
|
|
107
|
+
lifecycleState: this.lifecycle.state,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
exports.AgentMeshClient = AgentMeshClient;
|
|
112
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { ContextEntry, ContextIsolationViolation, ContextPoisoningConfig, ContextPoisoningScanResult, PoisoningFinding } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Detects context poisoning attacks in agent memory stores (OWASP ASI-06).
|
|
4
|
+
*
|
|
5
|
+
* Scans context entries for known attack patterns including prompt injection,
|
|
6
|
+
* context window stuffing, high-entropy payloads, and repetition flooding.
|
|
7
|
+
* Also validates memory isolation between agent sessions.
|
|
8
|
+
*/
|
|
9
|
+
export declare class ContextPoisoningDetector {
|
|
10
|
+
private readonly config;
|
|
11
|
+
private readonly patterns;
|
|
12
|
+
private readonly compiledRegex;
|
|
13
|
+
private readonly contextStore;
|
|
14
|
+
private readonly integrityHashes;
|
|
15
|
+
private static readonly MAX_CONTEXT_KEYS;
|
|
16
|
+
private static readonly MAX_ENTRIES_PER_KEY;
|
|
17
|
+
constructor(config?: ContextPoisoningConfig);
|
|
18
|
+
/**
|
|
19
|
+
* Add a context entry to the store and compute its integrity hash.
|
|
20
|
+
*/
|
|
21
|
+
addEntry(entry: ContextEntry): void;
|
|
22
|
+
/**
|
|
23
|
+
* Scan all stored context entries for poisoning indicators.
|
|
24
|
+
*/
|
|
25
|
+
scan(): ContextPoisoningScanResult;
|
|
26
|
+
/**
|
|
27
|
+
* Scan a single context entry for poisoning patterns.
|
|
28
|
+
*/
|
|
29
|
+
scanEntry(entry: ContextEntry): PoisoningFinding[];
|
|
30
|
+
/**
|
|
31
|
+
* Verify integrity of all stored entries.
|
|
32
|
+
* Returns false if any entry has been tampered with.
|
|
33
|
+
*/
|
|
34
|
+
verifyIntegrity(): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Check memory isolation between sessions for the same agent.
|
|
37
|
+
*/
|
|
38
|
+
checkIsolation(): ContextIsolationViolation[];
|
|
39
|
+
/**
|
|
40
|
+
* Get all stored entries for a specific agent/session.
|
|
41
|
+
*/
|
|
42
|
+
getEntries(agentId: string, sessionId: string): ContextEntry[];
|
|
43
|
+
/**
|
|
44
|
+
* Clear all entries for a specific agent/session.
|
|
45
|
+
*/
|
|
46
|
+
clearSession(agentId: string, sessionId: string): void;
|
|
47
|
+
private checkPattern;
|
|
48
|
+
private checkRegex;
|
|
49
|
+
private checkEntropy;
|
|
50
|
+
private checkSize;
|
|
51
|
+
private checkRepetition;
|
|
52
|
+
private findSharedContent;
|
|
53
|
+
private shannonEntropy;
|
|
54
|
+
private computeHash;
|
|
55
|
+
private getRecommendation;
|
|
56
|
+
private assessRisk;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=context-poisoning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-poisoning.d.ts","sourceRoot":"","sources":["../src/context-poisoning.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,YAAY,EACZ,yBAAyB,EACzB,sBAAsB,EACtB,0BAA0B,EAC1B,gBAAgB,EAEjB,MAAM,SAAS,CAAC;AAkEjB;;;;;;GAMG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0D;IACjF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA6B;IAC3D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqC;IAClE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA6B;IAE7D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAU;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAS;gBAExC,MAAM,CAAC,EAAE,sBAAsB;IAqB3C;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAqBnC;;OAEG;IACH,IAAI,IAAI,0BAA0B;IAiClC;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,gBAAgB,EAAE;IAalD;;;OAGG;IACH,eAAe,IAAI,OAAO;IAY1B;;OAEG;IACH,cAAc,IAAI,yBAAyB,EAAE;IA0C7C;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE;IAI9D;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAatD,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,UAAU;IAqBlB,OAAO,CAAC,YAAY;IAoBpB,OAAO,CAAC,SAAS;IAkBjB,OAAO,CAAC,eAAe;IAkCvB,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,UAAU;CAenB"}
|