@evolith/smart-cli 0.0.3-beta → 1.1.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 (156) hide show
  1. package/README.es.md +51 -15
  2. package/README.md +51 -15
  3. package/dist/app.module.js +2 -0
  4. package/dist/app.module.js.map +1 -1
  5. package/dist/application/ports/webhook-notifier.port.d.ts +4 -0
  6. package/dist/application/ports/webhook-notifier.port.js +3 -0
  7. package/dist/application/ports/webhook-notifier.port.js.map +1 -0
  8. package/dist/application/services/index.d.ts +1 -0
  9. package/dist/application/services/index.js +28 -2
  10. package/dist/application/services/index.js.map +1 -1
  11. package/dist/application/services/initialize-project.spec.d.ts +1 -0
  12. package/dist/application/services/initialize-project.spec.js +211 -0
  13. package/dist/application/services/initialize-project.spec.js.map +1 -0
  14. package/dist/application/use-cases/evaluate-gate.use-case.d.ts +20 -0
  15. package/dist/application/use-cases/evaluate-gate.use-case.js +72 -0
  16. package/dist/application/use-cases/evaluate-gate.use-case.js.map +1 -0
  17. package/dist/application/use-cases/validate-satellite.use-case.d.ts +1 -0
  18. package/dist/application/use-cases/validate-satellite.use-case.js +7 -3
  19. package/dist/application/use-cases/validate-satellite.use-case.js.map +1 -1
  20. package/dist/commands/adr/adr.command.d.ts +2 -0
  21. package/dist/commands/adr/adr.command.js +36 -14
  22. package/dist/commands/adr/adr.command.js.map +1 -1
  23. package/dist/commands/architecture/scaffold.command.d.ts +1 -0
  24. package/dist/commands/architecture/scaffold.command.js +23 -1
  25. package/dist/commands/architecture/scaffold.command.js.map +1 -1
  26. package/dist/commands/gate/gate.command.d.ts +23 -0
  27. package/dist/commands/gate/gate.command.js +210 -0
  28. package/dist/commands/gate/gate.command.js.map +1 -0
  29. package/dist/commands/sdlc/gate-status.command.d.ts +3 -1
  30. package/dist/commands/sdlc/gate-status.command.js +78 -3
  31. package/dist/commands/sdlc/gate-status.command.js.map +1 -1
  32. package/dist/commands/sdlc/gate-status.command.spec.d.ts +1 -0
  33. package/dist/commands/sdlc/gate-status.command.spec.js +302 -0
  34. package/dist/commands/sdlc/gate-status.command.spec.js.map +1 -0
  35. package/dist/commands/sdlc/generate-domain.command.d.ts +2 -0
  36. package/dist/commands/sdlc/generate-domain.command.js +123 -12
  37. package/dist/commands/sdlc/generate-domain.command.js.map +1 -1
  38. package/dist/commands/sdlc/generate-domain.command.spec.js +103 -29
  39. package/dist/commands/sdlc/generate-domain.command.spec.js.map +1 -1
  40. package/dist/commands/sdlc/handoff.command.js +2 -2
  41. package/dist/commands/sdlc/handoff.command.js.map +1 -1
  42. package/dist/commands/sdlc/sdlc.command.js +40 -6
  43. package/dist/commands/sdlc/sdlc.command.js.map +1 -1
  44. package/dist/commands/sdlc/sdlc.command.spec.js +48 -14
  45. package/dist/commands/sdlc/sdlc.command.spec.js.map +1 -1
  46. package/dist/commands/validate/validate.command.d.ts +2 -0
  47. package/dist/commands/validate/validate.command.js +16 -2
  48. package/dist/commands/validate/validate.command.js.map +1 -1
  49. package/dist/core/abstractions/interfaces.d.ts +1 -0
  50. package/dist/core/abstractions/interfaces.js.map +1 -1
  51. package/dist/core/abstractions/providers/config-parser.provider.spec.d.ts +1 -0
  52. package/dist/core/abstractions/providers/config-parser.provider.spec.js +18 -0
  53. package/dist/core/abstractions/providers/config-parser.provider.spec.js.map +1 -0
  54. package/dist/core/abstractions/providers/mock-filesystem.provider.d.ts +1 -0
  55. package/dist/core/abstractions/providers/mock-filesystem.provider.js +4 -0
  56. package/dist/core/abstractions/providers/mock-filesystem.provider.js.map +1 -1
  57. package/dist/core/abstractions/providers/mock-filesystem.provider.spec.d.ts +1 -0
  58. package/dist/core/abstractions/providers/mock-filesystem.provider.spec.js +56 -0
  59. package/dist/core/abstractions/providers/mock-filesystem.provider.spec.js.map +1 -0
  60. package/dist/core/abstractions/providers/node-filesystem.provider.d.ts +1 -0
  61. package/dist/core/abstractions/providers/node-filesystem.provider.js +4 -0
  62. package/dist/core/abstractions/providers/node-filesystem.provider.js.map +1 -1
  63. package/dist/core/architecture/nx-workspace.strategy.d.ts +3 -0
  64. package/dist/core/architecture/nx-workspace.strategy.js +35 -6
  65. package/dist/core/architecture/nx-workspace.strategy.js.map +1 -1
  66. package/dist/core/architecture/nx-workspace.strategy.spec.d.ts +1 -0
  67. package/dist/core/architecture/nx-workspace.strategy.spec.js +187 -0
  68. package/dist/core/architecture/nx-workspace.strategy.spec.js.map +1 -0
  69. package/dist/core/architecture/workspace-manager.strategy.d.ts +1 -0
  70. package/dist/core/generators/hexagonal-scaffolder.d.ts +6 -0
  71. package/dist/core/generators/hexagonal-scaffolder.js +260 -0
  72. package/dist/core/generators/hexagonal-scaffolder.js.map +1 -0
  73. package/dist/core/generators/hexagonal-scaffolder.spec.d.ts +1 -0
  74. package/dist/core/generators/hexagonal-scaffolder.spec.js +164 -0
  75. package/dist/core/generators/hexagonal-scaffolder.spec.js.map +1 -0
  76. package/dist/core/generators/mermaid-class-parser.d.ts +38 -0
  77. package/dist/core/generators/mermaid-class-parser.js +183 -0
  78. package/dist/core/generators/mermaid-class-parser.js.map +1 -0
  79. package/dist/core/generators/mermaid-class-parser.spec.d.ts +1 -0
  80. package/dist/core/generators/mermaid-class-parser.spec.js +148 -0
  81. package/dist/core/generators/mermaid-class-parser.spec.js.map +1 -0
  82. package/dist/core/mcp/server.d.ts +3 -1
  83. package/dist/core/mcp/server.js +82 -108
  84. package/dist/core/mcp/server.js.map +1 -1
  85. package/dist/core/mcp/server.spec.js +20 -4
  86. package/dist/core/mcp/server.spec.js.map +1 -1
  87. package/dist/core/mcp/tools/gate.d.ts +1 -0
  88. package/dist/core/mcp/tools/gate.js +68 -0
  89. package/dist/core/mcp/tools/gate.js.map +1 -0
  90. package/dist/core/metrics/dora-calculator.d.ts +18 -0
  91. package/dist/core/metrics/dora-calculator.js +146 -0
  92. package/dist/core/metrics/dora-calculator.js.map +1 -0
  93. package/dist/core/metrics/dora-calculator.spec.d.ts +1 -0
  94. package/dist/core/metrics/dora-calculator.spec.js +164 -0
  95. package/dist/core/metrics/dora-calculator.spec.js.map +1 -0
  96. package/dist/core/metrics/git-log-reader.d.ts +14 -0
  97. package/dist/core/metrics/git-log-reader.js +39 -0
  98. package/dist/core/metrics/git-log-reader.js.map +1 -0
  99. package/dist/core/metrics/git-log-reader.spec.d.ts +1 -0
  100. package/dist/core/metrics/git-log-reader.spec.js +108 -0
  101. package/dist/core/metrics/git-log-reader.spec.js.map +1 -0
  102. package/dist/core/observability/command-watcher.spec.d.ts +1 -0
  103. package/dist/core/observability/command-watcher.spec.js +123 -0
  104. package/dist/core/observability/command-watcher.spec.js.map +1 -0
  105. package/dist/core/observability/index.d.ts +1 -0
  106. package/dist/core/observability/index.js +3 -1
  107. package/dist/core/observability/index.js.map +1 -1
  108. package/dist/core/observability/tool-usage-telemetry.service.d.ts +46 -0
  109. package/dist/core/observability/tool-usage-telemetry.service.js +181 -0
  110. package/dist/core/observability/tool-usage-telemetry.service.js.map +1 -0
  111. package/dist/core/services/command-history.service.d.ts +1 -0
  112. package/dist/core/services/command-history.service.js +4 -0
  113. package/dist/core/services/command-history.service.js.map +1 -1
  114. package/dist/core/services/command-history.service.spec.js +217 -126
  115. package/dist/core/services/command-history.service.spec.js.map +1 -1
  116. package/dist/core/upgrade/satellite-upgrade.service.spec.js +204 -144
  117. package/dist/core/upgrade/satellite-upgrade.service.spec.js.map +1 -1
  118. package/dist/core/validators/deep-architecture-analyzer.spec.js +27 -57
  119. package/dist/core/validators/deep-architecture-analyzer.spec.js.map +1 -1
  120. package/dist/core/validators/evaluators/evaluator.interface.d.ts +14 -0
  121. package/dist/core/validators/evaluators/evaluator.interface.js +3 -0
  122. package/dist/core/validators/evaluators/evaluator.interface.js.map +1 -0
  123. package/dist/core/validators/evaluators/native-evaluator.d.ts +31 -0
  124. package/dist/core/validators/evaluators/native-evaluator.js +461 -0
  125. package/dist/core/validators/evaluators/native-evaluator.js.map +1 -0
  126. package/dist/core/validators/evaluators/opa-evaluator.d.ts +20 -0
  127. package/dist/core/validators/evaluators/opa-evaluator.js +249 -0
  128. package/dist/core/validators/evaluators/opa-evaluator.js.map +1 -0
  129. package/dist/core/validators/phase-gate-validator.service.d.ts +4 -0
  130. package/dist/core/validators/phase-gate-validator.service.js +74 -9
  131. package/dist/core/validators/phase-gate-validator.service.js.map +1 -1
  132. package/dist/core/validators/rule-evaluation-engine.d.ts +34 -0
  133. package/dist/core/validators/rule-evaluation-engine.js +187 -0
  134. package/dist/core/validators/rule-evaluation-engine.js.map +1 -0
  135. package/dist/core/validators/rule-evaluation-engine.spec.d.ts +1 -0
  136. package/dist/core/validators/rule-evaluation-engine.spec.js +243 -0
  137. package/dist/core/validators/rule-evaluation-engine.spec.js.map +1 -0
  138. package/dist/core/validators/ruleset-validator.service.d.ts +2 -0
  139. package/dist/core/validators/ruleset-validator.service.js +29 -4
  140. package/dist/core/validators/ruleset-validator.service.js.map +1 -1
  141. package/dist/domain/gate-evidence.d.ts +59 -0
  142. package/dist/domain/gate-evidence.js +38 -0
  143. package/dist/domain/gate-evidence.js.map +1 -0
  144. package/dist/domain/services/adr.service.d.ts +2 -2
  145. package/dist/domain/services/adr.service.js +12 -8
  146. package/dist/domain/services/adr.service.js.map +1 -1
  147. package/dist/infrastructure/adapters/webhook.adapter.d.ts +5 -0
  148. package/dist/infrastructure/adapters/webhook.adapter.js +19 -0
  149. package/dist/infrastructure/adapters/webhook.adapter.js.map +1 -0
  150. package/dist/infrastructure/cli/command-executor.spec.d.ts +1 -0
  151. package/dist/infrastructure/cli/command-executor.spec.js +149 -0
  152. package/dist/infrastructure/cli/command-executor.spec.js.map +1 -0
  153. package/dist/infrastructure/cli/providers/providers.spec.d.ts +1 -0
  154. package/dist/infrastructure/cli/providers/providers.spec.js +251 -0
  155. package/dist/infrastructure/cli/providers/providers.spec.js.map +1 -0
  156. package/package.json +23 -5
