@evolith/smart-cli 0.0.2-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 (271) hide show
  1. package/README.es.md +51 -15
  2. package/README.md +51 -15
  3. package/dist/app.module.js +2 -2
  4. package/dist/app.module.js.map +1 -1
  5. package/dist/app.module.spec.d.ts +1 -0
  6. package/dist/app.module.spec.js +305 -0
  7. package/dist/app.module.spec.js.map +1 -0
  8. package/dist/application/ports/webhook-notifier.port.d.ts +4 -0
  9. package/dist/application/ports/webhook-notifier.port.js +3 -0
  10. package/dist/application/ports/webhook-notifier.port.js.map +1 -0
  11. package/dist/application/services/index.d.ts +1 -0
  12. package/dist/application/services/index.js +28 -2
  13. package/dist/application/services/index.js.map +1 -1
  14. package/dist/application/services/initialize-project.spec.d.ts +1 -0
  15. package/dist/application/services/initialize-project.spec.js +211 -0
  16. package/dist/application/services/initialize-project.spec.js.map +1 -0
  17. package/dist/application/use-cases/evaluate-gate.use-case.d.ts +20 -0
  18. package/dist/application/use-cases/evaluate-gate.use-case.js +72 -0
  19. package/dist/application/use-cases/evaluate-gate.use-case.js.map +1 -0
  20. package/dist/application/use-cases/validate-satellite.use-case.d.ts +1 -0
  21. package/dist/application/use-cases/validate-satellite.use-case.js +7 -3
  22. package/dist/application/use-cases/validate-satellite.use-case.js.map +1 -1
  23. package/dist/commands/adr/adr.command.d.ts +2 -0
  24. package/dist/commands/adr/adr.command.js +36 -14
  25. package/dist/commands/adr/adr.command.js.map +1 -1
  26. package/dist/commands/adr/adr.command.spec.d.ts +1 -0
  27. package/dist/commands/adr/adr.command.spec.js +409 -0
  28. package/dist/commands/adr/adr.command.spec.js.map +1 -0
  29. package/dist/commands/architecture/scaffold.command.d.ts +1 -0
  30. package/dist/commands/architecture/scaffold.command.js +23 -1
  31. package/dist/commands/architecture/scaffold.command.js.map +1 -1
  32. package/dist/commands/architecture/scaffold.command.spec.d.ts +1 -0
  33. package/dist/commands/architecture/scaffold.command.spec.js +207 -0
  34. package/dist/commands/architecture/scaffold.command.spec.js.map +1 -0
  35. package/dist/commands/completion/completion.command.spec.d.ts +1 -0
  36. package/dist/commands/completion/completion.command.spec.js +240 -0
  37. package/dist/commands/completion/completion.command.spec.js.map +1 -0
  38. package/dist/commands/docs/docs.command.spec.d.ts +1 -0
  39. package/dist/commands/docs/docs.command.spec.js +87 -0
  40. package/dist/commands/docs/docs.command.spec.js.map +1 -0
  41. package/dist/commands/drift/drift.command.spec.d.ts +1 -0
  42. package/dist/commands/drift/drift.command.spec.js +327 -0
  43. package/dist/commands/drift/drift.command.spec.js.map +1 -0
  44. package/dist/commands/gate/gate.command.d.ts +23 -0
  45. package/dist/commands/gate/gate.command.js +210 -0
  46. package/dist/commands/gate/gate.command.js.map +1 -0
  47. package/dist/commands/history/history.command.spec.d.ts +1 -0
  48. package/dist/commands/history/history.command.spec.js +392 -0
  49. package/dist/commands/history/history.command.spec.js.map +1 -0
  50. package/dist/commands/init/agents.command.spec.js +398 -0
  51. package/dist/commands/init/agents.command.spec.js.map +1 -1
  52. package/dist/commands/init/init.command.spec.d.ts +1 -0
  53. package/dist/commands/init/init.command.spec.js +272 -0
  54. package/dist/commands/init/init.command.spec.js.map +1 -0
  55. package/dist/commands/init/upgrade.command.spec.d.ts +1 -0
  56. package/dist/commands/init/upgrade.command.spec.js +378 -0
  57. package/dist/commands/init/upgrade.command.spec.js.map +1 -0
  58. package/dist/commands/mcp/mcp-serve.command.spec.d.ts +1 -0
  59. package/dist/commands/mcp/mcp-serve.command.spec.js +58 -0
  60. package/dist/commands/mcp/mcp-serve.command.spec.js.map +1 -0
  61. package/dist/commands/sdlc/gate-status.command.d.ts +3 -1
  62. package/dist/commands/sdlc/gate-status.command.js +78 -3
  63. package/dist/commands/sdlc/gate-status.command.js.map +1 -1
  64. package/dist/commands/sdlc/gate-status.command.spec.d.ts +1 -0
  65. package/dist/commands/sdlc/gate-status.command.spec.js +302 -0
  66. package/dist/commands/sdlc/gate-status.command.spec.js.map +1 -0
  67. package/dist/commands/sdlc/generate-domain.command.d.ts +2 -0
  68. package/dist/commands/sdlc/generate-domain.command.js +123 -12
  69. package/dist/commands/sdlc/generate-domain.command.js.map +1 -1
  70. package/dist/commands/sdlc/generate-domain.command.spec.d.ts +1 -0
  71. package/dist/commands/sdlc/generate-domain.command.spec.js +121 -0
  72. package/dist/commands/sdlc/generate-domain.command.spec.js.map +1 -0
  73. package/dist/commands/sdlc/handoff.command.js +2 -2
  74. package/dist/commands/sdlc/handoff.command.js.map +1 -1
  75. package/dist/commands/sdlc/handoff.command.spec.d.ts +1 -0
  76. package/dist/commands/sdlc/handoff.command.spec.js +395 -0
  77. package/dist/commands/sdlc/handoff.command.spec.js.map +1 -0
  78. package/dist/commands/sdlc/sdlc.command.js +40 -6
  79. package/dist/commands/sdlc/sdlc.command.js.map +1 -1
  80. package/dist/commands/sdlc/sdlc.command.spec.d.ts +1 -0
  81. package/dist/commands/sdlc/sdlc.command.spec.js +79 -0
  82. package/dist/commands/sdlc/sdlc.command.spec.js.map +1 -0
  83. package/dist/commands/standards/standards.command.spec.d.ts +1 -0
  84. package/dist/commands/standards/standards.command.spec.js +311 -0
  85. package/dist/commands/standards/standards.command.spec.js.map +1 -0
  86. package/dist/commands/validate/validate.command.d.ts +2 -0
  87. package/dist/commands/validate/validate.command.js +16 -2
  88. package/dist/commands/validate/validate.command.js.map +1 -1
  89. package/dist/commands/validate/validate.command.spec.d.ts +1 -0
  90. package/dist/commands/validate/validate.command.spec.js +368 -0
  91. package/dist/commands/validate/validate.command.spec.js.map +1 -0
  92. package/dist/core/abstractions/interfaces.d.ts +1 -0
  93. package/dist/core/abstractions/interfaces.js.map +1 -1
  94. package/dist/core/abstractions/providers/config-parser.provider.spec.d.ts +1 -0
  95. package/dist/core/abstractions/providers/config-parser.provider.spec.js +18 -0
  96. package/dist/core/abstractions/providers/config-parser.provider.spec.js.map +1 -0
  97. package/dist/core/abstractions/providers/logger.provider.spec.d.ts +1 -0
  98. package/dist/core/abstractions/providers/logger.provider.spec.js +212 -0
  99. package/dist/core/abstractions/providers/logger.provider.spec.js.map +1 -0
  100. package/dist/core/abstractions/providers/mock-filesystem.provider.d.ts +1 -0
  101. package/dist/core/abstractions/providers/mock-filesystem.provider.js +4 -0
  102. package/dist/core/abstractions/providers/mock-filesystem.provider.js.map +1 -1
  103. package/dist/core/abstractions/providers/mock-filesystem.provider.spec.d.ts +1 -0
  104. package/dist/core/abstractions/providers/mock-filesystem.provider.spec.js +56 -0
  105. package/dist/core/abstractions/providers/mock-filesystem.provider.spec.js.map +1 -0
  106. package/dist/core/abstractions/providers/node-filesystem.provider.d.ts +1 -0
  107. package/dist/core/abstractions/providers/node-filesystem.provider.js +4 -0
  108. package/dist/core/abstractions/providers/node-filesystem.provider.js.map +1 -1
  109. package/dist/core/architecture/nx-workspace.strategy.d.ts +3 -0
  110. package/dist/core/architecture/nx-workspace.strategy.js +35 -6
  111. package/dist/core/architecture/nx-workspace.strategy.js.map +1 -1
  112. package/dist/core/architecture/nx-workspace.strategy.spec.d.ts +1 -0
  113. package/dist/core/architecture/nx-workspace.strategy.spec.js +187 -0
  114. package/dist/core/architecture/nx-workspace.strategy.spec.js.map +1 -0
  115. package/dist/core/architecture/workspace-manager.strategy.d.ts +1 -0
  116. package/dist/core/di/container.spec.js +164 -0
  117. package/dist/core/di/container.spec.js.map +1 -1
  118. package/dist/core/generators/hexagonal-scaffolder.d.ts +6 -0
  119. package/dist/core/generators/hexagonal-scaffolder.js +260 -0
  120. package/dist/core/generators/hexagonal-scaffolder.js.map +1 -0
  121. package/dist/core/generators/hexagonal-scaffolder.spec.d.ts +1 -0
  122. package/dist/core/generators/hexagonal-scaffolder.spec.js +164 -0
  123. package/dist/core/generators/hexagonal-scaffolder.spec.js.map +1 -0
  124. package/dist/core/generators/mermaid-class-parser.d.ts +38 -0
  125. package/dist/core/generators/mermaid-class-parser.js +183 -0
  126. package/dist/core/generators/mermaid-class-parser.js.map +1 -0
  127. package/dist/core/generators/mermaid-class-parser.spec.d.ts +1 -0
  128. package/dist/core/generators/mermaid-class-parser.spec.js +148 -0
  129. package/dist/core/generators/mermaid-class-parser.spec.js.map +1 -0
  130. package/dist/core/mcp/metrics.service.spec.d.ts +1 -0
  131. package/dist/core/mcp/metrics.service.spec.js +159 -0
  132. package/dist/core/mcp/metrics.service.spec.js.map +1 -0
  133. package/dist/core/mcp/prompts/index.js +36 -0
  134. package/dist/core/mcp/prompts/index.js.map +1 -1
  135. package/dist/core/mcp/prompts/index.spec.d.ts +1 -0
  136. package/dist/core/mcp/prompts/index.spec.js +150 -0
  137. package/dist/core/mcp/prompts/index.spec.js.map +1 -0
  138. package/dist/core/mcp/resources/index.js +16 -0
  139. package/dist/core/mcp/resources/index.js.map +1 -1
  140. package/dist/core/mcp/resources/index.spec.d.ts +1 -0
  141. package/dist/core/mcp/resources/index.spec.js +212 -0
  142. package/dist/core/mcp/resources/index.spec.js.map +1 -0
  143. package/dist/core/mcp/server.d.ts +4 -1
  144. package/dist/core/mcp/server.js +250 -25
  145. package/dist/core/mcp/server.js.map +1 -1
  146. package/dist/core/mcp/server.spec.d.ts +1 -0
  147. package/dist/core/mcp/server.spec.js +579 -0
  148. package/dist/core/mcp/server.spec.js.map +1 -0
  149. package/dist/core/mcp/tools/agent.spec.d.ts +1 -0
  150. package/dist/core/mcp/tools/agent.spec.js +171 -0
  151. package/dist/core/mcp/tools/agent.spec.js.map +1 -0
  152. package/dist/core/mcp/tools/architecture.d.ts +2 -0
  153. package/dist/core/mcp/tools/architecture.js +68 -0
  154. package/dist/core/mcp/tools/architecture.js.map +1 -1
  155. package/dist/core/mcp/tools/architecture.spec.d.ts +1 -0
  156. package/dist/core/mcp/tools/architecture.spec.js +145 -0
  157. package/dist/core/mcp/tools/architecture.spec.js.map +1 -0
  158. package/dist/core/mcp/tools/gate.d.ts +1 -0
  159. package/dist/core/mcp/tools/gate.js +68 -0
  160. package/dist/core/mcp/tools/gate.js.map +1 -0
  161. package/dist/core/mcp/tools/moscow.d.ts +30 -0
  162. package/dist/core/mcp/tools/moscow.js +113 -0
  163. package/dist/core/mcp/tools/moscow.js.map +1 -0
  164. package/dist/core/mcp/tools/moscow.spec.d.ts +1 -0
  165. package/dist/core/mcp/tools/moscow.spec.js +209 -0
  166. package/dist/core/mcp/tools/moscow.spec.js.map +1 -0
  167. package/dist/core/mcp/tools/sdlc.js +2 -1
  168. package/dist/core/mcp/tools/sdlc.js.map +1 -1
  169. package/dist/core/mcp/tools/sdlc.spec.d.ts +1 -0
  170. package/dist/core/mcp/tools/sdlc.spec.js +170 -0
  171. package/dist/core/mcp/tools/sdlc.spec.js.map +1 -0
  172. package/dist/core/mcp/tools/validate.spec.d.ts +1 -0
  173. package/dist/core/mcp/tools/validate.spec.js +130 -0
  174. package/dist/core/mcp/tools/validate.spec.js.map +1 -0
  175. package/dist/core/mcp/watcher.service.spec.js +109 -8
  176. package/dist/core/mcp/watcher.service.spec.js.map +1 -1
  177. package/dist/core/metrics/dora-calculator.d.ts +18 -0
  178. package/dist/core/metrics/dora-calculator.js +146 -0
  179. package/dist/core/metrics/dora-calculator.js.map +1 -0
  180. package/dist/core/metrics/dora-calculator.spec.d.ts +1 -0
  181. package/dist/core/metrics/dora-calculator.spec.js +164 -0
  182. package/dist/core/metrics/dora-calculator.spec.js.map +1 -0
  183. package/dist/core/metrics/git-log-reader.d.ts +14 -0
  184. package/dist/core/metrics/git-log-reader.js +39 -0
  185. package/dist/core/metrics/git-log-reader.js.map +1 -0
  186. package/dist/core/metrics/git-log-reader.spec.d.ts +1 -0
  187. package/dist/core/metrics/git-log-reader.spec.js +108 -0
  188. package/dist/core/metrics/git-log-reader.spec.js.map +1 -0
  189. package/dist/core/observability/command-watcher.spec.d.ts +1 -0
  190. package/dist/core/observability/command-watcher.spec.js +123 -0
  191. package/dist/core/observability/command-watcher.spec.js.map +1 -0
  192. package/dist/core/observability/error-reporter.spec.d.ts +1 -0
  193. package/dist/core/observability/error-reporter.spec.js +291 -0
  194. package/dist/core/observability/error-reporter.spec.js.map +1 -0
  195. package/dist/core/observability/index.d.ts +1 -0
  196. package/dist/core/observability/index.js +3 -1
  197. package/dist/core/observability/index.js.map +1 -1
  198. package/dist/core/observability/structured-logger.spec.d.ts +1 -0
  199. package/dist/core/observability/structured-logger.spec.js +197 -0
  200. package/dist/core/observability/structured-logger.spec.js.map +1 -0
  201. package/dist/core/observability/timing.spec.d.ts +1 -0
  202. package/dist/core/observability/timing.spec.js +216 -0
  203. package/dist/core/observability/timing.spec.js.map +1 -0
  204. package/dist/core/observability/tool-usage-telemetry.service.d.ts +46 -0
  205. package/dist/core/observability/tool-usage-telemetry.service.js +181 -0
  206. package/dist/core/observability/tool-usage-telemetry.service.js.map +1 -0
  207. package/dist/core/services/command-history.service.d.ts +1 -0
  208. package/dist/core/services/command-history.service.js +4 -0
  209. package/dist/core/services/command-history.service.js.map +1 -1
  210. package/dist/core/services/command-history.service.spec.js +217 -126
  211. package/dist/core/services/command-history.service.spec.js.map +1 -1
  212. package/dist/core/upgrade/satellite-upgrade.service.spec.js +212 -132
  213. package/dist/core/upgrade/satellite-upgrade.service.spec.js.map +1 -1
  214. package/dist/core/validators/deep-architecture-analyzer.d.ts +58 -0
  215. package/dist/core/validators/deep-architecture-analyzer.js +333 -0
  216. package/dist/core/validators/deep-architecture-analyzer.js.map +1 -0
  217. package/dist/core/validators/deep-architecture-analyzer.spec.d.ts +1 -0
  218. package/dist/core/validators/deep-architecture-analyzer.spec.js +186 -0
  219. package/dist/core/validators/deep-architecture-analyzer.spec.js.map +1 -0
  220. package/dist/core/validators/evaluators/evaluator.interface.d.ts +14 -0
  221. package/dist/core/validators/evaluators/evaluator.interface.js +3 -0
  222. package/dist/core/validators/evaluators/evaluator.interface.js.map +1 -0
  223. package/dist/core/validators/evaluators/native-evaluator.d.ts +31 -0
  224. package/dist/core/validators/evaluators/native-evaluator.js +461 -0
  225. package/dist/core/validators/evaluators/native-evaluator.js.map +1 -0
  226. package/dist/core/validators/evaluators/opa-evaluator.d.ts +20 -0
  227. package/dist/core/validators/evaluators/opa-evaluator.js +249 -0
  228. package/dist/core/validators/evaluators/opa-evaluator.js.map +1 -0
  229. package/dist/core/validators/phase-gate-validator.service.d.ts +4 -0
  230. package/dist/core/validators/phase-gate-validator.service.js +76 -9
  231. package/dist/core/validators/phase-gate-validator.service.js.map +1 -1
  232. package/dist/core/validators/rule-evaluation-engine.d.ts +34 -0
  233. package/dist/core/validators/rule-evaluation-engine.js +187 -0
  234. package/dist/core/validators/rule-evaluation-engine.js.map +1 -0
  235. package/dist/core/validators/rule-evaluation-engine.spec.d.ts +1 -0
  236. package/dist/core/validators/rule-evaluation-engine.spec.js +243 -0
  237. package/dist/core/validators/rule-evaluation-engine.spec.js.map +1 -0
  238. package/dist/core/validators/ruleset-validator-architecture.spec.js +2 -2
  239. package/dist/core/validators/ruleset-validator-architecture.spec.js.map +1 -1
  240. package/dist/core/validators/ruleset-validator.service.d.ts +2 -0
  241. package/dist/core/validators/ruleset-validator.service.js +36 -11
  242. package/dist/core/validators/ruleset-validator.service.js.map +1 -1
  243. package/dist/core/validators/ruleset-validator.service.spec.js +347 -0
  244. package/dist/core/validators/ruleset-validator.service.spec.js.map +1 -1
  245. package/dist/domain/gate-evidence.d.ts +59 -0
  246. package/dist/domain/gate-evidence.js +38 -0
  247. package/dist/domain/gate-evidence.js.map +1 -0
  248. package/dist/domain/services/adr.service.d.ts +2 -2
  249. package/dist/domain/services/adr.service.js +12 -8
  250. package/dist/domain/services/adr.service.js.map +1 -1
  251. package/dist/domain/services/index.d.ts +1 -0
  252. package/dist/domain/services/index.js +3 -1
  253. package/dist/domain/services/index.js.map +1 -1
  254. package/dist/domain/services/moscow-prioritization.service.d.ts +44 -0
  255. package/dist/domain/services/moscow-prioritization.service.js +213 -0
  256. package/dist/domain/services/moscow-prioritization.service.js.map +1 -0
  257. package/dist/domain/services/moscow-prioritization.service.spec.d.ts +1 -0
  258. package/dist/domain/services/moscow-prioritization.service.spec.js +285 -0
  259. package/dist/domain/services/moscow-prioritization.service.spec.js.map +1 -0
  260. package/dist/domain/services/standards.service.spec.js +461 -1
  261. package/dist/domain/services/standards.service.spec.js.map +1 -1
  262. package/dist/infrastructure/adapters/webhook.adapter.d.ts +5 -0
  263. package/dist/infrastructure/adapters/webhook.adapter.js +19 -0
  264. package/dist/infrastructure/adapters/webhook.adapter.js.map +1 -0
  265. package/dist/infrastructure/cli/command-executor.spec.d.ts +1 -0
  266. package/dist/infrastructure/cli/command-executor.spec.js +149 -0
  267. package/dist/infrastructure/cli/command-executor.spec.js.map +1 -0
  268. package/dist/infrastructure/cli/providers/providers.spec.d.ts +1 -0
  269. package/dist/infrastructure/cli/providers/providers.spec.js +251 -0
  270. package/dist/infrastructure/cli/providers/providers.spec.js.map +1 -0
  271. package/package.json +23 -5
@@ -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
+ }