@vorionsys/a3i 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 (166) hide show
  1. package/LICENSE +190 -0
  2. package/dist/api/handlers.d.ts +231 -0
  3. package/dist/api/handlers.d.ts.map +1 -0
  4. package/dist/api/handlers.js +279 -0
  5. package/dist/api/handlers.js.map +1 -0
  6. package/dist/api/index.d.ts +24 -0
  7. package/dist/api/index.d.ts.map +1 -0
  8. package/dist/api/index.js +27 -0
  9. package/dist/api/index.js.map +1 -0
  10. package/dist/api/middleware.d.ts +106 -0
  11. package/dist/api/middleware.d.ts.map +1 -0
  12. package/dist/api/middleware.js +186 -0
  13. package/dist/api/middleware.js.map +1 -0
  14. package/dist/api/routes.d.ts +41 -0
  15. package/dist/api/routes.d.ts.map +1 -0
  16. package/dist/api/routes.js +91 -0
  17. package/dist/api/routes.js.map +1 -0
  18. package/dist/authorization/constraints.d.ts +75 -0
  19. package/dist/authorization/constraints.d.ts.map +1 -0
  20. package/dist/authorization/constraints.js +302 -0
  21. package/dist/authorization/constraints.js.map +1 -0
  22. package/dist/authorization/decision.d.ts +98 -0
  23. package/dist/authorization/decision.d.ts.map +1 -0
  24. package/dist/authorization/decision.js +202 -0
  25. package/dist/authorization/decision.js.map +1 -0
  26. package/dist/authorization/engine.d.ts +141 -0
  27. package/dist/authorization/engine.d.ts.map +1 -0
  28. package/dist/authorization/engine.js +339 -0
  29. package/dist/authorization/engine.js.map +1 -0
  30. package/dist/authorization/index.d.ts +10 -0
  31. package/dist/authorization/index.d.ts.map +1 -0
  32. package/dist/authorization/index.js +13 -0
  33. package/dist/authorization/index.js.map +1 -0
  34. package/dist/banding/band-calculator.d.ts +137 -0
  35. package/dist/banding/band-calculator.d.ts.map +1 -0
  36. package/dist/banding/band-calculator.js +252 -0
  37. package/dist/banding/band-calculator.js.map +1 -0
  38. package/dist/banding/bands.d.ts +56 -0
  39. package/dist/banding/bands.d.ts.map +1 -0
  40. package/dist/banding/bands.js +200 -0
  41. package/dist/banding/bands.js.map +1 -0
  42. package/dist/banding/hysteresis.d.ts +64 -0
  43. package/dist/banding/hysteresis.d.ts.map +1 -0
  44. package/dist/banding/hysteresis.js +143 -0
  45. package/dist/banding/hysteresis.js.map +1 -0
  46. package/dist/banding/index.d.ts +10 -0
  47. package/dist/banding/index.d.ts.map +1 -0
  48. package/dist/banding/index.js +10 -0
  49. package/dist/banding/index.js.map +1 -0
  50. package/dist/canary/canary-service.d.ts +123 -0
  51. package/dist/canary/canary-service.d.ts.map +1 -0
  52. package/dist/canary/canary-service.js +353 -0
  53. package/dist/canary/canary-service.js.map +1 -0
  54. package/dist/canary/index.d.ts +12 -0
  55. package/dist/canary/index.d.ts.map +1 -0
  56. package/dist/canary/index.js +14 -0
  57. package/dist/canary/index.js.map +1 -0
  58. package/dist/canary/probe-library.d.ts +43 -0
  59. package/dist/canary/probe-library.d.ts.map +1 -0
  60. package/dist/canary/probe-library.js +655 -0
  61. package/dist/canary/probe-library.js.map +1 -0
  62. package/dist/execution/engine.d.ts +120 -0
  63. package/dist/execution/engine.d.ts.map +1 -0
  64. package/dist/execution/engine.js +220 -0
  65. package/dist/execution/engine.js.map +1 -0
  66. package/dist/execution/index.d.ts +7 -0
  67. package/dist/execution/index.d.ts.map +1 -0
  68. package/dist/execution/index.js +7 -0
  69. package/dist/execution/index.js.map +1 -0
  70. package/dist/gate/index.d.ts +12 -0
  71. package/dist/gate/index.d.ts.map +1 -0
  72. package/dist/gate/index.js +14 -0
  73. package/dist/gate/index.js.map +1 -0
  74. package/dist/gate/pre-action-gate.d.ts +87 -0
  75. package/dist/gate/pre-action-gate.d.ts.map +1 -0
  76. package/dist/gate/pre-action-gate.js +286 -0
  77. package/dist/gate/pre-action-gate.js.map +1 -0
  78. package/dist/gate/risk-classifier.d.ts +43 -0
  79. package/dist/gate/risk-classifier.d.ts.map +1 -0
  80. package/dist/gate/risk-classifier.js +157 -0
  81. package/dist/gate/risk-classifier.js.map +1 -0
  82. package/dist/hooks/executor.d.ts +56 -0
  83. package/dist/hooks/executor.d.ts.map +1 -0
  84. package/dist/hooks/executor.js +217 -0
  85. package/dist/hooks/executor.js.map +1 -0
  86. package/dist/hooks/index.d.ts +45 -0
  87. package/dist/hooks/index.d.ts.map +1 -0
  88. package/dist/hooks/index.js +49 -0
  89. package/dist/hooks/index.js.map +1 -0
  90. package/dist/hooks/manager.d.ts +156 -0
  91. package/dist/hooks/manager.d.ts.map +1 -0
  92. package/dist/hooks/manager.js +267 -0
  93. package/dist/hooks/manager.js.map +1 -0
  94. package/dist/hooks/registry.d.ts +130 -0
  95. package/dist/hooks/registry.d.ts.map +1 -0
  96. package/dist/hooks/registry.js +238 -0
  97. package/dist/hooks/registry.js.map +1 -0
  98. package/dist/hooks/types.d.ts +226 -0
  99. package/dist/hooks/types.d.ts.map +1 -0
  100. package/dist/hooks/types.js +41 -0
  101. package/dist/hooks/types.js.map +1 -0
  102. package/dist/index.d.ts +20 -0
  103. package/dist/index.d.ts.map +1 -0
  104. package/dist/index.js +31 -0
  105. package/dist/index.js.map +1 -0
  106. package/dist/observation/attestation.d.ts +102 -0
  107. package/dist/observation/attestation.d.ts.map +1 -0
  108. package/dist/observation/attestation.js +127 -0
  109. package/dist/observation/attestation.js.map +1 -0
  110. package/dist/observation/ceilings.d.ts +60 -0
  111. package/dist/observation/ceilings.d.ts.map +1 -0
  112. package/dist/observation/ceilings.js +110 -0
  113. package/dist/observation/ceilings.js.map +1 -0
  114. package/dist/observation/index.d.ts +11 -0
  115. package/dist/observation/index.d.ts.map +1 -0
  116. package/dist/observation/index.js +14 -0
  117. package/dist/observation/index.js.map +1 -0
  118. package/dist/observation/tiers.d.ts +96 -0
  119. package/dist/observation/tiers.d.ts.map +1 -0
  120. package/dist/observation/tiers.js +225 -0
  121. package/dist/observation/tiers.js.map +1 -0
  122. package/dist/orchestrator/index.d.ts +8 -0
  123. package/dist/orchestrator/index.d.ts.map +1 -0
  124. package/dist/orchestrator/index.js +8 -0
  125. package/dist/orchestrator/index.js.map +1 -0
  126. package/dist/orchestrator/orchestrator.d.ts +225 -0
  127. package/dist/orchestrator/orchestrator.d.ts.map +1 -0
  128. package/dist/orchestrator/orchestrator.js +302 -0
  129. package/dist/orchestrator/orchestrator.js.map +1 -0
  130. package/dist/orchestrator/proof-plane-adapter.d.ts +80 -0
  131. package/dist/orchestrator/proof-plane-adapter.d.ts.map +1 -0
  132. package/dist/orchestrator/proof-plane-adapter.js +78 -0
  133. package/dist/orchestrator/proof-plane-adapter.js.map +1 -0
  134. package/dist/trust/calculator.d.ts +60 -0
  135. package/dist/trust/calculator.d.ts.map +1 -0
  136. package/dist/trust/calculator.js +163 -0
  137. package/dist/trust/calculator.js.map +1 -0
  138. package/dist/trust/dimensions.d.ts +133 -0
  139. package/dist/trust/dimensions.d.ts.map +1 -0
  140. package/dist/trust/dimensions.js +257 -0
  141. package/dist/trust/dimensions.js.map +1 -0
  142. package/dist/trust/index.d.ts +14 -0
  143. package/dist/trust/index.d.ts.map +1 -0
  144. package/dist/trust/index.js +25 -0
  145. package/dist/trust/index.js.map +1 -0
  146. package/dist/trust/profile-service.d.ts +179 -0
  147. package/dist/trust/profile-service.d.ts.map +1 -0
  148. package/dist/trust/profile-service.js +378 -0
  149. package/dist/trust/profile-service.js.map +1 -0
  150. package/dist/trust/profile-store.d.ts +122 -0
  151. package/dist/trust/profile-store.d.ts.map +1 -0
  152. package/dist/trust/profile-store.js +132 -0
  153. package/dist/trust/profile-store.js.map +1 -0
  154. package/dist/trust/trust-calculator.d.ts +111 -0
  155. package/dist/trust/trust-calculator.d.ts.map +1 -0
  156. package/dist/trust/trust-calculator.js +271 -0
  157. package/dist/trust/trust-calculator.js.map +1 -0
  158. package/dist/trust/trust-dynamics.d.ts +152 -0
  159. package/dist/trust/trust-dynamics.d.ts.map +1 -0
  160. package/dist/trust/trust-dynamics.js +302 -0
  161. package/dist/trust/trust-dynamics.js.map +1 -0
  162. package/dist/trust/weights.d.ts +57 -0
  163. package/dist/trust/weights.d.ts.map +1 -0
  164. package/dist/trust/weights.js +75 -0
  165. package/dist/trust/weights.js.map +1 -0
  166. package/package.json +81 -0
