@trentapps/manager-protocol 1.1.3 → 1.2.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 (142) hide show
  1. package/README.md +28 -0
  2. package/dist/analyzers/CSSAnalyzer.d.ts +180 -8
  3. package/dist/analyzers/CSSAnalyzer.d.ts.map +1 -1
  4. package/dist/analyzers/CSSAnalyzer.js +561 -105
  5. package/dist/analyzers/CSSAnalyzer.js.map +1 -1
  6. package/dist/config/dashboard.d.ts +55 -0
  7. package/dist/config/dashboard.d.ts.map +1 -0
  8. package/dist/config/dashboard.js +103 -0
  9. package/dist/config/dashboard.js.map +1 -0
  10. package/dist/config/index.d.ts +7 -0
  11. package/dist/config/index.d.ts.map +1 -0
  12. package/dist/config/index.js +7 -0
  13. package/dist/config/index.js.map +1 -0
  14. package/dist/dashboard/httpDashboard.d.ts +100 -0
  15. package/dist/dashboard/httpDashboard.d.ts.map +1 -0
  16. package/dist/dashboard/httpDashboard.js +1276 -0
  17. package/dist/dashboard/httpDashboard.js.map +1 -0
  18. package/dist/dashboard/index.d.ts +6 -0
  19. package/dist/dashboard/index.d.ts.map +1 -0
  20. package/dist/dashboard/index.js +7 -0
  21. package/dist/dashboard/index.js.map +1 -0
  22. package/dist/engine/AuditLogger.d.ts +370 -2
  23. package/dist/engine/AuditLogger.d.ts.map +1 -1
  24. package/dist/engine/AuditLogger.js +1064 -24
  25. package/dist/engine/AuditLogger.js.map +1 -1
  26. package/dist/engine/GitHubClient.d.ts +183 -0
  27. package/dist/engine/GitHubClient.d.ts.map +1 -0
  28. package/dist/engine/GitHubClient.js +411 -0
  29. package/dist/engine/GitHubClient.js.map +1 -0
  30. package/dist/engine/RateLimiter.d.ts +5 -3
  31. package/dist/engine/RateLimiter.d.ts.map +1 -1
  32. package/dist/engine/RateLimiter.js +49 -72
  33. package/dist/engine/RateLimiter.js.map +1 -1
  34. package/dist/engine/RuleDependencyAnalyzer.d.ts +73 -0
  35. package/dist/engine/RuleDependencyAnalyzer.d.ts.map +1 -0
  36. package/dist/engine/RuleDependencyAnalyzer.js +475 -0
  37. package/dist/engine/RuleDependencyAnalyzer.js.map +1 -0
  38. package/dist/engine/RulesEngine.d.ts +102 -3
  39. package/dist/engine/RulesEngine.d.ts.map +1 -1
  40. package/dist/engine/RulesEngine.js +326 -21
  41. package/dist/engine/RulesEngine.js.map +1 -1
  42. package/dist/engine/TaskManager.d.ts +10 -14
  43. package/dist/engine/TaskManager.d.ts.map +1 -1
  44. package/dist/engine/TaskManager.js +169 -197
  45. package/dist/engine/TaskManager.js.map +1 -1
  46. package/dist/engine/index.d.ts +3 -0
  47. package/dist/engine/index.d.ts.map +1 -1
  48. package/dist/engine/index.js +5 -0
  49. package/dist/engine/index.js.map +1 -1
  50. package/dist/rules/azure.d.ts.map +1 -1
  51. package/dist/rules/azure.js +12 -14
  52. package/dist/rules/azure.js.map +1 -1
  53. package/dist/rules/compliance.d.ts.map +1 -1
  54. package/dist/rules/compliance.js +23 -41
  55. package/dist/rules/compliance.js.map +1 -1
  56. package/dist/rules/condition-optimizer.d.ts +151 -0
  57. package/dist/rules/condition-optimizer.d.ts.map +1 -0
  58. package/dist/rules/condition-optimizer.js +479 -0
  59. package/dist/rules/condition-optimizer.js.map +1 -0
  60. package/dist/rules/css.d.ts.map +1 -1
  61. package/dist/rules/css.js +538 -0
  62. package/dist/rules/css.js.map +1 -1
  63. package/dist/rules/field-standards.d.ts +1172 -0
  64. package/dist/rules/field-standards.d.ts.map +1 -0
  65. package/dist/rules/field-standards.js +908 -0
  66. package/dist/rules/field-standards.js.map +1 -0
  67. package/dist/rules/flask.d.ts.map +1 -1
  68. package/dist/rules/flask.js +18 -31
  69. package/dist/rules/flask.js.map +1 -1
  70. package/dist/rules/index.d.ts +220 -0
  71. package/dist/rules/index.d.ts.map +1 -1
  72. package/dist/rules/index.js +155 -0
  73. package/dist/rules/index.js.map +1 -1
  74. package/dist/rules/ml-ai.d.ts.map +1 -1
  75. package/dist/rules/ml-ai.js +11 -13
  76. package/dist/rules/ml-ai.js.map +1 -1
  77. package/dist/rules/patterns.d.ts +568 -0
  78. package/dist/rules/patterns.d.ts.map +1 -0
  79. package/dist/rules/patterns.js +1359 -0
  80. package/dist/rules/patterns.js.map +1 -0
  81. package/dist/rules/security.d.ts.map +1 -1
  82. package/dist/rules/security.js +580 -19
  83. package/dist/rules/security.js.map +1 -1
  84. package/dist/rules/shared-patterns.d.ts +268 -0
  85. package/dist/rules/shared-patterns.d.ts.map +1 -0
  86. package/dist/rules/shared-patterns.js +556 -0
  87. package/dist/rules/shared-patterns.js.map +1 -0
  88. package/dist/rules/storage.d.ts +8 -2
  89. package/dist/rules/storage.d.ts.map +1 -1
  90. package/dist/rules/storage.js +541 -3
  91. package/dist/rules/storage.js.map +1 -1
  92. package/dist/rules/stripe.d.ts.map +1 -1
  93. package/dist/rules/stripe.js +19 -26
  94. package/dist/rules/stripe.js.map +1 -1
  95. package/dist/rules/websocket.d.ts.map +1 -1
  96. package/dist/rules/websocket.js +32 -40
  97. package/dist/rules/websocket.js.map +1 -1
  98. package/dist/supervisor/AgentSupervisor.d.ts +52 -0
  99. package/dist/supervisor/AgentSupervisor.d.ts.map +1 -1
  100. package/dist/supervisor/AgentSupervisor.js +120 -1
  101. package/dist/supervisor/AgentSupervisor.js.map +1 -1
  102. package/dist/supervisor/ManagedServerRegistry.d.ts +139 -2
  103. package/dist/supervisor/ManagedServerRegistry.d.ts.map +1 -1
  104. package/dist/supervisor/ManagedServerRegistry.js +590 -6
  105. package/dist/supervisor/ManagedServerRegistry.js.map +1 -1
  106. package/dist/supervisor/ProjectTracker.d.ts +2 -1
  107. package/dist/supervisor/ProjectTracker.d.ts.map +1 -1
  108. package/dist/supervisor/ProjectTracker.js +5 -9
  109. package/dist/supervisor/ProjectTracker.js.map +1 -1
  110. package/dist/testing/index.d.ts +11 -0
  111. package/dist/testing/index.d.ts.map +1 -0
  112. package/dist/testing/index.js +12 -0
  113. package/dist/testing/index.js.map +1 -0
  114. package/dist/testing/rule-tester.d.ts +217 -0
  115. package/dist/testing/rule-tester.d.ts.map +1 -0
  116. package/dist/testing/rule-tester.examples.d.ts +57 -0
  117. package/dist/testing/rule-tester.examples.d.ts.map +1 -0
  118. package/dist/testing/rule-tester.examples.js +375 -0
  119. package/dist/testing/rule-tester.examples.js.map +1 -0
  120. package/dist/testing/rule-tester.js +381 -0
  121. package/dist/testing/rule-tester.js.map +1 -0
  122. package/dist/testing/rule-validator.d.ts +141 -0
  123. package/dist/testing/rule-validator.d.ts.map +1 -0
  124. package/dist/testing/rule-validator.js +640 -0
  125. package/dist/testing/rule-validator.js.map +1 -0
  126. package/dist/types/index.d.ts +265 -4
  127. package/dist/types/index.d.ts.map +1 -1
  128. package/dist/types/index.js +57 -2
  129. package/dist/types/index.js.map +1 -1
  130. package/dist/utils/index.d.ts +2 -0
  131. package/dist/utils/index.d.ts.map +1 -1
  132. package/dist/utils/index.js +2 -0
  133. package/dist/utils/index.js.map +1 -1
  134. package/dist/utils/rate-limiting.d.ts +268 -0
  135. package/dist/utils/rate-limiting.d.ts.map +1 -0
  136. package/dist/utils/rate-limiting.js +403 -0
  137. package/dist/utils/rate-limiting.js.map +1 -0
  138. package/dist/utils/shared.d.ts +306 -0
  139. package/dist/utils/shared.d.ts.map +1 -0
  140. package/dist/utils/shared.js +464 -0
  141. package/dist/utils/shared.js.map +1 -0
  142. package/package.json +2 -1
