@trentapps/manager-protocol 1.1.1

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 (151) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +446 -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 +104 -0
  8. package/dist/analyzers/CSSAnalyzer.d.ts.map +1 -0
  9. package/dist/analyzers/CSSAnalyzer.js +578 -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/AppMonitor.d.ts +162 -0
  28. package/dist/engine/AppMonitor.d.ts.map +1 -0
  29. package/dist/engine/AppMonitor.js +754 -0
  30. package/dist/engine/AppMonitor.js.map +1 -0
  31. package/dist/engine/AuditLogger.d.ts +138 -0
  32. package/dist/engine/AuditLogger.d.ts.map +1 -0
  33. package/dist/engine/AuditLogger.js +448 -0
  34. package/dist/engine/AuditLogger.js.map +1 -0
  35. package/dist/engine/GitHubApprovalManager.d.ts +106 -0
  36. package/dist/engine/GitHubApprovalManager.d.ts.map +1 -0
  37. package/dist/engine/GitHubApprovalManager.js +315 -0
  38. package/dist/engine/GitHubApprovalManager.js.map +1 -0
  39. package/dist/engine/RateLimiter.d.ts +79 -0
  40. package/dist/engine/RateLimiter.d.ts.map +1 -0
  41. package/dist/engine/RateLimiter.js +232 -0
  42. package/dist/engine/RateLimiter.js.map +1 -0
  43. package/dist/engine/RulesEngine.d.ts +77 -0
  44. package/dist/engine/RulesEngine.d.ts.map +1 -0
  45. package/dist/engine/RulesEngine.js +400 -0
  46. package/dist/engine/RulesEngine.js.map +1 -0
  47. package/dist/engine/TaskManager.d.ts +173 -0
  48. package/dist/engine/TaskManager.d.ts.map +1 -0
  49. package/dist/engine/TaskManager.js +678 -0
  50. package/dist/engine/TaskManager.js.map +1 -0
  51. package/dist/engine/index.d.ts +9 -0
  52. package/dist/engine/index.d.ts.map +1 -0
  53. package/dist/engine/index.js +9 -0
  54. package/dist/engine/index.js.map +1 -0
  55. package/dist/index.d.ts +21 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +29 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/rules/architecture.d.ts +9 -0
  60. package/dist/rules/architecture.d.ts.map +1 -0
  61. package/dist/rules/architecture.js +322 -0
  62. package/dist/rules/architecture.js.map +1 -0
  63. package/dist/rules/azure.d.ts +7 -0
  64. package/dist/rules/azure.d.ts.map +1 -0
  65. package/dist/rules/azure.js +138 -0
  66. package/dist/rules/azure.js.map +1 -0
  67. package/dist/rules/compliance.d.ts +9 -0
  68. package/dist/rules/compliance.d.ts.map +1 -0
  69. package/dist/rules/compliance.js +304 -0
  70. package/dist/rules/compliance.js.map +1 -0
  71. package/dist/rules/css.d.ts +10 -0
  72. package/dist/rules/css.d.ts.map +1 -0
  73. package/dist/rules/css.js +1239 -0
  74. package/dist/rules/css.js.map +1 -0
  75. package/dist/rules/flask.d.ts +7 -0
  76. package/dist/rules/flask.d.ts.map +1 -0
  77. package/dist/rules/flask.js +155 -0
  78. package/dist/rules/flask.js.map +1 -0
  79. package/dist/rules/index.d.ts +607 -0
  80. package/dist/rules/index.d.ts.map +1 -0
  81. package/dist/rules/index.js +401 -0
  82. package/dist/rules/index.js.map +1 -0
  83. package/dist/rules/ml-ai.d.ts +7 -0
  84. package/dist/rules/ml-ai.d.ts.map +1 -0
  85. package/dist/rules/ml-ai.js +150 -0
  86. package/dist/rules/ml-ai.js.map +1 -0
  87. package/dist/rules/operational.d.ts +9 -0
  88. package/dist/rules/operational.d.ts.map +1 -0
  89. package/dist/rules/operational.js +318 -0
  90. package/dist/rules/operational.js.map +1 -0
  91. package/dist/rules/security.d.ts +9 -0
  92. package/dist/rules/security.d.ts.map +1 -0
  93. package/dist/rules/security.js +287 -0
  94. package/dist/rules/security.js.map +1 -0
  95. package/dist/rules/storage.d.ts +7 -0
  96. package/dist/rules/storage.d.ts.map +1 -0
  97. package/dist/rules/storage.js +134 -0
  98. package/dist/rules/storage.js.map +1 -0
  99. package/dist/rules/stripe.d.ts +7 -0
  100. package/dist/rules/stripe.d.ts.map +1 -0
  101. package/dist/rules/stripe.js +140 -0
  102. package/dist/rules/stripe.js.map +1 -0
  103. package/dist/rules/testing.d.ts +7 -0
  104. package/dist/rules/testing.d.ts.map +1 -0
  105. package/dist/rules/testing.js +135 -0
  106. package/dist/rules/testing.js.map +1 -0
  107. package/dist/rules/ux.d.ts +9 -0
  108. package/dist/rules/ux.d.ts.map +1 -0
  109. package/dist/rules/ux.js +280 -0
  110. package/dist/rules/ux.js.map +1 -0
  111. package/dist/rules/websocket.d.ts +7 -0
  112. package/dist/rules/websocket.d.ts.map +1 -0
  113. package/dist/rules/websocket.js +136 -0
  114. package/dist/rules/websocket.js.map +1 -0
  115. package/dist/server.d.ts +49 -0
  116. package/dist/server.d.ts.map +1 -0
  117. package/dist/server.js +2330 -0
  118. package/dist/server.js.map +1 -0
  119. package/dist/supervisor/AgentSupervisor.d.ts +235 -0
  120. package/dist/supervisor/AgentSupervisor.d.ts.map +1 -0
  121. package/dist/supervisor/AgentSupervisor.js +596 -0
  122. package/dist/supervisor/AgentSupervisor.js.map +1 -0
  123. package/dist/supervisor/ManagedServerRegistry.d.ts +48 -0
  124. package/dist/supervisor/ManagedServerRegistry.d.ts.map +1 -0
  125. package/dist/supervisor/ManagedServerRegistry.js +145 -0
  126. package/dist/supervisor/ManagedServerRegistry.js.map +1 -0
  127. package/dist/supervisor/ProjectTracker.d.ts +188 -0
  128. package/dist/supervisor/ProjectTracker.d.ts.map +1 -0
  129. package/dist/supervisor/ProjectTracker.js +617 -0
  130. package/dist/supervisor/ProjectTracker.js.map +1 -0
  131. package/dist/supervisor/index.d.ts +6 -0
  132. package/dist/supervisor/index.d.ts.map +1 -0
  133. package/dist/supervisor/index.js +6 -0
  134. package/dist/supervisor/index.js.map +1 -0
  135. package/dist/types/index.d.ts +1176 -0
  136. package/dist/types/index.d.ts.map +1 -0
  137. package/dist/types/index.js +391 -0
  138. package/dist/types/index.js.map +1 -0
  139. package/dist/utils/errors.d.ts +86 -0
  140. package/dist/utils/errors.d.ts.map +1 -0
  141. package/dist/utils/errors.js +171 -0
  142. package/dist/utils/errors.js.map +1 -0
  143. package/dist/utils/index.d.ts +5 -0
  144. package/dist/utils/index.d.ts.map +1 -0
  145. package/dist/utils/index.js +5 -0
  146. package/dist/utils/index.js.map +1 -0
  147. package/dist/utils/shell.d.ts +22 -0
  148. package/dist/utils/shell.d.ts.map +1 -0
  149. package/dist/utils/shell.js +29 -0
  150. package/dist/utils/shell.js.map +1 -0
  151. package/package.json +63 -0