@@ -0,0 +1,14 @@
1
+ import { NormalizedRule } from '../rule-evaluation-engine';
2
+ export interface EvaluationContext {
3
+ satellitePath: string;
4
+ corePath: string;
5
+ }
6
+ export interface RuleEvaluationResult {
7
+ rule: NormalizedRule;
8
+ result: 'passed' | 'failed' | 'skipped';
9
+ message?: string;
10
+ evidencePath?: string;
11
+ }
12
+ export interface IRuleEvaluatorStrategy {
13
+ evaluateAll(rules: NormalizedRule[], context: EvaluationContext): Promise<RuleEvaluationResult[]>;
14
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=evaluator.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator.interface.js","sourceRoot":"","sources":["../../../../src/core/validators/evaluators/evaluator.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,31 @@
1
+ import { IFileSystem, ILogger } from '../../abstractions';
2
+ import { NormalizedRule } from '../rule-evaluation-engine';
3
+ import { IRuleEvaluatorStrategy, EvaluationContext, RuleEvaluationResult } from './evaluator.interface';
4
+ export declare class NativeEvaluator implements IRuleEvaluatorStrategy {
5
+ private readonly fs;
6
+ private readonly logger;
7
+ constructor(fs: IFileSystem, logger: ILogger);
8
+ evaluateAll(rules: NormalizedRule[], ctx: EvaluationContext): Promise<RuleEvaluationResult[]>;
9
+ private evaluateRule;
10
+ private resolveEvaluator;
11
+ private evalVersionPinning;
12
+ private evalLockFile;
13
+ private evalCiInstall;
14
+ private evalCiAudit;
15
+ private evalDependabot;
16
+ private evalCiWorkflowContains;
17
+ private evalDirectoryStructure;
18
+ private evalAdrNaming;
19
+ private evalEvidence;
20
+ private evalBuild;
21
+ private evalTestArtifacts;
22
+ private evalDependencyLock;
23
+ private evalMcpSmoke;
24
+ private evalMcpEvidence;
25
+ private evalMcpSecurity;
26
+ private evalCliDocs;
27
+ private evalInheritance;
28
+ private listFilesRecursive;
29
+ private findSpecFiles;
30
+ private findWorkspacePackageJsons;
31
+ }
@@ -0,0 +1,461 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.NativeEvaluator = void 0;
37
+ const path = __importStar(require("path"));
38
+ class NativeEvaluator {
39
+ constructor(fs, logger) {
40
+ this.fs = fs;
41
+ this.logger = logger;
42
+ }
43
+ async evaluateAll(rules, ctx) {
44
+ const results = [];
45
+ for (const rule of rules) {
46
+ results.push(await this.evaluateRule(rule, ctx));
47
+ }
48
+ return results;
49
+ }
50
+ async evaluateRule(rule, ctx) {
51
+ const evaluator = this.resolveEvaluator(rule);
52
+ if (!evaluator) {
53
+ return {
54
+ rule,
55
+ result: 'skipped',
56
+ message: 'Requires external system or runtime verification',
57
+ };
58
+ }
59
+ try {
60
+ return await evaluator(rule, ctx);
61
+ }
62
+ catch (err) {
63
+ const msg = err instanceof Error ? err.message : String(err);
64
+ this.logger.warn(`Evaluator error for ${rule.id}: ${msg}`);
65
+ return { rule, result: 'skipped', message: `Evaluator error: ${msg}` };
66
+ }
67
+ }
68
+ resolveEvaluator(rule) {
69
+ const cat = rule.category;
70
+ const id = rule.id;
71
+ if (id.startsWith('EVD-'))
72
+ return this.evalEvidence.bind(this);
73
+ if (id === 'CLI-RR-01')
74
+ return this.evalBuild.bind(this);
75
+ if (id === 'CLI-RR-02')
76
+ return this.evalTestArtifacts.bind(this);
77
+ if (id === 'CLI-RR-03')
78
+ return this.evalDependencyLock.bind(this);
79
+ if (id === 'CLI-RR-04')
80
+ return this.evalMcpSmoke.bind(this);
81
+ if (id === 'CLI-RR-05')
82
+ return this.evalCliDocs.bind(this);
83
+ if (id === 'MCP-01' || id === 'MCP-02' || id === 'MCP-03')
84
+ return this.evalMcpEvidence.bind(this);
85
+ if (id === 'MCP-04')
86
+ return this.evalMcpSecurity.bind(this);
87
+ if (cat === 'version-pinning' || id.startsWith('DEP-0') || id.startsWith('DEP-1')) {
88
+ if (id === 'DEP-04')
89
+ return this.evalLockFile.bind(this);
90
+ if (id === 'DEP-05')
91
+ return this.evalCiInstall.bind(this);
92
+ if (id === 'DEP-06' || id === 'DEP-07')
93
+ return this.evalCiAudit.bind(this);
94
+ if (id === 'DEP-09')
95
+ return this.evalDependabot.bind(this);
96
+ if (cat === 'version-pinning')
97
+ return this.evalVersionPinning.bind(this);
98
+ }
99
+ if (id === 'TAX-05' || id === 'TAX-06')
100
+ return this.evalDirectoryStructure.bind(this);
101
+ if (id === 'TAX-07' || id === 'TAX-08')
102
+ return this.evalAdrNaming.bind(this);
103
+ if (id === 'INH-01' || id === 'INH-06')
104
+ return this.evalInheritance.bind(this);
105
+ return null;
106
+ }
107
+ async evalVersionPinning(rule, ctx) {
108
+ const violations = [];
109
+ const targets = rule.id === 'DEP-10'
110
+ ? await this.findWorkspacePackageJsons(ctx.satellitePath)
111
+ : [path.join(ctx.satellitePath, 'package.json')];
112
+ for (const pkgPath of targets) {
113
+ if (!await this.fs.exists(pkgPath))
114
+ continue;
115
+ const raw = await this.fs.readJson(pkgPath);
116
+ const depsGroups = ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies'];
117
+ for (const group of depsGroups) {
118
+ const deps = raw[group];
119
+ if (!deps)
120
+ continue;
121
+ for (const [pkg, version] of Object.entries(deps)) {
122
+ const v = String(version ?? '');
123
+ if ((rule.id === 'DEP-01' && v.startsWith('^')) ||
124
+ (rule.id === 'DEP-02' && v.startsWith('~')) ||
125
+ (rule.id === 'DEP-03' && ['*', 'latest', 'x', 'X', ''].includes(v)) ||
126
+ (rule.id === 'DEP-10' && (v.startsWith('^') || v.startsWith('~')))) {
127
+ violations.push(`${path.basename(pkgPath)}#${group}.${pkg}=${v}`);
128
+ }
129
+ }
130
+ }
131
+ }
132
+ if (violations.length > 0) {
133
+ return {
134
+ rule,
135
+ result: 'failed',
136
+ message: `Unpinned dependencies: ${violations.slice(0, 5).join(', ')}${violations.length > 5 ? ` (+${violations.length - 5} more)` : ''}`,
137
+ };
138
+ }
139
+ return { rule, result: 'passed' };
140
+ }
141
+ async evalLockFile(rule, ctx) {
142
+ const candidates = [
143
+ path.join(ctx.satellitePath, 'package-lock.json'),
144
+ path.join(ctx.corePath, 'package-lock.json'),
145
+ ];
146
+ for (const p of candidates) {
147
+ if (await this.fs.exists(p))
148
+ return { rule, result: 'passed' };
149
+ }
150
+ return { rule, result: 'failed', message: 'package-lock.json not found at project or workspace root' };
151
+ }
152
+ async evalCiInstall(rule, ctx) {
153
+ return this.evalCiWorkflowContains(rule, ctx, 'npm ci', 'CI workflow does not use "npm ci"');
154
+ }
155
+ async evalCiAudit(rule, ctx) {
156
+ return this.evalCiWorkflowContains(rule, ctx, 'npm audit', 'CI workflow does not run "npm audit"');
157
+ }
158
+ async evalDependabot(rule, ctx) {
159
+ const candidates = [
160
+ path.join(ctx.satellitePath, '.github', 'dependabot.yml'),
161
+ path.join(ctx.satellitePath, '.renovaterc.json'),
162
+ path.join(ctx.corePath, '.github', 'dependabot.yml'),
163
+ ];
164
+ for (const p of candidates) {
165
+ if (await this.fs.exists(p))
166
+ return { rule, result: 'passed' };
167
+ }
168
+ return { rule, result: 'failed', message: 'No .github/dependabot.yml or .renovaterc.json found' };
169
+ }
170
+ async evalCiWorkflowContains(rule, ctx, needle, failMsg) {
171
+ const workflowDir = path.join(ctx.satellitePath, '.github', 'workflows');
172
+ if (!await this.fs.exists(workflowDir)) {
173
+ return { rule, result: 'skipped', message: 'No .github/workflows directory found' };
174
+ }
175
+ const files = await this.fs.readdirNames(workflowDir);
176
+ for (const f of files) {
177
+ if (!f.endsWith('.yml') && !f.endsWith('.yaml'))
178
+ continue;
179
+ const content = await this.fs.readFile(path.join(workflowDir, f));
180
+ if (content.includes(needle))
181
+ return { rule, result: 'passed' };
182
+ }
183
+ return { rule, result: 'failed', message: failMsg };
184
+ }
185
+ async evalDirectoryStructure(rule, ctx) {
186
+ if (rule.id === 'TAX-05') {
187
+ const expected = ['reference', 'rulesets', 'sdk', '.harness'];
188
+ const missing = [];
189
+ for (const dir of expected) {
190
+ if (!await this.fs.exists(path.join(ctx.corePath, dir)))
191
+ missing.push(dir);
192
+ }
193
+ if (missing.length > 0) {
194
+ return { rule, result: 'failed', message: `Missing top-level directories: ${missing.join(', ')}` };
195
+ }
196
+ return { rule, result: 'passed' };
197
+ }
198
+ if (rule.id === 'TAX-06') {
199
+ if (ctx.satellitePath === ctx.corePath) {
200
+ return { rule, result: 'skipped', message: 'Not applicable when validating Core itself' };
201
+ }
202
+ const hasPkg = await this.fs.exists(path.join(ctx.satellitePath, 'package.json'));
203
+ if (!hasPkg) {
204
+ return { rule, result: 'skipped', message: 'Satellite has no package.json — directory structure check not applicable' };
205
+ }
206
+ const required = ['src', 'tests', 'docs'];
207
+ const missing = [];
208
+ for (const dir of required) {
209
+ if (!await this.fs.exists(path.join(ctx.satellitePath, dir)))
210
+ missing.push(dir);
211
+ }
212
+ if (missing.length > 0) {
213
+ return { rule, result: 'failed', message: `Satellite missing directories: ${missing.join(', ')}` };
214
+ }
215
+ return { rule, result: 'passed' };
216
+ }
217
+ return { rule, result: 'skipped', message: 'Unhandled TAX rule' };
218
+ }
219
+ async evalAdrNaming(rule, ctx) {
220
+ const adrDir = path.join(ctx.corePath, 'reference', 'architecture', 'adrs');
221
+ if (!await this.fs.exists(adrDir)) {
222
+ return { rule, result: 'skipped', message: 'ADR directory not found' };
223
+ }
224
+ const entries = await this.listFilesRecursive(adrDir);
225
+ const mdFiles = entries.filter(f => f.endsWith('.md'));
226
+ if (rule.id === 'TAX-07') {
227
+ const adrPattern = /^[0-9]{4}-[a-z0-9-]+\.md$/;
228
+ const violations = mdFiles
229
+ .map(f => path.basename(f))
230
+ .filter(n => /^[0-9]/.test(n) && !n.endsWith('.es.md') && !adrPattern.test(n));
231
+ if (violations.length > 0) {
232
+ return {
233
+ rule, result: 'failed',
234
+ message: `ADR filenames not matching kebab-case pattern: ${violations.slice(0, 3).join(', ')}`,
235
+ };
236
+ }
237
+ return { rule, result: 'passed' };
238
+ }
239
+ if (rule.id === 'TAX-08') {
240
+ const enFiles = mdFiles.filter(f => !f.endsWith('.es.md'));
241
+ const missing = enFiles.filter(f => !mdFiles.includes(f.replace(/\.md$/, '.es.md')));
242
+ if (missing.length > 0) {
243
+ return {
244
+ rule, result: 'failed',
245
+ message: `ADRs missing bilingual pair: ${missing.slice(0, 3).map(f => path.basename(f)).join(', ')}`,
246
+ };
247
+ }
248
+ return { rule, result: 'passed' };
249
+ }
250
+ return { rule, result: 'skipped', message: 'Unhandled TAX-ADR rule' };
251
+ }
252
+ async evalEvidence(rule, ctx) {
253
+ const evidenceDir = path.join(ctx.corePath, '.harness', 'evidence');
254
+ if (!await this.fs.exists(evidenceDir)) {
255
+ return { rule, result: 'failed', message: '.harness/evidence directory not found' };
256
+ }
257
+ const files = await this.fs.readdirNames(evidenceDir);
258
+ const jsonFiles = files.filter(f => f.endsWith('.json'));
259
+ if (jsonFiles.length === 0) {
260
+ return { rule, result: 'failed', message: 'No evidence manifests found in .harness/evidence/' };
261
+ }
262
+ for (const file of jsonFiles) {
263
+ const content = await this.fs.readFile(path.join(evidenceDir, file));
264
+ let manifest;
265
+ try {
266
+ manifest = JSON.parse(content);
267
+ }
268
+ catch {
269
+ return { rule, result: 'failed', message: `Invalid JSON in evidence file: ${file}` };
270
+ }
271
+ switch (rule.id) {
272
+ case 'EVD-01': {
273
+ const required = ['id', 'source', 'generatedAt', 'producer'];
274
+ const missing = required.filter(k => !manifest[k]);
275
+ if (missing.length > 0) {
276
+ return { rule, result: 'failed', message: `${file} missing fields: ${missing.join(', ')}` };
277
+ }
278
+ if (!manifest['evaluatedRules'] && !manifest['relatedRuleIds'] && !manifest['relatedGateId']) {
279
+ return { rule, result: 'failed', message: `${file} missing evaluatedRules or relatedGateId` };
280
+ }
281
+ break;
282
+ }
283
+ case 'EVD-02': {
284
+ if (!manifest['sourceRef']) {
285
+ return { rule, result: 'failed', message: `${file} missing sourceRef` };
286
+ }
287
+ break;
288
+ }
289
+ case 'EVD-03': {
290
+ const required = ['status', 'evaluatedRules', 'blockingFailures'];
291
+ const missing = required.filter(k => !manifest[k]);
292
+ if (missing.length > 0) {
293
+ return { rule, result: 'failed', message: `${file} missing fields: ${missing.join(', ')}` };
294
+ }
295
+ break;
296
+ }
297
+ case 'EVD-04': {
298
+ if (!manifest['retentionPeriod'] || !manifest['owner']) {
299
+ return { rule, result: 'failed', message: `${file} missing retentionPeriod or owner` };
300
+ }
301
+ break;
302
+ }
303
+ }
304
+ }
305
+ return { rule, result: 'passed' };
306
+ }
307
+ async evalBuild(rule, ctx) {
308
+ const distMain = path.join(ctx.corePath, 'sdk', 'cli', 'dist', 'main.js');
309
+ if (await this.fs.exists(distMain))
310
+ return { rule, result: 'passed' };
311
+ return { rule, result: 'failed', message: `dist/main.js not found — run npm run build in sdk/cli` };
312
+ }
313
+ async evalTestArtifacts(rule, ctx) {
314
+ const distDir = path.join(ctx.corePath, 'sdk', 'cli', 'dist');
315
+ if (!await this.fs.exists(distDir)) {
316
+ return { rule, result: 'failed', message: 'dist/ not found — run npm run build' };
317
+ }
318
+ const specFiles = await this.findSpecFiles(distDir);
319
+ if (specFiles.length === 0) {
320
+ return { rule, result: 'skipped', message: 'No compiled spec files in dist/ — run npm test to confirm' };
321
+ }
322
+ return { rule, result: 'passed' };
323
+ }
324
+ async evalDependencyLock(rule, ctx) {
325
+ const candidates = [
326
+ path.join(ctx.corePath, 'package-lock.json'),
327
+ path.join(ctx.corePath, 'sdk', 'cli', 'package-lock.json'),
328
+ ];
329
+ for (const p of candidates) {
330
+ if (await this.fs.exists(p))
331
+ return { rule, result: 'passed' };
332
+ }
333
+ return { rule, result: 'failed', message: 'package-lock.json not found' };
334
+ }
335
+ async evalMcpSmoke(rule, ctx) {
336
+ const evidenceDir = path.join(ctx.corePath, '.harness', 'evidence');
337
+ if (!await this.fs.exists(evidenceDir)) {
338
+ return { rule, result: 'failed', message: 'No .harness/evidence directory' };
339
+ }
340
+ const files = await this.fs.readdirNames(evidenceDir);
341
+ const smokeFile = files.find(f => f.includes('mcp') && f.endsWith('.json'));
342
+ if (!smokeFile) {
343
+ return { rule, result: 'failed', message: 'No MCP smoke evidence found in .harness/evidence/' };
344
+ }
345
+ const content = await this.fs.readFile(path.join(evidenceDir, smokeFile));
346
+ const evidence = JSON.parse(content);
347
+ if (evidence['status'] !== 'passed') {
348
+ return { rule, result: 'failed', message: `MCP smoke evidence status: ${evidence['status']}` };
349
+ }
350
+ return { rule, result: 'passed' };
351
+ }
352
+ async evalMcpEvidence(rule, ctx) {
353
+ const evidenceDir = path.join(ctx.corePath, '.harness', 'evidence');
354
+ const files = await this.fs.exists(evidenceDir)
355
+ ? await this.fs.readdirNames(evidenceDir)
356
+ : [];
357
+ const smokeFile = files.find(f => f.includes('mcp') && f.endsWith('.json'));
358
+ if (!smokeFile) {
359
+ return { rule, result: 'skipped', message: 'Run .harness/scripts/mcp-smoke.mjs to generate evidence' };
360
+ }
361
+ const evidence = JSON.parse(await this.fs.readFile(path.join(evidenceDir, smokeFile)));
362
+ const results = evidence['results'];
363
+ if (!results)
364
+ return { rule, result: 'failed', message: 'Evidence missing results field' };
365
+ if (rule.id === 'MCP-01' && !results['initialize']) {
366
+ return { rule, result: 'failed', message: 'initialize response missing from evidence' };
367
+ }
368
+ if (rule.id === 'MCP-02' && !results['tools/list']) {
369
+ return { rule, result: 'failed', message: 'tools/list response missing from evidence' };
370
+ }
371
+ if (rule.id === 'MCP-03' && !results['resources/list']) {
372
+ return { rule, result: 'failed', message: 'resources/list response missing from evidence' };
373
+ }
374
+ return { rule, result: 'passed' };
375
+ }
376
+ async evalMcpSecurity(rule, ctx) {
377
+ const serverFile = path.join(ctx.corePath, 'sdk', 'cli', 'src', 'core', 'mcp', 'server.ts');
378
+ if (!await this.fs.exists(serverFile)) {
379
+ return { rule, result: 'skipped', message: 'MCP server.ts not found' };
380
+ }
381
+ const content = await this.fs.readFile(serverFile);
382
+ if (content.includes('apiKey') || content.includes('local-only') || content.includes('localhost')) {
383
+ return { rule, result: 'passed' };
384
+ }
385
+ return { rule, result: 'failed', message: 'MCP transport config missing apiKey or local-only restriction' };
386
+ }
387
+ async evalCliDocs(rule, ctx) {
388
+ const cliDir = path.join(ctx.corePath, 'sdk', 'cli');
389
+ const readme = path.join(cliDir, 'README.md');
390
+ const arch = path.join(cliDir, 'ARCHITECTURE.md');
391
+ if (await this.fs.exists(readme) || await this.fs.exists(arch)) {
392
+ return { rule, result: 'passed' };
393
+ }
394
+ return { rule, result: 'failed', message: 'CLI missing README.md or ARCHITECTURE.md' };
395
+ }
396
+ async evalInheritance(rule, ctx) {
397
+ if (rule.id === 'INH-01') {
398
+ const satelliteRulesets = path.join(ctx.satellitePath, 'rulesets');
399
+ if (ctx.satellitePath !== ctx.corePath && await this.fs.exists(satelliteRulesets)) {
400
+ return { rule, result: 'failed', message: 'Satellite contains a rulesets/ directory — inheriting from Core only is required' };
401
+ }
402
+ return { rule, result: 'passed' };
403
+ }
404
+ if (rule.id === 'INH-06') {
405
+ if (ctx.satellitePath !== ctx.corePath) {
406
+ const decisionsFile = path.join(ctx.satellitePath, 'DECISIONS.md');
407
+ if (!await this.fs.exists(decisionsFile)) {
408
+ return { rule, result: 'failed', message: 'Satellite missing DECISIONS.md in root directory' };
409
+ }
410
+ }
411
+ return { rule, result: 'passed' };
412
+ }
413
+ return { rule, result: 'skipped', message: 'Unhandled INH rule' };
414
+ }
415
+ async listFilesRecursive(dir) {
416
+ const files = [];
417
+ const entries = await this.fs.readdirNames(dir);
418
+ for (const entry of entries) {
419
+ const full = path.join(dir, entry);
420
+ const stat = await this.fs.stat(full);
421
+ if (stat.isDirectory()) {
422
+ files.push(...await this.listFilesRecursive(full));
423
+ }
424
+ else {
425
+ files.push(full);
426
+ }
427
+ }
428
+ return files;
429
+ }
430
+ async findSpecFiles(dir) {
431
+ const all = await this.listFilesRecursive(dir);
432
+ return all.filter(f => f.includes('.spec.') || f.includes('.test.'));
433
+ }
434
+ async findWorkspacePackageJsons(rootPath) {
435
+ const rootPkg = path.join(rootPath, 'package.json');
436
+ const files = [];
437
+ if (await this.fs.exists(rootPkg)) {
438
+ files.push(rootPkg);
439
+ const raw = await this.fs.readJson(rootPkg);
440
+ const workspaces = raw['workspaces'];
441
+ const patterns = Array.isArray(workspaces)
442
+ ? workspaces
443
+ : (workspaces?.packages ?? []);
444
+ for (const pattern of patterns) {
445
+ const base = pattern.replace(/\/\*.*$/, '');
446
+ const wsBase = path.join(rootPath, base);
447
+ if (await this.fs.exists(wsBase)) {
448
+ const entries = await this.fs.readdirNames(wsBase);
449
+ for (const entry of entries) {
450
+ const pkgPath = path.join(wsBase, entry, 'package.json');
451
+ if (await this.fs.exists(pkgPath))
452
+ files.push(pkgPath);
453
+ }
454
+ }
455
+ }
456
+ }
457
+ return files.length > 0 ? files : [rootPkg];
458
+ }
459
+ }
460
+ exports.NativeEvaluator = NativeEvaluator;
461
+ //# sourceMappingURL=native-evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-evaluator.js","sourceRoot":"","sources":["../../../../src/core/validators/evaluators/native-evaluator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAK7B,MAAa,eAAe;IAC1B,YACmB,EAAe,EACf,MAAe;QADf,OAAE,GAAF,EAAE,CAAa;QACf,WAAM,GAAN,MAAM,CAAS;IAC/B,CAAC;IAEJ,KAAK,CAAC,WAAW,CACf,KAAuB,EACvB,GAAsB;QAEtB,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,IAAoB,EACpB,GAAsB;QAEtB,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;gBACL,IAAI;gBACJ,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,kDAAkD;aAC5D,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;YAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,oBAAoB,GAAG,EAAE,EAAE,CAAC;QACzE,CAAC;IACH,CAAC;IAEO,gBAAgB,CACtB,IAAoB;QAEpB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAGnB,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAG/D,IAAI,EAAE,KAAK,WAAW;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,EAAE,KAAK,WAAW;YAAE,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjE,IAAI,EAAE,KAAK,WAAW;YAAE,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClE,IAAI,EAAE,KAAK,WAAW;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5D,IAAI,EAAE,KAAK,WAAW;YAAE,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAG3D,IAAI,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClG,IAAI,EAAE,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAG5D,IAAI,GAAG,KAAK,iBAAiB,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAClF,IAAI,EAAE,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzD,IAAI,EAAE,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1D,IAAI,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3E,IAAI,EAAE,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3D,IAAI,GAAG,KAAK,iBAAiB;gBAAE,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3E,CAAC;QAGD,IAAI,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtF,IAAI,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAG7E,IAAI,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE/E,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC9B,IAAoB,EACpB,GAAsB;QAEtB,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,KAAK,QAAQ;YAClC,CAAC,CAAC,MAAM,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,aAAa,CAAC;YACzD,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;QAEnD,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;gBAAE,SAAS;YAE7C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAA4B,CAAC;YACvE,MAAM,UAAU,GAAG,CAAC,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,sBAAsB,CAAC,CAAC;YAEnG,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;gBAC/B,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAuC,CAAC;gBAC9D,IAAI,CAAC,IAAI;oBAAE,SAAS;gBAEpB,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;oBAClD,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;oBAChC,IACE,CAAC,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;wBAC3C,CAAC,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;wBAC3C,CAAC,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;wBACnE,CAAC,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAClE,CAAC;wBACD,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;oBACpE,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO;gBACL,IAAI;gBACJ,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,0BAA0B,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE;aAC1I,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACpC,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,IAAoB,EACpB,GAAsB;QAEtB,MAAM,UAAU,GAAG;YACjB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,mBAAmB,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,mBAAmB,CAAC;SAC7C,CAAC;QAEF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;gBAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QACjE,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,0DAA0D,EAAE,CAAC;IACzG,CAAC;IAEO,KAAK,CAAC,aAAa,CACzB,IAAoB,EACpB,GAAsB;QAEtB,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,mCAAmC,CAAC,CAAC;IAC/F,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,IAAoB,EACpB,GAAsB;QAEtB,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,sCAAsC,CAAC,CAAC;IACrG,CAAC;IAEO,KAAK,CAAC,cAAc,CAC1B,IAAoB,EACpB,GAAsB;QAEtB,MAAM,UAAU,GAAG;YACjB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,EAAE,gBAAgB,CAAC;YACzD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,kBAAkB,CAAC;YAChD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,gBAAgB,CAAC;SACrD,CAAC;QAEF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;gBAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QACjE,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,qDAAqD,EAAE,CAAC;IACpG,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAClC,IAAoB,EACpB,GAAsB,EACtB,MAAc,EACd,OAAe;QAEf,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QACzE,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;YACvC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,sCAAsC,EAAE,CAAC;QACtF,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QACtD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,SAAS;YAC1D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;YAClE,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAClE,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IACtD,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAClC,IAAoB,EACpB,GAAsB;QAEtB,IAAI,IAAI,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;YAC9D,MAAM,OAAO,GAAG,EAAE,CAAC;YACnB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC3B,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7E,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,kCAAkC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACrG,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QACpC,CAAC;QAED,IAAI,IAAI,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YACzB,IAAI,GAAG,CAAC,aAAa,KAAK,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACvC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,4CAA4C,EAAE,CAAC;YAC5F,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;YAClF,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,0EAA0E,EAAE,CAAC;YAC1H,CAAC;YACD,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YAC1C,MAAM,OAAO,GAAG,EAAE,CAAC;YACnB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC3B,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClF,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,kCAAkC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACrG,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QACpC,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC;IACpE,CAAC;IAEO,KAAK,CAAC,aAAa,CACzB,IAAoB,EACpB,GAAsB;QAEtB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;QAC5E,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC;QACzE,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAEvD,IAAI,IAAI,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YACzB,MAAM,UAAU,GAAG,2BAA2B,CAAC;YAC/C,MAAM,UAAU,GAAG,OAAO;iBACvB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;iBAC1B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAEjF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,OAAO;oBACL,IAAI,EAAE,MAAM,EAAE,QAAQ;oBACtB,OAAO,EAAE,kDAAkD,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBAC/F,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QACpC,CAAC;QAED,IAAI,IAAI,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;YACrF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO;oBACL,IAAI,EAAE,MAAM,EAAE,QAAQ;oBACtB,OAAO,EAAE,gCAAgC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBACrG,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QACpC,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC;IACxE,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,IAAoB,EACpB,GAAsB;QAEtB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QACpE,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;YACvC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,uCAAuC,EAAE,CAAC;QACtF,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAEzD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,mDAAmD,EAAE,CAAC;QAClG,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;YACrE,IAAI,QAAiC,CAAC;YACtC,IAAI,CAAC;gBACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;YAC5D,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,kCAAkC,IAAI,EAAE,EAAE,CAAC;YACvF,CAAC;YAED,QAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;gBAChB,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;oBAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;oBACnD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACvB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,oBAAoB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;oBAC9F,CAAC;oBACD,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;wBAC7F,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,0CAA0C,EAAE,CAAC;oBAChG,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;wBAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,oBAAoB,EAAE,CAAC;oBAC1E,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;oBAClE,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;oBACnD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACvB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,oBAAoB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;oBAC9F,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;wBACvD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,mCAAmC,EAAE,CAAC;oBACzF,CAAC;oBACD,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACpC,CAAC;IAEO,KAAK,CAAC,SAAS,CACrB,IAAoB,EACpB,GAAsB;QAEtB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QAC1E,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QACtE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,uDAAuD,EAAE,CAAC;IACtG,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,IAAoB,EACpB,GAAsB;QAEtB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,qCAAqC,EAAE,CAAC;QACpF,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACpD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,2DAA2D,EAAE,CAAC;QAC3G,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACpC,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC9B,IAAoB,EACpB,GAAsB;QAEtB,MAAM,UAAU,GAAG;YACjB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,mBAAmB,CAAC;YAC5C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,CAAC;SAC3D,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;gBAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QACjE,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC;IAC5E,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,IAAoB,EACpB,GAAsB;QAEtB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QACpE,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;YACvC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC;QAC/E,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,mDAAmD,EAAE,CAAC;QAClG,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;QAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;QAChE,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,8BAA8B,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjG,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACpC,CAAC;IAEO,KAAK,CAAC,eAAe,CAC3B,IAAoB,EACpB,GAAsB;QAEtB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;YAC7C,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC;YACzC,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAE5E,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,yDAAyD,EAAE,CAAC;QACzG,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CACzB,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAC/B,CAAC;QAE7B,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAwC,CAAC;QAC3E,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC;QAE3F,IAAI,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YACnD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAC;QAC1F,CAAC;QACD,IAAI,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YACnD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAC;QAC1F,CAAC;QACD,IAAI,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACvD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,+CAA+C,EAAE,CAAC;QAC9F,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACpC,CAAC;IAEO,KAAK,CAAC,eAAe,CAC3B,IAAoB,EACpB,GAAsB;QAEtB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;QAC5F,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YACtC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC;QACzE,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAClG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QACpC,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,+DAA+D,EAAE,CAAC;IAC9G,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,IAAoB,EACpB,GAAsB;QAEtB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAClD,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QACpC,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,0CAA0C,EAAE,CAAC;IACzF,CAAC;IAEO,KAAK,CAAC,eAAe,CAC3B,IAAoB,EACpB,GAAsB;QAEtB,IAAI,IAAI,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YACzB,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;YACnE,IAAI,GAAG,CAAC,aAAa,KAAK,GAAG,CAAC,QAAQ,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAClF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,kFAAkF,EAAE,CAAC;YACjI,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QACpC,CAAC;QAED,IAAI,IAAI,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YACzB,IAAI,GAAG,CAAC,aAAa,KAAK,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACvC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;gBACnE,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;oBACzC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,kDAAkD,EAAE,CAAC;gBACjG,CAAC;YACH,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QACpC,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC;IACpE,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,GAAW;QAC1C,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAEhD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACnC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;YACrD,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,GAAW;QACrC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC/C,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvE,CAAC;IAEO,KAAK,CAAC,yBAAyB,CAAC,QAAgB;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACpD,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAA4B,CAAC;YACvE,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAmD,CAAC;YACvF,MAAM,QAAQ,GAAa,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;gBAClD,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC;YAEjC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;gBAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBACzC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;oBACjC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;oBACnD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;wBAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;wBACzD,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;4BAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACzD,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;CACF;AAjhBD,0CAihBC"}
@@ -0,0 +1,20 @@
1
+ import { IFileSystem, ILogger } from '../../abstractions';
2
+ import { NormalizedRule } from '../rule-evaluation-engine';
3
+ import { IRuleEvaluatorStrategy, EvaluationContext, RuleEvaluationResult } from './evaluator.interface';
4
+ export declare class OpaEvaluator implements IRuleEvaluatorStrategy {
5
+ private readonly fs;
6
+ private readonly logger;
7
+ private policyCache;
8
+ constructor(fs: IFileSystem, logger: ILogger);
9
+ evaluateAll(rules: NormalizedRule[], ctx: EvaluationContext): Promise<RuleEvaluationResult[]>;
10
+ private buildOpaInput;
11
+ private safeReadJson;
12
+ private safeReadFile;
13
+ private getTopLevelDirs;
14
+ private readWorkflows;
15
+ private readEvidence;
16
+ private listAdrs;
17
+ private listFilesRecursive;
18
+ private hasCompiledTests;
19
+ private readWorkspacePackageJsons;
20
+ }