@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,475 @@
1
+ /**
2
+ * Enterprise Agent Supervisor - Rule Dependency Analyzer (Task #37)
3
+ *
4
+ * Analyzes and validates rule interdependencies, detects circular dependencies,
5
+ * and provides topologically sorted execution order.
6
+ */
7
+ const DEFAULT_OPTIONS = {
8
+ maxDepthWarning: 5,
9
+ includeDisabled: true
10
+ };
11
+ export class RuleDependencyAnalyzer {
12
+ options;
13
+ constructor(options = {}) {
14
+ this.options = { ...DEFAULT_OPTIONS, ...options };
15
+ }
16
+ /**
17
+ * Build a complete dependency graph from a set of rules
18
+ */
19
+ analyzeDependencies(rules) {
20
+ const ruleMap = new Map();
21
+ const nodes = {};
22
+ // First pass: create rule map and initialize nodes
23
+ for (const rule of rules) {
24
+ ruleMap.set(rule.id, rule);
25
+ nodes[rule.id] = {
26
+ ruleId: rule.id,
27
+ ruleName: rule.name,
28
+ dependencies: rule.dependsOn || [],
29
+ dependents: [],
30
+ conflicts: rule.conflictsWith || [],
31
+ related: rule.relatedRules || [],
32
+ depth: 0
33
+ };
34
+ }
35
+ // Second pass: build reverse dependency map (dependents)
36
+ for (const rule of rules) {
37
+ if (rule.dependsOn) {
38
+ for (const depId of rule.dependsOn) {
39
+ if (nodes[depId]) {
40
+ nodes[depId].dependents.push(rule.id);
41
+ }
42
+ }
43
+ }
44
+ }
45
+ // Calculate depths
46
+ this.calculateDepths(nodes, ruleMap);
47
+ // Find circular dependencies
48
+ const circularPaths = this.findCircularDependencies(rules);
49
+ // Detect conflicts between active rules
50
+ const conflicts = this.detectActiveConflicts(rules);
51
+ // Find orphaned dependencies (dependencies that don't exist)
52
+ const orphanedDependencies = this.findOrphanedDependencies(rules, ruleMap);
53
+ // Get execution order via topological sort
54
+ const executionOrder = circularPaths.length === 0
55
+ ? this.getExecutionOrder(rules)
56
+ : []; // Can't provide execution order with circular deps
57
+ return {
58
+ nodes,
59
+ executionOrder,
60
+ hasCircularDependencies: circularPaths.length > 0,
61
+ circularPaths,
62
+ conflicts,
63
+ orphanedDependencies,
64
+ analyzedAt: new Date().toISOString()
65
+ };
66
+ }
67
+ /**
68
+ * Find all circular dependencies in the rule set
69
+ */
70
+ findCircularDependencies(rules) {
71
+ const ruleMap = new Map();
72
+ for (const rule of rules) {
73
+ ruleMap.set(rule.id, rule);
74
+ }
75
+ const visited = new Set();
76
+ const recursionStack = new Set();
77
+ const circularPaths = [];
78
+ const dfs = (ruleId, path) => {
79
+ if (recursionStack.has(ruleId)) {
80
+ // Found a cycle - extract it from the path
81
+ const cycleStart = path.indexOf(ruleId);
82
+ const cycle = path.slice(cycleStart);
83
+ cycle.push(ruleId); // Complete the cycle
84
+ circularPaths.push(cycle);
85
+ return;
86
+ }
87
+ if (visited.has(ruleId)) {
88
+ return;
89
+ }
90
+ visited.add(ruleId);
91
+ recursionStack.add(ruleId);
92
+ path.push(ruleId);
93
+ const rule = ruleMap.get(ruleId);
94
+ if (rule?.dependsOn) {
95
+ for (const depId of rule.dependsOn) {
96
+ dfs(depId, [...path]);
97
+ }
98
+ }
99
+ recursionStack.delete(ruleId);
100
+ };
101
+ for (const rule of rules) {
102
+ if (!visited.has(rule.id)) {
103
+ dfs(rule.id, []);
104
+ }
105
+ }
106
+ return circularPaths;
107
+ }
108
+ /**
109
+ * Get topologically sorted execution order for rules
110
+ * Rules with dependencies come after their dependencies
111
+ */
112
+ getExecutionOrder(rules) {
113
+ const ruleMap = new Map();
114
+ for (const rule of rules) {
115
+ ruleMap.set(rule.id, rule);
116
+ }
117
+ // Filter to enabled rules only (unless includeDisabled is true)
118
+ const activeRules = this.options.includeDisabled
119
+ ? rules
120
+ : rules.filter(r => r.enabled);
121
+ // Kahn's algorithm for topological sort
122
+ const inDegree = new Map();
123
+ const adjacency = new Map();
124
+ // Initialize
125
+ for (const rule of activeRules) {
126
+ inDegree.set(rule.id, 0);
127
+ adjacency.set(rule.id, []);
128
+ }
129
+ // Build adjacency and in-degree
130
+ for (const rule of activeRules) {
131
+ if (rule.dependsOn) {
132
+ for (const depId of rule.dependsOn) {
133
+ // Only count dependencies that exist in the rule set
134
+ if (ruleMap.has(depId)) {
135
+ const adj = adjacency.get(depId) || [];
136
+ adj.push(rule.id);
137
+ adjacency.set(depId, adj);
138
+ inDegree.set(rule.id, (inDegree.get(rule.id) || 0) + 1);
139
+ }
140
+ }
141
+ }
142
+ }
143
+ // Queue rules with no dependencies (in-degree 0)
144
+ const queue = [];
145
+ for (const [ruleId, degree] of inDegree) {
146
+ if (degree === 0) {
147
+ queue.push(ruleId);
148
+ }
149
+ }
150
+ // Sort by priority within the same dependency level
151
+ queue.sort((a, b) => {
152
+ const ruleA = ruleMap.get(a);
153
+ const ruleB = ruleMap.get(b);
154
+ return (ruleB?.priority || 500) - (ruleA?.priority || 500);
155
+ });
156
+ const result = [];
157
+ while (queue.length > 0) {
158
+ const ruleId = queue.shift();
159
+ result.push(ruleId);
160
+ const dependents = adjacency.get(ruleId) || [];
161
+ const nextLevel = [];
162
+ for (const depId of dependents) {
163
+ const newDegree = (inDegree.get(depId) || 0) - 1;
164
+ inDegree.set(depId, newDegree);
165
+ if (newDegree === 0) {
166
+ nextLevel.push(depId);
167
+ }
168
+ }
169
+ // Sort next level by priority
170
+ nextLevel.sort((a, b) => {
171
+ const ruleA = ruleMap.get(a);
172
+ const ruleB = ruleMap.get(b);
173
+ return (ruleB?.priority || 500) - (ruleA?.priority || 500);
174
+ });
175
+ queue.push(...nextLevel);
176
+ }
177
+ return result;
178
+ }
179
+ /**
180
+ * Validate all dependencies in the rule set
181
+ */
182
+ validateDependencies(rules) {
183
+ const ruleMap = new Map();
184
+ for (const rule of rules) {
185
+ ruleMap.set(rule.id, rule);
186
+ }
187
+ const errors = [];
188
+ const warnings = [];
189
+ // Check for missing dependencies
190
+ for (const rule of rules) {
191
+ if (rule.dependsOn) {
192
+ for (const depId of rule.dependsOn) {
193
+ // Self-dependency check
194
+ if (depId === rule.id) {
195
+ errors.push({
196
+ type: 'self_dependency',
197
+ ruleId: rule.id,
198
+ message: `Rule '${rule.name}' depends on itself`,
199
+ details: { dependencyId: depId }
200
+ });
201
+ }
202
+ // Missing dependency check
203
+ else if (!ruleMap.has(depId)) {
204
+ errors.push({
205
+ type: 'missing_dependency',
206
+ ruleId: rule.id,
207
+ message: `Rule '${rule.name}' depends on non-existent rule '${depId}'`,
208
+ details: { missingDependency: depId }
209
+ });
210
+ }
211
+ // Disabled dependency warning
212
+ else {
213
+ const depRule = ruleMap.get(depId);
214
+ if (!depRule.enabled && rule.enabled) {
215
+ warnings.push({
216
+ type: 'disabled_dependency',
217
+ ruleId: rule.id,
218
+ message: `Enabled rule '${rule.name}' depends on disabled rule '${depRule.name}'`,
219
+ details: { disabledDependency: depId }
220
+ });
221
+ }
222
+ }
223
+ }
224
+ }
225
+ // Check for conflicts with active rules
226
+ if (rule.conflictsWith && rule.enabled) {
227
+ for (const conflictId of rule.conflictsWith) {
228
+ const conflictRule = ruleMap.get(conflictId);
229
+ if (conflictRule?.enabled) {
230
+ errors.push({
231
+ type: 'conflict',
232
+ ruleId: rule.id,
233
+ message: `Rule '${rule.name}' conflicts with active rule '${conflictRule.name}'`,
234
+ details: { conflictingRule: conflictId }
235
+ });
236
+ }
237
+ }
238
+ }
239
+ }
240
+ // Check for circular dependencies
241
+ const circularPaths = this.findCircularDependencies(rules);
242
+ for (const path of circularPaths) {
243
+ errors.push({
244
+ type: 'circular_dependency',
245
+ ruleId: path[0],
246
+ message: `Circular dependency detected: ${path.join(' -> ')}`,
247
+ details: { path }
248
+ });
249
+ }
250
+ // Check for deep dependency chains
251
+ const graph = this.analyzeDependencies(rules);
252
+ for (const [ruleId, node] of Object.entries(graph.nodes)) {
253
+ if (node.depth > (this.options.maxDepthWarning || 5)) {
254
+ const rule = ruleMap.get(ruleId);
255
+ warnings.push({
256
+ type: 'deep_dependency_chain',
257
+ ruleId,
258
+ message: `Rule '${rule?.name}' has a deep dependency chain (depth: ${node.depth})`,
259
+ details: { depth: node.depth }
260
+ });
261
+ }
262
+ }
263
+ // Check for unused dependencies (rules that nothing depends on)
264
+ // This is informational, not necessarily a problem
265
+ const dependedOn = new Set();
266
+ for (const rule of rules) {
267
+ if (rule.dependsOn) {
268
+ for (const depId of rule.dependsOn) {
269
+ dependedOn.add(depId);
270
+ }
271
+ }
272
+ }
273
+ return {
274
+ valid: errors.length === 0,
275
+ errors,
276
+ warnings,
277
+ validatedAt: new Date().toISOString()
278
+ };
279
+ }
280
+ /**
281
+ * Get rules that depend on a specific rule (direct dependents)
282
+ */
283
+ getDependents(ruleId, rules) {
284
+ return rules.filter(rule => rule.dependsOn?.includes(ruleId));
285
+ }
286
+ /**
287
+ * Get all rules that a specific rule depends on (direct dependencies)
288
+ */
289
+ getDependencies(ruleId, rules) {
290
+ const rule = rules.find(r => r.id === ruleId);
291
+ if (!rule?.dependsOn) {
292
+ return [];
293
+ }
294
+ const ruleMap = new Map();
295
+ for (const r of rules) {
296
+ ruleMap.set(r.id, r);
297
+ }
298
+ return rule.dependsOn
299
+ .map(depId => ruleMap.get(depId))
300
+ .filter((r) => r !== undefined);
301
+ }
302
+ /**
303
+ * Get all transitive dependencies for a rule
304
+ */
305
+ getTransitiveDependencies(ruleId, rules) {
306
+ const ruleMap = new Map();
307
+ for (const rule of rules) {
308
+ ruleMap.set(rule.id, rule);
309
+ }
310
+ const result = new Set();
311
+ const queue = [ruleId];
312
+ const visited = new Set();
313
+ while (queue.length > 0) {
314
+ const currentId = queue.shift();
315
+ if (visited.has(currentId)) {
316
+ continue;
317
+ }
318
+ visited.add(currentId);
319
+ const currentRule = ruleMap.get(currentId);
320
+ if (currentRule?.dependsOn) {
321
+ for (const depId of currentRule.dependsOn) {
322
+ if (depId !== ruleId) { // Don't include the original rule
323
+ result.add(depId);
324
+ queue.push(depId);
325
+ }
326
+ }
327
+ }
328
+ }
329
+ return Array.from(result)
330
+ .map(id => ruleMap.get(id))
331
+ .filter((r) => r !== undefined);
332
+ }
333
+ /**
334
+ * Get all rules that would be affected if a rule is disabled
335
+ */
336
+ getAffectedByDisabling(ruleId, rules) {
337
+ const ruleMap = new Map();
338
+ for (const rule of rules) {
339
+ ruleMap.set(rule.id, rule);
340
+ }
341
+ const result = new Set();
342
+ const queue = [ruleId];
343
+ const visited = new Set();
344
+ while (queue.length > 0) {
345
+ const currentId = queue.shift();
346
+ if (visited.has(currentId)) {
347
+ continue;
348
+ }
349
+ visited.add(currentId);
350
+ // Find rules that depend on this rule
351
+ for (const rule of rules) {
352
+ if (rule.dependsOn?.includes(currentId) && rule.id !== ruleId) {
353
+ result.add(rule.id);
354
+ queue.push(rule.id);
355
+ }
356
+ }
357
+ }
358
+ return Array.from(result)
359
+ .map(id => ruleMap.get(id))
360
+ .filter((r) => r !== undefined);
361
+ }
362
+ /**
363
+ * Get rules sorted by execution order respecting dependencies
364
+ * This integrates with the RulesEngine for proper evaluation order
365
+ */
366
+ getSortedRulesForExecution(rules) {
367
+ // First validate - if there are circular deps, fall back to priority sort
368
+ const validation = this.validateDependencies(rules);
369
+ const hasCircular = validation.errors.some(e => e.type === 'circular_dependency');
370
+ if (hasCircular) {
371
+ console.warn('Circular dependencies detected, falling back to priority-based ordering');
372
+ return [...rules].sort((a, b) => (b.priority || 500) - (a.priority || 500));
373
+ }
374
+ const executionOrder = this.getExecutionOrder(rules);
375
+ const ruleMap = new Map();
376
+ for (const rule of rules) {
377
+ ruleMap.set(rule.id, rule);
378
+ }
379
+ // Get rules in execution order
380
+ const orderedRules = executionOrder
381
+ .map(id => ruleMap.get(id))
382
+ .filter((r) => r !== undefined);
383
+ // Add any rules not in execution order (shouldn't happen, but safety)
384
+ const orderedIds = new Set(executionOrder);
385
+ const remainingRules = rules.filter(r => !orderedIds.has(r.id));
386
+ return [...orderedRules, ...remainingRules];
387
+ }
388
+ /**
389
+ * Calculate depth for each node in the dependency graph
390
+ */
391
+ calculateDepths(nodes, ruleMap) {
392
+ const visited = new Set();
393
+ const calculated = new Set();
394
+ const calculateDepth = (ruleId) => {
395
+ if (calculated.has(ruleId)) {
396
+ return nodes[ruleId]?.depth || 0;
397
+ }
398
+ if (visited.has(ruleId)) {
399
+ // Circular dependency - return 0 to avoid infinite recursion
400
+ return 0;
401
+ }
402
+ visited.add(ruleId);
403
+ const node = nodes[ruleId];
404
+ if (!node || node.dependencies.length === 0) {
405
+ if (node) {
406
+ node.depth = 0;
407
+ calculated.add(ruleId);
408
+ }
409
+ return 0;
410
+ }
411
+ let maxDepth = 0;
412
+ for (const depId of node.dependencies) {
413
+ if (ruleMap.has(depId)) {
414
+ const depDepth = calculateDepth(depId);
415
+ maxDepth = Math.max(maxDepth, depDepth + 1);
416
+ }
417
+ }
418
+ node.depth = maxDepth;
419
+ calculated.add(ruleId);
420
+ return maxDepth;
421
+ };
422
+ for (const ruleId of Object.keys(nodes)) {
423
+ calculateDepth(ruleId);
424
+ }
425
+ }
426
+ /**
427
+ * Detect conflicts between currently active rules
428
+ */
429
+ detectActiveConflicts(rules) {
430
+ const conflicts = [];
431
+ const activeRules = rules.filter(r => r.enabled);
432
+ for (const rule of activeRules) {
433
+ if (rule.conflictsWith) {
434
+ for (const conflictId of rule.conflictsWith) {
435
+ const conflictRule = activeRules.find(r => r.id === conflictId);
436
+ if (conflictRule) {
437
+ // Avoid duplicate conflict entries (A conflicts B = B conflicts A)
438
+ const exists = conflicts.some(c => (c.ruleA === rule.id && c.ruleB === conflictId) ||
439
+ (c.ruleA === conflictId && c.ruleB === rule.id));
440
+ if (!exists) {
441
+ conflicts.push({
442
+ ruleA: rule.id,
443
+ ruleB: conflictId,
444
+ reason: `Rule '${rule.name}' explicitly conflicts with '${conflictRule.name}'`
445
+ });
446
+ }
447
+ }
448
+ }
449
+ }
450
+ }
451
+ return conflicts;
452
+ }
453
+ /**
454
+ * Find dependencies that reference non-existent rules
455
+ */
456
+ findOrphanedDependencies(rules, ruleMap) {
457
+ const orphaned = [];
458
+ for (const rule of rules) {
459
+ if (rule.dependsOn) {
460
+ for (const depId of rule.dependsOn) {
461
+ if (!ruleMap.has(depId)) {
462
+ orphaned.push({
463
+ ruleId: rule.id,
464
+ missingDependency: depId
465
+ });
466
+ }
467
+ }
468
+ }
469
+ }
470
+ return orphaned;
471
+ }
472
+ }
473
+ // Export singleton instance with default options
474
+ export const ruleDependencyAnalyzer = new RuleDependencyAnalyzer();
475
+ //# sourceMappingURL=RuleDependencyAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuleDependencyAnalyzer.js","sourceRoot":"","sources":["../../src/engine/RuleDependencyAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,176 @@
1
+ /**
2
+ * Enterprise Agent Supervisor - Rules Engine Core
3
+ *
4
+ * The heart of the governance system that evaluates actions against business rules.
5
+ */
6
+ import type { AgentAction, BusinessRule, BusinessContext, RuleCondition, EvaluationResult, BusinessRulesResult, DependencyValidationResult } from '../types/index.js';
7
+ import { RuleDependencyAnalyzer } from './RuleDependencyAnalyzer.js';
8
+ export declare class RulesEngine {
9
+ private rules;
10
+ private customEvaluators;
11
+ private evaluatorCache;
12
+ private regexCache;
13
+ private inOperatorSetCache;
14
+ private dependencyAnalyzer;
15
+ private executionOrderCache;
16
+ private respectDependencies;
17
+ constructor(options?: {
18
+ respectDependencies?: boolean;
19
+ });
20
+ /**
21
+ * Register a business rule
22
+ * Task #53: Clear evaluator cache when rules change to ensure fresh compilation
23
+ */
24
+ registerRule(rule: BusinessRule): void;
25
+ /**
26
+ * Register multiple business rules
27
+ */
28
+ registerRules(rules: BusinessRule[]): void;
29
+ /**
30
+ * Unregister a rule by ID
31
+ * Task #53: Clear evaluator cache when rules change
32
+ */
33
+ unregisterRule(ruleId: string): boolean;
34
+ /**
35
+ * Task #53: Clear the evaluator cache
36
+ * Task #34: Also clear regex and 'in' operator caches
37
+ * Task #37: Also clear execution order cache
38
+ * Called when rules are modified to ensure fresh compilation
39
+ */
40
+ private clearEvaluatorCache;
41
+ /**
42
+ * Get all registered rules
43
+ */
44
+ getRules(): BusinessRule[];
45
+ /**
46
+ * Get enabled rules sorted by priority (higher priority first)
47
+ * Task #39: In strict mode, filters out deprecated rules
48
+ * Task #37: When respectDependencies is true, returns rules in dependency-aware order
49
+ */
50
+ getActiveRules(strictMode?: boolean): BusinessRule[];
51
+ /**
52
+ * Task #37: Get rules sorted by dependency order (dependencies first, then by priority)
53
+ */
54
+ private getDependencySortedRules;
55
+ /**
56
+ * Task #39: Get all deprecated rules
57
+ */
58
+ getDeprecatedRules(): BusinessRule[];
59
+ /**
60
+ * Task #39: Analyze rules and suggest migrations for deprecated rules
61
+ * Returns migration suggestions with replacement rule information
62
+ */
63
+ migrateRules(rules: BusinessRule[]): Array<{
64
+ ruleId: string;
65
+ ruleName: string;
66
+ deprecatedMessage?: string;
67
+ replacedBy?: string;
68
+ replacementRule?: BusinessRule;
69
+ suggestion: string;
70
+ }>;
71
+ /**
72
+ * Task #39: Check if a rule is compatible with the current supervisor version
73
+ */
74
+ isRuleCompatible(rule: BusinessRule, currentVersion: string): boolean;
75
+ /**
76
+ * Task #37: Validate all rule dependencies
77
+ * Returns validation result with errors and warnings
78
+ */
79
+ validateDependencies(): DependencyValidationResult;
80
+ /**
81
+ * Task #37: Get the dependency analyzer for advanced analysis
82
+ */
83
+ getDependencyAnalyzer(): RuleDependencyAnalyzer;
84
+ /**
85
+ * Task #37: Enable or disable dependency-aware rule ordering
86
+ */
87
+ setRespectDependencies(enabled: boolean): void;
88
+ /**
89
+ * Task #37: Check if dependency-aware ordering is enabled
90
+ */
91
+ isRespectingDependencies(): boolean;
92
+ /**
93
+ * Task #37: Get rules that depend on a specific rule
94
+ */
95
+ getRuleDependents(ruleId: string): BusinessRule[];
96
+ /**
97
+ * Task #37: Get rules that a specific rule depends on
98
+ */
99
+ getRuleDependencies(ruleId: string): BusinessRule[];
100
+ /**
101
+ * Task #37: Get all rules that would be affected if a rule is disabled
102
+ */
103
+ getRulesAffectedByDisabling(ruleId: string): BusinessRule[];
104
+ /**
105
+ * Task #39: Compare semantic versions
106
+ * Returns: 1 if a > b, -1 if a < b, 0 if equal
107
+ */
108
+ private compareVersions;
109
+ /**
110
+ * Task #39: Warn about deprecated rule usage
111
+ */
112
+ private warnDeprecatedRule;
113
+ /**
114
+ * Register a custom condition evaluator
115
+ * Task #53: Clear evaluator cache when custom evaluators change
116
+ */
117
+ registerCustomEvaluator(name: string, evaluator: (context: Record<string, unknown>, condition: RuleCondition) => boolean): void;
118
+ /**
119
+ * Evaluate an agent action against all active rules
120
+ */
121
+ evaluateAction(action: AgentAction, context?: BusinessContext): EvaluationResult;
122
+ /**
123
+ * Apply business rules to a context and return recommendations
124
+ */
125
+ applyBusinessRules(context: BusinessContext): BusinessRulesResult;
126
+ /**
127
+ * Build evaluation context from action and business context
128
+ */
129
+ private buildEvaluationContext;
130
+ /**
131
+ * Task #34: Sort conditions by evaluation cost for optimal short-circuit evaluation
132
+ * Cheaper operations (exists, equals) go first, expensive ones (regex, custom) last
133
+ */
134
+ private sortConditionsByEvaluationCost;
135
+ /**
136
+ * Evaluate if all/any conditions of a rule match
137
+ * Task #34: Optimized with condition sorting for short-circuit evaluation
138
+ */
139
+ private evaluateRuleConditions;
140
+ /**
141
+ * Task #34: Get cached RegExp or compile and cache it
142
+ */
143
+ private getCachedRegex;
144
+ /**
145
+ * Task #34: Get cached Set for 'in' operator or create and cache it
146
+ * Using Set provides O(1) lookup instead of O(n) array.includes()
147
+ */
148
+ private getCachedInOperatorSet;
149
+ /**
150
+ * Evaluate a single condition
151
+ * Task #34: Optimized with regex caching and Set-based 'in' operator
152
+ */
153
+ private evaluateCondition;
154
+ /**
155
+ * Get nested value from object using dot notation
156
+ */
157
+ private getNestedValue;
158
+ /**
159
+ * Calculate risk level from score
160
+ */
161
+ private calculateRiskLevel;
162
+ /**
163
+ * Get severity level from a rule
164
+ */
165
+ private getRuleSeverity;
166
+ /**
167
+ * Generate recommendation based on rule and action
168
+ */
169
+ private getRecommendation;
170
+ /**
171
+ * Register default custom evaluators
172
+ */
173
+ private registerDefaultEvaluators;
174
+ }
175
+ export declare const rulesEngine: RulesEngine;
176
+ //# sourceMappingURL=RulesEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RulesEngine.d.ts","sourceRoot":"","sources":["../../src/engine/RulesEngine.ts"],"names":[],"mappings":"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"}