@trentapps/manager-protocol 1.3.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 (195) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +639 -0
  3. package/dist/analyzers/ArchitectureDetector.d.ts +44 -0
  4. package/dist/analyzers/ArchitectureDetector.d.ts.map +1 -0
  5. package/dist/analyzers/ArchitectureDetector.js +218 -0
  6. package/dist/analyzers/ArchitectureDetector.js.map +1 -0
  7. package/dist/analyzers/CSSAnalyzer.d.ts +284 -0
  8. package/dist/analyzers/CSSAnalyzer.d.ts.map +1 -0
  9. package/dist/analyzers/CSSAnalyzer.js +1180 -0
  10. package/dist/analyzers/CSSAnalyzer.js.map +1 -0
  11. package/dist/analyzers/index.d.ts +5 -0
  12. package/dist/analyzers/index.d.ts.map +1 -0
  13. package/dist/analyzers/index.js +5 -0
  14. package/dist/analyzers/index.js.map +1 -0
  15. package/dist/cli.d.ts +8 -0
  16. package/dist/cli.d.ts.map +1 -0
  17. package/dist/cli.js +174 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/design-system/index.d.ts +6 -0
  20. package/dist/design-system/index.d.ts.map +1 -0
  21. package/dist/design-system/index.js +6 -0
  22. package/dist/design-system/index.js.map +1 -0
  23. package/dist/design-system/tokens.d.ts +106 -0
  24. package/dist/design-system/tokens.d.ts.map +1 -0
  25. package/dist/design-system/tokens.js +554 -0
  26. package/dist/design-system/tokens.js.map +1 -0
  27. package/dist/engine/AuditLogger.d.ts +506 -0
  28. package/dist/engine/AuditLogger.d.ts.map +1 -0
  29. package/dist/engine/AuditLogger.js +1491 -0
  30. package/dist/engine/AuditLogger.js.map +1 -0
  31. package/dist/engine/GitHubApprovalManager.d.ts +123 -0
  32. package/dist/engine/GitHubApprovalManager.d.ts.map +1 -0
  33. package/dist/engine/GitHubApprovalManager.js +347 -0
  34. package/dist/engine/GitHubApprovalManager.js.map +1 -0
  35. package/dist/engine/GitHubClient.d.ts +183 -0
  36. package/dist/engine/GitHubClient.d.ts.map +1 -0
  37. package/dist/engine/GitHubClient.js +411 -0
  38. package/dist/engine/GitHubClient.js.map +1 -0
  39. package/dist/engine/RateLimiter.d.ts +81 -0
  40. package/dist/engine/RateLimiter.d.ts.map +1 -0
  41. package/dist/engine/RateLimiter.js +215 -0
  42. package/dist/engine/RateLimiter.js.map +1 -0
  43. package/dist/engine/RuleDependencyAnalyzer.d.ts +73 -0
  44. package/dist/engine/RuleDependencyAnalyzer.d.ts.map +1 -0
  45. package/dist/engine/RuleDependencyAnalyzer.js +475 -0
  46. package/dist/engine/RuleDependencyAnalyzer.js.map +1 -0
  47. package/dist/engine/RulesEngine.d.ts +176 -0
  48. package/dist/engine/RulesEngine.d.ts.map +1 -0
  49. package/dist/engine/RulesEngine.js +705 -0
  50. package/dist/engine/RulesEngine.js.map +1 -0
  51. package/dist/engine/TaskManager.d.ts +174 -0
  52. package/dist/engine/TaskManager.d.ts.map +1 -0
  53. package/dist/engine/TaskManager.js +663 -0
  54. package/dist/engine/TaskManager.js.map +1 -0
  55. package/dist/engine/index.d.ts +11 -0
  56. package/dist/engine/index.d.ts.map +1 -0
  57. package/dist/engine/index.js +13 -0
  58. package/dist/engine/index.js.map +1 -0
  59. package/dist/index.d.ts +21 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +29 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/rules/architecture.d.ts +9 -0
  64. package/dist/rules/architecture.d.ts.map +1 -0
  65. package/dist/rules/architecture.js +322 -0
  66. package/dist/rules/architecture.js.map +1 -0
  67. package/dist/rules/azure.d.ts +7 -0
  68. package/dist/rules/azure.d.ts.map +1 -0
  69. package/dist/rules/azure.js +136 -0
  70. package/dist/rules/azure.js.map +1 -0
  71. package/dist/rules/compliance.d.ts +9 -0
  72. package/dist/rules/compliance.d.ts.map +1 -0
  73. package/dist/rules/compliance.js +286 -0
  74. package/dist/rules/compliance.js.map +1 -0
  75. package/dist/rules/condition-optimizer.d.ts +151 -0
  76. package/dist/rules/condition-optimizer.d.ts.map +1 -0
  77. package/dist/rules/condition-optimizer.js +479 -0
  78. package/dist/rules/condition-optimizer.js.map +1 -0
  79. package/dist/rules/css.d.ts +10 -0
  80. package/dist/rules/css.d.ts.map +1 -0
  81. package/dist/rules/css.js +1777 -0
  82. package/dist/rules/css.js.map +1 -0
  83. package/dist/rules/field-standards.d.ts +1172 -0
  84. package/dist/rules/field-standards.d.ts.map +1 -0
  85. package/dist/rules/field-standards.js +908 -0
  86. package/dist/rules/field-standards.js.map +1 -0
  87. package/dist/rules/flask.d.ts +7 -0
  88. package/dist/rules/flask.d.ts.map +1 -0
  89. package/dist/rules/flask.js +142 -0
  90. package/dist/rules/flask.js.map +1 -0
  91. package/dist/rules/index.d.ts +827 -0
  92. package/dist/rules/index.d.ts.map +1 -0
  93. package/dist/rules/index.js +556 -0
  94. package/dist/rules/index.js.map +1 -0
  95. package/dist/rules/ml-ai.d.ts +7 -0
  96. package/dist/rules/ml-ai.d.ts.map +1 -0
  97. package/dist/rules/ml-ai.js +148 -0
  98. package/dist/rules/ml-ai.js.map +1 -0
  99. package/dist/rules/operational.d.ts +9 -0
  100. package/dist/rules/operational.d.ts.map +1 -0
  101. package/dist/rules/operational.js +318 -0
  102. package/dist/rules/operational.js.map +1 -0
  103. package/dist/rules/patterns.d.ts +568 -0
  104. package/dist/rules/patterns.d.ts.map +1 -0
  105. package/dist/rules/patterns.js +1359 -0
  106. package/dist/rules/patterns.js.map +1 -0
  107. package/dist/rules/security.d.ts +9 -0
  108. package/dist/rules/security.d.ts.map +1 -0
  109. package/dist/rules/security.js +848 -0
  110. package/dist/rules/security.js.map +1 -0
  111. package/dist/rules/shared-patterns.d.ts +268 -0
  112. package/dist/rules/shared-patterns.d.ts.map +1 -0
  113. package/dist/rules/shared-patterns.js +556 -0
  114. package/dist/rules/shared-patterns.js.map +1 -0
  115. package/dist/rules/storage.d.ts +13 -0
  116. package/dist/rules/storage.d.ts.map +1 -0
  117. package/dist/rules/storage.js +672 -0
  118. package/dist/rules/storage.js.map +1 -0
  119. package/dist/rules/stripe.d.ts +7 -0
  120. package/dist/rules/stripe.d.ts.map +1 -0
  121. package/dist/rules/stripe.js +133 -0
  122. package/dist/rules/stripe.js.map +1 -0
  123. package/dist/rules/testing.d.ts +7 -0
  124. package/dist/rules/testing.d.ts.map +1 -0
  125. package/dist/rules/testing.js +135 -0
  126. package/dist/rules/testing.js.map +1 -0
  127. package/dist/rules/ux.d.ts +9 -0
  128. package/dist/rules/ux.d.ts.map +1 -0
  129. package/dist/rules/ux.js +280 -0
  130. package/dist/rules/ux.js.map +1 -0
  131. package/dist/rules/websocket.d.ts +7 -0
  132. package/dist/rules/websocket.d.ts.map +1 -0
  133. package/dist/rules/websocket.js +128 -0
  134. package/dist/rules/websocket.js.map +1 -0
  135. package/dist/server.d.ts +43 -0
  136. package/dist/server.d.ts.map +1 -0
  137. package/dist/server.js +1967 -0
  138. package/dist/server.js.map +1 -0
  139. package/dist/supervisor/AgentSupervisor.d.ts +195 -0
  140. package/dist/supervisor/AgentSupervisor.d.ts.map +1 -0
  141. package/dist/supervisor/AgentSupervisor.js +569 -0
  142. package/dist/supervisor/AgentSupervisor.js.map +1 -0
  143. package/dist/supervisor/ManagedServerRegistry.d.ts +185 -0
  144. package/dist/supervisor/ManagedServerRegistry.d.ts.map +1 -0
  145. package/dist/supervisor/ManagedServerRegistry.js +729 -0
  146. package/dist/supervisor/ManagedServerRegistry.js.map +1 -0
  147. package/dist/supervisor/ProjectTracker.d.ts +210 -0
  148. package/dist/supervisor/ProjectTracker.d.ts.map +1 -0
  149. package/dist/supervisor/ProjectTracker.js +709 -0
  150. package/dist/supervisor/ProjectTracker.js.map +1 -0
  151. package/dist/supervisor/index.d.ts +6 -0
  152. package/dist/supervisor/index.d.ts.map +1 -0
  153. package/dist/supervisor/index.js +6 -0
  154. package/dist/supervisor/index.js.map +1 -0
  155. package/dist/testing/index.d.ts +11 -0
  156. package/dist/testing/index.d.ts.map +1 -0
  157. package/dist/testing/index.js +12 -0
  158. package/dist/testing/index.js.map +1 -0
  159. package/dist/testing/rule-tester.d.ts +217 -0
  160. package/dist/testing/rule-tester.d.ts.map +1 -0
  161. package/dist/testing/rule-tester.examples.d.ts +57 -0
  162. package/dist/testing/rule-tester.examples.d.ts.map +1 -0
  163. package/dist/testing/rule-tester.examples.js +375 -0
  164. package/dist/testing/rule-tester.examples.js.map +1 -0
  165. package/dist/testing/rule-tester.js +381 -0
  166. package/dist/testing/rule-tester.js.map +1 -0
  167. package/dist/testing/rule-validator.d.ts +141 -0
  168. package/dist/testing/rule-validator.d.ts.map +1 -0
  169. package/dist/testing/rule-validator.js +640 -0
  170. package/dist/testing/rule-validator.js.map +1 -0
  171. package/dist/types/index.d.ts +1282 -0
  172. package/dist/types/index.d.ts.map +1 -0
  173. package/dist/types/index.js +386 -0
  174. package/dist/types/index.js.map +1 -0
  175. package/dist/utils/errors.d.ts +86 -0
  176. package/dist/utils/errors.d.ts.map +1 -0
  177. package/dist/utils/errors.js +171 -0
  178. package/dist/utils/errors.js.map +1 -0
  179. package/dist/utils/index.d.ts +7 -0
  180. package/dist/utils/index.d.ts.map +1 -0
  181. package/dist/utils/index.js +7 -0
  182. package/dist/utils/index.js.map +1 -0
  183. package/dist/utils/rate-limiting.d.ts +268 -0
  184. package/dist/utils/rate-limiting.d.ts.map +1 -0
  185. package/dist/utils/rate-limiting.js +403 -0
  186. package/dist/utils/rate-limiting.js.map +1 -0
  187. package/dist/utils/shared.d.ts +306 -0
  188. package/dist/utils/shared.d.ts.map +1 -0
  189. package/dist/utils/shared.js +464 -0
  190. package/dist/utils/shared.js.map +1 -0
  191. package/dist/utils/shell.d.ts +22 -0
  192. package/dist/utils/shell.d.ts.map +1 -0
  193. package/dist/utils/shell.js +29 -0
  194. package/dist/utils/shell.js.map +1 -0
  195. package/package.json +67 -0