@@ -0,0 +1,381 @@
1
+ /**
2
+ * Enterprise Agent Supervisor - Rule Testing Framework
3
+ *
4
+ * Provides utilities for testing individual business rules and verifying their behavior.
5
+ */
6
+ import { v4 as uuidv4 } from 'uuid';
7
+ import { RulesEngine } from '../engine/RulesEngine.js';
8
+ // ============================================================================
9
+ // RULE TESTER CLASS
10
+ // ============================================================================
11
+ /**
12
+ * RuleTester class for testing individual business rules
13
+ */
14
+ export class RuleTester {
15
+ engine;
16
+ verbose;
17
+ constructor(options = {}) {
18
+ this.engine = new RulesEngine();
19
+ this.verbose = options.verbose ?? false;
20
+ }
21
+ /**
22
+ * Test a single rule against multiple test cases
23
+ */
24
+ testRule(rule, testCases) {
25
+ const startTime = Date.now();
26
+ const testCaseResults = [];
27
+ let passedTests = 0;
28
+ let failedTests = 0;
29
+ let skippedTests = 0;
30
+ // Register only this rule
31
+ this.engine = new RulesEngine();
32
+ this.engine.registerRule(rule);
33
+ // Check if any test has 'only' flag
34
+ const hasOnlyTests = testCases.some(tc => tc.only);
35
+ for (const testCase of testCases) {
36
+ // Skip tests not in the run list (when 'only' is used)
37
+ if (hasOnlyTests && !testCase.only) {
38
+ skippedTests++;
39
+ testCaseResults.push({
40
+ testCaseId: testCase.id || uuidv4(),
41
+ description: testCase.description,
42
+ passed: false,
43
+ skipped: true,
44
+ failures: [],
45
+ durationMs: 0
46
+ });
47
+ continue;
48
+ }
49
+ if (testCase.skip) {
50
+ skippedTests++;
51
+ testCaseResults.push({
52
+ testCaseId: testCase.id || uuidv4(),
53
+ description: testCase.description,
54
+ passed: false,
55
+ skipped: true,
56
+ failures: [],
57
+ durationMs: 0
58
+ });
59
+ continue;
60
+ }
61
+ const result = this.runTestCase(rule, testCase);
62
+ testCaseResults.push(result);
63
+ if (result.passed) {
64
+ passedTests++;
65
+ }
66
+ else {
67
+ failedTests++;
68
+ if (this.verbose) {
69
+ this.logFailure(rule, testCase, result);
70
+ }
71
+ }
72
+ }
73
+ return {
74
+ ruleId: rule.id,
75
+ ruleName: rule.name,
76
+ totalTests: testCases.length,
77
+ passedTests,
78
+ failedTests,
79
+ skippedTests,
80
+ testCaseResults,
81
+ totalDurationMs: Date.now() - startTime
82
+ };
83
+ }
84
+ /**
85
+ * Run a single test case
86
+ */
87
+ runTestCase(rule, testCase) {
88
+ const startTime = Date.now();
89
+ const testCaseId = testCase.id || uuidv4();
90
+ const failures = [];
91
+ // Build full action
92
+ const action = {
93
+ id: uuidv4(),
94
+ ...testCase.input.action
95
+ };
96
+ // Build context
97
+ const context = testCase.input.context
98
+ ? { ...testCase.input.context }
99
+ : undefined;
100
+ // Evaluate
101
+ const result = this.engine.evaluateAction(action, context);
102
+ // Check if rule matched
103
+ const ruleMatched = result.appliedRules.includes(rule.id);
104
+ // Assertion: shouldMatch
105
+ if (testCase.expectedResult.shouldMatch !== ruleMatched) {
106
+ failures.push({
107
+ assertion: 'shouldMatch',
108
+ expected: testCase.expectedResult.shouldMatch,
109
+ actual: ruleMatched,
110
+ message: testCase.expectedResult.shouldMatch
111
+ ? `Expected rule '${rule.name}' to match, but it did not`
112
+ : `Expected rule '${rule.name}' NOT to match, but it did`
113
+ });
114
+ }
115
+ // Only check other assertions if shouldMatch is correct
116
+ if (testCase.expectedResult.shouldMatch && ruleMatched) {
117
+ // Check status
118
+ if (testCase.expectedResult.status !== undefined) {
119
+ if (result.status !== testCase.expectedResult.status) {
120
+ failures.push({
121
+ assertion: 'status',
122
+ expected: testCase.expectedResult.status,
123
+ actual: result.status,
124
+ message: `Expected status '${testCase.expectedResult.status}', got '${result.status}'`
125
+ });
126
+ }
127
+ }
128
+ // Check allowed
129
+ if (testCase.expectedResult.allowed !== undefined) {
130
+ if (result.allowed !== testCase.expectedResult.allowed) {
131
+ failures.push({
132
+ assertion: 'allowed',
133
+ expected: testCase.expectedResult.allowed,
134
+ actual: result.allowed,
135
+ message: `Expected allowed=${testCase.expectedResult.allowed}, got ${result.allowed}`
136
+ });
137
+ }
138
+ }
139
+ // Check risk level
140
+ if (testCase.expectedResult.riskLevel !== undefined) {
141
+ if (result.riskLevel !== testCase.expectedResult.riskLevel) {
142
+ failures.push({
143
+ assertion: 'riskLevel',
144
+ expected: testCase.expectedResult.riskLevel,
145
+ actual: result.riskLevel,
146
+ message: `Expected risk level '${testCase.expectedResult.riskLevel}', got '${result.riskLevel}'`
147
+ });
148
+ }
149
+ }
150
+ // Check risk score range
151
+ if (testCase.expectedResult.minRiskScore !== undefined) {
152
+ if (result.riskScore < testCase.expectedResult.minRiskScore) {
153
+ failures.push({
154
+ assertion: 'minRiskScore',
155
+ expected: `>= ${testCase.expectedResult.minRiskScore}`,
156
+ actual: result.riskScore,
157
+ message: `Expected risk score >= ${testCase.expectedResult.minRiskScore}, got ${result.riskScore}`
158
+ });
159
+ }
160
+ }
161
+ if (testCase.expectedResult.maxRiskScore !== undefined) {
162
+ if (result.riskScore > testCase.expectedResult.maxRiskScore) {
163
+ failures.push({
164
+ assertion: 'maxRiskScore',
165
+ expected: `<= ${testCase.expectedResult.maxRiskScore}`,
166
+ actual: result.riskScore,
167
+ message: `Expected risk score <= ${testCase.expectedResult.maxRiskScore}, got ${result.riskScore}`
168
+ });
169
+ }
170
+ }
171
+ // Check human approval
172
+ if (testCase.expectedResult.requiresHumanApproval !== undefined) {
173
+ if (result.requiresHumanApproval !== testCase.expectedResult.requiresHumanApproval) {
174
+ failures.push({
175
+ assertion: 'requiresHumanApproval',
176
+ expected: testCase.expectedResult.requiresHumanApproval,
177
+ actual: result.requiresHumanApproval,
178
+ message: `Expected requiresHumanApproval=${testCase.expectedResult.requiresHumanApproval}, got ${result.requiresHumanApproval}`
179
+ });
180
+ }
181
+ }
182
+ // Check violation count
183
+ if (testCase.expectedResult.violationCount !== undefined) {
184
+ if (result.violations.length !== testCase.expectedResult.violationCount) {
185
+ failures.push({
186
+ assertion: 'violationCount',
187
+ expected: testCase.expectedResult.violationCount,
188
+ actual: result.violations.length,
189
+ message: `Expected ${testCase.expectedResult.violationCount} violations, got ${result.violations.length}`
190
+ });
191
+ }
192
+ }
193
+ // Check warning count
194
+ if (testCase.expectedResult.warningCount !== undefined) {
195
+ if (result.warnings.length !== testCase.expectedResult.warningCount) {
196
+ failures.push({
197
+ assertion: 'warningCount',
198
+ expected: testCase.expectedResult.warningCount,
199
+ actual: result.warnings.length,
200
+ message: `Expected ${testCase.expectedResult.warningCount} warnings, got ${result.warnings.length}`
201
+ });
202
+ }
203
+ }
204
+ // Check violation messages
205
+ if (testCase.expectedResult.violationMessages) {
206
+ for (const expectedMsg of testCase.expectedResult.violationMessages) {
207
+ const found = result.violations.some(v => v.message.includes(expectedMsg));
208
+ if (!found) {
209
+ failures.push({
210
+ assertion: 'violationMessage',
211
+ expected: expectedMsg,
212
+ actual: result.violations.map(v => v.message),
213
+ message: `Expected violation message containing '${expectedMsg}' not found`
214
+ });
215
+ }
216
+ }
217
+ }
218
+ // Check warning messages
219
+ if (testCase.expectedResult.warningMessages) {
220
+ for (const expectedMsg of testCase.expectedResult.warningMessages) {
221
+ const found = result.warnings.some(w => w.includes(expectedMsg));
222
+ if (!found) {
223
+ failures.push({
224
+ assertion: 'warningMessage',
225
+ expected: expectedMsg,
226
+ actual: result.warnings,
227
+ message: `Expected warning message containing '${expectedMsg}' not found`
228
+ });
229
+ }
230
+ }
231
+ }
232
+ }
233
+ return {
234
+ testCaseId,
235
+ description: testCase.description,
236
+ passed: failures.length === 0,
237
+ skipped: false,
238
+ actualResult: result,
239
+ failures,
240
+ durationMs: Date.now() - startTime
241
+ };
242
+ }
243
+ /**
244
+ * Log a test failure in verbose mode
245
+ */
246
+ logFailure(rule, testCase, result) {
247
+ console.log(`\n[FAIL] Rule: ${rule.name}`);
248
+ console.log(` Test: ${testCase.description}`);
249
+ for (const failure of result.failures) {
250
+ console.log(` - ${failure.message}`);
251
+ console.log(` Expected: ${JSON.stringify(failure.expected)}`);
252
+ console.log(` Actual: ${JSON.stringify(failure.actual)}`);
253
+ }
254
+ }
255
+ }
256
+ // ============================================================================
257
+ // HELPER FUNCTIONS
258
+ // ============================================================================
259
+ /**
260
+ * Test a single rule against multiple test cases (convenience function)
261
+ */
262
+ export function testRule(rule, testCases) {
263
+ const tester = new RuleTester();
264
+ return tester.testRule(rule, testCases);
265
+ }
266
+ /**
267
+ * Create a test case with defaults
268
+ */
269
+ export function createTestCase(description, action, expectedResult, context) {
270
+ return {
271
+ description,
272
+ input: { action, context },
273
+ expectedResult
274
+ };
275
+ }
276
+ /**
277
+ * Create a test case that expects the rule to match and deny
278
+ */
279
+ export function expectDeny(description, action, options) {
280
+ return createTestCase(description, action, {
281
+ shouldMatch: true,
282
+ status: 'denied',
283
+ allowed: false,
284
+ violationCount: 1,
285
+ ...options
286
+ }, options?.context);
287
+ }
288
+ /**
289
+ * Create a test case that expects the rule to match and require approval
290
+ */
291
+ export function expectApproval(description, action, options) {
292
+ return createTestCase(description, action, {
293
+ shouldMatch: true,
294
+ status: 'pending_approval',
295
+ allowed: true,
296
+ requiresHumanApproval: true,
297
+ ...options
298
+ }, options?.context);
299
+ }
300
+ /**
301
+ * Create a test case that expects the rule to match and warn
302
+ */
303
+ export function expectWarn(description, action, options) {
304
+ return createTestCase(description, action, {
305
+ shouldMatch: true,
306
+ status: 'requires_review',
307
+ allowed: true,
308
+ warningCount: 1,
309
+ ...options
310
+ }, options?.context);
311
+ }
312
+ /**
313
+ * Create a test case that expects the rule NOT to match
314
+ */
315
+ export function expectNoMatch(description, action, context) {
316
+ return createTestCase(description, action, { shouldMatch: false }, context);
317
+ }
318
+ /**
319
+ * Create a test case that expects the rule to match and allow
320
+ */
321
+ export function expectAllow(description, action, context) {
322
+ return createTestCase(description, action, {
323
+ shouldMatch: true,
324
+ status: 'approved',
325
+ allowed: true
326
+ }, context);
327
+ }
328
+ // ============================================================================
329
+ // ASSERTION HELPERS
330
+ // ============================================================================
331
+ /**
332
+ * Assertion helpers for use with testing frameworks like vitest
333
+ */
334
+ export const assertions = {
335
+ /**
336
+ * Assert that a rule matches the given action
337
+ */
338
+ ruleMatches(rule, action, context) {
339
+ const engine = new RulesEngine();
340
+ engine.registerRule(rule);
341
+ const result = engine.evaluateAction(action, context);
342
+ return result.appliedRules.includes(rule.id);
343
+ },
344
+ /**
345
+ * Assert that a rule denies the given action
346
+ */
347
+ ruleDenies(rule, action, context) {
348
+ const engine = new RulesEngine();
349
+ engine.registerRule(rule);
350
+ const result = engine.evaluateAction(action, context);
351
+ return result.appliedRules.includes(rule.id) && result.status === 'denied';
352
+ },
353
+ /**
354
+ * Assert that a rule requires approval for the given action
355
+ */
356
+ ruleRequiresApproval(rule, action, context) {
357
+ const engine = new RulesEngine();
358
+ engine.registerRule(rule);
359
+ const result = engine.evaluateAction(action, context);
360
+ return result.appliedRules.includes(rule.id) && result.requiresHumanApproval;
361
+ },
362
+ /**
363
+ * Assert that a rule produces a warning for the given action
364
+ */
365
+ ruleWarns(rule, action, context) {
366
+ const engine = new RulesEngine();
367
+ engine.registerRule(rule);
368
+ const result = engine.evaluateAction(action, context);
369
+ return result.appliedRules.includes(rule.id) && result.warnings.length > 0;
370
+ },
371
+ /**
372
+ * Assert that a rule allows the given action
373
+ */
374
+ ruleAllows(rule, action, context) {
375
+ const engine = new RulesEngine();
376
+ engine.registerRule(rule);
377
+ const result = engine.evaluateAction(action, context);
378
+ return result.appliedRules.includes(rule.id) && result.allowed;
379
+ }
380
+ };
381
+ //# sourceMappingURL=rule-tester.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-tester.js","sourceRoot":"","sources":["../../src/testing/rule-tester.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Enterprise Agent Supervisor - Rule Validation Framework
3
+ *
4
+ * Provides utilities for validating rule structure, syntax, and detecting conflicts.
5
+ */
6
+ import type { BusinessRule } from '../types/index.js';
7
+ /**
8
+ * Result of validating a single rule
9
+ */
10
+ export interface RuleValidationResult {
11
+ /** Rule being validated */
12
+ ruleId: string;
13
+ /** Whether the rule is valid */
14
+ isValid: boolean;
15
+ /** List of validation errors */
16
+ errors: ValidationError[];
17
+ /** List of validation warnings */
18
+ warnings: ValidationWarning[];
19
+ }
20
+ /**
21
+ * Validation error
22
+ */
23
+ export interface ValidationError {
24
+ /** Error code */
25
+ code: string;
26
+ /** Error message */
27
+ message: string;
28
+ /** Path to the problematic field */
29
+ path?: string;
30
+ /** Severity */
31
+ severity: 'error';
32
+ }
33
+ /**
34
+ * Validation warning
35
+ */
36
+ export interface ValidationWarning {
37
+ /** Warning code */
38
+ code: string;
39
+ /** Warning message */
40
+ message: string;
41
+ /** Path to the problematic field */
42
+ path?: string;
43
+ /** Severity */
44
+ severity: 'warning';
45
+ }
46
+ /**
47
+ * Result of checking for rule conflicts
48
+ */
49
+ export interface ConflictCheckResult {
50
+ /** Whether conflicts were found */
51
+ hasConflicts: boolean;
52
+ /** List of detected conflicts */
53
+ conflicts: RuleConflict[];
54
+ }
55
+ /**
56
+ * A conflict between two rules
57
+ */
58
+ export interface RuleConflict {
59
+ /** First rule in the conflict */
60
+ rule1: {
61
+ id: string;
62
+ name: string;
63
+ };
64
+ /** Second rule in the conflict */
65
+ rule2: {
66
+ id: string;
67
+ name: string;
68
+ };
69
+ /** Type of conflict */
70
+ conflictType: ConflictType;
71
+ /** Description of the conflict */
72
+ description: string;
73
+ /** Suggested resolution */
74
+ suggestion?: string;
75
+ }
76
+ /**
77
+ * Types of rule conflicts
78
+ */
79
+ export type ConflictType = 'contradicting_actions' | 'duplicate_conditions' | 'shadowed_rule' | 'redundant_rule' | 'circular_dependency';
80
+ /**
81
+ * Result of linting rules
82
+ */
83
+ export interface LintResult {
84
+ /** Total issues found */
85
+ totalIssues: number;
86
+ /** Critical issues that should be fixed */
87
+ errors: LintIssue[];
88
+ /** Non-critical issues that should be reviewed */
89
+ warnings: LintIssue[];
90
+ /** Suggestions for improvement */
91
+ suggestions: LintIssue[];
92
+ }
93
+ /**
94
+ * A lint issue
95
+ */
96
+ export interface LintIssue {
97
+ /** Issue code */
98
+ code: string;
99
+ /** Rule ID with the issue */
100
+ ruleId: string;
101
+ /** Issue message */
102
+ message: string;
103
+ /** Severity */
104
+ severity: 'error' | 'warning' | 'suggestion';
105
+ /** How to fix the issue */
106
+ fix?: string;
107
+ }
108
+ /**
109
+ * Validate a single business rule
110
+ */
111
+ export declare function validateRule(rule: unknown): RuleValidationResult;
112
+ /**
113
+ * Validate an array of conditions
114
+ */
115
+ export declare function validateConditions(conditions: unknown[]): {
116
+ errors: ValidationError[];
117
+ warnings: ValidationWarning[];
118
+ };
119
+ /**
120
+ * Check for conflicts between rules
121
+ */
122
+ export declare function checkForConflicts(rules: BusinessRule[]): ConflictCheckResult;
123
+ /**
124
+ * Lint rules for potential issues and best practices
125
+ */
126
+ export declare function lintRules(rules: BusinessRule[]): LintResult;
127
+ /**
128
+ * Validate multiple rules at once
129
+ */
130
+ export declare function validateRules(rules: unknown[]): {
131
+ valid: RuleValidationResult[];
132
+ invalid: RuleValidationResult[];
133
+ summary: {
134
+ total: number;
135
+ valid: number;
136
+ invalid: number;
137
+ errorCount: number;
138
+ warningCount: number;
139
+ };
140
+ };
141
+ //# sourceMappingURL=rule-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-validator.d.ts","sourceRoot":"","sources":["../../src/testing/rule-validator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,YAAY,EAMb,MAAM,mBAAmB,CAAC;AAM3B;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,gCAAgC;IAChC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,kCAAkC;IAClC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe;IACf,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe;IACf,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,mCAAmC;IACnC,YAAY,EAAE,OAAO,CAAC;IACtB,iCAAiC;IACjC,SAAS,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,kCAAkC;IAClC,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,uBAAuB;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,uBAAuB,GACvB,sBAAsB,GACtB,eAAe,GACf,gBAAgB,GAChB,qBAAqB,CAAC;AAE1B;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,yBAAyB;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,kDAAkD;IAClD,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,kCAAkC;IAClC,WAAW,EAAE,SAAS,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe;IACf,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,YAAY,CAAC;IAC7C,2BAA2B;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAiDD;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,oBAAoB,CA+KhE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG;IAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IAAC,QAAQ,EAAE,iBAAiB,EAAE,CAAA;CAAE,CAgGtH;AAwDD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,mBAAmB,CAgE5E;AAwDD;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,UAAU,CAwJ3D;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG;IAC/C,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAC9B,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH,CAgBA"}