@@ -0,0 +1,339 @@
1
+ /**
2
+ * Authorization Engine - Core authorization decision-making
3
+ *
4
+ * The AuthorizationEngine is the central component of A3I that makes
5
+ * permit/deny decisions for agent intents based on:
6
+ * - Agent's trust profile and band
7
+ * - Intent characteristics (action type, data sensitivity, reversibility)
8
+ * - Policy rules and constraints
9
+ * - Context factors
10
+ * - Hook system for extensibility
11
+ *
12
+ * Key principles:
13
+ * - Deterministic: Same inputs always produce same outputs
14
+ * - Fast: <50ms latency target for decisions
15
+ * - Auditable: All decisions logged with reasoning
16
+ * - Extensible: Hooks for pre/post authorization
17
+ */
18
+ import { TrustBand, ActionType, DataSensitivity, Reversibility, DenialReason, } from '@vorionsys/contracts';
19
+ import { generateConstraints, BAND_CONSTRAINT_PRESETS, } from './constraints.js';
20
+ import { buildPermitDecision, buildDenyDecision, getRemediations, } from './decision.js';
21
+ import { TrustProfileService } from '../trust/profile-service.js';
22
+ /**
23
+ * Minimum trust band required for each action type
24
+ */
25
+ export const ACTION_TYPE_REQUIREMENTS = {
26
+ [ActionType.READ]: TrustBand.T1_OBSERVED,
27
+ [ActionType.WRITE]: TrustBand.T2_PROVISIONAL,
28
+ [ActionType.DELETE]: TrustBand.T2_PROVISIONAL,
29
+ [ActionType.EXECUTE]: TrustBand.T2_PROVISIONAL,
30
+ [ActionType.COMMUNICATE]: TrustBand.T2_PROVISIONAL,
31
+ [ActionType.TRANSFER]: TrustBand.T3_MONITORED,
32
+ };
33
+ /**
34
+ * Minimum trust band required for each data sensitivity level
35
+ */
36
+ export const DATA_SENSITIVITY_REQUIREMENTS = {
37
+ [DataSensitivity.PUBLIC]: TrustBand.T1_OBSERVED,
38
+ [DataSensitivity.INTERNAL]: TrustBand.T2_PROVISIONAL,
39
+ [DataSensitivity.CONFIDENTIAL]: TrustBand.T3_MONITORED,
40
+ [DataSensitivity.RESTRICTED]: TrustBand.T4_STANDARD,
41
+ };
42
+ /**
43
+ * Trust band adjustments for reversibility
44
+ */
45
+ export const REVERSIBILITY_ADJUSTMENTS = {
46
+ [Reversibility.REVERSIBLE]: 0,
47
+ [Reversibility.PARTIALLY_REVERSIBLE]: 0,
48
+ [Reversibility.IRREVERSIBLE]: 1, // Requires one band higher
49
+ };
50
+ /**
51
+ * No-op proof plane logger for when proof plane is not connected
52
+ */
53
+ export const noopProofLogger = {
54
+ async logDecision() { },
55
+ };
56
+ /**
57
+ * AuthorizationEngine - Makes permit/deny decisions for agent intents
58
+ */
59
+ export class AuthorizationEngine {
60
+ profileService;
61
+ actionRequirements;
62
+ sensitivityRequirements;
63
+ proofLogger;
64
+ hookManager;
65
+ config;
66
+ constructor(config = {}) {
67
+ this.profileService = config.profileService ?? new TrustProfileService();
68
+ this.actionRequirements = {
69
+ ...ACTION_TYPE_REQUIREMENTS,
70
+ ...config.actionTypeRequirements,
71
+ };
72
+ this.sensitivityRequirements = {
73
+ ...DATA_SENSITIVITY_REQUIREMENTS,
74
+ ...config.dataSensitivityRequirements,
75
+ };
76
+ this.proofLogger = config.proofLogger ?? noopProofLogger;
77
+ this.hookManager = config.hookManager;
78
+ this.config = {
79
+ defaultPolicySetId: config.defaultPolicySetId ?? 'default',
80
+ decisionValidityMs: config.decisionValidityMs ?? 5 * 60 * 1000,
81
+ strictMode: config.strictMode ?? false,
82
+ enableHooks: config.enableHooks ?? (config.hookManager !== undefined),
83
+ };
84
+ }
85
+ /**
86
+ * Authorize an intent
87
+ *
88
+ * This is the main entry point for authorization decisions.
89
+ * Returns a Decision object indicating whether the intent is permitted.
90
+ *
91
+ * Hook integration:
92
+ * - PRE_AUTHORIZE hooks run before evaluation (can abort)
93
+ * - POST_AUTHORIZE hooks run after decision is made
94
+ */
95
+ async authorize(request) {
96
+ const startTime = Date.now();
97
+ const { intent, constraintOptions, policySetId } = request;
98
+ const now = new Date();
99
+ const buildOptions = {
100
+ policySetId: policySetId ?? this.config.defaultPolicySetId,
101
+ validityDurationMs: this.config.decisionValidityMs,
102
+ now,
103
+ };
104
+ // Check if intent is expired
105
+ if (intent.expiresAt && intent.expiresAt < now) {
106
+ const decision = buildDenyDecision(intent, null, DenialReason.EXPIRED_INTENT, ['Intent has expired'], buildOptions);
107
+ decision.latencyMs = Date.now() - startTime;
108
+ await this.proofLogger.logDecision(decision, intent);
109
+ return {
110
+ decision,
111
+ remediations: getRemediations(DenialReason.EXPIRED_INTENT),
112
+ };
113
+ }
114
+ // Get trust profile for agent
115
+ const profile = await this.profileService.get(intent.agentId);
116
+ if (!profile) {
117
+ const decision = buildDenyDecision(intent, null, DenialReason.INSUFFICIENT_TRUST, ['No trust profile found for agent', 'Agent must be registered before authorization'], buildOptions);
118
+ decision.latencyMs = Date.now() - startTime;
119
+ await this.proofLogger.logDecision(decision, intent);
120
+ return {
121
+ decision,
122
+ remediations: ['Register agent with trust profile before requesting authorization'],
123
+ };
124
+ }
125
+ // Execute pre-authorize hooks
126
+ let preAuthorizeResult;
127
+ if (this.config.enableHooks && this.hookManager) {
128
+ preAuthorizeResult = await this.hookManager.executePreAuthorize({
129
+ correlationId: intent.correlationId,
130
+ intent,
131
+ profile,
132
+ });
133
+ // If a hook aborted, deny the authorization
134
+ if (preAuthorizeResult.aborted) {
135
+ const decision = buildDenyDecision(intent, profile, DenialReason.POLICY_VIOLATION, [
136
+ 'Authorization aborted by pre-authorize hook',
137
+ `Reason: ${preAuthorizeResult.abortReason ?? 'No reason provided'}`,
138
+ ], buildOptions);
139
+ decision.latencyMs = Date.now() - startTime;
140
+ await this.proofLogger.logDecision(decision, intent);
141
+ return {
142
+ decision,
143
+ remediations: [preAuthorizeResult.abortReason ?? 'Pre-authorize hook aborted the request'],
144
+ };
145
+ }
146
+ }
147
+ // Evaluate authorization
148
+ const evaluation = this.evaluate(intent, profile);
149
+ let response;
150
+ if (evaluation.permitted) {
151
+ // Generate constraints
152
+ const constraints = generateConstraints(profile.band, intent, constraintOptions);
153
+ const decision = buildPermitDecision(intent, profile, constraints, evaluation.reasoning, buildOptions);
154
+ decision.latencyMs = Date.now() - startTime;
155
+ await this.proofLogger.logDecision(decision, intent);
156
+ response = { decision };
157
+ }
158
+ else {
159
+ const decision = buildDenyDecision(intent, profile, evaluation.denialReason, evaluation.reasoning, buildOptions);
160
+ decision.latencyMs = Date.now() - startTime;
161
+ await this.proofLogger.logDecision(decision, intent);
162
+ response = {
163
+ decision,
164
+ remediations: getRemediations(evaluation.denialReason),
165
+ };
166
+ }
167
+ // Execute post-authorize hooks
168
+ if (this.config.enableHooks && this.hookManager) {
169
+ await this.hookManager.executePostAuthorize({
170
+ correlationId: intent.correlationId,
171
+ intent,
172
+ decision: response.decision,
173
+ profile,
174
+ });
175
+ }
176
+ return response;
177
+ }
178
+ /**
179
+ * Evaluate an intent against a trust profile
180
+ * This is the core authorization logic - deterministic and fast
181
+ */
182
+ evaluate(intent, profile) {
183
+ const reasoning = [];
184
+ // Calculate minimum required trust band
185
+ const actionBand = this.actionRequirements[intent.actionType];
186
+ const sensitivityBand = this.sensitivityRequirements[intent.dataSensitivity];
187
+ const reversibilityAdjustment = REVERSIBILITY_ADJUSTMENTS[intent.reversibility];
188
+ // Take the maximum of all requirements
189
+ let requiredBand = Math.max(actionBand, sensitivityBand);
190
+ // Apply reversibility adjustment
191
+ if (reversibilityAdjustment > 0) {
192
+ requiredBand = Math.min(requiredBand + reversibilityAdjustment, TrustBand.T5_TRUSTED);
193
+ }
194
+ reasoning.push(`Action type '${intent.actionType}' requires band ${TrustBand[actionBand]}`, `Data sensitivity '${intent.dataSensitivity}' requires band ${TrustBand[sensitivityBand]}`);
195
+ if (reversibilityAdjustment > 0) {
196
+ reasoning.push(`Irreversible action increases requirement by ${reversibilityAdjustment} band(s)`);
197
+ }
198
+ reasoning.push(`Minimum required band: ${TrustBand[requiredBand]}`);
199
+ reasoning.push(`Agent's current band: ${TrustBand[profile.band]} (score: ${profile.adjustedScore})`);
200
+ // Check band requirement
201
+ if (profile.band < requiredBand) {
202
+ reasoning.push(`DENIED: Agent band ${TrustBand[profile.band]} is below required ${TrustBand[requiredBand]}`);
203
+ return {
204
+ permitted: false,
205
+ reasoning,
206
+ denialReason: DenialReason.INSUFFICIENT_TRUST,
207
+ requiredBand,
208
+ };
209
+ }
210
+ // Check T0 always denied
211
+ if (profile.band === TrustBand.T0_SANDBOX) {
212
+ reasoning.push('DENIED: T0_SANDBOX agents cannot perform any actions');
213
+ return {
214
+ permitted: false,
215
+ reasoning,
216
+ denialReason: DenialReason.INSUFFICIENT_TRUST,
217
+ requiredBand,
218
+ };
219
+ }
220
+ // Check resource scope restrictions
221
+ const scopeCheck = this.checkResourceScope(intent, profile);
222
+ if (!scopeCheck.allowed) {
223
+ reasoning.push(`DENIED: ${scopeCheck.reason}`);
224
+ return {
225
+ permitted: false,
226
+ reasoning,
227
+ denialReason: DenialReason.RESOURCE_RESTRICTED,
228
+ requiredBand,
229
+ };
230
+ }
231
+ // Check context restrictions
232
+ const contextCheck = this.checkContext(intent, profile);
233
+ if (!contextCheck.allowed) {
234
+ reasoning.push(`DENIED: ${contextCheck.reason}`);
235
+ return {
236
+ permitted: false,
237
+ reasoning,
238
+ denialReason: DenialReason.CONTEXT_MISMATCH,
239
+ requiredBand,
240
+ };
241
+ }
242
+ // All checks passed
243
+ reasoning.push('PERMITTED: All authorization checks passed');
244
+ return {
245
+ permitted: true,
246
+ reasoning,
247
+ denialReason: DenialReason.POLICY_VIOLATION, // Not used
248
+ requiredBand,
249
+ };
250
+ }
251
+ /**
252
+ * Check resource scope restrictions
253
+ */
254
+ checkResourceScope(intent, profile) {
255
+ const preset = BAND_CONSTRAINT_PRESETS[profile.band];
256
+ // Check if band allows any data scopes
257
+ if (preset.defaultDataScopes.length === 0) {
258
+ return { allowed: false, reason: 'Band does not allow any data access' };
259
+ }
260
+ // Check for restricted resources at lower bands
261
+ if (intent.dataSensitivity === DataSensitivity.RESTRICTED &&
262
+ !preset.defaultDataScopes.includes('restricted') &&
263
+ !preset.defaultDataScopes.includes('*')) {
264
+ return {
265
+ allowed: false,
266
+ reason: 'Restricted data requires higher trust band',
267
+ };
268
+ }
269
+ return { allowed: true };
270
+ }
271
+ /**
272
+ * Check context restrictions
273
+ */
274
+ checkContext(intent, profile) {
275
+ const context = intent.context;
276
+ // Check production environment restrictions
277
+ if (context?.environment === 'production' && profile.band < TrustBand.T3_MONITORED) {
278
+ return {
279
+ allowed: false,
280
+ reason: 'Production environment requires T3+ trust band',
281
+ };
282
+ }
283
+ // Check PII handling restrictions
284
+ if (context?.handlesPii && profile.band < TrustBand.T2_PROVISIONAL) {
285
+ return {
286
+ allowed: false,
287
+ reason: 'PII handling requires T2+ trust band',
288
+ };
289
+ }
290
+ // Check PHI handling restrictions
291
+ if (context?.handlesPhi && profile.band < TrustBand.T3_MONITORED) {
292
+ return {
293
+ allowed: false,
294
+ reason: 'PHI handling requires T3+ trust band',
295
+ };
296
+ }
297
+ // In strict mode, require domain match
298
+ if (this.config.strictMode && context?.domain) {
299
+ // This would be extended with actual domain policy checks
300
+ }
301
+ return { allowed: true };
302
+ }
303
+ /**
304
+ * Quick check if an agent can perform an action type
305
+ * (Without full profile lookup - uses cached band if available)
306
+ */
307
+ canPerformActionType(band, actionType) {
308
+ return band >= this.actionRequirements[actionType];
309
+ }
310
+ /**
311
+ * Quick check if an agent can access data sensitivity level
312
+ */
313
+ canAccessDataSensitivity(band, sensitivity) {
314
+ return band >= this.sensitivityRequirements[sensitivity];
315
+ }
316
+ /**
317
+ * Get the minimum band required for an action + sensitivity combination
318
+ */
319
+ getRequiredBand(actionType, dataSensitivity, reversibility = Reversibility.REVERSIBLE) {
320
+ const actionBand = this.actionRequirements[actionType];
321
+ const sensitivityBand = this.sensitivityRequirements[dataSensitivity];
322
+ const adjustment = REVERSIBILITY_ADJUSTMENTS[reversibility];
323
+ const required = Math.max(actionBand, sensitivityBand) + adjustment;
324
+ return Math.min(required, TrustBand.T5_TRUSTED);
325
+ }
326
+ /**
327
+ * Get the profile service
328
+ */
329
+ getProfileService() {
330
+ return this.profileService;
331
+ }
332
+ }
333
+ /**
334
+ * Create an AuthorizationEngine with default configuration
335
+ */
336
+ export function createAuthorizationEngine(config) {
337
+ return new AuthorizationEngine(config);
338
+ }
339
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/authorization/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * A3I Authorization Module
3
+ *
4
+ * Core authorization functionality including the authorization engine,
5
+ * constraint generation, and decision building.
6
+ */
7
+ export { generateConstraints, constraintsPermit, mergeConstraints, BAND_CONSTRAINT_PRESETS, DEFAULT_APPROVAL_POLICIES, type ConstraintPreset, type ApprovalPolicy, type ConstraintGenerationOptions, } from './constraints.js';
8
+ export { buildPermitDecision, buildDenyDecision, getRemediations, determineDenialReason, summarizeDecision, isDecisionValid, DecisionBuilder, type DecisionBuildOptions, type PermitResult, type DenyResult, type AuthorizationResult, } from './decision.js';
9
+ export { AuthorizationEngine, createAuthorizationEngine, ACTION_TYPE_REQUIREMENTS, DATA_SENSITIVITY_REQUIREMENTS, REVERSIBILITY_ADJUSTMENTS, noopProofLogger, type AuthorizationEngineConfig, type AuthorizeRequest, type ProofPlaneLogger, } from './engine.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/authorization/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,yBAAyB,EACzB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,2BAA2B,GACjC,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,mBAAmB,GACzB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,6BAA6B,EAC7B,yBAAyB,EACzB,eAAe,EACf,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACtB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * A3I Authorization Module
3
+ *
4
+ * Core authorization functionality including the authorization engine,
5
+ * constraint generation, and decision building.
6
+ */
7
+ // Constraints
8
+ export { generateConstraints, constraintsPermit, mergeConstraints, BAND_CONSTRAINT_PRESETS, DEFAULT_APPROVAL_POLICIES, } from './constraints.js';
9
+ // Decision building
10
+ export { buildPermitDecision, buildDenyDecision, getRemediations, determineDenialReason, summarizeDecision, isDecisionValid, DecisionBuilder, } from './decision.js';
11
+ // Authorization Engine
12
+ export { AuthorizationEngine, createAuthorizationEngine, ACTION_TYPE_REQUIREMENTS, DATA_SENSITIVITY_REQUIREMENTS, REVERSIBILITY_ADJUSTMENTS, noopProofLogger, } from './engine.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/authorization/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc;AACd,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,yBAAyB,GAI1B,MAAM,kBAAkB,CAAC;AAE1B,oBAAoB;AACpB,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,eAAe,GAKhB,MAAM,eAAe,CAAC;AAEvB,uBAAuB;AACvB,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,6BAA6B,EAC7B,yBAAyB,EACzB,eAAe,GAIhB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * BandCalculator - Trust band management with asymmetric transitions
3
+ *
4
+ * Key principles:
5
+ * - Fast demotion: Safety-critical, immediate response to issues
6
+ * - Slow promotion: Build trust gradually over time
7
+ * - Hysteresis: Prevent oscillation near thresholds
8
+ * - History tracking: Evidence-based promotion decisions
9
+ */
10
+ import { TrustBand, type BandingConfig } from '@vorionsys/contracts';
11
+ import { type BandHistoryEntry } from './hysteresis.js';
12
+ /**
13
+ * Band transition types
14
+ */
15
+ export declare enum TransitionType {
16
+ NONE = "none",
17
+ PROMOTION = "promotion",
18
+ DEMOTION = "demotion"
19
+ }
20
+ /**
21
+ * Result of a band transition attempt
22
+ */
23
+ export interface TransitionResult {
24
+ /** Was the transition allowed? */
25
+ allowed: boolean;
26
+ /** Type of transition */
27
+ transitionType: TransitionType;
28
+ /** Previous band */
29
+ previousBand: TrustBand;
30
+ /** New band (same as previous if not allowed) */
31
+ newBand: TrustBand;
32
+ /** Reason for the result */
33
+ reason: string;
34
+ /** Days until promotion (if blocked by time) */
35
+ daysUntilPromotion?: number;
36
+ /** Score needed for transition */
37
+ scoreThreshold?: number;
38
+ /** Timestamp */
39
+ timestamp: Date;
40
+ }
41
+ /**
42
+ * Band stability metrics
43
+ */
44
+ export interface BandStability {
45
+ /** Current band */
46
+ currentBand: TrustBand;
47
+ /** Days at current band */
48
+ daysAtBand: number;
49
+ /** Number of transitions in last 30 days */
50
+ recentTransitions: number;
51
+ /** Is the band stable? */
52
+ stable: boolean;
53
+ /** Stability score (0-1) */
54
+ stabilityScore: number;
55
+ }
56
+ /**
57
+ * Band transition event for audit trail
58
+ */
59
+ export interface BandTransitionEvent {
60
+ /** Unique event ID */
61
+ eventId: string;
62
+ /** Agent ID */
63
+ agentId: string;
64
+ /** Transition type */
65
+ transitionType: TransitionType;
66
+ /** Previous band */
67
+ fromBand: TrustBand;
68
+ /** New band */
69
+ toBand: TrustBand;
70
+ /** Score at transition */
71
+ score: number;
72
+ /** Reason for transition */
73
+ reason: string;
74
+ /** Timestamp */
75
+ timestamp: Date;
76
+ }
77
+ /**
78
+ * BandCalculator - Manages trust band transitions
79
+ */
80
+ export declare class BandCalculator {
81
+ private readonly config;
82
+ private readonly hysteresis;
83
+ private readonly historyByAgent;
84
+ private readonly transitionEvents;
85
+ constructor(config?: Partial<BandingConfig>);
86
+ /**
87
+ * Get the trust band for a score
88
+ */
89
+ getBand(score: number): TrustBand;
90
+ /**
91
+ * Evaluate a potential band transition
92
+ */
93
+ evaluateTransition(agentId: string, currentBand: TrustBand, newScore: number, options?: {
94
+ now?: Date;
95
+ }): TransitionResult;
96
+ /**
97
+ * Evaluate a demotion (always immediate for safety)
98
+ */
99
+ private evaluateDemotion;
100
+ /**
101
+ * Evaluate a promotion (requires time at current band)
102
+ */
103
+ private evaluatePromotion;
104
+ /**
105
+ * Record a band transition
106
+ */
107
+ private recordTransition;
108
+ /**
109
+ * Record a score snapshot (for history tracking)
110
+ */
111
+ recordScoreSnapshot(agentId: string, band: TrustBand, score: number, timestamp?: Date): void;
112
+ /**
113
+ * Get band history for an agent
114
+ */
115
+ getHistory(agentId: string): BandHistoryEntry[];
116
+ /**
117
+ * Get transition events for an agent
118
+ */
119
+ getTransitionEvents(agentId: string): BandTransitionEvent[];
120
+ /**
121
+ * Calculate band stability metrics
122
+ */
123
+ calculateStability(agentId: string, now?: Date): BandStability;
124
+ /**
125
+ * Clear history for an agent (for testing)
126
+ */
127
+ clearHistory(agentId: string): void;
128
+ /**
129
+ * Get configuration
130
+ */
131
+ getConfig(): Readonly<BandingConfig>;
132
+ }
133
+ /**
134
+ * Create a BandCalculator with default configuration
135
+ */
136
+ export declare function createBandCalculator(config?: Partial<BandingConfig>): BandCalculator;
137
+ //# sourceMappingURL=band-calculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"band-calculator.d.ts","sourceRoot":"","sources":["../../src/banding/band-calculator.ts"],"names":[],"mappings":"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"}