@trentapps/manager-protocol 1.1.3 → 1.2.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.
- package/README.md +164 -17
- package/dist/analyzers/CSSAnalyzer.d.ts +180 -8
- package/dist/analyzers/CSSAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/CSSAnalyzer.js +561 -105
- package/dist/analyzers/CSSAnalyzer.js.map +1 -1
- package/dist/config/dashboard.d.ts +55 -0
- package/dist/config/dashboard.d.ts.map +1 -0
- package/dist/config/dashboard.js +103 -0
- package/dist/config/dashboard.js.map +1 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +7 -0
- package/dist/config/index.js.map +1 -0
- package/dist/dashboard/httpDashboard.d.ts +100 -0
- package/dist/dashboard/httpDashboard.d.ts.map +1 -0
- package/dist/dashboard/httpDashboard.js +1276 -0
- package/dist/dashboard/httpDashboard.js.map +1 -0
- package/dist/dashboard/index.d.ts +6 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +7 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/engine/AuditLogger.d.ts +370 -2
- package/dist/engine/AuditLogger.d.ts.map +1 -1
- package/dist/engine/AuditLogger.js +1064 -24
- package/dist/engine/AuditLogger.js.map +1 -1
- package/dist/engine/GitHubClient.d.ts +183 -0
- package/dist/engine/GitHubClient.d.ts.map +1 -0
- package/dist/engine/GitHubClient.js +411 -0
- package/dist/engine/GitHubClient.js.map +1 -0
- package/dist/engine/RateLimiter.d.ts +5 -3
- package/dist/engine/RateLimiter.d.ts.map +1 -1
- package/dist/engine/RateLimiter.js +49 -72
- package/dist/engine/RateLimiter.js.map +1 -1
- package/dist/engine/RuleDependencyAnalyzer.d.ts +73 -0
- package/dist/engine/RuleDependencyAnalyzer.d.ts.map +1 -0
- package/dist/engine/RuleDependencyAnalyzer.js +475 -0
- package/dist/engine/RuleDependencyAnalyzer.js.map +1 -0
- package/dist/engine/RulesEngine.d.ts +102 -3
- package/dist/engine/RulesEngine.d.ts.map +1 -1
- package/dist/engine/RulesEngine.js +326 -21
- package/dist/engine/RulesEngine.js.map +1 -1
- package/dist/engine/TaskManager.d.ts +10 -14
- package/dist/engine/TaskManager.d.ts.map +1 -1
- package/dist/engine/TaskManager.js +169 -197
- package/dist/engine/TaskManager.js.map +1 -1
- package/dist/engine/index.d.ts +3 -0
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +5 -0
- package/dist/engine/index.js.map +1 -1
- package/dist/rules/azure.d.ts.map +1 -1
- package/dist/rules/azure.js +12 -14
- package/dist/rules/azure.js.map +1 -1
- package/dist/rules/compliance.d.ts.map +1 -1
- package/dist/rules/compliance.js +23 -41
- package/dist/rules/compliance.js.map +1 -1
- package/dist/rules/condition-optimizer.d.ts +151 -0
- package/dist/rules/condition-optimizer.d.ts.map +1 -0
- package/dist/rules/condition-optimizer.js +479 -0
- package/dist/rules/condition-optimizer.js.map +1 -0
- package/dist/rules/css.d.ts.map +1 -1
- package/dist/rules/css.js +538 -0
- package/dist/rules/css.js.map +1 -1
- package/dist/rules/field-standards.d.ts +1172 -0
- package/dist/rules/field-standards.d.ts.map +1 -0
- package/dist/rules/field-standards.js +908 -0
- package/dist/rules/field-standards.js.map +1 -0
- package/dist/rules/flask.d.ts.map +1 -1
- package/dist/rules/flask.js +18 -31
- package/dist/rules/flask.js.map +1 -1
- package/dist/rules/index.d.ts +220 -0
- package/dist/rules/index.d.ts.map +1 -1
- package/dist/rules/index.js +155 -0
- package/dist/rules/index.js.map +1 -1
- package/dist/rules/ml-ai.d.ts.map +1 -1
- package/dist/rules/ml-ai.js +11 -13
- package/dist/rules/ml-ai.js.map +1 -1
- package/dist/rules/patterns.d.ts +568 -0
- package/dist/rules/patterns.d.ts.map +1 -0
- package/dist/rules/patterns.js +1359 -0
- package/dist/rules/patterns.js.map +1 -0
- package/dist/rules/security.d.ts.map +1 -1
- package/dist/rules/security.js +580 -19
- package/dist/rules/security.js.map +1 -1
- package/dist/rules/shared-patterns.d.ts +268 -0
- package/dist/rules/shared-patterns.d.ts.map +1 -0
- package/dist/rules/shared-patterns.js +556 -0
- package/dist/rules/shared-patterns.js.map +1 -0
- package/dist/rules/storage.d.ts +8 -2
- package/dist/rules/storage.d.ts.map +1 -1
- package/dist/rules/storage.js +541 -3
- package/dist/rules/storage.js.map +1 -1
- package/dist/rules/stripe.d.ts.map +1 -1
- package/dist/rules/stripe.js +19 -26
- package/dist/rules/stripe.js.map +1 -1
- package/dist/rules/websocket.d.ts.map +1 -1
- package/dist/rules/websocket.js +32 -40
- package/dist/rules/websocket.js.map +1 -1
- package/dist/supervisor/AgentSupervisor.d.ts +52 -0
- package/dist/supervisor/AgentSupervisor.d.ts.map +1 -1
- package/dist/supervisor/AgentSupervisor.js +120 -1
- package/dist/supervisor/AgentSupervisor.js.map +1 -1
- package/dist/supervisor/ManagedServerRegistry.d.ts +139 -2
- package/dist/supervisor/ManagedServerRegistry.d.ts.map +1 -1
- package/dist/supervisor/ManagedServerRegistry.js +590 -6
- package/dist/supervisor/ManagedServerRegistry.js.map +1 -1
- package/dist/supervisor/ProjectTracker.d.ts +2 -1
- package/dist/supervisor/ProjectTracker.d.ts.map +1 -1
- package/dist/supervisor/ProjectTracker.js +5 -9
- package/dist/supervisor/ProjectTracker.js.map +1 -1
- package/dist/testing/index.d.ts +11 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +12 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/rule-tester.d.ts +217 -0
- package/dist/testing/rule-tester.d.ts.map +1 -0
- package/dist/testing/rule-tester.examples.d.ts +57 -0
- package/dist/testing/rule-tester.examples.d.ts.map +1 -0
- package/dist/testing/rule-tester.examples.js +375 -0
- package/dist/testing/rule-tester.examples.js.map +1 -0
- package/dist/testing/rule-tester.js +381 -0
- package/dist/testing/rule-tester.js.map +1 -0
- package/dist/testing/rule-validator.d.ts +141 -0
- package/dist/testing/rule-validator.d.ts.map +1 -0
- package/dist/testing/rule-validator.js +640 -0
- package/dist/testing/rule-validator.js.map +1 -0
- package/dist/types/index.d.ts +265 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +57 -2
- package/dist/types/index.js.map +1 -1
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/rate-limiting.d.ts +268 -0
- package/dist/utils/rate-limiting.d.ts.map +1 -0
- package/dist/utils/rate-limiting.js +403 -0
- package/dist/utils/rate-limiting.js.map +1 -0
- package/dist/utils/shared.d.ts +306 -0
- package/dist/utils/shared.d.ts.map +1 -0
- package/dist/utils/shared.js +464 -0
- package/dist/utils/shared.js.map +1 -0
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RateLimiter.js","sourceRoot":"","sources":["../../src/engine/RateLimiter.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"RateLimiter.js","sourceRoot":"","sources":["../../src/engine/RateLimiter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,cAAc,EAAE,aAAa,EAA4C,MAAM,2BAA2B,CAAC;AAUpH,MAAM,OAAO,WAAW;IACd,OAAO,GAAiC,IAAI,GAAG,EAAE,CAAC;IAClD,OAAO,GAAiC,IAAI,GAAG,EAAE,CAAC;IAClD,WAAW,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;IACjC,iBAAiB,GAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,0BAA0B;IAE7E;;OAEG;IACH,aAAa,CAAC,MAAuB;QACnC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,OAA0B;QACvC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,QAAgB;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,MAMV;QACC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,gEAAgE;QAChE,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAEhC,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,SAAS;YAE9B,kDAAkD;YAClD,IAAI,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;gBACrD,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;oBAC7D,SAAS;gBACX,CAAC;YACH,CAAC;YAED,2CAA2C;YAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,KAAoB,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;YACrF,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAEzD,iDAAiD;YACjD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC1C,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,QAAQ;oBACjB,KAAK,EAAE;wBACL,GAAG,EAAE,SAAS;wBACd,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,WAAW,EAAE,KAAK,CAAC,WAAW;wBAC9B,SAAS,EAAE,CAAC;wBACZ,OAAO,EAAE,KAAK,CAAC,UAAU;qBAC1B;iBACF,CAAC;YACJ,CAAC;YAED,kCAAkC;YAClC,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC1C,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,QAAQ;oBACjB,KAAK,EAAE;wBACL,GAAG,EAAE,SAAS;wBACd,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,WAAW,EAAE,KAAK,CAAC,WAAW;wBAC9B,SAAS,EAAE,CAAC;wBACZ,OAAO,EAAE,KAAK,CAAC,UAAU;qBAC1B;iBACF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,MAMb;QACC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,SAAS;YAE9B,IAAI,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;gBACrD,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;oBAC7D,SAAS;gBACX,CAAC;YACH,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,KAAoB,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;YACrF,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAEzD,2CAA2C;YAC3C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,QAAgB,EAAE,MAI1B;QACC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAEzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,KAAoB,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;QACrF,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAE3C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;gBACL,GAAG,EAAE,SAAS;gBACd,KAAK,EAAE,CAAC;gBACR,WAAW,EAAE,GAAG;gBAChB,SAAS,EAAE,MAAM,CAAC,WAAW;gBAC7B,OAAO,EAAE,IAAI,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE;aACvD,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAE1C,OAAO;YACL,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,OAAO,EAAE,KAAK,CAAC,UAAU;SAC1B,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,YAAY;QACV,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,MAKrB;QACC,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,GAAW,EAAE,MAAuB;QAC5D,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEnC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG;gBACP,GAAG;gBACH,MAAM,EAAE,IAAI,aAAa,CAAC;oBACxB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,SAAS,EAAE,OAAO,CAAC,wEAAwE;iBAC5F,CAAC;aACH,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACK,qBAAqB,CAAC,GAAW;QACvC,+DAA+D;QAC/D,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACpD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;QAEvB,sDAAsD;QACtD,IAAI,WAAW,GAAG,KAAK,CAAC,CAAC,mBAAmB;QAC5C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,IAAI,MAAM,CAAC,QAAQ,GAAG,WAAW,EAAE,CAAC;gBAClC,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC;YAChC,CAAC;QACH,CAAC;QAED,wDAAwD;QACxD,6DAA6D;QAC7D,kFAAkF;QAClF,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACnD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACvC,wEAAwE;YACxE,0EAA0E;YAC1E,IAAI,GAAG,GAAG,KAAK,CAAC,WAAW,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;gBAC/C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACzB,YAAY,EAAE,CAAC;YACjB,CAAC;QACH,CAAC;QAED,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,4BAA4B,YAAY,kBAAkB,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;CACF;AAED,4BAA4B;AAC5B,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
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
|
+
import type { BusinessRule, RuleDependencyGraph, DependencyValidationResult } from '../types/index.js';
|
|
8
|
+
export interface DependencyAnalyzerOptions {
|
|
9
|
+
/**
|
|
10
|
+
* Maximum allowed depth for dependency chains before warning
|
|
11
|
+
*/
|
|
12
|
+
maxDepthWarning?: number;
|
|
13
|
+
/**
|
|
14
|
+
* Whether to include disabled rules in analysis
|
|
15
|
+
*/
|
|
16
|
+
includeDisabled?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare class RuleDependencyAnalyzer {
|
|
19
|
+
private options;
|
|
20
|
+
constructor(options?: DependencyAnalyzerOptions);
|
|
21
|
+
/**
|
|
22
|
+
* Build a complete dependency graph from a set of rules
|
|
23
|
+
*/
|
|
24
|
+
analyzeDependencies(rules: BusinessRule[]): RuleDependencyGraph;
|
|
25
|
+
/**
|
|
26
|
+
* Find all circular dependencies in the rule set
|
|
27
|
+
*/
|
|
28
|
+
findCircularDependencies(rules: BusinessRule[]): string[][];
|
|
29
|
+
/**
|
|
30
|
+
* Get topologically sorted execution order for rules
|
|
31
|
+
* Rules with dependencies come after their dependencies
|
|
32
|
+
*/
|
|
33
|
+
getExecutionOrder(rules: BusinessRule[]): string[];
|
|
34
|
+
/**
|
|
35
|
+
* Validate all dependencies in the rule set
|
|
36
|
+
*/
|
|
37
|
+
validateDependencies(rules: BusinessRule[]): DependencyValidationResult;
|
|
38
|
+
/**
|
|
39
|
+
* Get rules that depend on a specific rule (direct dependents)
|
|
40
|
+
*/
|
|
41
|
+
getDependents(ruleId: string, rules: BusinessRule[]): BusinessRule[];
|
|
42
|
+
/**
|
|
43
|
+
* Get all rules that a specific rule depends on (direct dependencies)
|
|
44
|
+
*/
|
|
45
|
+
getDependencies(ruleId: string, rules: BusinessRule[]): BusinessRule[];
|
|
46
|
+
/**
|
|
47
|
+
* Get all transitive dependencies for a rule
|
|
48
|
+
*/
|
|
49
|
+
getTransitiveDependencies(ruleId: string, rules: BusinessRule[]): BusinessRule[];
|
|
50
|
+
/**
|
|
51
|
+
* Get all rules that would be affected if a rule is disabled
|
|
52
|
+
*/
|
|
53
|
+
getAffectedByDisabling(ruleId: string, rules: BusinessRule[]): BusinessRule[];
|
|
54
|
+
/**
|
|
55
|
+
* Get rules sorted by execution order respecting dependencies
|
|
56
|
+
* This integrates with the RulesEngine for proper evaluation order
|
|
57
|
+
*/
|
|
58
|
+
getSortedRulesForExecution(rules: BusinessRule[]): BusinessRule[];
|
|
59
|
+
/**
|
|
60
|
+
* Calculate depth for each node in the dependency graph
|
|
61
|
+
*/
|
|
62
|
+
private calculateDepths;
|
|
63
|
+
/**
|
|
64
|
+
* Detect conflicts between currently active rules
|
|
65
|
+
*/
|
|
66
|
+
private detectActiveConflicts;
|
|
67
|
+
/**
|
|
68
|
+
* Find dependencies that reference non-existent rules
|
|
69
|
+
*/
|
|
70
|
+
private findOrphanedDependencies;
|
|
71
|
+
}
|
|
72
|
+
export declare const ruleDependencyAnalyzer: RuleDependencyAnalyzer;
|
|
73
|
+
//# sourceMappingURL=RuleDependencyAnalyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RuleDependencyAnalyzer.d.ts","sourceRoot":"","sources":["../../src/engine/RuleDependencyAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EAEnB,0BAA0B,EAC3B,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAOD,qBAAa,sBAAsB;IACjC,OAAO,CAAC,OAAO,CAA4B;gBAE/B,OAAO,GAAE,yBAA8B;IAInD;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,mBAAmB;IAyD/D;;OAEG;IACH,wBAAwB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,EAAE;IA+C3D;;;OAGG;IACH,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE;IAkFlD;;OAEG;IACH,oBAAoB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,0BAA0B;IA0GvE;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE;IAMpE;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE;IAgBtE;;OAEG;IACH,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE;IAiChF;;OAEG;IACH,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE;IA+B7E;;;OAGG;IACH,0BAA0B,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE;IA4BjE;;OAEG;IACH,OAAO,CAAC,eAAe;IA2CvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA6B7B;;OAEG;IACH,OAAO,CAAC,wBAAwB;CAqBjC;AAGD,eAAO,MAAM,sBAAsB,wBAA+B,CAAC"}
|
|
@@ -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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"}
|