@vorionsys/atsf-core 0.4.2 → 0.4.3

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 (37) hide show
  1. package/dist/basis/parser.d.ts +74 -74
  2. package/dist/basis/parser.js +1 -1
  3. package/dist/basis/parser.js.map +1 -1
  4. package/dist/common/config.d.ts +16 -16
  5. package/dist/enforce/fast-path.d.ts +134 -0
  6. package/dist/enforce/fast-path.d.ts.map +1 -0
  7. package/dist/enforce/fast-path.js +257 -0
  8. package/dist/enforce/fast-path.js.map +1 -0
  9. package/dist/enforce/pipeline-optimizer.d.ts +111 -0
  10. package/dist/enforce/pipeline-optimizer.d.ts.map +1 -0
  11. package/dist/enforce/pipeline-optimizer.js +370 -0
  12. package/dist/enforce/pipeline-optimizer.js.map +1 -0
  13. package/dist/enforce/policy-cache.d.ts +92 -0
  14. package/dist/enforce/policy-cache.d.ts.map +1 -0
  15. package/dist/enforce/policy-cache.js +186 -0
  16. package/dist/enforce/policy-cache.js.map +1 -0
  17. package/dist/enforce/trust-cache.d.ts +118 -0
  18. package/dist/enforce/trust-cache.d.ts.map +1 -0
  19. package/dist/enforce/trust-cache.js +218 -0
  20. package/dist/enforce/trust-cache.js.map +1 -0
  21. package/dist/paramesphere/gpu-svd.js.map +1 -1
  22. package/dist/paramesphere/scheduled-verifier.d.ts +136 -0
  23. package/dist/paramesphere/scheduled-verifier.d.ts.map +1 -0
  24. package/dist/paramesphere/scheduled-verifier.js +338 -0
  25. package/dist/paramesphere/scheduled-verifier.js.map +1 -0
  26. package/dist/paramesphere/svd-worker-pool.d.ts +37 -0
  27. package/dist/paramesphere/svd-worker-pool.d.ts.map +1 -0
  28. package/dist/paramesphere/svd-worker-pool.js +144 -0
  29. package/dist/paramesphere/svd-worker-pool.js.map +1 -0
  30. package/dist/paramesphere/svd-worker.d.ts +2 -0
  31. package/dist/paramesphere/svd-worker.d.ts.map +1 -0
  32. package/dist/paramesphere/svd-worker.js +103 -0
  33. package/dist/paramesphere/svd-worker.js.map +1 -0
  34. package/dist/phase6/types.d.ts +248 -248
  35. package/dist/phase6/types.js +1 -1
  36. package/dist/phase6/types.js.map +1 -1
  37. package/package.json +2 -2