@@ -0,0 +1,596 @@
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 { AppMonitor } from '../engine/AppMonitor.js';
12
+ import { ArchitectureDetector } from '../analyzers/ArchitectureDetector.js';
13
+ import { allBuiltInRules, defaultRateLimits, rulePresets } from '../rules/index.js';
14
+ export class AgentSupervisor {
15
+ config;
16
+ rulesEngine;
17
+ rateLimiter;
18
+ auditLogger;
19
+ approvalManager;
20
+ appMonitor;
21
+ initialized = false;
22
+ constructor(options = {}) {
23
+ // Initialize with defaults
24
+ this.config = this.buildConfig(options.config);
25
+ this.rulesEngine = new RulesEngine();
26
+ this.rateLimiter = new RateLimiter();
27
+ this.auditLogger = new AuditLogger(options.auditOptions);
28
+ this.approvalManager = new GitHubApprovalManager(options.approvalOptions);
29
+ this.appMonitor = new AppMonitor(options.appMonitorOptions);
30
+ }
31
+ /**
32
+ * Initialize the supervisor with configuration
33
+ */
34
+ async initialize(preset) {
35
+ if (this.initialized) {
36
+ return;
37
+ }
38
+ // Initialize audit logger (loads from file if configured)
39
+ await this.auditLogger.initialize();
40
+ // Load preset if specified
41
+ if (preset && rulePresets[preset]) {
42
+ const presetConfig = rulePresets[preset];
43
+ this.rulesEngine.registerRules(presetConfig.rules);
44
+ this.rateLimiter.registerLimits(presetConfig.rateLimits);
45
+ }
46
+ else {
47
+ // Load from config
48
+ this.rulesEngine.registerRules(this.config.rules);
49
+ this.rateLimiter.registerLimits(this.config.rateLimits);
50
+ }
51
+ // Log initialization
52
+ await this.auditLogger.log({
53
+ eventType: 'system_event',
54
+ action: 'supervisor_initialized',
55
+ outcome: 'success',
56
+ details: {
57
+ environment: this.config.environment,
58
+ rulesLoaded: this.rulesEngine.getRules().length,
59
+ rateLimitsLoaded: this.rateLimiter.getConfigs().length,
60
+ preset
61
+ }
62
+ });
63
+ this.initialized = true;
64
+ }
65
+ /**
66
+ * Evaluate an agent action
67
+ * Main entry point for action governance
68
+ */
69
+ async evaluateAction(action, context) {
70
+ await this.ensureInitialized();
71
+ const actionId = action.id || uuidv4();
72
+ const enrichedAction = { ...action, id: actionId };
73
+ // Check rate limits first
74
+ if (this.config.features.rateLimiting) {
75
+ const rateLimitCheck = this.rateLimiter.checkLimit({
76
+ agentId: context?.agentId || action.agentId,
77
+ sessionId: context?.sessionId || action.sessionId,
78
+ userId: context?.userId,
79
+ actionCategory: action.category,
80
+ actionType: action.name
81
+ });
82
+ if (!rateLimitCheck.allowed) {
83
+ await this.auditLogger.logRateLimitHit(action.name, rateLimitCheck.limitId, action.agentId);
84
+ return {
85
+ actionId,
86
+ status: 'rate_limited',
87
+ riskScore: 0,
88
+ riskLevel: 'minimal',
89
+ allowed: false,
90
+ violations: [],
91
+ warnings: [`Rate limit exceeded: ${rateLimitCheck.limitId}`],
92
+ appliedRules: [],
93
+ requiresHumanApproval: false,
94
+ rateLimitInfo: rateLimitCheck.state ? {
95
+ limited: true,
96
+ remaining: rateLimitCheck.state.remaining,
97
+ resetAt: rateLimitCheck.state.resetAt
98
+ } : undefined,
99
+ evaluatedAt: new Date().toISOString()
100
+ };
101
+ }
102
+ }
103
+ // Evaluate rules
104
+ const evaluation = this.rulesEngine.evaluateAction(enrichedAction, context);
105
+ // Check risk threshold for auto-approval requirement
106
+ if (this.config.features.humanApproval &&
107
+ evaluation.riskScore >= this.config.requireApprovalAboveRisk &&
108
+ !evaluation.requiresHumanApproval) {
109
+ evaluation.requiresHumanApproval = true;
110
+ evaluation.approvalReason = `Risk score (${evaluation.riskScore}) exceeds threshold (${this.config.requireApprovalAboveRisk})`;
111
+ evaluation.status = 'pending_approval';
112
+ }
113
+ // Strict mode enforcement
114
+ if (this.config.strictMode && evaluation.riskScore >= this.config.defaultRiskThreshold) {
115
+ evaluation.allowed = false;
116
+ evaluation.status = 'denied';
117
+ }
118
+ // Architecture change detection
119
+ if (this.config.features.architectureValidation) {
120
+ const archUpdate = ArchitectureDetector.detectChanges(enrichedAction, context);
121
+ if (archUpdate) {
122
+ evaluation.claudeMdUpdate = archUpdate;
123
+ }
124
+ }
125
+ // Record the request for rate limiting
126
+ if (this.config.features.rateLimiting) {
127
+ this.rateLimiter.recordRequest({
128
+ agentId: context?.agentId || action.agentId,
129
+ sessionId: context?.sessionId || action.sessionId,
130
+ userId: context?.userId,
131
+ actionCategory: action.category,
132
+ actionType: action.name
133
+ });
134
+ }
135
+ // Audit logging
136
+ if (this.config.features.auditLogging) {
137
+ await this.auditLogger.logActionEvaluated(action.name, evaluation.allowed ? 'success' : 'failure', {
138
+ actionId,
139
+ category: action.category,
140
+ riskScore: evaluation.riskScore,
141
+ riskLevel: evaluation.riskLevel,
142
+ status: evaluation.status,
143
+ violationCount: evaluation.violations.length,
144
+ rulesApplied: evaluation.appliedRules.length
145
+ });
146
+ }
147
+ return evaluation;
148
+ }
149
+ /**
150
+ * Apply business rules to a context
151
+ */
152
+ async applyBusinessRules(context) {
153
+ await this.ensureInitialized();
154
+ const result = this.rulesEngine.applyBusinessRules(context);
155
+ if (this.config.features.auditLogging) {
156
+ await this.auditLogger.log({
157
+ eventType: 'action_evaluated',
158
+ action: 'apply_business_rules',
159
+ outcome: 'success',
160
+ agentId: context.agentId,
161
+ sessionId: context.sessionId,
162
+ userId: context.userId,
163
+ details: {
164
+ contextId: result.contextId,
165
+ rulesApplied: result.rulesApplied.length,
166
+ constraintsFound: result.constraints.length,
167
+ riskScore: result.aggregateRiskScore
168
+ }
169
+ });
170
+ }
171
+ return result;
172
+ }
173
+ /**
174
+ * Request human approval for an action via GitHub issue
175
+ */
176
+ async requireHumanApproval(params) {
177
+ await this.ensureInitialized();
178
+ const actionId = params.actionId || `action-${Date.now()}`;
179
+ const detailsObj = typeof params.details === 'string'
180
+ ? { description: params.details }
181
+ : params.details;
182
+ const approval = await this.approvalManager.createApprovalIssue({
183
+ repo: params.repo,
184
+ actionId,
185
+ action: params.action || 'Unspecified action',
186
+ reason: params.reason,
187
+ details: detailsObj,
188
+ priority: params.priority,
189
+ riskScore: params.riskScore,
190
+ violations: params.violations,
191
+ warnings: params.warnings,
192
+ context: params.context
193
+ });
194
+ // Log the approval request
195
+ await this.auditLogger.log({
196
+ eventType: 'approval_requested',
197
+ action: params.action || 'approval_requested',
198
+ outcome: 'pending',
199
+ details: {
200
+ requestId: approval.requestId,
201
+ issueNumber: approval.issueNumber,
202
+ issueUrl: approval.issueUrl,
203
+ reason: params.reason,
204
+ riskScore: params.riskScore
205
+ }
206
+ });
207
+ return approval;
208
+ }
209
+ /**
210
+ * Log an event
211
+ */
212
+ async logEvent(params) {
213
+ return this.auditLogger.log({
214
+ eventType: params.eventType || 'custom',
215
+ action: params.action,
216
+ outcome: params.outcome || 'success',
217
+ agentId: params.agentId,
218
+ sessionId: params.sessionId,
219
+ userId: params.userId,
220
+ metadata: params.metadata
221
+ });
222
+ }
223
+ // ============================================================================
224
+ // RULE MANAGEMENT
225
+ // ============================================================================
226
+ /**
227
+ * Add a custom rule
228
+ */
229
+ addRule(rule) {
230
+ this.rulesEngine.registerRule(rule);
231
+ }
232
+ /**
233
+ * Remove a rule
234
+ */
235
+ removeRule(ruleId) {
236
+ return this.rulesEngine.unregisterRule(ruleId);
237
+ }
238
+ /**
239
+ * Get all rules
240
+ */
241
+ getRules() {
242
+ return this.rulesEngine.getRules();
243
+ }
244
+ /**
245
+ * Add rate limit configuration
246
+ */
247
+ addRateLimit(config) {
248
+ this.rateLimiter.registerLimit(config);
249
+ }
250
+ /**
251
+ * Remove rate limit
252
+ */
253
+ removeRateLimit(configId) {
254
+ return this.rateLimiter.removeLimit(configId);
255
+ }
256
+ // ============================================================================
257
+ // APPROVAL MANAGEMENT
258
+ // ============================================================================
259
+ /**
260
+ * Approve a pending request via GitHub
261
+ * @param requestIdOrIssueNumber - Either "approval-123" or just "123" (issue number)
262
+ */
263
+ async approveRequest(requestIdOrIssueNumber, approverId, comments, repo) {
264
+ const issueNumber = typeof requestIdOrIssueNumber === 'string'
265
+ ? parseInt(requestIdOrIssueNumber.replace('approval-', ''))
266
+ : requestIdOrIssueNumber;
267
+ await this.approvalManager.approveRequest({
268
+ repo,
269
+ issueNumber,
270
+ approverId,
271
+ comments
272
+ });
273
+ await this.auditLogger.log({
274
+ eventType: 'approval_granted',
275
+ action: `Approval granted for issue #${issueNumber}`,
276
+ outcome: 'success',
277
+ userId: approverId,
278
+ details: { issueNumber, comments }
279
+ });
280
+ }
281
+ /**
282
+ * Deny a pending request via GitHub
283
+ * @param requestIdOrIssueNumber - Either "approval-123" or just "123" (issue number)
284
+ */
285
+ async denyRequest(requestIdOrIssueNumber, denierId, reason, repo) {
286
+ const issueNumber = typeof requestIdOrIssueNumber === 'string'
287
+ ? parseInt(requestIdOrIssueNumber.replace('approval-', ''))
288
+ : requestIdOrIssueNumber;
289
+ await this.approvalManager.denyRequest({
290
+ repo,
291
+ issueNumber,
292
+ denierId,
293
+ reason
294
+ });
295
+ await this.auditLogger.log({
296
+ eventType: 'approval_denied',
297
+ action: `Approval denied for issue #${issueNumber}`,
298
+ outcome: 'success',
299
+ userId: denierId,
300
+ details: { issueNumber, reason }
301
+ });
302
+ }
303
+ /**
304
+ * Get pending approvals from GitHub
305
+ * Returns empty array if no repo is provided and no default is configured
306
+ */
307
+ async getPendingApprovals(repo) {
308
+ try {
309
+ return await this.approvalManager.getPendingApprovals(repo);
310
+ }
311
+ catch (error) {
312
+ // If no repo is available, return empty array
313
+ if (error.message === 'Repository required') {
314
+ return [];
315
+ }
316
+ throw error;
317
+ }
318
+ }
319
+ /**
320
+ * Check if request is approved via GitHub
321
+ * @param requestIdOrIssueNumber - Either "approval-123" or just "123" (issue number)
322
+ */
323
+ async isApproved(requestIdOrIssueNumber, repo) {
324
+ const issueNumber = typeof requestIdOrIssueNumber === 'string'
325
+ ? parseInt(requestIdOrIssueNumber.replace('approval-', ''))
326
+ : requestIdOrIssueNumber;
327
+ const status = await this.approvalManager.checkApprovalStatus({
328
+ repo,
329
+ issueNumber
330
+ });
331
+ return status.status === 'approved';
332
+ }
333
+ // ============================================================================
334
+ // AUDIT & REPORTING
335
+ // ============================================================================
336
+ /**
337
+ * Get audit events
338
+ */
339
+ getAuditEvents(filter) {
340
+ return this.auditLogger.getEvents(filter);
341
+ }
342
+ /**
343
+ * Get audit statistics
344
+ */
345
+ getAuditStats(since) {
346
+ return this.auditLogger.getStats(since);
347
+ }
348
+ /**
349
+ * Export audit log
350
+ */
351
+ exportAuditLog(filter) {
352
+ return this.auditLogger.exportEvents(filter);
353
+ }
354
+ /**
355
+ * Get approval statistics
356
+ */
357
+ async getApprovalStats(repo) {
358
+ const approvals = await this.getPendingApprovals(repo);
359
+ const byPriority = {};
360
+ for (const approval of approvals) {
361
+ byPriority[approval.priority] = (byPriority[approval.priority] || 0) + 1;
362
+ }
363
+ return {
364
+ total: approvals.length,
365
+ pending: approvals.length,
366
+ byPriority
367
+ };
368
+ }
369
+ // ============================================================================
370
+ // CONFIGURATION
371
+ // ============================================================================
372
+ /**
373
+ * Get current configuration
374
+ */
375
+ getConfig() {
376
+ return { ...this.config };
377
+ }
378
+ /**
379
+ * Update configuration
380
+ */
381
+ async updateConfig(updates) {
382
+ const oldConfig = { ...this.config };
383
+ this.config = { ...this.config, ...updates };
384
+ await this.auditLogger.logConfigChanged('update_supervisor_config', 'config_update', {
385
+ changes: Object.keys(updates),
386
+ oldValues: oldConfig,
387
+ newValues: this.config
388
+ });
389
+ }
390
+ /**
391
+ * Load preset configuration
392
+ */
393
+ async loadPreset(preset) {
394
+ const presetConfig = rulePresets[preset];
395
+ if (!presetConfig) {
396
+ throw new Error(`Unknown preset: ${preset}`);
397
+ }
398
+ // Clear existing and load preset
399
+ this.rulesEngine = new RulesEngine();
400
+ this.rateLimiter.clearBuckets();
401
+ this.rulesEngine.registerRules(presetConfig.rules);
402
+ this.rateLimiter.registerLimits(presetConfig.rateLimits);
403
+ await this.auditLogger.logConfigChanged('load_preset', 'preset_loaded', { preset });
404
+ }
405
+ // ============================================================================
406
+ // APP MONITORING
407
+ // ============================================================================
408
+ /**
409
+ * Add a production app to monitor
410
+ */
411
+ async addMonitoredApp(config) {
412
+ const app = await this.appMonitor.addApp(config);
413
+ await this.auditLogger.log({
414
+ eventType: 'system_event',
415
+ action: 'app_added',
416
+ outcome: 'success',
417
+ details: {
418
+ appId: app.id,
419
+ appName: app.name,
420
+ port: app.port,
421
+ path: app.path
422
+ }
423
+ });
424
+ return app;
425
+ }
426
+ /**
427
+ * Remove a monitored app
428
+ */
429
+ async removeMonitoredApp(appId) {
430
+ const app = this.appMonitor.getApp(appId);
431
+ const result = this.appMonitor.removeApp(appId);
432
+ if (result && app) {
433
+ await this.auditLogger.log({
434
+ eventType: 'system_event',
435
+ action: 'app_removed',
436
+ outcome: 'success',
437
+ details: {
438
+ appId,
439
+ appName: app.name
440
+ }
441
+ });
442
+ }
443
+ return result;
444
+ }
445
+ /**
446
+ * Get a monitored app by ID
447
+ */
448
+ getMonitoredApp(appId) {
449
+ return this.appMonitor.getApp(appId);
450
+ }
451
+ /**
452
+ * Get a monitored app by name
453
+ */
454
+ getMonitoredAppByName(name) {
455
+ return this.appMonitor.getAppByName(name);
456
+ }
457
+ /**
458
+ * Get all monitored apps
459
+ */
460
+ getAllMonitoredApps() {
461
+ return this.appMonitor.getAllApps();
462
+ }
463
+ /**
464
+ * Update a monitored app configuration
465
+ */
466
+ async updateMonitoredApp(appId, updates) {
467
+ const result = this.appMonitor.updateApp(appId, updates);
468
+ if (result) {
469
+ await this.auditLogger.log({
470
+ eventType: 'config_changed',
471
+ action: 'app_updated',
472
+ outcome: 'success',
473
+ details: {
474
+ appId,
475
+ appName: result.name,
476
+ updates: Object.keys(updates)
477
+ }
478
+ });
479
+ }
480
+ return result;
481
+ }
482
+ /**
483
+ * Check health of a specific app
484
+ */
485
+ async checkAppHealth(appId) {
486
+ return this.appMonitor.checkAppHealth(appId);
487
+ }
488
+ /**
489
+ * Check health of all monitored apps
490
+ */
491
+ async checkAllAppsHealth() {
492
+ return this.appMonitor.checkAllApps();
493
+ }
494
+ /**
495
+ * Get last health check result for an app
496
+ */
497
+ getLastAppHealthCheck(appId) {
498
+ return this.appMonitor.getLastCheckResult(appId);
499
+ }
500
+ /**
501
+ * Get status history for an app
502
+ */
503
+ getAppStatusHistory(appId, limit) {
504
+ return this.appMonitor.getStatusHistory(appId, limit);
505
+ }
506
+ /**
507
+ * Enable/disable app monitoring
508
+ */
509
+ setAppMonitoringEnabled(appId, enabled) {
510
+ return this.appMonitor.setAppEnabled(appId, enabled);
511
+ }
512
+ /**
513
+ * Get app monitoring statistics
514
+ */
515
+ getAppMonitorStats() {
516
+ return this.appMonitor.getStats();
517
+ }
518
+ /**
519
+ * Find apps by tag
520
+ */
521
+ findAppsByTag(tag) {
522
+ return this.appMonitor.findAppsByTag(tag);
523
+ }
524
+ /**
525
+ * Get apps that are currently offline
526
+ */
527
+ getOfflineApps() {
528
+ return this.appMonitor.getOfflineApps();
529
+ }
530
+ /**
531
+ * Get apps that are in degraded state
532
+ */
533
+ getDegradedApps() {
534
+ return this.appMonitor.getDegradedApps();
535
+ }
536
+ /**
537
+ * Scan production directory for potential apps
538
+ */
539
+ async scanForApps() {
540
+ return this.appMonitor.scanForApps();
541
+ }
542
+ /**
543
+ * Get logs for a monitored app
544
+ */
545
+ async getAppLogs(appId, lines) {
546
+ return this.appMonitor.getAppLogs(appId, lines);
547
+ }
548
+ // ============================================================================
549
+ // HELPERS
550
+ // ============================================================================
551
+ buildConfig(partial) {
552
+ return {
553
+ version: partial?.version || '1.1.1',
554
+ name: partial?.name || 'Agent Supervisor',
555
+ environment: partial?.environment || 'development',
556
+ strictMode: partial?.strictMode ?? false,
557
+ defaultRiskThreshold: partial?.defaultRiskThreshold ?? 70,
558
+ requireApprovalAboveRisk: partial?.requireApprovalAboveRisk ?? 80,
559
+ features: {
560
+ riskScoring: partial?.features?.riskScoring ?? true,
561
+ rateLimiting: partial?.features?.rateLimiting ?? true,
562
+ auditLogging: partial?.features?.auditLogging ?? true,
563
+ humanApproval: partial?.features?.humanApproval ?? true,
564
+ complianceChecks: partial?.features?.complianceChecks ?? true,
565
+ uxValidation: partial?.features?.uxValidation ?? true,
566
+ architectureValidation: partial?.features?.architectureValidation ?? true
567
+ },
568
+ rateLimits: partial?.rateLimits ?? defaultRateLimits,
569
+ rules: partial?.rules ?? allBuiltInRules,
570
+ complianceFrameworks: partial?.complianceFrameworks ?? [],
571
+ notifications: {
572
+ enabled: partial?.notifications?.enabled ?? false,
573
+ webhookUrl: partial?.notifications?.webhookUrl,
574
+ alertOnRiskLevel: partial?.notifications?.alertOnRiskLevel ?? 'high'
575
+ }
576
+ };
577
+ }
578
+ async ensureInitialized() {
579
+ if (!this.initialized) {
580
+ await this.initialize();
581
+ }
582
+ }
583
+ /**
584
+ * Reload audit log from file (for dashboard refresh)
585
+ */
586
+ async reloadAuditLog() {
587
+ await this.auditLogger.reload();
588
+ }
589
+ }
590
+ // Export singleton for convenience with shared audit database
591
+ export const supervisor = new AgentSupervisor({
592
+ auditOptions: {
593
+ dbPath: process.env.AUDIT_DB_PATH || '/tmp/agent-supervisor/audit.db'
594
+ }
595
+ });
596
+ //# 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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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Managed Server Registry
3
+ *
4
+ * Allows registering servers (ip + sourceDir) and checking online status.
5
+ */
6
+ export interface ManagedServer {
7
+ id: string;
8
+ ip: string;
9
+ sourceDir: string;
10
+ name?: string;
11
+ port?: number;
12
+ createdAt: string;
13
+ }
14
+ export interface ServerStatus {
15
+ id?: string;
16
+ ip: string;
17
+ online: boolean;
18
+ ports: Record<number, boolean>;
19
+ sourceDir: string;
20
+ sourceDirExists: boolean;
21
+ checkedAt: string;
22
+ }
23
+ export declare class ManagedServerRegistry {
24
+ private filePath;
25
+ private servers;
26
+ private loaded;
27
+ constructor(filePath?: string);
28
+ private ensureLoaded;
29
+ private persist;
30
+ addServer(params: {
31
+ ip: string;
32
+ sourceDir: string;
33
+ name?: string;
34
+ port?: number;
35
+ }): Promise<ManagedServer>;
36
+ removeServer(id: string): Promise<boolean>;
37
+ listServers(): Promise<ManagedServer[]>;
38
+ getServer(id: string): Promise<ManagedServer | undefined>;
39
+ checkStatus(input: {
40
+ id?: string;
41
+ ip?: string;
42
+ sourceDir?: string;
43
+ ports?: number[];
44
+ }): Promise<ServerStatus>;
45
+ private tcpCheck;
46
+ }
47
+ export declare const managedServerRegistry: ManagedServerRegistry;
48
+ //# sourceMappingURL=ManagedServerRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ManagedServerRegistry.d.ts","sourceRoot":"","sources":["../../src/supervisor/ManagedServerRegistry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,MAAM,CAAS;gBAEX,QAAQ,CAAC,EAAE,MAAM;YAIf,YAAY;YAiBZ,OAAO;IAKf,SAAS,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAe1G,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAO1C,WAAW,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAKvC,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAKzD,WAAW,CAAC,KAAK,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IAqDnH,OAAO,CAAC,QAAQ;CA0BjB;AAGD,eAAO,MAAM,qBAAqB,uBAA8B,CAAC"}