@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.
Files changed (45) hide show
  1. package/dist/common/logger.d.ts +12 -0
  2. package/dist/common/logger.d.ts.map +1 -0
  3. package/dist/common/logger.js +23 -0
  4. package/dist/common/logger.js.map +1 -0
  5. package/dist/index.d.ts +16 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +27 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/intent-pipeline/index.d.ts +65 -0
  10. package/dist/intent-pipeline/index.d.ts.map +1 -0
  11. package/dist/intent-pipeline/index.js +244 -0
  12. package/dist/intent-pipeline/index.js.map +1 -0
  13. package/dist/intent-pipeline/types.d.ts +78 -0
  14. package/dist/intent-pipeline/types.d.ts.map +1 -0
  15. package/dist/intent-pipeline/types.js +17 -0
  16. package/dist/intent-pipeline/types.js.map +1 -0
  17. package/dist/proof-committer/index.d.ts +86 -0
  18. package/dist/proof-committer/index.d.ts.map +1 -0
  19. package/dist/proof-committer/index.js +252 -0
  20. package/dist/proof-committer/index.js.map +1 -0
  21. package/dist/proof-committer/types.d.ts +107 -0
  22. package/dist/proof-committer/types.d.ts.map +1 -0
  23. package/dist/proof-committer/types.js +58 -0
  24. package/dist/proof-committer/types.js.map +1 -0
  25. package/dist/stores/index.d.ts +10 -0
  26. package/dist/stores/index.d.ts.map +1 -0
  27. package/dist/stores/index.js +10 -0
  28. package/dist/stores/index.js.map +1 -0
  29. package/dist/stores/sqlite-proof-store.d.ts +61 -0
  30. package/dist/stores/sqlite-proof-store.d.ts.map +1 -0
  31. package/dist/stores/sqlite-proof-store.js +239 -0
  32. package/dist/stores/sqlite-proof-store.js.map +1 -0
  33. package/dist/stores/sqlite-trust-store.d.ts +124 -0
  34. package/dist/stores/sqlite-trust-store.d.ts.map +1 -0
  35. package/dist/stores/sqlite-trust-store.js +297 -0
  36. package/dist/stores/sqlite-trust-store.js.map +1 -0
  37. package/dist/trust-facade/index.d.ts +72 -0
  38. package/dist/trust-facade/index.d.ts.map +1 -0
  39. package/dist/trust-facade/index.js +410 -0
  40. package/dist/trust-facade/index.js.map +1 -0
  41. package/dist/trust-facade/types.d.ts +211 -0
  42. package/dist/trust-facade/types.d.ts.map +1 -0
  43. package/dist/trust-facade/types.js +45 -0
  44. package/dist/trust-facade/types.js.map +1 -0
  45. 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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"}