@@ -0,0 +1,257 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright 2024-2026 Vorion LLC
3
+ /**
4
+ * Fast-Path Enforcement
5
+ *
6
+ * Pre-computed decision matrix that skips full policy evaluation for the
7
+ * ~70-80% of enforcement requests that have deterministic outcomes.
8
+ *
9
+ * At 10K concurrent agents the policy engine evaluation (~2ms per call)
10
+ * dominates the enforcement pipeline p99 latency. This fast path reduces
11
+ * the common case to an O(1) Map lookup (<0.01ms).
12
+ *
13
+ * How it works:
14
+ * 1. A decision matrix is pre-computed for every (trustTier x actionType x riskLevel) tuple.
15
+ * 2. Each tuple maps to ALLOW, DENY, or CONDITIONAL (needs full evaluation).
16
+ * 3. On enforcement request the fast path is checked first:
17
+ * - ALLOW / DENY → return immediately, skip policy engine entirely
18
+ * - CONDITIONAL → fall through to full evaluation pipeline
19
+ * 4. The matrix is rebuilt when policies change (event-driven invalidation).
20
+ *
21
+ * @packageDocumentation
22
+ */
23
+ import { createLogger } from '../common/logger.js';
24
+ const logger = createLogger({ component: 'fast-path-enforcer' });
25
+ // =============================================================================
26
+ // DEFAULTS
27
+ // =============================================================================
28
+ const ALL_TRUST_TIERS = [0, 1, 2, 3, 4, 5, 6, 7];
29
+ const ALL_ACTION_TYPES = ['read', 'write', 'delete', 'execute', 'transfer'];
30
+ const ALL_RISK_LEVELS = ['read', 'low', 'medium', 'high', 'critical'];
31
+ const DEFAULT_THRESHOLDS = {
32
+ autoApproveTier: 4,
33
+ requireRefinementTier: 2,
34
+ autoDenyTier: 0,
35
+ };
36
+ // =============================================================================
37
+ // FAST PATH ENFORCER
38
+ // =============================================================================
39
+ export class FastPathEnforcer {
40
+ matrix = new Map();
41
+ thresholds;
42
+ trustTiers;
43
+ actionTypes;
44
+ riskLevels;
45
+ // Metrics
46
+ _hits = 0;
47
+ _misses = 0;
48
+ _totalFastPathLatencyMs = 0;
49
+ _totalFullEvalLatencyMs = 0;
50
+ _fullEvalCount = 0;
51
+ constructor(config) {
52
+ this.thresholds = config?.thresholds ?? DEFAULT_THRESHOLDS;
53
+ this.trustTiers = config?.trustTiers ?? ALL_TRUST_TIERS;
54
+ this.actionTypes = config?.actionTypes ?? ALL_ACTION_TYPES;
55
+ this.riskLevels = config?.riskLevels ?? ALL_RISK_LEVELS;
56
+ this.rebuildMatrix();
57
+ }
58
+ // ===========================================================================
59
+ // Core API
60
+ // ===========================================================================
61
+ /**
62
+ * Check the fast-path decision matrix for an enforcement request.
63
+ *
64
+ * Returns `hit: true` with a definitive ALLOW or DENY when the matrix
65
+ * can resolve the request without full policy evaluation.
66
+ *
67
+ * Returns `hit: false` with verdict CONDITIONAL when the request must
68
+ * fall through to the full pipeline.
69
+ */
70
+ check(request) {
71
+ const t0 = performance.now();
72
+ // If the caller signals conditional rules, force fallthrough
73
+ if (request.hasConditionalRules) {
74
+ this._misses++;
75
+ return {
76
+ hit: false,
77
+ verdict: 'CONDITIONAL',
78
+ reasoning: 'Request has conditional policy rules — requires full evaluation',
79
+ };
80
+ }
81
+ const key = this.buildKey(request.trustTier, request.actionType, request.riskLevel);
82
+ const cell = this.matrix.get(key);
83
+ const elapsedMs = performance.now() - t0;
84
+ if (!cell || cell.verdict === 'CONDITIONAL') {
85
+ this._misses++;
86
+ return {
87
+ hit: false,
88
+ verdict: 'CONDITIONAL',
89
+ reasoning: cell?.reasoning ?? 'No matrix entry — requires full evaluation',
90
+ lookupTimeNs: Math.round(elapsedMs * 1_000_000),
91
+ };
92
+ }
93
+ this._hits++;
94
+ this._totalFastPathLatencyMs += elapsedMs;
95
+ return {
96
+ hit: true,
97
+ verdict: cell.verdict,
98
+ reasoning: cell.reasoning,
99
+ lookupTimeNs: Math.round(elapsedMs * 1_000_000),
100
+ };
101
+ }
102
+ // ===========================================================================
103
+ // Matrix management
104
+ // ===========================================================================
105
+ /**
106
+ * Rebuild the decision matrix from current thresholds.
107
+ * Call this when policies change.
108
+ */
109
+ rebuildMatrix(thresholds) {
110
+ if (thresholds) {
111
+ this.thresholds = thresholds;
112
+ }
113
+ this.matrix.clear();
114
+ for (const tier of this.trustTiers) {
115
+ for (const action of this.actionTypes) {
116
+ for (const risk of this.riskLevels) {
117
+ const cell = this.computeCell(tier, action, risk);
118
+ this.matrix.set(this.buildKey(tier, action, risk), cell);
119
+ }
120
+ }
121
+ }
122
+ logger.info({ matrixSize: this.matrix.size, thresholds: this.thresholds }, 'Fast-path decision matrix rebuilt');
123
+ }
124
+ /**
125
+ * Get the raw matrix size (number of pre-computed cells).
126
+ */
127
+ get matrixSize() {
128
+ return this.matrix.size;
129
+ }
130
+ /**
131
+ * Get a specific matrix cell for inspection/debugging.
132
+ */
133
+ getCell(trustTier, actionType, riskLevel) {
134
+ return this.matrix.get(this.buildKey(trustTier, actionType, riskLevel));
135
+ }
136
+ // ===========================================================================
137
+ // Full eval latency tracking (called externally)
138
+ // ===========================================================================
139
+ /**
140
+ * Record a full evaluation latency (for metrics comparison).
141
+ * Call this from the pipeline optimizer when a full eval is performed.
142
+ */
143
+ recordFullEvalLatency(latencyMs) {
144
+ this._totalFullEvalLatencyMs += latencyMs;
145
+ this._fullEvalCount++;
146
+ }
147
+ // ===========================================================================
148
+ // Metrics
149
+ // ===========================================================================
150
+ getMetrics() {
151
+ const total = this._hits + this._misses;
152
+ return {
153
+ fastPathHits: this._hits,
154
+ fastPathMisses: this._misses,
155
+ fastPathHitRate: total > 0 ? this._hits / total : 0,
156
+ fastPathMissRate: total > 0 ? this._misses / total : 0,
157
+ avgFastPathLatencyMs: this._hits > 0 ? this._totalFastPathLatencyMs / this._hits : 0,
158
+ avgFullEvalLatencyMs: this._fullEvalCount > 0 ? this._totalFullEvalLatencyMs / this._fullEvalCount : 0,
159
+ matrixSize: this.matrix.size,
160
+ };
161
+ }
162
+ resetMetrics() {
163
+ this._hits = 0;
164
+ this._misses = 0;
165
+ this._totalFastPathLatencyMs = 0;
166
+ this._totalFullEvalLatencyMs = 0;
167
+ this._fullEvalCount = 0;
168
+ }
169
+ // ===========================================================================
170
+ // Private helpers
171
+ // ===========================================================================
172
+ buildKey(tier, action, risk) {
173
+ return `${tier}:${action}:${risk}`;
174
+ }
175
+ /**
176
+ * Compute a single matrix cell.
177
+ *
178
+ * The logic mirrors TrustAwareEnforcementService.determineTier() but
179
+ * without evaluation context (no specific violated rules). This means
180
+ * we can only produce definitive answers for cases that DON'T depend on
181
+ * per-request policy evaluation results.
182
+ */
183
+ computeCell(tier, action, risk) {
184
+ // ----- DEFINITIVE DENY cases -----
185
+ // Trust below auto-deny → always RED
186
+ if (tier < this.thresholds.autoDenyTier) {
187
+ return {
188
+ verdict: 'DENY',
189
+ reasoning: `Trust T${tier} below auto-deny threshold T${this.thresholds.autoDenyTier}`,
190
+ };
191
+ }
192
+ // Critical risk below T6 → never auto-approved (needs refinement or denial)
193
+ if (risk === 'critical' && tier < 6) {
194
+ if (tier < this.thresholds.requireRefinementTier) {
195
+ return {
196
+ verdict: 'DENY',
197
+ reasoning: `Critical risk at T${tier} — below refinement threshold`,
198
+ };
199
+ }
200
+ // YELLOW zone for critical risk — cannot fast-path ALLOW
201
+ return {
202
+ verdict: 'CONDITIONAL',
203
+ reasoning: `Critical risk at T${tier} — requires refinement evaluation`,
204
+ };
205
+ }
206
+ // High risk requires elevated approval (autoApprove + 1)
207
+ if (risk === 'high') {
208
+ const elevatedApproveTier = Math.min(7, this.thresholds.autoApproveTier + 1);
209
+ if (tier >= elevatedApproveTier) {
210
+ return {
211
+ verdict: 'ALLOW',
212
+ reasoning: `T${tier} meets elevated threshold T${elevatedApproveTier} for high-risk ${action}`,
213
+ };
214
+ }
215
+ if (tier < this.thresholds.requireRefinementTier) {
216
+ return {
217
+ verdict: 'DENY',
218
+ reasoning: `T${tier} below refinement threshold for high-risk ${action}`,
219
+ };
220
+ }
221
+ return {
222
+ verdict: 'CONDITIONAL',
223
+ reasoning: `High risk at T${tier} — requires policy evaluation`,
224
+ };
225
+ }
226
+ // ----- DEFINITIVE ALLOW cases -----
227
+ // Reads at T3+ with low/read risk → always ALLOW
228
+ if (action === 'read' && (risk === 'read' || risk === 'low') && tier >= 3) {
229
+ return {
230
+ verdict: 'ALLOW',
231
+ reasoning: `Read-only at T${tier} with ${risk} risk — auto-approved`,
232
+ };
233
+ }
234
+ // Trust at or above auto-approve → ALLOW (assuming evaluation passes)
235
+ // We mark this ALLOW because the fast path only fires when there are
236
+ // no pre-existing violated rules in the evaluation.
237
+ if (tier >= this.thresholds.autoApproveTier) {
238
+ return {
239
+ verdict: 'ALLOW',
240
+ reasoning: `T${tier} meets auto-approve threshold T${this.thresholds.autoApproveTier} for ${action}/${risk}`,
241
+ };
242
+ }
243
+ // Trust below refinement threshold → CONDITIONAL (could be YELLOW or RED depending on eval)
244
+ if (tier < this.thresholds.requireRefinementTier) {
245
+ return {
246
+ verdict: 'CONDITIONAL',
247
+ reasoning: `T${tier} below refinement threshold — decision depends on evaluation`,
248
+ };
249
+ }
250
+ // Everything else is in the YELLOW zone — requires evaluation
251
+ return {
252
+ verdict: 'CONDITIONAL',
253
+ reasoning: `T${tier} with ${action}/${risk} — requires policy evaluation for refinement`,
254
+ };
255
+ }
256
+ }
257
+ //# sourceMappingURL=fast-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fast-path.js","sourceRoot":"","sources":["../../src/enforce/fast-path.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ import type { ID } from '../common/types.js';
2
+ import type { EnforcementContext, FluidDecisionResult } from './index.js';
3
+ import type { TrustAwareEnforcementService } from './trust-aware-enforcement-service.js';
4
+ import { FastPathEnforcer } from './fast-path.js';
5
+ import { TrustLookupCache } from './trust-cache.js';
6
+ import type { TrustScoreProvider, TrustSignalBus } from './trust-cache.js';
7
+ /**
8
+ * Optimizer configuration.
9
+ */
10
+ export interface PipelineOptimizerConfig {
11
+ /** Enable the fast-path matrix (default: true) */
12
+ enableFastPath: boolean;
13
+ /** Enable the trust lookup cache (default: true) */
14
+ enableTrustCache: boolean;
15
+ /** Enable parallel evaluation of independent checks (default: true) */
16
+ enableParallelEval: boolean;
17
+ /** Enable early termination on capability denial (default: true) */
18
+ enableEarlyTermination: boolean;
19
+ /** Trust cache TTL in ms (default: 5000) */
20
+ trustCacheTtlMs: number;
21
+ /** Maximum trust cache entries (default: 50000) */
22
+ trustCacheMaxEntries: number;
23
+ }
24
+ /**
25
+ * Batch enforcement request — multiple contexts for the same or different agents.
26
+ */
27
+ export interface BatchEnforcementRequest {
28
+ contexts: EnforcementContext[];
29
+ }
30
+ /**
31
+ * Batch enforcement result.
32
+ */
33
+ export interface BatchEnforcementResult {
34
+ results: FluidDecisionResult[];
35
+ totalLatencyMs: number;
36
+ avgLatencyMs: number;
37
+ fastPathHits: number;
38
+ fullEvals: number;
39
+ }
40
+ /**
41
+ * Pipeline optimizer metrics.
42
+ */
43
+ export interface PipelineOptimizerMetrics {
44
+ totalRequests: number;
45
+ fastPathHits: number;
46
+ fastPathMisses: number;
47
+ earlyTerminations: number;
48
+ parallelEvals: number;
49
+ batchRequests: number;
50
+ batchItemsProcessed: number;
51
+ avgLatencyMs: number;
52
+ p99LatencyMs: number;
53
+ }
54
+ export declare class PipelineOptimizer {
55
+ private readonly config;
56
+ private readonly enforcementService;
57
+ private readonly fastPath;
58
+ private readonly trustCache;
59
+ private _totalRequests;
60
+ private _fastPathHits;
61
+ private _fastPathMisses;
62
+ private _earlyTerminations;
63
+ private _parallelEvals;
64
+ private _batchRequests;
65
+ private _batchItemsProcessed;
66
+ private _latencies;
67
+ private readonly _maxLatencyBuffer;
68
+ constructor(enforcementService: TrustAwareEnforcementService, config?: Partial<PipelineOptimizerConfig>);
69
+ getFastPath(): FastPathEnforcer;
70
+ getTrustCache(): TrustLookupCache;
71
+ /**
72
+ * Enforce a single request with optimizations:
73
+ * 1. Fast-path check
74
+ * 2. Trust cache lookup
75
+ * 3. Parallel evaluation of independent checks
76
+ * 4. Early termination on fast-path DENY
77
+ */
78
+ enforce(context: EnforcementContext): Promise<FluidDecisionResult>;
79
+ /**
80
+ * Enforce multiple requests in a batch.
81
+ *
82
+ * Optimizations:
83
+ * - Shared trust lookups for requests from the same agent
84
+ * - Fast-path filtering to separate definitive from conditional requests
85
+ * - Parallel execution of remaining full evaluations
86
+ */
87
+ enforceBatch(batch: BatchEnforcementRequest): Promise<BatchEnforcementResult>;
88
+ /**
89
+ * Pre-load trust profiles for known active agents.
90
+ * Call during application startup to avoid cold-cache latency on first request.
91
+ */
92
+ warmUp(agentIds: ID[], trustProvider: TrustScoreProvider): Promise<number>;
93
+ /**
94
+ * Subscribe to trust signal bus for cache invalidation.
95
+ */
96
+ subscribeToSignals(bus: TrustSignalBus): void;
97
+ /**
98
+ * Notify the optimizer that policies have changed.
99
+ * Rebuilds the fast-path matrix from the enforcement service's current config.
100
+ */
101
+ onPolicyChange(): void;
102
+ getMetrics(): PipelineOptimizerMetrics;
103
+ resetMetrics(): void;
104
+ dispose(): void;
105
+ private recordLatency;
106
+ /**
107
+ * Cache trust data extracted from a decision result.
108
+ */
109
+ private cacheResultTrust;
110
+ }
111
+ //# sourceMappingURL=pipeline-optimizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline-optimizer.d.ts","sourceRoot":"","sources":["../../src/enforce/pipeline-optimizer.ts"],"names":[],"mappings":"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"}