@vorionsys/runtime 0.1.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/common/logger.d.ts +12 -0
- package/dist/common/logger.d.ts.map +1 -0
- package/dist/common/logger.js +23 -0
- package/dist/common/logger.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/intent-pipeline/index.d.ts +65 -0
- package/dist/intent-pipeline/index.d.ts.map +1 -0
- package/dist/intent-pipeline/index.js +244 -0
- package/dist/intent-pipeline/index.js.map +1 -0
- package/dist/intent-pipeline/types.d.ts +78 -0
- package/dist/intent-pipeline/types.d.ts.map +1 -0
- package/dist/intent-pipeline/types.js +17 -0
- package/dist/intent-pipeline/types.js.map +1 -0
- package/dist/proof-committer/index.d.ts +86 -0
- package/dist/proof-committer/index.d.ts.map +1 -0
- package/dist/proof-committer/index.js +252 -0
- package/dist/proof-committer/index.js.map +1 -0
- package/dist/proof-committer/types.d.ts +107 -0
- package/dist/proof-committer/types.d.ts.map +1 -0
- package/dist/proof-committer/types.js +58 -0
- package/dist/proof-committer/types.js.map +1 -0
- package/dist/stores/index.d.ts +10 -0
- package/dist/stores/index.d.ts.map +1 -0
- package/dist/stores/index.js +10 -0
- package/dist/stores/index.js.map +1 -0
- package/dist/stores/sqlite-proof-store.d.ts +61 -0
- package/dist/stores/sqlite-proof-store.d.ts.map +1 -0
- package/dist/stores/sqlite-proof-store.js +239 -0
- package/dist/stores/sqlite-proof-store.js.map +1 -0
- package/dist/stores/sqlite-trust-store.d.ts +124 -0
- package/dist/stores/sqlite-trust-store.d.ts.map +1 -0
- package/dist/stores/sqlite-trust-store.js +297 -0
- package/dist/stores/sqlite-trust-store.js.map +1 -0
- package/dist/trust-facade/index.d.ts +72 -0
- package/dist/trust-facade/index.d.ts.map +1 -0
- package/dist/trust-facade/index.js +410 -0
- package/dist/trust-facade/index.js.map +1 -0
- package/dist/trust-facade/types.d.ts +211 -0
- package/dist/trust-facade/types.d.ts.map +1 -0
- package/dist/trust-facade/types.js +45 -0
- package/dist/trust-facade/types.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TrustFacade - Unified Trust Interface
|
|
3
|
+
*
|
|
4
|
+
* Combines Gate Trust (the door) and Dynamic Trust (the handshake)
|
|
5
|
+
* into a single, fast decision function.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
import type { TrustGate, TrustFacadeConfig, AgentCredentials, AdmissionResult, Action, AuthorizationResult, FullCheckResult, TrustSignal, TrustTier } from './types.js';
|
|
10
|
+
export * from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* TrustFacade implementation
|
|
13
|
+
*/
|
|
14
|
+
export declare class TrustFacade implements TrustGate {
|
|
15
|
+
private config;
|
|
16
|
+
private gateTrustCache;
|
|
17
|
+
private trustScores;
|
|
18
|
+
private revokedAgents;
|
|
19
|
+
constructor(config?: Partial<TrustFacadeConfig>);
|
|
20
|
+
/**
|
|
21
|
+
* THE DOOR - Agent admission
|
|
22
|
+
*/
|
|
23
|
+
admit(agent: AgentCredentials): Promise<AdmissionResult>;
|
|
24
|
+
/**
|
|
25
|
+
* THE HANDSHAKE - Action authorization
|
|
26
|
+
*/
|
|
27
|
+
authorize(agentId: string, action: Action): Promise<AuthorizationResult>;
|
|
28
|
+
/**
|
|
29
|
+
* Combined admission + authorization
|
|
30
|
+
*/
|
|
31
|
+
fullCheck(agent: AgentCredentials, action: Action): Promise<FullCheckResult>;
|
|
32
|
+
/**
|
|
33
|
+
* Record a trust signal
|
|
34
|
+
*/
|
|
35
|
+
recordSignal(signal: TrustSignal): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Get current trust score
|
|
38
|
+
*/
|
|
39
|
+
getScore(agentId: string): Promise<number | null>;
|
|
40
|
+
/**
|
|
41
|
+
* Get current trust tier
|
|
42
|
+
*/
|
|
43
|
+
getTier(agentId: string): Promise<TrustTier | null>;
|
|
44
|
+
/**
|
|
45
|
+
* Revoke agent admission (implements TrustGate interface)
|
|
46
|
+
*/
|
|
47
|
+
revoke(agentId: string, reason: string): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Alias for revoke (synchronous version for convenience)
|
|
50
|
+
*/
|
|
51
|
+
revokeAgent(agentId: string, reason: string): void;
|
|
52
|
+
/**
|
|
53
|
+
* Get combined trust info for an agent
|
|
54
|
+
*/
|
|
55
|
+
getAgentTrustInfo(agentId: string): {
|
|
56
|
+
score: number;
|
|
57
|
+
tier: TrustTier;
|
|
58
|
+
ceiling: number;
|
|
59
|
+
} | null;
|
|
60
|
+
private validateCapabilities;
|
|
61
|
+
private calculateInitialScore;
|
|
62
|
+
private scoreToTier;
|
|
63
|
+
private evaluateAction;
|
|
64
|
+
private getConstraintsForTier;
|
|
65
|
+
private assessActionRisk;
|
|
66
|
+
private createDenialResult;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Create a new TrustFacade instance
|
|
70
|
+
*/
|
|
71
|
+
export declare function createTrustFacade(config?: Partial<TrustFacadeConfig>): TrustFacade;
|
|
72
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/trust-facade/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EACV,SAAS,EACT,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,MAAM,EACN,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,SAAS,EAIV,MAAM,YAAY,CAAC;AAOpB,cAAc,YAAY,CAAC;AAqB3B;;GAEG;AACH,qBAAa,WAAY,YAAW,SAAS;IAC3C,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,aAAa,CAA0B;gBAEnC,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAK/C;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAsE9D;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA2D9E;;OAEG;IACG,SAAS,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAYlF;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAoDtD;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAIvD;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAMzD;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ5D;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAQlD;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAkB9F,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,cAAc;IAoEtB,OAAO,CAAC,qBAAqB;IA6D7B,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,kBAAkB;CAc3B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,WAAW,CAElF"}
|
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TrustFacade - Unified Trust Interface
|
|
3
|
+
*
|
|
4
|
+
* Combines Gate Trust (the door) and Dynamic Trust (the handshake)
|
|
5
|
+
* into a single, fast decision function.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
import { createLogger } from '../common/logger.js';
|
|
10
|
+
import { DEFAULT_TRUST_FACADE_CONFIG, TRUST_TIER_RANGES, TRUST_TIER_NAMES, } from './types.js';
|
|
11
|
+
export * from './types.js';
|
|
12
|
+
const logger = createLogger({ component: 'trust-facade' });
|
|
13
|
+
/**
|
|
14
|
+
* Observation tier ceilings - maximum trust based on visibility
|
|
15
|
+
*/
|
|
16
|
+
const OBSERVATION_CEILINGS = {
|
|
17
|
+
BLACK_BOX: 500, // Can only reach T3 Monitored
|
|
18
|
+
GRAY_BOX: 800, // Can reach T5 Trusted
|
|
19
|
+
WHITE_BOX: 1000, // Can reach T7 Autonomous
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* TrustFacade implementation
|
|
23
|
+
*/
|
|
24
|
+
export class TrustFacade {
|
|
25
|
+
config;
|
|
26
|
+
gateTrustCache = new Map();
|
|
27
|
+
trustScores = new Map();
|
|
28
|
+
revokedAgents = new Set();
|
|
29
|
+
constructor(config) {
|
|
30
|
+
this.config = { ...DEFAULT_TRUST_FACADE_CONFIG, ...config };
|
|
31
|
+
logger.info({ config: this.config }, 'TrustFacade initialized');
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* THE DOOR - Agent admission
|
|
35
|
+
*/
|
|
36
|
+
async admit(agent) {
|
|
37
|
+
const startTime = performance.now();
|
|
38
|
+
// Check if revoked
|
|
39
|
+
if (this.revokedAgents.has(agent.agentId)) {
|
|
40
|
+
logger.warn({ agentId: agent.agentId }, 'Admission denied: agent revoked');
|
|
41
|
+
return {
|
|
42
|
+
admitted: false,
|
|
43
|
+
initialTier: 0,
|
|
44
|
+
initialScore: 0,
|
|
45
|
+
observationCeiling: 0,
|
|
46
|
+
capabilities: [],
|
|
47
|
+
expiresAt: new Date(),
|
|
48
|
+
reason: 'Agent has been revoked',
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
// Check cache
|
|
52
|
+
const cached = this.gateTrustCache.get(agent.agentId);
|
|
53
|
+
if (cached && Date.now() - cached.cachedAt < this.config.gateTrustCacheTtlMs) {
|
|
54
|
+
logger.debug({ agentId: agent.agentId }, 'Returning cached admission');
|
|
55
|
+
return cached.admission;
|
|
56
|
+
}
|
|
57
|
+
// Calculate observation ceiling
|
|
58
|
+
const observationCeiling = OBSERVATION_CEILINGS[agent.observationTier];
|
|
59
|
+
// Validate capabilities (stub - would check against registry)
|
|
60
|
+
const validatedCapabilities = this.validateCapabilities(agent.capabilities);
|
|
61
|
+
// Determine initial tier based on observation tier
|
|
62
|
+
const initialScore = this.calculateInitialScore(agent);
|
|
63
|
+
const initialTier = this.scoreToTier(initialScore);
|
|
64
|
+
// Calculate expiration (re-verify in 24 hours)
|
|
65
|
+
const expiresAt = new Date(Date.now() + 24 * 60 * 60 * 1000);
|
|
66
|
+
const admission = {
|
|
67
|
+
admitted: true,
|
|
68
|
+
initialTier,
|
|
69
|
+
initialScore,
|
|
70
|
+
observationCeiling,
|
|
71
|
+
capabilities: validatedCapabilities,
|
|
72
|
+
expiresAt,
|
|
73
|
+
};
|
|
74
|
+
// Cache the result
|
|
75
|
+
this.gateTrustCache.set(agent.agentId, {
|
|
76
|
+
admission,
|
|
77
|
+
cachedAt: Date.now(),
|
|
78
|
+
});
|
|
79
|
+
// Store initial score
|
|
80
|
+
this.trustScores.set(agent.agentId, initialScore);
|
|
81
|
+
const latencyMs = performance.now() - startTime;
|
|
82
|
+
logger.info({
|
|
83
|
+
agentId: agent.agentId,
|
|
84
|
+
initialTier,
|
|
85
|
+
initialScore,
|
|
86
|
+
observationCeiling,
|
|
87
|
+
latencyMs,
|
|
88
|
+
}, 'Agent admitted');
|
|
89
|
+
return admission;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* THE HANDSHAKE - Action authorization
|
|
93
|
+
*/
|
|
94
|
+
async authorize(agentId, action) {
|
|
95
|
+
const startTime = performance.now();
|
|
96
|
+
// Check if revoked
|
|
97
|
+
if (this.revokedAgents.has(agentId)) {
|
|
98
|
+
return this.createDenialResult(agentId, 'Agent has been revoked', startTime);
|
|
99
|
+
}
|
|
100
|
+
// Check if admitted (has cached gate trust)
|
|
101
|
+
const cached = this.gateTrustCache.get(agentId);
|
|
102
|
+
if (!cached) {
|
|
103
|
+
return this.createDenialResult(agentId, 'Agent not admitted', startTime);
|
|
104
|
+
}
|
|
105
|
+
// Check if admission expired
|
|
106
|
+
if (new Date() > cached.admission.expiresAt) {
|
|
107
|
+
this.gateTrustCache.delete(agentId);
|
|
108
|
+
return this.createDenialResult(agentId, 'Admission expired', startTime);
|
|
109
|
+
}
|
|
110
|
+
// Get current trust score
|
|
111
|
+
const currentScore = this.trustScores.get(agentId) ?? cached.admission.initialScore;
|
|
112
|
+
const currentTier = this.scoreToTier(currentScore);
|
|
113
|
+
// Evaluate the action against trust level
|
|
114
|
+
const decision = this.evaluateAction(action, currentTier, currentScore, cached.admission);
|
|
115
|
+
const latencyMs = performance.now() - startTime;
|
|
116
|
+
// Log if we exceeded latency target
|
|
117
|
+
if (latencyMs > this.config.maxAuthorizationLatencyMs) {
|
|
118
|
+
logger.warn({ agentId, latencyMs, target: this.config.maxAuthorizationLatencyMs }, 'Authorization exceeded latency target');
|
|
119
|
+
}
|
|
120
|
+
const result = {
|
|
121
|
+
...decision,
|
|
122
|
+
currentScore,
|
|
123
|
+
currentTier,
|
|
124
|
+
latencyMs,
|
|
125
|
+
};
|
|
126
|
+
logger.debug({
|
|
127
|
+
agentId,
|
|
128
|
+
action: action.type,
|
|
129
|
+
resource: action.resource,
|
|
130
|
+
tier: result.tier,
|
|
131
|
+
allowed: result.allowed,
|
|
132
|
+
latencyMs,
|
|
133
|
+
}, 'Authorization complete');
|
|
134
|
+
return result;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Combined admission + authorization
|
|
138
|
+
*/
|
|
139
|
+
async fullCheck(agent, action) {
|
|
140
|
+
const admission = await this.admit(agent);
|
|
141
|
+
if (!admission.admitted) {
|
|
142
|
+
return { admission };
|
|
143
|
+
}
|
|
144
|
+
const authorization = await this.authorize(agent.agentId, action);
|
|
145
|
+
return { admission, authorization };
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Record a trust signal
|
|
149
|
+
*/
|
|
150
|
+
async recordSignal(signal) {
|
|
151
|
+
const currentScore = this.trustScores.get(signal.agentId);
|
|
152
|
+
if (currentScore === undefined) {
|
|
153
|
+
logger.warn({ agentId: signal.agentId }, 'Cannot record signal: agent not found');
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
// Get observation ceiling
|
|
157
|
+
const cached = this.gateTrustCache.get(signal.agentId);
|
|
158
|
+
const ceiling = cached?.admission.observationCeiling ?? 1000;
|
|
159
|
+
// Apply asymmetric trust dynamics (10:1 loss:gain ratio)
|
|
160
|
+
let delta;
|
|
161
|
+
switch (signal.type) {
|
|
162
|
+
case 'success':
|
|
163
|
+
// Logarithmic gain: small increments
|
|
164
|
+
delta = Math.log(1 + signal.weight * 10) * 2;
|
|
165
|
+
break;
|
|
166
|
+
case 'failure':
|
|
167
|
+
// Exponential loss: significant penalty
|
|
168
|
+
delta = -(signal.weight * 50);
|
|
169
|
+
break;
|
|
170
|
+
case 'violation':
|
|
171
|
+
// Severe penalty for violations
|
|
172
|
+
delta = -(signal.weight * 100);
|
|
173
|
+
break;
|
|
174
|
+
case 'neutral':
|
|
175
|
+
default:
|
|
176
|
+
delta = 0;
|
|
177
|
+
}
|
|
178
|
+
// Calculate new score with ceiling
|
|
179
|
+
const newScore = Math.max(0, Math.min(ceiling, currentScore + delta));
|
|
180
|
+
this.trustScores.set(signal.agentId, newScore);
|
|
181
|
+
const oldTier = this.scoreToTier(currentScore);
|
|
182
|
+
const newTier = this.scoreToTier(newScore);
|
|
183
|
+
logger.info({
|
|
184
|
+
agentId: signal.agentId,
|
|
185
|
+
signalType: signal.type,
|
|
186
|
+
weight: signal.weight,
|
|
187
|
+
delta,
|
|
188
|
+
oldScore: currentScore,
|
|
189
|
+
newScore,
|
|
190
|
+
tierChange: oldTier !== newTier ? `T${oldTier} -> T${newTier}` : null,
|
|
191
|
+
}, 'Trust signal recorded');
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Get current trust score
|
|
195
|
+
*/
|
|
196
|
+
async getScore(agentId) {
|
|
197
|
+
return this.trustScores.get(agentId) ?? null;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Get current trust tier
|
|
201
|
+
*/
|
|
202
|
+
async getTier(agentId) {
|
|
203
|
+
const score = this.trustScores.get(agentId);
|
|
204
|
+
if (score === undefined)
|
|
205
|
+
return null;
|
|
206
|
+
return this.scoreToTier(score);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Revoke agent admission (implements TrustGate interface)
|
|
210
|
+
*/
|
|
211
|
+
async revoke(agentId, reason) {
|
|
212
|
+
this.revokedAgents.add(agentId);
|
|
213
|
+
this.gateTrustCache.delete(agentId);
|
|
214
|
+
this.trustScores.delete(agentId);
|
|
215
|
+
logger.warn({ agentId, reason }, 'Agent revoked');
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Alias for revoke (synchronous version for convenience)
|
|
219
|
+
*/
|
|
220
|
+
revokeAgent(agentId, reason) {
|
|
221
|
+
this.revokedAgents.add(agentId);
|
|
222
|
+
this.gateTrustCache.delete(agentId);
|
|
223
|
+
this.trustScores.delete(agentId);
|
|
224
|
+
logger.warn({ agentId, reason }, 'Agent revoked');
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Get combined trust info for an agent
|
|
228
|
+
*/
|
|
229
|
+
getAgentTrustInfo(agentId) {
|
|
230
|
+
const score = this.trustScores.get(agentId);
|
|
231
|
+
if (score === undefined)
|
|
232
|
+
return null;
|
|
233
|
+
const cached = this.gateTrustCache.get(agentId);
|
|
234
|
+
const ceiling = cached?.admission.observationCeiling ?? 1000;
|
|
235
|
+
return {
|
|
236
|
+
score,
|
|
237
|
+
tier: this.scoreToTier(score),
|
|
238
|
+
ceiling,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
// ============================================================
|
|
242
|
+
// Private methods
|
|
243
|
+
// ============================================================
|
|
244
|
+
validateCapabilities(capabilities) {
|
|
245
|
+
// Stub - would validate against capability registry
|
|
246
|
+
if (!capabilities) {
|
|
247
|
+
return [];
|
|
248
|
+
}
|
|
249
|
+
return capabilities.filter((cap) => !cap.includes('admin'));
|
|
250
|
+
}
|
|
251
|
+
calculateInitialScore(agent) {
|
|
252
|
+
// Initial score based on observation tier
|
|
253
|
+
switch (agent.observationTier) {
|
|
254
|
+
case 'WHITE_BOX':
|
|
255
|
+
return 300; // Start at T1
|
|
256
|
+
case 'GRAY_BOX':
|
|
257
|
+
return 200; // Start at T1
|
|
258
|
+
case 'BLACK_BOX':
|
|
259
|
+
default:
|
|
260
|
+
return 100; // Start at T0
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
scoreToTier(score) {
|
|
264
|
+
for (const [tier, range] of Object.entries(TRUST_TIER_RANGES)) {
|
|
265
|
+
if (score >= range.min && score <= range.max) {
|
|
266
|
+
return parseInt(tier);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
return 0;
|
|
270
|
+
}
|
|
271
|
+
evaluateAction(action, tier, score, admission) {
|
|
272
|
+
// Check capability
|
|
273
|
+
const requiredCapability = `${action.type}:${action.resource.split('/')[0]}`;
|
|
274
|
+
const hasCapability = admission.capabilities.some((cap) => cap === requiredCapability || cap === `${action.type}:*` || cap === '*');
|
|
275
|
+
if (!hasCapability) {
|
|
276
|
+
return {
|
|
277
|
+
allowed: false,
|
|
278
|
+
tier: 'RED',
|
|
279
|
+
reason: `Missing capability: ${requiredCapability}`,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
// Tier-based constraints
|
|
283
|
+
const constraints = this.getConstraintsForTier(tier);
|
|
284
|
+
// Determine decision tier based on action risk
|
|
285
|
+
const actionRisk = this.assessActionRisk(action);
|
|
286
|
+
if (actionRisk === 'high' && tier < 4) {
|
|
287
|
+
// High-risk action requires T4+
|
|
288
|
+
return {
|
|
289
|
+
allowed: false,
|
|
290
|
+
tier: 'RED',
|
|
291
|
+
reason: `High-risk action requires T4 (Standard) or higher. Current: T${tier} (${TRUST_TIER_NAMES[tier]})`,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
if (actionRisk === 'medium' && tier < 2) {
|
|
295
|
+
// Medium-risk needs refinement for low-trust agents
|
|
296
|
+
return {
|
|
297
|
+
allowed: true,
|
|
298
|
+
tier: 'YELLOW',
|
|
299
|
+
constraints,
|
|
300
|
+
reason: 'Action requires additional constraints at current trust level',
|
|
301
|
+
refinements: [
|
|
302
|
+
{
|
|
303
|
+
id: 'add-timeout',
|
|
304
|
+
description: 'Execute with shorter timeout',
|
|
305
|
+
modifiedAction: action,
|
|
306
|
+
constraints: { ...constraints, timeoutMs: 30000 },
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
id: 'add-approval',
|
|
310
|
+
description: 'Request human approval',
|
|
311
|
+
modifiedAction: action,
|
|
312
|
+
constraints: { ...constraints },
|
|
313
|
+
},
|
|
314
|
+
],
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
// GREEN - allowed with constraints
|
|
318
|
+
return {
|
|
319
|
+
allowed: true,
|
|
320
|
+
tier: 'GREEN',
|
|
321
|
+
constraints,
|
|
322
|
+
reason: `Authorized at T${tier} (${TRUST_TIER_NAMES[tier]})`,
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
getConstraintsForTier(tier) {
|
|
326
|
+
const baseConstraints = {
|
|
327
|
+
timeoutMs: 300000, // 5 minutes
|
|
328
|
+
resourceLimits: {
|
|
329
|
+
maxMemoryMb: 512,
|
|
330
|
+
maxCpuPercent: 50,
|
|
331
|
+
},
|
|
332
|
+
};
|
|
333
|
+
switch (tier) {
|
|
334
|
+
case 0:
|
|
335
|
+
case 1:
|
|
336
|
+
return {
|
|
337
|
+
...baseConstraints,
|
|
338
|
+
maxOperations: 10,
|
|
339
|
+
timeoutMs: 60000,
|
|
340
|
+
resourceLimits: {
|
|
341
|
+
maxMemoryMb: 128,
|
|
342
|
+
maxCpuPercent: 25,
|
|
343
|
+
maxNetworkRequests: 0, // No network
|
|
344
|
+
},
|
|
345
|
+
};
|
|
346
|
+
case 2:
|
|
347
|
+
case 3:
|
|
348
|
+
return {
|
|
349
|
+
...baseConstraints,
|
|
350
|
+
maxOperations: 50,
|
|
351
|
+
timeoutMs: 120000,
|
|
352
|
+
resourceLimits: {
|
|
353
|
+
maxMemoryMb: 256,
|
|
354
|
+
maxCpuPercent: 50,
|
|
355
|
+
maxNetworkRequests: 10,
|
|
356
|
+
},
|
|
357
|
+
};
|
|
358
|
+
case 4:
|
|
359
|
+
case 5:
|
|
360
|
+
return {
|
|
361
|
+
...baseConstraints,
|
|
362
|
+
maxOperations: 200,
|
|
363
|
+
resourceLimits: {
|
|
364
|
+
maxMemoryMb: 512,
|
|
365
|
+
maxCpuPercent: 75,
|
|
366
|
+
maxNetworkRequests: 50,
|
|
367
|
+
},
|
|
368
|
+
};
|
|
369
|
+
case 6:
|
|
370
|
+
case 7:
|
|
371
|
+
default:
|
|
372
|
+
return {
|
|
373
|
+
...baseConstraints,
|
|
374
|
+
maxOperations: 1000,
|
|
375
|
+
timeoutMs: 600000,
|
|
376
|
+
resourceLimits: {
|
|
377
|
+
maxMemoryMb: 1024,
|
|
378
|
+
maxCpuPercent: 100,
|
|
379
|
+
maxNetworkRequests: undefined, // Unlimited
|
|
380
|
+
},
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
assessActionRisk(action) {
|
|
385
|
+
const highRiskActions = ['delete', 'execute', 'admin'];
|
|
386
|
+
const mediumRiskActions = ['write', 'update', 'create'];
|
|
387
|
+
if (highRiskActions.includes(action.type))
|
|
388
|
+
return 'high';
|
|
389
|
+
if (mediumRiskActions.includes(action.type))
|
|
390
|
+
return 'medium';
|
|
391
|
+
return 'low';
|
|
392
|
+
}
|
|
393
|
+
createDenialResult(agentId, reason, startTime) {
|
|
394
|
+
return {
|
|
395
|
+
allowed: false,
|
|
396
|
+
tier: 'RED',
|
|
397
|
+
currentScore: 0,
|
|
398
|
+
currentTier: 0,
|
|
399
|
+
reason,
|
|
400
|
+
latencyMs: performance.now() - startTime,
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Create a new TrustFacade instance
|
|
406
|
+
*/
|
|
407
|
+
export function createTrustFacade(config) {
|
|
408
|
+
return new TrustFacade(config);
|
|
409
|
+
}
|
|
410
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/trust-facade/index.ts"],"names":[],"mappings":"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"}
|