@@ -0,0 +1,569 @@
1
+ /**
2
+ * Enterprise Agent Supervisor - Main Supervisor Class
3
+ *
4
+ * Orchestrates all governance components for agent supervision.
5
+ */
6
+ import { v4 as uuidv4 } from 'uuid';
7
+ import { RulesEngine } from '../engine/RulesEngine.js';
8
+ import { RateLimiter } from '../engine/RateLimiter.js';
9
+ import { AuditLogger } from '../engine/AuditLogger.js';
10
+ import { GitHubApprovalManager } from '../engine/GitHubApprovalManager.js';
11
+ import { ArchitectureDetector } from '../analyzers/ArchitectureDetector.js';
12
+ import { allBuiltInRules, defaultRateLimits, rulePresets } from '../rules/index.js';
13
+ /**
14
+ * Default cache TTL in milliseconds (30 seconds)
15
+ */
16
+ const DEFAULT_CACHE_TTL_MS = 30_000;
17
+ export class AgentSupervisor {
18
+ config;
19
+ rulesEngine;
20
+ rateLimiter;
21
+ auditLogger;
22
+ approvalManager;
23
+ initialized = false;
24
+ /**
25
+ * Cache for evaluation results
26
+ * Key: cache key derived from action name, category, and parameters
27
+ * Value: cached evaluation result with timestamp
28
+ */
29
+ evaluationCache = new Map();
30
+ /**
31
+ * Cache TTL in milliseconds
32
+ */
33
+ cacheTtlMs = DEFAULT_CACHE_TTL_MS;
34
+ constructor(options = {}) {
35
+ // Initialize with defaults
36
+ this.config = this.buildConfig(options.config);
37
+ this.rulesEngine = new RulesEngine();
38
+ this.rateLimiter = new RateLimiter();
39
+ this.auditLogger = new AuditLogger(options.auditOptions);
40
+ this.approvalManager = new GitHubApprovalManager(options.approvalOptions);
41
+ }
42
+ /**
43
+ * Initialize the supervisor with configuration
44
+ */
45
+ async initialize(preset) {
46
+ if (this.initialized) {
47
+ return;
48
+ }
49
+ // Initialize audit logger (loads from file if configured)
50
+ await this.auditLogger.initialize();
51
+ // Load preset if specified
52
+ if (preset && rulePresets[preset]) {
53
+ const presetConfig = rulePresets[preset];
54
+ this.rulesEngine.registerRules(presetConfig.rules);
55
+ this.rateLimiter.registerLimits(presetConfig.rateLimits);
56
+ }
57
+ else {
58
+ // Load from config
59
+ this.rulesEngine.registerRules(this.config.rules);
60
+ this.rateLimiter.registerLimits(this.config.rateLimits);
61
+ }
62
+ // Log initialization
63
+ await this.auditLogger.log({
64
+ eventType: 'system_event',
65
+ action: 'supervisor_initialized',
66
+ outcome: 'success',
67
+ details: {
68
+ environment: this.config.environment,
69
+ rulesLoaded: this.rulesEngine.getRules().length,
70
+ rateLimitsLoaded: this.rateLimiter.getConfigs().length,
71
+ preset
72
+ }
73
+ });
74
+ this.initialized = true;
75
+ }
76
+ /**
77
+ * Generate a cache key from action and context
78
+ * Key includes action name, category, and serialized parameters for uniqueness
79
+ */
80
+ generateCacheKey(action, context) {
81
+ const keyParts = [
82
+ action.name,
83
+ action.category,
84
+ action.agentId || '',
85
+ context?.agentId || '',
86
+ context?.environment || '',
87
+ context?.dataClassification || ''
88
+ ];
89
+ // Include sorted parameters for consistent key generation
90
+ if (action.parameters) {
91
+ const sortedParams = Object.keys(action.parameters)
92
+ .sort()
93
+ .map(k => `${k}:${JSON.stringify(action.parameters[k])}`)
94
+ .join('|');
95
+ keyParts.push(sortedParams);
96
+ }
97
+ return keyParts.join('::');
98
+ }
99
+ /**
100
+ * Check if a cached evaluation is still valid (within TTL)
101
+ */
102
+ isCacheValid(cached) {
103
+ return Date.now() - cached.cachedAt < this.cacheTtlMs;
104
+ }
105
+ /**
106
+ * Get cached evaluation if available and valid
107
+ */
108
+ getCachedEvaluation(cacheKey) {
109
+ const cached = this.evaluationCache.get(cacheKey);
110
+ if (cached && this.isCacheValid(cached)) {
111
+ return cached.result;
112
+ }
113
+ // Remove expired entry
114
+ if (cached) {
115
+ this.evaluationCache.delete(cacheKey);
116
+ }
117
+ return null;
118
+ }
119
+ /**
120
+ * Store evaluation result in cache
121
+ */
122
+ cacheEvaluation(cacheKey, result) {
123
+ this.evaluationCache.set(cacheKey, {
124
+ result,
125
+ cachedAt: Date.now()
126
+ });
127
+ }
128
+ /**
129
+ * Clear the evaluation cache
130
+ * Call this when rules are modified or when cache should be invalidated
131
+ */
132
+ clearCache() {
133
+ this.evaluationCache.clear();
134
+ }
135
+ /**
136
+ * Set the cache TTL in milliseconds
137
+ * @param ttlMs - Time to live in milliseconds (minimum 1000ms)
138
+ */
139
+ setCacheTtl(ttlMs) {
140
+ this.cacheTtlMs = Math.max(1000, ttlMs);
141
+ }
142
+ /**
143
+ * Get current cache TTL in milliseconds
144
+ */
145
+ getCacheTtl() {
146
+ return this.cacheTtlMs;
147
+ }
148
+ /**
149
+ * Get cache statistics
150
+ */
151
+ getCacheStats() {
152
+ return {
153
+ size: this.evaluationCache.size,
154
+ ttlMs: this.cacheTtlMs
155
+ };
156
+ }
157
+ /**
158
+ * Evaluate an agent action
159
+ * Main entry point for action governance
160
+ * Results are cached for identical actions within the TTL period
161
+ */
162
+ async evaluateAction(action, context) {
163
+ await this.ensureInitialized();
164
+ const actionId = action.id || uuidv4();
165
+ const enrichedAction = { ...action, id: actionId };
166
+ // Generate cache key and check for cached result
167
+ const cacheKey = this.generateCacheKey(enrichedAction, context);
168
+ const cachedResult = this.getCachedEvaluation(cacheKey);
169
+ if (cachedResult) {
170
+ // Return cached result with updated actionId and timestamp
171
+ return {
172
+ ...cachedResult,
173
+ actionId,
174
+ evaluatedAt: new Date().toISOString(),
175
+ cached: true
176
+ };
177
+ }
178
+ // Check rate limits first
179
+ if (this.config.features.rateLimiting) {
180
+ const rateLimitCheck = this.rateLimiter.checkLimit({
181
+ agentId: context?.agentId || action.agentId,
182
+ sessionId: context?.sessionId || action.sessionId,
183
+ userId: context?.userId,
184
+ actionCategory: action.category,
185
+ actionType: action.name
186
+ });
187
+ if (!rateLimitCheck.allowed) {
188
+ await this.auditLogger.logRateLimitHit(action.name, rateLimitCheck.limitId, action.agentId);
189
+ return {
190
+ actionId,
191
+ status: 'rate_limited',
192
+ riskScore: 0,
193
+ riskLevel: 'minimal',
194
+ allowed: false,
195
+ violations: [],
196
+ warnings: [`Rate limit exceeded: ${rateLimitCheck.limitId}`],
197
+ appliedRules: [],
198
+ requiresHumanApproval: false,
199
+ rateLimitInfo: rateLimitCheck.state ? {
200
+ limited: true,
201
+ remaining: rateLimitCheck.state.remaining,
202
+ resetAt: rateLimitCheck.state.resetAt
203
+ } : undefined,
204
+ evaluatedAt: new Date().toISOString()
205
+ };
206
+ }
207
+ }
208
+ // Evaluate rules
209
+ const evaluation = this.rulesEngine.evaluateAction(enrichedAction, context);
210
+ // Check risk threshold for auto-approval requirement
211
+ if (this.config.features.humanApproval &&
212
+ evaluation.riskScore >= this.config.requireApprovalAboveRisk &&
213
+ !evaluation.requiresHumanApproval) {
214
+ evaluation.requiresHumanApproval = true;
215
+ evaluation.approvalReason = `Risk score (${evaluation.riskScore}) exceeds threshold (${this.config.requireApprovalAboveRisk})`;
216
+ evaluation.status = 'pending_approval';
217
+ }
218
+ // Strict mode enforcement
219
+ if (this.config.strictMode && evaluation.riskScore >= this.config.defaultRiskThreshold) {
220
+ evaluation.allowed = false;
221
+ evaluation.status = 'denied';
222
+ }
223
+ // Architecture change detection
224
+ if (this.config.features.architectureValidation) {
225
+ const archUpdate = ArchitectureDetector.detectChanges(enrichedAction, context);
226
+ if (archUpdate) {
227
+ evaluation.claudeMdUpdate = archUpdate;
228
+ }
229
+ }
230
+ // Record the request for rate limiting
231
+ if (this.config.features.rateLimiting) {
232
+ this.rateLimiter.recordRequest({
233
+ agentId: context?.agentId || action.agentId,
234
+ sessionId: context?.sessionId || action.sessionId,
235
+ userId: context?.userId,
236
+ actionCategory: action.category,
237
+ actionType: action.name
238
+ });
239
+ }
240
+ // Audit logging
241
+ if (this.config.features.auditLogging) {
242
+ await this.auditLogger.logActionEvaluated(action.name, evaluation.allowed ? 'success' : 'failure', {
243
+ actionId,
244
+ category: action.category,
245
+ riskScore: evaluation.riskScore,
246
+ riskLevel: evaluation.riskLevel,
247
+ status: evaluation.status,
248
+ violationCount: evaluation.violations.length,
249
+ rulesApplied: evaluation.appliedRules.length
250
+ });
251
+ }
252
+ // Cache the evaluation result for future identical actions
253
+ this.cacheEvaluation(cacheKey, evaluation);
254
+ return evaluation;
255
+ }
256
+ /**
257
+ * Apply business rules to a context
258
+ */
259
+ async applyBusinessRules(context) {
260
+ await this.ensureInitialized();
261
+ const result = this.rulesEngine.applyBusinessRules(context);
262
+ if (this.config.features.auditLogging) {
263
+ await this.auditLogger.log({
264
+ eventType: 'action_evaluated',
265
+ action: 'apply_business_rules',
266
+ outcome: 'success',
267
+ agentId: context.agentId,
268
+ sessionId: context.sessionId,
269
+ userId: context.userId,
270
+ details: {
271
+ contextId: result.contextId,
272
+ rulesApplied: result.rulesApplied.length,
273
+ constraintsFound: result.constraints.length,
274
+ riskScore: result.aggregateRiskScore
275
+ }
276
+ });
277
+ }
278
+ return result;
279
+ }
280
+ /**
281
+ * Request human approval for an action via GitHub issue
282
+ */
283
+ async requireHumanApproval(params) {
284
+ await this.ensureInitialized();
285
+ const actionId = params.actionId || `action-${Date.now()}`;
286
+ const detailsObj = typeof params.details === 'string'
287
+ ? { description: params.details }
288
+ : params.details;
289
+ const approval = await this.approvalManager.createApprovalIssue({
290
+ repo: params.repo,
291
+ actionId,
292
+ action: params.action || 'Unspecified action',
293
+ reason: params.reason,
294
+ details: detailsObj,
295
+ priority: params.priority,
296
+ riskScore: params.riskScore,
297
+ violations: params.violations,
298
+ warnings: params.warnings,
299
+ context: params.context
300
+ });
301
+ // Log the approval request
302
+ await this.auditLogger.log({
303
+ eventType: 'approval_requested',
304
+ action: params.action || 'approval_requested',
305
+ outcome: 'pending',
306
+ details: {
307
+ requestId: approval.requestId,
308
+ issueNumber: approval.issueNumber,
309
+ issueUrl: approval.issueUrl,
310
+ reason: params.reason,
311
+ riskScore: params.riskScore
312
+ }
313
+ });
314
+ return approval;
315
+ }
316
+ /**
317
+ * Log an event
318
+ */
319
+ async logEvent(params) {
320
+ return this.auditLogger.log({
321
+ eventType: params.eventType || 'custom',
322
+ action: params.action,
323
+ outcome: params.outcome || 'success',
324
+ agentId: params.agentId,
325
+ sessionId: params.sessionId,
326
+ userId: params.userId,
327
+ metadata: params.metadata
328
+ });
329
+ }
330
+ // ============================================================================
331
+ // RULE MANAGEMENT
332
+ // ============================================================================
333
+ /**
334
+ * Add a custom rule
335
+ * Invalidates the evaluation cache since rules have changed
336
+ */
337
+ addRule(rule) {
338
+ this.rulesEngine.registerRule(rule);
339
+ this.clearCache();
340
+ }
341
+ /**
342
+ * Remove a rule
343
+ * Invalidates the evaluation cache since rules have changed
344
+ */
345
+ removeRule(ruleId) {
346
+ const result = this.rulesEngine.unregisterRule(ruleId);
347
+ if (result) {
348
+ this.clearCache();
349
+ }
350
+ return result;
351
+ }
352
+ /**
353
+ * Get all rules
354
+ */
355
+ getRules() {
356
+ return this.rulesEngine.getRules();
357
+ }
358
+ /**
359
+ * Add rate limit configuration
360
+ */
361
+ addRateLimit(config) {
362
+ this.rateLimiter.registerLimit(config);
363
+ }
364
+ /**
365
+ * Remove rate limit
366
+ */
367
+ removeRateLimit(configId) {
368
+ return this.rateLimiter.removeLimit(configId);
369
+ }
370
+ // ============================================================================
371
+ // APPROVAL MANAGEMENT
372
+ // ============================================================================
373
+ /**
374
+ * Approve a pending request via GitHub
375
+ * @param requestIdOrIssueNumber - Either "approval-123" or just "123" (issue number)
376
+ */
377
+ async approveRequest(requestIdOrIssueNumber, approverId, comments, repo) {
378
+ const issueNumber = typeof requestIdOrIssueNumber === 'string'
379
+ ? parseInt(requestIdOrIssueNumber.replace('approval-', ''))
380
+ : requestIdOrIssueNumber;
381
+ await this.approvalManager.approveRequest({
382
+ repo,
383
+ issueNumber,
384
+ approverId,
385
+ comments
386
+ });
387
+ await this.auditLogger.log({
388
+ eventType: 'approval_granted',
389
+ action: `Approval granted for issue #${issueNumber}`,
390
+ outcome: 'success',
391
+ userId: approverId,
392
+ details: { issueNumber, comments }
393
+ });
394
+ }
395
+ /**
396
+ * Deny a pending request via GitHub
397
+ * @param requestIdOrIssueNumber - Either "approval-123" or just "123" (issue number)
398
+ */
399
+ async denyRequest(requestIdOrIssueNumber, denierId, reason, repo) {
400
+ const issueNumber = typeof requestIdOrIssueNumber === 'string'
401
+ ? parseInt(requestIdOrIssueNumber.replace('approval-', ''))
402
+ : requestIdOrIssueNumber;
403
+ await this.approvalManager.denyRequest({
404
+ repo,
405
+ issueNumber,
406
+ denierId,
407
+ reason
408
+ });
409
+ await this.auditLogger.log({
410
+ eventType: 'approval_denied',
411
+ action: `Approval denied for issue #${issueNumber}`,
412
+ outcome: 'success',
413
+ userId: denierId,
414
+ details: { issueNumber, reason }
415
+ });
416
+ }
417
+ /**
418
+ * Get pending approvals from GitHub
419
+ * Returns empty array if no repo is provided and no default is configured
420
+ */
421
+ async getPendingApprovals(repo) {
422
+ try {
423
+ return await this.approvalManager.getPendingApprovals(repo);
424
+ }
425
+ catch (error) {
426
+ // If no repo is available, return empty array
427
+ if (error.message === 'Repository required') {
428
+ return [];
429
+ }
430
+ throw error;
431
+ }
432
+ }
433
+ /**
434
+ * Check if request is approved via GitHub
435
+ * @param requestIdOrIssueNumber - Either "approval-123" or just "123" (issue number)
436
+ */
437
+ async isApproved(requestIdOrIssueNumber, repo) {
438
+ const issueNumber = typeof requestIdOrIssueNumber === 'string'
439
+ ? parseInt(requestIdOrIssueNumber.replace('approval-', ''))
440
+ : requestIdOrIssueNumber;
441
+ const status = await this.approvalManager.checkApprovalStatus({
442
+ repo,
443
+ issueNumber
444
+ });
445
+ return status.status === 'approved';
446
+ }
447
+ // ============================================================================
448
+ // AUDIT & REPORTING
449
+ // ============================================================================
450
+ /**
451
+ * Get audit events
452
+ */
453
+ getAuditEvents(filter) {
454
+ return this.auditLogger.getEvents(filter);
455
+ }
456
+ /**
457
+ * Get audit statistics
458
+ */
459
+ getAuditStats(since) {
460
+ return this.auditLogger.getStats(since);
461
+ }
462
+ /**
463
+ * Export audit log
464
+ */
465
+ exportAuditLog(filter) {
466
+ return this.auditLogger.exportEvents(filter);
467
+ }
468
+ /**
469
+ * Get approval statistics
470
+ */
471
+ async getApprovalStats(repo) {
472
+ const approvals = await this.getPendingApprovals(repo);
473
+ const byPriority = {};
474
+ for (const approval of approvals) {
475
+ byPriority[approval.priority] = (byPriority[approval.priority] || 0) + 1;
476
+ }
477
+ return {
478
+ total: approvals.length,
479
+ pending: approvals.length,
480
+ byPriority
481
+ };
482
+ }
483
+ // ============================================================================
484
+ // CONFIGURATION
485
+ // ============================================================================
486
+ /**
487
+ * Get current configuration
488
+ */
489
+ getConfig() {
490
+ return { ...this.config };
491
+ }
492
+ /**
493
+ * Update configuration
494
+ */
495
+ async updateConfig(updates) {
496
+ const oldConfig = { ...this.config };
497
+ this.config = { ...this.config, ...updates };
498
+ await this.auditLogger.logConfigChanged('update_supervisor_config', 'config_update', {
499
+ changes: Object.keys(updates),
500
+ oldValues: oldConfig,
501
+ newValues: this.config
502
+ });
503
+ }
504
+ /**
505
+ * Load preset configuration
506
+ * Invalidates the evaluation cache since rules have changed
507
+ */
508
+ async loadPreset(preset) {
509
+ const presetConfig = rulePresets[preset];
510
+ if (!presetConfig) {
511
+ throw new Error(`Unknown preset: ${preset}`);
512
+ }
513
+ // Clear existing and load preset
514
+ this.rulesEngine = new RulesEngine();
515
+ this.rateLimiter.clearBuckets();
516
+ this.clearCache();
517
+ this.rulesEngine.registerRules(presetConfig.rules);
518
+ this.rateLimiter.registerLimits(presetConfig.rateLimits);
519
+ await this.auditLogger.logConfigChanged('load_preset', 'preset_loaded', { preset });
520
+ }
521
+ // ============================================================================
522
+ // HELPERS
523
+ // ============================================================================
524
+ buildConfig(partial) {
525
+ return {
526
+ version: partial?.version || '1.2.3',
527
+ name: partial?.name || 'Agent Supervisor',
528
+ environment: partial?.environment || 'development',
529
+ strictMode: partial?.strictMode ?? false,
530
+ defaultRiskThreshold: partial?.defaultRiskThreshold ?? 70,
531
+ requireApprovalAboveRisk: partial?.requireApprovalAboveRisk ?? 80,
532
+ features: {
533
+ riskScoring: partial?.features?.riskScoring ?? true,
534
+ rateLimiting: partial?.features?.rateLimiting ?? true,
535
+ auditLogging: partial?.features?.auditLogging ?? true,
536
+ humanApproval: partial?.features?.humanApproval ?? true,
537
+ complianceChecks: partial?.features?.complianceChecks ?? true,
538
+ uxValidation: partial?.features?.uxValidation ?? true,
539
+ architectureValidation: partial?.features?.architectureValidation ?? true
540
+ },
541
+ rateLimits: partial?.rateLimits ?? defaultRateLimits,
542
+ rules: partial?.rules ?? allBuiltInRules,
543
+ complianceFrameworks: partial?.complianceFrameworks ?? [],
544
+ notifications: {
545
+ enabled: partial?.notifications?.enabled ?? false,
546
+ webhookUrl: partial?.notifications?.webhookUrl,
547
+ alertOnRiskLevel: partial?.notifications?.alertOnRiskLevel ?? 'high'
548
+ }
549
+ };
550
+ }
551
+ async ensureInitialized() {
552
+ if (!this.initialized) {
553
+ await this.initialize();
554
+ }
555
+ }
556
+ /**
557
+ * Reload audit log from database
558
+ */
559
+ async reloadAuditLog() {
560
+ await this.auditLogger.reload();
561
+ }
562
+ }
563
+ // Export singleton for convenience with shared audit database
564
+ export const supervisor = new AgentSupervisor({
565
+ auditOptions: {
566
+ dbPath: process.env.AUDIT_DB_PATH || '/tmp/agent-supervisor/audit.db'
567
+ }
568
+ });
569
+ //# sourceMappingURL=AgentSupervisor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentSupervisor.js","sourceRoot":"","sources":["../../src/supervisor/AgentSupervisor.ts"],"names":[],"mappings":"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"}