@vyuhlabs/dxkit 2.4.7 → 2.5.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 (309) hide show
  1. package/CHANGELOG.md +456 -30
  2. package/README.md +360 -439
  3. package/dist/analyzers/bom/gather.d.ts +3 -3
  4. package/dist/analyzers/bom/gather.js +3 -3
  5. package/dist/analyzers/bom/index.js +2 -2
  6. package/dist/analyzers/bom/index.js.map +1 -1
  7. package/dist/analyzers/dashboard/index.d.ts.map +1 -1
  8. package/dist/analyzers/dashboard/index.js +4 -3
  9. package/dist/analyzers/dashboard/index.js.map +1 -1
  10. package/dist/analyzers/developer/index.d.ts.map +1 -1
  11. package/dist/analyzers/developer/index.js +2 -1
  12. package/dist/analyzers/developer/index.js.map +1 -1
  13. package/dist/analyzers/dispatcher.d.ts +15 -0
  14. package/dist/analyzers/dispatcher.d.ts.map +1 -1
  15. package/dist/analyzers/dispatcher.js +42 -6
  16. package/dist/analyzers/dispatcher.js.map +1 -1
  17. package/dist/analyzers/health.d.ts.map +1 -1
  18. package/dist/analyzers/health.js +11 -1
  19. package/dist/analyzers/health.js.map +1 -1
  20. package/dist/analyzers/licenses/gather.d.ts +1 -1
  21. package/dist/analyzers/licenses/gather.d.ts.map +1 -1
  22. package/dist/analyzers/licenses/gather.js +18 -2
  23. package/dist/analyzers/licenses/gather.js.map +1 -1
  24. package/dist/analyzers/quality/index.d.ts.map +1 -1
  25. package/dist/analyzers/quality/index.js +10 -2
  26. package/dist/analyzers/quality/index.js.map +1 -1
  27. package/dist/analyzers/security/aggregator.d.ts.map +1 -1
  28. package/dist/analyzers/security/aggregator.js +8 -48
  29. package/dist/analyzers/security/aggregator.js.map +1 -1
  30. package/dist/analyzers/security/gather.d.ts +4 -3
  31. package/dist/analyzers/security/gather.d.ts.map +1 -1
  32. package/dist/analyzers/security/gather.js +23 -5
  33. package/dist/analyzers/security/gather.js.map +1 -1
  34. package/dist/analyzers/security/index.d.ts +1 -1
  35. package/dist/analyzers/security/index.js +2 -2
  36. package/dist/analyzers/security/index.js.map +1 -1
  37. package/dist/analyzers/tools/autogen-header.js +1 -1
  38. package/dist/analyzers/tools/cloc.js +3 -3
  39. package/dist/analyzers/tools/cloc.js.map +1 -1
  40. package/dist/analyzers/tools/deadline.d.ts +67 -0
  41. package/dist/analyzers/tools/deadline.d.ts.map +1 -0
  42. package/dist/analyzers/tools/deadline.js +81 -0
  43. package/dist/analyzers/tools/deadline.js.map +1 -0
  44. package/dist/analyzers/tools/exclusions.d.ts +6 -6
  45. package/dist/analyzers/tools/exclusions.js +6 -6
  46. package/dist/analyzers/tools/fingerprint.d.ts +91 -26
  47. package/dist/analyzers/tools/fingerprint.d.ts.map +1 -1
  48. package/dist/analyzers/tools/fingerprint.js +111 -22
  49. package/dist/analyzers/tools/fingerprint.js.map +1 -1
  50. package/dist/analyzers/tools/generic.d.ts.map +1 -1
  51. package/dist/analyzers/tools/generic.js +7 -2
  52. package/dist/analyzers/tools/generic.js.map +1 -1
  53. package/dist/analyzers/tools/gitleaks.d.ts +24 -1
  54. package/dist/analyzers/tools/gitleaks.d.ts.map +1 -1
  55. package/dist/analyzers/tools/gitleaks.js +21 -12
  56. package/dist/analyzers/tools/gitleaks.js.map +1 -1
  57. package/dist/analyzers/tools/graphify.js +1 -1
  58. package/dist/analyzers/tools/jscpd.js +1 -1
  59. package/dist/analyzers/tools/jscpd.js.map +1 -1
  60. package/dist/analyzers/tools/lint-label.d.ts +29 -0
  61. package/dist/analyzers/tools/lint-label.d.ts.map +1 -0
  62. package/dist/analyzers/tools/lint-label.js +23 -0
  63. package/dist/analyzers/tools/lint-label.js.map +1 -0
  64. package/dist/analyzers/tools/nuget-package-reference.d.ts +6 -4
  65. package/dist/analyzers/tools/nuget-package-reference.d.ts.map +1 -1
  66. package/dist/analyzers/tools/nuget-package-reference.js +7 -5
  67. package/dist/analyzers/tools/nuget-package-reference.js.map +1 -1
  68. package/dist/analyzers/tools/report-date.d.ts +17 -0
  69. package/dist/analyzers/tools/report-date.d.ts.map +1 -0
  70. package/dist/analyzers/tools/report-date.js +26 -0
  71. package/dist/analyzers/tools/report-date.js.map +1 -0
  72. package/dist/analyzers/tools/runner.js +3 -3
  73. package/dist/analyzers/tools/runner.js.map +1 -1
  74. package/dist/analyzers/tools/vendored-advisor.js +1 -1
  75. package/dist/analyzers/tools/walk-paths.d.ts +1 -1
  76. package/dist/analyzers/tools/walk-paths.js +1 -1
  77. package/dist/analyzers/tools/walk-source-files.js +1 -1
  78. package/dist/analyzers/types.d.ts +6 -4
  79. package/dist/analyzers/types.d.ts.map +1 -1
  80. package/dist/baseline/baseline-file.d.ts +104 -0
  81. package/dist/baseline/baseline-file.d.ts.map +1 -0
  82. package/dist/baseline/baseline-file.js +110 -0
  83. package/dist/baseline/baseline-file.js.map +1 -0
  84. package/dist/baseline/check-renderers.d.ts +108 -0
  85. package/dist/baseline/check-renderers.d.ts.map +1 -0
  86. package/dist/baseline/check-renderers.js +379 -0
  87. package/dist/baseline/check-renderers.js.map +1 -0
  88. package/dist/baseline/check.d.ts +127 -0
  89. package/dist/baseline/check.d.ts.map +1 -0
  90. package/dist/baseline/check.js +462 -0
  91. package/dist/baseline/check.js.map +1 -0
  92. package/dist/baseline/content-hash.d.ts +83 -0
  93. package/dist/baseline/content-hash.d.ts.map +1 -0
  94. package/dist/baseline/content-hash.js +131 -0
  95. package/dist/baseline/content-hash.js.map +1 -0
  96. package/dist/baseline/create.d.ts +96 -0
  97. package/dist/baseline/create.d.ts.map +1 -0
  98. package/dist/baseline/create.js +339 -0
  99. package/dist/baseline/create.js.map +1 -0
  100. package/dist/baseline/entry-to-located.d.ts +35 -0
  101. package/dist/baseline/entry-to-located.d.ts.map +1 -0
  102. package/dist/baseline/entry-to-located.js +72 -0
  103. package/dist/baseline/entry-to-located.js.map +1 -0
  104. package/dist/baseline/finding-identity.d.ts +47 -0
  105. package/dist/baseline/finding-identity.d.ts.map +1 -0
  106. package/dist/baseline/finding-identity.js +292 -0
  107. package/dist/baseline/finding-identity.js.map +1 -0
  108. package/dist/baseline/git-aware-match.d.ts +146 -0
  109. package/dist/baseline/git-aware-match.d.ts.map +1 -0
  110. package/dist/baseline/git-aware-match.js +439 -0
  111. package/dist/baseline/git-aware-match.js.map +1 -0
  112. package/dist/baseline/policy.d.ts +171 -0
  113. package/dist/baseline/policy.d.ts.map +1 -0
  114. package/dist/baseline/policy.js +206 -0
  115. package/dist/baseline/policy.js.map +1 -0
  116. package/dist/baseline/producers/health.d.ts +30 -0
  117. package/dist/baseline/producers/health.d.ts.map +1 -0
  118. package/dist/baseline/producers/health.js +42 -0
  119. package/dist/baseline/producers/health.js.map +1 -0
  120. package/dist/baseline/producers/index.d.ts +164 -0
  121. package/dist/baseline/producers/index.d.ts.map +1 -0
  122. package/dist/baseline/producers/index.js +200 -0
  123. package/dist/baseline/producers/index.js.map +1 -0
  124. package/dist/baseline/producers/licenses.d.ts +23 -0
  125. package/dist/baseline/producers/licenses.d.ts.map +1 -0
  126. package/dist/baseline/producers/licenses.js +46 -0
  127. package/dist/baseline/producers/licenses.js.map +1 -0
  128. package/dist/baseline/producers/quality.d.ts +39 -0
  129. package/dist/baseline/producers/quality.d.ts.map +1 -0
  130. package/dist/baseline/producers/quality.js +84 -0
  131. package/dist/baseline/producers/quality.js.map +1 -0
  132. package/dist/baseline/producers/secret-hmac.d.ts +45 -0
  133. package/dist/baseline/producers/secret-hmac.d.ts.map +1 -0
  134. package/dist/baseline/producers/secret-hmac.js +70 -0
  135. package/dist/baseline/producers/secret-hmac.js.map +1 -0
  136. package/dist/baseline/producers/security.d.ts +59 -0
  137. package/dist/baseline/producers/security.d.ts.map +1 -0
  138. package/dist/baseline/producers/security.js +135 -0
  139. package/dist/baseline/producers/security.js.map +1 -0
  140. package/dist/baseline/producers/tests.d.ts +36 -0
  141. package/dist/baseline/producers/tests.d.ts.map +1 -0
  142. package/dist/baseline/producers/tests.js +69 -0
  143. package/dist/baseline/producers/tests.js.map +1 -0
  144. package/dist/baseline/salt.d.ts +45 -0
  145. package/dist/baseline/salt.d.ts.map +1 -0
  146. package/dist/baseline/salt.js +113 -0
  147. package/dist/baseline/salt.js.map +1 -0
  148. package/dist/baseline/show.d.ts +79 -0
  149. package/dist/baseline/show.d.ts.map +1 -0
  150. package/dist/baseline/show.js +233 -0
  151. package/dist/baseline/show.js.map +1 -0
  152. package/dist/baseline/types.d.ts +482 -0
  153. package/dist/baseline/types.d.ts.map +1 -0
  154. package/dist/baseline/types.js +53 -0
  155. package/dist/baseline/types.js.map +1 -0
  156. package/dist/cli.d.ts.map +1 -1
  157. package/dist/cli.js +395 -92
  158. package/dist/cli.js.map +1 -1
  159. package/dist/codebase-scanner.d.ts.map +1 -1
  160. package/dist/codebase-scanner.js +0 -1
  161. package/dist/codebase-scanner.js.map +1 -1
  162. package/dist/constants.d.ts.map +1 -1
  163. package/dist/constants.js +0 -4
  164. package/dist/constants.js.map +1 -1
  165. package/dist/detect.js +3 -3
  166. package/dist/detect.js.map +1 -1
  167. package/dist/doctor.d.ts.map +1 -1
  168. package/dist/doctor.js +22 -25
  169. package/dist/doctor.js.map +1 -1
  170. package/dist/fail-on.d.ts +84 -0
  171. package/dist/fail-on.d.ts.map +1 -0
  172. package/dist/fail-on.js +128 -0
  173. package/dist/fail-on.js.map +1 -0
  174. package/dist/generator.d.ts.map +1 -1
  175. package/dist/generator.js +2 -141
  176. package/dist/generator.js.map +1 -1
  177. package/dist/languages/capabilities/provider.d.ts +4 -4
  178. package/dist/languages/capabilities/types.d.ts +1 -1
  179. package/dist/languages/csharp.d.ts.map +1 -1
  180. package/dist/languages/csharp.js +15 -24
  181. package/dist/languages/csharp.js.map +1 -1
  182. package/dist/languages/go.d.ts.map +1 -1
  183. package/dist/languages/go.js +0 -15
  184. package/dist/languages/go.js.map +1 -1
  185. package/dist/languages/index.d.ts +4 -3
  186. package/dist/languages/index.d.ts.map +1 -1
  187. package/dist/languages/index.js +3 -2
  188. package/dist/languages/index.js.map +1 -1
  189. package/dist/languages/java.d.ts.map +1 -1
  190. package/dist/languages/java.js +0 -6
  191. package/dist/languages/java.js.map +1 -1
  192. package/dist/languages/kotlin.d.ts.map +1 -1
  193. package/dist/languages/kotlin.js +0 -11
  194. package/dist/languages/kotlin.js.map +1 -1
  195. package/dist/languages/python.d.ts.map +1 -1
  196. package/dist/languages/python.js +0 -15
  197. package/dist/languages/python.js.map +1 -1
  198. package/dist/languages/ruby.d.ts.map +1 -1
  199. package/dist/languages/ruby.js +0 -6
  200. package/dist/languages/ruby.js.map +1 -1
  201. package/dist/languages/rust.d.ts.map +1 -1
  202. package/dist/languages/rust.js +0 -4
  203. package/dist/languages/rust.js.map +1 -1
  204. package/dist/languages/types.d.ts +9 -35
  205. package/dist/languages/types.d.ts.map +1 -1
  206. package/dist/languages/typescript.d.ts.map +1 -1
  207. package/dist/languages/typescript.js +26 -4
  208. package/dist/languages/typescript.js.map +1 -1
  209. package/dist/lib.d.ts +2 -3
  210. package/dist/lib.d.ts.map +1 -1
  211. package/dist/lib.js +3 -6
  212. package/dist/lib.js.map +1 -1
  213. package/dist/prompts.d.ts.map +1 -1
  214. package/dist/prompts.js +0 -10
  215. package/dist/prompts.js.map +1 -1
  216. package/dist/report-schema.d.ts +42 -0
  217. package/dist/report-schema.d.ts.map +1 -0
  218. package/dist/report-schema.js +54 -0
  219. package/dist/report-schema.js.map +1 -0
  220. package/dist/ship-installers.d.ts +106 -0
  221. package/dist/ship-installers.d.ts.map +1 -0
  222. package/dist/ship-installers.js +415 -0
  223. package/dist/ship-installers.js.map +1 -0
  224. package/dist/types.d.ts +0 -4
  225. package/dist/types.d.ts.map +1 -1
  226. package/dist/update.d.ts.map +1 -1
  227. package/dist/update.js +0 -4
  228. package/dist/update.js.map +1 -1
  229. package/package.json +17 -11
  230. package/templates/.claude/agents/onboarding.md +5 -4
  231. package/templates/.claude/agents-available/codebase-explorer.md +1 -1
  232. package/templates/.claude/agents-available/debugger.md +2 -2
  233. package/templates/.claude/agents-available/health-auditor.md +2 -2
  234. package/templates/.claude/commands/doctor.md +20 -12
  235. package/templates/.claude/skills/build/SKILL.md.template +22 -30
  236. package/templates/.claude/skills/deploy/SKILL.md.template +5 -25
  237. package/templates/.claude/skills/doctor/SKILL.md +24 -47
  238. package/templates/.claude/skills/gcloud/SKILL.md +5 -5
  239. package/templates/.claude/skills/learned/SKILL.md +1 -1
  240. package/templates/.claude/skills/pulumi/SKILL.md +2 -2
  241. package/templates/.claude/skills/quality/SKILL.md.template +4 -23
  242. package/templates/.claude/skills/review/SKILL.md.template +4 -3
  243. package/templates/.claude/skills/scaffold/SKILL.md.template +5 -15
  244. package/templates/.claude/skills/secrets/SKILL.md +20 -21
  245. package/templates/.claude/skills/session/SKILL.md +20 -31
  246. package/templates/.claude/skills/test/SKILL.md.template +1 -7
  247. package/templates/.devcontainer/devcontainer.json +81 -0
  248. package/templates/.devcontainer/install-agent-clis.sh +42 -0
  249. package/templates/.devcontainer/post-create.sh +67 -0
  250. package/templates/.githooks/pre-commit +55 -0
  251. package/templates/.githooks/pre-push +63 -0
  252. package/templates/.github/workflows/dxkit-baseline-refresh.yml +78 -0
  253. package/templates/.github/workflows/dxkit-guardrails.yml +98 -0
  254. package/templates/CLAUDE.md.template +62 -196
  255. package/dist/project-yaml.d.ts +0 -13
  256. package/dist/project-yaml.d.ts.map +0 -1
  257. package/dist/project-yaml.js +0 -188
  258. package/dist/project-yaml.js.map +0 -1
  259. package/templates/.ai/README.md +0 -117
  260. package/templates/.ai/prompts/execution-prompt.md +0 -9
  261. package/templates/.ai/prompts/planning-prompt.md +0 -18
  262. package/templates/.ai/prompts/session-end-template.md +0 -182
  263. package/templates/.ai/prompts/session-end.md +0 -132
  264. package/templates/.ai/prompts/session-start.md +0 -109
  265. package/templates/.ai/prompts/step-by-step.md +0 -113
  266. package/templates/.ai/sessions/.gitkeep +0 -0
  267. package/templates/.claude/commands/setup-pr-review.md +0 -72
  268. package/templates/.devcontainer/Dockerfile.dev.template +0 -89
  269. package/templates/.devcontainer/devcontainer.json.template +0 -184
  270. package/templates/.devcontainer/docker-compose.yml.template +0 -105
  271. package/templates/.devcontainer/init-scripts/01-init.sql.template +0 -12
  272. package/templates/.devcontainer/post-create.sh.template +0 -298
  273. package/templates/.github/workflows/ci.yml.template +0 -399
  274. package/templates/.github/workflows/quality.yml.template +0 -376
  275. package/templates/.pre-commit-config.yaml.template +0 -106
  276. package/templates/.project/config/edit_config.py +0 -275
  277. package/templates/.project/config/project_config.py +0 -894
  278. package/templates/.project/scripts/codegen/generate-all.sh +0 -20
  279. package/templates/.project/scripts/codegen/validate-all.sh +0 -17
  280. package/templates/.project/scripts/docs/generate-all.sh +0 -30
  281. package/templates/.project/scripts/docs/serve.sh +0 -20
  282. package/templates/.project/scripts/quality/fix-all.sh +0 -138
  283. package/templates/.project/scripts/quality/lint-go.sh +0 -34
  284. package/templates/.project/scripts/quality/lint-python.sh +0 -54
  285. package/templates/.project/scripts/quality/run-all.sh +0 -497
  286. package/templates/.project/scripts/session/commit.sh +0 -70
  287. package/templates/.project/scripts/session/create-pr.sh +0 -165
  288. package/templates/.project/scripts/session/end.sh +0 -207
  289. package/templates/.project/scripts/session/start.sh +0 -233
  290. package/templates/.project/scripts/setup/doctor.sh +0 -404
  291. package/templates/.project/scripts/setup/interactive-setup.sh +0 -585
  292. package/templates/.project/scripts/sync/sync-template.sh +0 -328
  293. package/templates/.project/scripts/test/run-all.sh +0 -179
  294. package/templates/.project/scripts/test/run-quick.sh +0 -25
  295. package/templates/Makefile +0 -514
  296. package/templates/config/versions.yaml +0 -57
  297. package/templates/configs/go/.golangci.yml.template +0 -172
  298. package/templates/configs/go/go.mod.template +0 -15
  299. package/templates/configs/java/README.md +0 -6
  300. package/templates/configs/kotlin/README.md +0 -6
  301. package/templates/configs/node/package.json.template +0 -67
  302. package/templates/configs/node/tsconfig.json.template +0 -53
  303. package/templates/configs/python/pyproject.toml.template +0 -92
  304. package/templates/configs/python/pytest.ini.template +0 -64
  305. package/templates/configs/python/ruff.toml.template +0 -79
  306. package/templates/configs/ruby/README.md +0 -6
  307. package/templates/configs/rust/Cargo.toml.template +0 -51
  308. package/templates/configs/shared/.editorconfig +0 -67
  309. package/templates/scripts/validate-templates.sh +0 -449
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ /**
3
+ * On-disk baseline file — `.dxkit/baselines/<name>.json`.
4
+ *
5
+ * The baseline file is the durable contract between today's scan
6
+ * and tomorrow's guardrail check. It carries:
7
+ *
8
+ * - Per-finding identities (`BaselineEntry[]`) for cross-run
9
+ * matching.
10
+ * - Repo state at capture time (commit SHA, branch) so the
11
+ * git-aware matcher knows what to diff against.
12
+ * - Analysis-environment metadata (dxkit version, tool versions,
13
+ * policy hash, config hashes) so the policy classifier can
14
+ * reclassify newly-detected findings as `tooling_drift` or
15
+ * `config_drift` rather than blocking them as regressions.
16
+ * - The salt-resolution mode used to derive any secret-HMAC
17
+ * entries, so the matcher knows whether HMAC comparison is
18
+ * available on the current run.
19
+ *
20
+ * Raw finding payloads (titles, secret values, source excerpts) are
21
+ * NEVER stored. The file is committable to git: a leak surfaces
22
+ * identity fingerprints + locations, but no exploitable content.
23
+ */
24
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ var desc = Object.getOwnPropertyDescriptor(m, k);
27
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
28
+ desc = { enumerable: true, get: function() { return m[k]; } };
29
+ }
30
+ Object.defineProperty(o, k2, desc);
31
+ }) : (function(o, m, k, k2) {
32
+ if (k2 === undefined) k2 = k;
33
+ o[k2] = m[k];
34
+ }));
35
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
36
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
37
+ }) : function(o, v) {
38
+ o["default"] = v;
39
+ });
40
+ var __importStar = (this && this.__importStar) || (function () {
41
+ var ownKeys = function(o) {
42
+ ownKeys = Object.getOwnPropertyNames || function (o) {
43
+ var ar = [];
44
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
45
+ return ar;
46
+ };
47
+ return ownKeys(o);
48
+ };
49
+ return function (mod) {
50
+ if (mod && mod.__esModule) return mod;
51
+ var result = {};
52
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
53
+ __setModuleDefault(result, mod);
54
+ return result;
55
+ };
56
+ })();
57
+ Object.defineProperty(exports, "__esModule", { value: true });
58
+ exports.DEFAULT_BASELINE_DIR = exports.DEFAULT_BASELINE_NAME = exports.BASELINE_SCHEMA_VERSION = void 0;
59
+ exports.pathForBaseline = pathForBaseline;
60
+ exports.writeBaselineFile = writeBaselineFile;
61
+ exports.readBaselineFile = readBaselineFile;
62
+ const fs = __importStar(require("fs"));
63
+ const path = __importStar(require("path"));
64
+ /** Banner stamped on every baseline file. Bump when the on-disk
65
+ * shape changes incompatibly so readers can refuse old / new files
66
+ * rather than silently mis-parse them. */
67
+ exports.BASELINE_SCHEMA_VERSION = 'dxkit-baseline/v1';
68
+ /** Default baseline name when the user doesn't pass `--name`. */
69
+ exports.DEFAULT_BASELINE_NAME = 'main';
70
+ /** Default storage directory. Lives under `.dxkit/` alongside the
71
+ * generated reports + the salt file. */
72
+ exports.DEFAULT_BASELINE_DIR = path.join('.dxkit', 'baselines');
73
+ /** Absolute path for a named baseline inside `cwd`. */
74
+ function pathForBaseline(cwd, name) {
75
+ return path.join(cwd, exports.DEFAULT_BASELINE_DIR, `${name}.json`);
76
+ }
77
+ /**
78
+ * Write a baseline file. Creates the parent directory when missing.
79
+ * Pretty-printed JSON for git-friendly diffs.
80
+ */
81
+ function writeBaselineFile(filePath, file) {
82
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
83
+ fs.writeFileSync(filePath, JSON.stringify(file, null, 2) + '\n', 'utf8');
84
+ }
85
+ /**
86
+ * Read + validate a baseline file. Throws when the schema banner is
87
+ * missing or unrecognized — fail fast rather than letting the
88
+ * matcher consume a malformed file and produce wrong verdicts.
89
+ */
90
+ function readBaselineFile(filePath) {
91
+ const raw = fs.readFileSync(filePath, 'utf8');
92
+ let parsed;
93
+ try {
94
+ parsed = JSON.parse(raw);
95
+ }
96
+ catch (err) {
97
+ throw new Error(`baseline file is not valid JSON: ${filePath} (${err.message})`);
98
+ }
99
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
100
+ throw new Error(`baseline file root is not an object: ${filePath}`);
101
+ }
102
+ const obj = parsed;
103
+ if (obj.schemaVersion !== exports.BASELINE_SCHEMA_VERSION) {
104
+ throw new Error(`baseline file schemaVersion is ${JSON.stringify(obj.schemaVersion)}; ` +
105
+ `this dxkit understands ${JSON.stringify(exports.BASELINE_SCHEMA_VERSION)} only ` +
106
+ `(${filePath})`);
107
+ }
108
+ return parsed;
109
+ }
110
+ //# sourceMappingURL=baseline-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseline-file.js","sourceRoot":"","sources":["../../src/baseline/baseline-file.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgFH,0CAEC;AAMD,8CAGC;AAOD,4CAoBC;AApHD,uCAAyB;AACzB,2CAA6B;AAI7B;;2CAE2C;AAC9B,QAAA,uBAAuB,GAAG,mBAA4B,CAAC;AAGpE,iEAAiE;AACpD,QAAA,qBAAqB,GAAG,MAAe,CAAC;AA6DrD;yCACyC;AAC5B,QAAA,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AAErE,uDAAuD;AACvD,SAAgB,eAAe,CAAC,GAAW,EAAE,IAAY;IACvD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,4BAAoB,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;AAC9D,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,QAAgB,EAAE,IAAkB;IACpE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3E,CAAC;AAED;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,QAAgB;IAC/C,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9C,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,oCAAoC,QAAQ,KAAM,GAAa,CAAC,OAAO,GAAG,CAAC,CAAC;IAC9F,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,GAAG,GAAG,MAAqC,CAAC;IAClD,IAAI,GAAG,CAAC,aAAa,KAAK,+BAAuB,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CACb,kCAAkC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI;YACrE,0BAA0B,IAAI,CAAC,SAAS,CAAC,+BAAuB,CAAC,QAAQ;YACzE,IAAI,QAAQ,GAAG,CAClB,CAAC;IACJ,CAAC;IACD,OAAO,MAAsB,CAAC;AAChC,CAAC"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Output renderers for `vyuh-dxkit guardrail check`.
3
+ *
4
+ * Three target surfaces, one shared `GuardrailCheckResult`:
5
+ *
6
+ * - **Console** (`renderConsole`) — human-readable text for
7
+ * terminal output. Grouped by verdict (blocking / warning /
8
+ * informational), each pair showing status + kind + locator +
9
+ * severity + reason chain. Color codes via the shared logger
10
+ * palette so output blends with the rest of dxkit's CLI.
11
+ *
12
+ * - **JSON** (`renderJson`) — schema-stable machine-readable
13
+ * payload (top-level `schema: 'dxkit.guardrail-check.v1'`).
14
+ * Designed for AI agents and CI runners that need to programmatically
15
+ * decide what to do. Includes the matcher's per-pair detail,
16
+ * classifier verdicts, envelope drift, and the resolved policy.
17
+ *
18
+ * - **Markdown** (`renderMarkdown`) — Phase 4 PR-comment template.
19
+ * Compact, table-heavy, status-banner-first. Renders into the
20
+ * `dxkit-guardrails.yml` workflow's PR comment unchanged. No
21
+ * emojis (bot-friendly; Phase 4 templates can layer presentation
22
+ * on top).
23
+ *
24
+ * Pure modules. No I/O — callers handle stdout writing, file
25
+ * writing, or PR-comment posting.
26
+ */
27
+ import type { EnvelopeDrift, GuardrailCheckResult } from './check';
28
+ import type { BrownfieldPolicy } from './policy';
29
+ import type { FindingStatus, MatchReason } from './types';
30
+ /**
31
+ * Render the check result as a human-readable text block. Returns a
32
+ * single multi-line string; callers route it to stdout.
33
+ */
34
+ export declare function renderConsole(result: GuardrailCheckResult): string;
35
+ export declare const GUARDRAIL_JSON_SCHEMA: "dxkit.guardrail-check.v1";
36
+ /**
37
+ * Schema-stable machine-readable payload. `schema` at the top level
38
+ * lets downstream tooling version-gate before reading further fields;
39
+ * bump it when the shape changes incompatibly.
40
+ */
41
+ export interface GuardrailJsonPayload {
42
+ readonly schema: typeof GUARDRAIL_JSON_SCHEMA;
43
+ readonly verdict: {
44
+ readonly blocks: boolean;
45
+ readonly warns: boolean;
46
+ readonly exitCode: 0 | 1;
47
+ };
48
+ readonly baseline: {
49
+ readonly path: string;
50
+ readonly name: string;
51
+ readonly createdAt: string;
52
+ readonly commitSha: string;
53
+ readonly branch: string;
54
+ readonly findingsCount: number;
55
+ };
56
+ readonly current: {
57
+ readonly commitSha: string;
58
+ readonly branch: string;
59
+ readonly findingsCount: number;
60
+ };
61
+ readonly matcher: {
62
+ readonly gitAware: boolean;
63
+ readonly degradedReason?: string;
64
+ };
65
+ readonly envelopeDrift: EnvelopeDrift;
66
+ readonly policy: {
67
+ readonly mode: BrownfieldPolicy['mode'];
68
+ readonly block: ReadonlyArray<FindingStatus>;
69
+ readonly warn: ReadonlyArray<FindingStatus>;
70
+ readonly confidence: BrownfieldPolicy['confidence'];
71
+ readonly blockRules: BrownfieldPolicy['blockRules'];
72
+ };
73
+ readonly summary: {
74
+ readonly pairs: number;
75
+ readonly blocking: number;
76
+ readonly warning: number;
77
+ readonly persisted: number;
78
+ readonly resolved: number;
79
+ };
80
+ readonly pairs: ReadonlyArray<{
81
+ readonly status: FindingStatus;
82
+ readonly blocks: boolean;
83
+ readonly warns: boolean;
84
+ readonly priorId?: string;
85
+ readonly currentId?: string;
86
+ readonly confidence: number;
87
+ readonly kind: string;
88
+ readonly severity?: string;
89
+ readonly file?: string;
90
+ readonly line?: number;
91
+ readonly overlapsChangedLines?: boolean;
92
+ readonly reasons: ReadonlyArray<MatchReason>;
93
+ }>;
94
+ }
95
+ export declare function renderJson(result: GuardrailCheckResult): GuardrailJsonPayload;
96
+ /**
97
+ * PR-comment-friendly markdown. Phase 4's GitHub Actions workflow
98
+ * pastes the output verbatim into a PR comment. Format:
99
+ *
100
+ * ## Guardrail: PASSED / BLOCKED
101
+ * one-line summary
102
+ * <blocking findings table, when any>
103
+ * <warnings collapsible section, when any>
104
+ * <drift signal callout, when envelope drifted>
105
+ * <provenance footnote>
106
+ */
107
+ export declare function renderMarkdown(result: GuardrailCheckResult): string;
108
+ //# sourceMappingURL=check-renderers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-renderers.d.ts","sourceRoot":"","sources":["../../src/baseline/check-renderers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,379 @@
1
+ "use strict";
2
+ /**
3
+ * Output renderers for `vyuh-dxkit guardrail check`.
4
+ *
5
+ * Three target surfaces, one shared `GuardrailCheckResult`:
6
+ *
7
+ * - **Console** (`renderConsole`) — human-readable text for
8
+ * terminal output. Grouped by verdict (blocking / warning /
9
+ * informational), each pair showing status + kind + locator +
10
+ * severity + reason chain. Color codes via the shared logger
11
+ * palette so output blends with the rest of dxkit's CLI.
12
+ *
13
+ * - **JSON** (`renderJson`) — schema-stable machine-readable
14
+ * payload (top-level `schema: 'dxkit.guardrail-check.v1'`).
15
+ * Designed for AI agents and CI runners that need to programmatically
16
+ * decide what to do. Includes the matcher's per-pair detail,
17
+ * classifier verdicts, envelope drift, and the resolved policy.
18
+ *
19
+ * - **Markdown** (`renderMarkdown`) — Phase 4 PR-comment template.
20
+ * Compact, table-heavy, status-banner-first. Renders into the
21
+ * `dxkit-guardrails.yml` workflow's PR comment unchanged. No
22
+ * emojis (bot-friendly; Phase 4 templates can layer presentation
23
+ * on top).
24
+ *
25
+ * Pure modules. No I/O — callers handle stdout writing, file
26
+ * writing, or PR-comment posting.
27
+ */
28
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
29
+ if (k2 === undefined) k2 = k;
30
+ var desc = Object.getOwnPropertyDescriptor(m, k);
31
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
32
+ desc = { enumerable: true, get: function() { return m[k]; } };
33
+ }
34
+ Object.defineProperty(o, k2, desc);
35
+ }) : (function(o, m, k, k2) {
36
+ if (k2 === undefined) k2 = k;
37
+ o[k2] = m[k];
38
+ }));
39
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
40
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
41
+ }) : function(o, v) {
42
+ o["default"] = v;
43
+ });
44
+ var __importStar = (this && this.__importStar) || (function () {
45
+ var ownKeys = function(o) {
46
+ ownKeys = Object.getOwnPropertyNames || function (o) {
47
+ var ar = [];
48
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
49
+ return ar;
50
+ };
51
+ return ownKeys(o);
52
+ };
53
+ return function (mod) {
54
+ if (mod && mod.__esModule) return mod;
55
+ var result = {};
56
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
57
+ __setModuleDefault(result, mod);
58
+ return result;
59
+ };
60
+ })();
61
+ Object.defineProperty(exports, "__esModule", { value: true });
62
+ exports.GUARDRAIL_JSON_SCHEMA = void 0;
63
+ exports.renderConsole = renderConsole;
64
+ exports.renderJson = renderJson;
65
+ exports.renderMarkdown = renderMarkdown;
66
+ const logger = __importStar(require("../logger"));
67
+ // ─── Console renderer ─────────────────────────────────────────────────────
68
+ /**
69
+ * Render the check result as a human-readable text block. Returns a
70
+ * single multi-line string; callers route it to stdout.
71
+ */
72
+ function renderConsole(result) {
73
+ const lines = [];
74
+ // Verdict banner. Single line at the top so a developer skimming
75
+ // terminal output sees pass/fail without scrolling.
76
+ lines.push(verdictBanner(result));
77
+ lines.push('');
78
+ // Provenance: what was compared against what. Inline so the user
79
+ // can verify they're checking against the intended baseline.
80
+ lines.push(logger.bold('Baseline'));
81
+ lines.push(` Path: ${result.baselinePath}`);
82
+ lines.push(` Name: ${result.baseline.name}`);
83
+ lines.push(` Captured: ${result.baseline.createdAt}`);
84
+ lines.push(` Commit: ${shortSha(result.baseline.repo.commitSha)} (${result.baseline.repo.branch || 'detached'})`);
85
+ lines.push(` Findings: ${result.baseline.findings.length}`);
86
+ lines.push('');
87
+ lines.push(logger.bold('Current'));
88
+ lines.push(` Commit: ${shortSha(result.current.repoState.commitSha)}`);
89
+ lines.push(` Findings: ${result.current.findings.length}`);
90
+ lines.push(` Matcher: ${result.matchResult.gitAware ? 'git-aware' : `degraded (${result.matchResult.degradedReason ?? 'unknown reason'})`}`);
91
+ lines.push('');
92
+ const driftLines = formatDrift(result.envelopeDrift);
93
+ if (driftLines.length > 0) {
94
+ lines.push(logger.bold('Envelope drift'));
95
+ for (const l of driftLines)
96
+ lines.push(` ${l}`);
97
+ lines.push('');
98
+ }
99
+ // Group + render pairs by verdict bucket. Buckets ordered so the
100
+ // most actionable surfaces first.
101
+ const blocking = result.pairs.filter((p) => p.classification.blocks);
102
+ const warning = result.pairs.filter((p) => !p.classification.blocks && p.classification.warns);
103
+ const persisted = result.pairs.filter((p) => !p.classification.blocks &&
104
+ !p.classification.warns &&
105
+ (p.classification.status === 'persisted' || p.classification.status === 'relocated'));
106
+ const removed = result.pairs.filter((p) => p.classification.status === 'removed');
107
+ if (blocking.length > 0) {
108
+ lines.push(logger.bold(`Blocking (${blocking.length})`));
109
+ for (const p of blocking)
110
+ lines.push(...formatPairLines(p, ' '));
111
+ lines.push('');
112
+ }
113
+ if (warning.length > 0) {
114
+ lines.push(logger.bold(`Warnings (${warning.length})`));
115
+ for (const p of warning)
116
+ lines.push(...formatPairLines(p, ' '));
117
+ lines.push('');
118
+ }
119
+ if (removed.length > 0) {
120
+ lines.push(logger.bold(`Resolved (${removed.length})`));
121
+ for (const p of removed)
122
+ lines.push(...formatPairLines(p, ' '));
123
+ lines.push('');
124
+ }
125
+ // Always show a summary footer — sets expectations for what
126
+ // happens next (exit code, what to read on a fail).
127
+ lines.push(logger.bold('Summary'));
128
+ lines.push(` Pairs: ${result.pairs.length} (blocking: ${blocking.length}, ` +
129
+ `warning: ${warning.length}, persisted: ${persisted.length}, ` +
130
+ `resolved: ${removed.length})`);
131
+ lines.push(` Verdict: ${result.blocks ? 'BLOCKED' : result.warns ? 'PASSED (with warnings)' : 'PASSED'}`);
132
+ lines.push(` Exit code: ${result.blocks ? 1 : 0}`);
133
+ if (result.blocks) {
134
+ lines.push('');
135
+ lines.push(` Re-run with --json for a machine-readable payload, or --markdown to capture a PR-comment-friendly report.`);
136
+ }
137
+ return lines.join('\n');
138
+ }
139
+ function verdictBanner(result) {
140
+ if (result.blocks) {
141
+ const count = result.pairs.filter((p) => p.classification.blocks).length;
142
+ return logger.bold(`Guardrail BLOCKED — ${count} new regression${count === 1 ? '' : 's'}`);
143
+ }
144
+ if (result.warns) {
145
+ const count = result.pairs.filter((p) => p.classification.warns).length;
146
+ return logger.bold(`Guardrail PASSED — ${count} warning${count === 1 ? '' : 's'}`);
147
+ }
148
+ return logger.bold('Guardrail PASSED');
149
+ }
150
+ function formatPairLines(p, indent) {
151
+ const out = [];
152
+ const loc = locatorProse(p);
153
+ const sev = p.severity ? `[${p.severity}]` : '';
154
+ const conf = p.pair.confidence < 1 ? ` (${p.pair.confidence.toFixed(2)})` : '';
155
+ out.push(`${indent}${statusLabel(p.classification.status)} ${sev} ${p.kind} ${loc}${conf}`
156
+ .replace(/\s+/g, ' ')
157
+ .trim());
158
+ for (const r of p.classification.reasons) {
159
+ out.push(`${indent} · ${r.code}: ${r.detail}`);
160
+ }
161
+ return out;
162
+ }
163
+ function statusLabel(status) {
164
+ switch (status) {
165
+ case 'added':
166
+ return 'ADDED';
167
+ case 'removed':
168
+ return 'RESOLVED';
169
+ case 'persisted':
170
+ return 'PERSISTED';
171
+ case 'relocated':
172
+ return 'RELOCATED';
173
+ case 'tooling_drift':
174
+ return 'TOOLING-DRIFT';
175
+ case 'config_drift':
176
+ return 'CONFIG-DRIFT';
177
+ case 'newly_detected':
178
+ return 'NEWLY-DETECTED';
179
+ case 'probable_existing':
180
+ return 'PROBABLE-EXISTING';
181
+ case 'uncertain':
182
+ return 'UNCERTAIN';
183
+ case 'fixed':
184
+ return 'FIXED';
185
+ }
186
+ }
187
+ function locatorProse(p) {
188
+ if (p.file === undefined)
189
+ return '';
190
+ return p.line !== undefined && p.line > 0 ? `${p.file}:${p.line}` : p.file;
191
+ }
192
+ function shortSha(sha) {
193
+ if (!sha)
194
+ return '(no-commit)';
195
+ return sha.slice(0, 8);
196
+ }
197
+ function formatDrift(drift) {
198
+ const out = [];
199
+ if (drift.dxkitVersionChanged)
200
+ out.push('dxkit version changed since baseline capture');
201
+ if (drift.toolchainHashChanged)
202
+ out.push('toolchainHash changed');
203
+ if (drift.policyHashChanged)
204
+ out.push('policy hash changed');
205
+ if (drift.ignoreHashChanged)
206
+ out.push('.dxkit-ignore changed');
207
+ if (drift.configHashChanged)
208
+ out.push('.vyuh-dxkit.json changed');
209
+ for (const d of drift.toolVersionDiffs) {
210
+ out.push(`tool drift: ${d.tool} ${d.baselineVersion ?? '(absent)'} → ${d.currentVersion ?? '(absent)'}`);
211
+ }
212
+ return out;
213
+ }
214
+ // ─── JSON renderer ────────────────────────────────────────────────────────
215
+ exports.GUARDRAIL_JSON_SCHEMA = 'dxkit.guardrail-check.v1';
216
+ function renderJson(result) {
217
+ const blocking = result.pairs.filter((p) => p.classification.blocks).length;
218
+ const warning = result.pairs.filter((p) => !p.classification.blocks && p.classification.warns).length;
219
+ const persisted = result.pairs.filter((p) => !p.classification.blocks &&
220
+ !p.classification.warns &&
221
+ (p.classification.status === 'persisted' || p.classification.status === 'relocated')).length;
222
+ const resolved = result.pairs.filter((p) => p.classification.status === 'removed').length;
223
+ return {
224
+ schema: exports.GUARDRAIL_JSON_SCHEMA,
225
+ verdict: { blocks: result.blocks, warns: result.warns, exitCode: result.blocks ? 1 : 0 },
226
+ baseline: {
227
+ path: result.baselinePath,
228
+ name: result.baseline.name,
229
+ createdAt: result.baseline.createdAt,
230
+ commitSha: result.baseline.repo.commitSha,
231
+ branch: result.baseline.repo.branch,
232
+ findingsCount: result.baseline.findings.length,
233
+ },
234
+ current: {
235
+ commitSha: result.current.repoState.commitSha,
236
+ branch: result.current.repoState.branch,
237
+ findingsCount: result.current.findings.length,
238
+ },
239
+ matcher: {
240
+ gitAware: result.matchResult.gitAware,
241
+ ...(result.matchResult.degradedReason
242
+ ? { degradedReason: result.matchResult.degradedReason }
243
+ : {}),
244
+ },
245
+ envelopeDrift: result.envelopeDrift,
246
+ policy: {
247
+ mode: result.policy.mode,
248
+ block: result.policy.block,
249
+ warn: result.policy.warn,
250
+ confidence: result.policy.confidence,
251
+ blockRules: result.policy.blockRules,
252
+ },
253
+ summary: {
254
+ pairs: result.pairs.length,
255
+ blocking,
256
+ warning,
257
+ persisted,
258
+ resolved,
259
+ },
260
+ pairs: result.pairs.map((p) => ({
261
+ status: p.classification.status,
262
+ blocks: p.classification.blocks,
263
+ warns: p.classification.warns,
264
+ ...(p.pair.priorId !== undefined ? { priorId: p.pair.priorId } : {}),
265
+ ...(p.pair.currentId !== undefined ? { currentId: p.pair.currentId } : {}),
266
+ confidence: p.pair.confidence,
267
+ kind: p.kind,
268
+ ...(p.severity !== undefined ? { severity: p.severity } : {}),
269
+ ...(p.file !== undefined ? { file: p.file } : {}),
270
+ ...(p.line !== undefined ? { line: p.line } : {}),
271
+ ...(p.overlapsChangedLines !== undefined
272
+ ? { overlapsChangedLines: p.overlapsChangedLines }
273
+ : {}),
274
+ reasons: p.classification.reasons,
275
+ })),
276
+ };
277
+ }
278
+ // ─── Markdown renderer ────────────────────────────────────────────────────
279
+ /**
280
+ * PR-comment-friendly markdown. Phase 4's GitHub Actions workflow
281
+ * pastes the output verbatim into a PR comment. Format:
282
+ *
283
+ * ## Guardrail: PASSED / BLOCKED
284
+ * one-line summary
285
+ * <blocking findings table, when any>
286
+ * <warnings collapsible section, when any>
287
+ * <drift signal callout, when envelope drifted>
288
+ * <provenance footnote>
289
+ */
290
+ function renderMarkdown(result) {
291
+ const lines = [];
292
+ const blocking = result.pairs.filter((p) => p.classification.blocks);
293
+ const warning = result.pairs.filter((p) => !p.classification.blocks && p.classification.warns);
294
+ const resolved = result.pairs.filter((p) => p.classification.status === 'removed');
295
+ const verdict = result.blocks ? 'BLOCKED' : result.warns ? 'PASSED (with warnings)' : 'PASSED';
296
+ lines.push(`## Guardrail: ${verdict}`);
297
+ lines.push('');
298
+ lines.push(summarySentence(result, blocking.length, warning.length, resolved.length));
299
+ lines.push('');
300
+ if (blocking.length > 0) {
301
+ lines.push('### Blocking findings');
302
+ lines.push('');
303
+ lines.push('| Status | Kind | Severity | Location | Reason |');
304
+ lines.push('|---|---|---|---|---|');
305
+ for (const p of blocking)
306
+ lines.push(markdownPairRow(p));
307
+ lines.push('');
308
+ }
309
+ if (warning.length > 0) {
310
+ lines.push('<details>');
311
+ lines.push(`<summary>Warnings (${warning.length})</summary>`);
312
+ lines.push('');
313
+ lines.push('| Status | Kind | Severity | Location | Reason |');
314
+ lines.push('|---|---|---|---|---|');
315
+ for (const p of warning)
316
+ lines.push(markdownPairRow(p));
317
+ lines.push('');
318
+ lines.push('</details>');
319
+ lines.push('');
320
+ }
321
+ const driftLines = formatDrift(result.envelopeDrift);
322
+ if (driftLines.length > 0) {
323
+ lines.push('### Envelope drift');
324
+ lines.push('');
325
+ for (const l of driftLines)
326
+ lines.push(`- ${l}`);
327
+ lines.push('');
328
+ }
329
+ if (resolved.length > 0) {
330
+ lines.push('<details>');
331
+ lines.push(`<summary>Resolved (${resolved.length})</summary>`);
332
+ lines.push('');
333
+ lines.push('| Kind | Location |');
334
+ lines.push('|---|---|');
335
+ for (const p of resolved) {
336
+ lines.push(`| ${escapeMd(p.kind)} | ${escapeMd(locatorProse(p) || '—')} |`);
337
+ }
338
+ lines.push('');
339
+ lines.push('</details>');
340
+ lines.push('');
341
+ }
342
+ lines.push('---');
343
+ lines.push('');
344
+ lines.push(`_Baseline_: \`${escapeMd(result.baseline.name)}\` @ ${shortSha(result.baseline.repo.commitSha)} · ` +
345
+ `_Current_: ${shortSha(result.current.repoState.commitSha)} · ` +
346
+ `_Matcher_: ${result.matchResult.gitAware ? 'git-aware' : 'degraded'} · ` +
347
+ `_dxkit_: ${escapeMd(result.current.analysisMeta.dxkitVersion)}`);
348
+ return lines.join('\n');
349
+ }
350
+ function summarySentence(result, blockingCount, warningCount, resolvedCount) {
351
+ const parts = [];
352
+ if (blockingCount > 0) {
353
+ parts.push(`${blockingCount} new regression${blockingCount === 1 ? '' : 's'}`);
354
+ }
355
+ if (warningCount > 0)
356
+ parts.push(`${warningCount} warning${warningCount === 1 ? '' : 's'}`);
357
+ if (resolvedCount > 0)
358
+ parts.push(`${resolvedCount} resolved`);
359
+ if (parts.length === 0) {
360
+ return `No changes from baseline (${result.pairs.length} pair${result.pairs.length === 1 ? '' : 's'} checked).`;
361
+ }
362
+ return parts.join(', ') + '.';
363
+ }
364
+ function markdownPairRow(p) {
365
+ const status = escapeMd(statusLabel(p.classification.status));
366
+ const kind = escapeMd(p.kind);
367
+ const sev = escapeMd(p.severity ?? '—');
368
+ const loc = escapeMd(locatorProse(p) || '—');
369
+ const reasonProse = p.classification.reasons.map((r) => `${r.code}: ${r.detail}`).join('; ');
370
+ return `| ${status} | ${kind} | ${sev} | ${loc} | ${escapeMd(reasonProse) || '—'} |`;
371
+ }
372
+ function escapeMd(s) {
373
+ // Pipe and backtick are the table-breaking characters; escape only
374
+ // those to keep the rendered output readable. Backslash-escape
375
+ // doesn't survive inside table cells in some renderers, so use a
376
+ // visually-similar replacement for pipes.
377
+ return s.replace(/\|/g, '\\|').replace(/`/g, "'");
378
+ }
379
+ //# sourceMappingURL=check-renderers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-renderers.js","sourceRoot":"","sources":["../../src/baseline/check-renderers.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaH,sCAkFC;AAgJD,gCAmEC;AAeD,wCAiEC;AAhYD,kDAAoC;AAKpC,6EAA6E;AAE7E;;;GAGG;AACH,SAAgB,aAAa,CAAC,MAA4B;IACxD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,iEAAiE;IACjE,oDAAoD;IACpD,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IAClC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,iEAAiE;IACjE,6DAA6D;IAC7D,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACpC,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IACpD,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,CACR,kBAAkB,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,UAAU,GAAG,CAC5G,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAChE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACnC,KAAK,CAAC,IAAI,CAAC,kBAAkB,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC7E,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/D,KAAK,CAAC,IAAI,CACR,kBAAkB,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,WAAW,CAAC,cAAc,IAAI,gBAAgB,GAAG,EAAE,CACtI,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACrD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC1C,KAAK,MAAM,CAAC,IAAI,UAAU;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,iEAAiE;IACjE,kCAAkC;IAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC/F,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CACnC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM;QACxB,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK;QACvB,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,cAAc,CAAC,MAAM,KAAK,WAAW,CAAC,CACvF,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAElF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzD,KAAK,MAAM,CAAC,IAAI,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACxD,KAAK,MAAM,CAAC,IAAI,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QACjE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACxD,KAAK,MAAM,CAAC,IAAI,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QACjE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,4DAA4D;IAC5D,oDAAoD;IACpD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACnC,KAAK,CAAC,IAAI,CACR,kBAAkB,MAAM,CAAC,KAAK,CAAC,MAAM,eAAe,QAAQ,CAAC,MAAM,IAAI;QACrE,YAAY,OAAO,CAAC,MAAM,gBAAgB,SAAS,CAAC,MAAM,IAAI;QAC9D,aAAa,OAAO,CAAC,MAAM,GAAG,CACjC,CAAC;IACF,KAAK,CAAC,IAAI,CACR,kBAAkB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,QAAQ,EAAE,CACnG,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CACR,6GAA6G,CAC9G,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,aAAa,CAAC,MAA4B;IACjD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;QACzE,OAAO,MAAM,CAAC,IAAI,CAAC,uBAAuB,KAAK,kBAAkB,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7F,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;QACxE,OAAO,MAAM,CAAC,IAAI,CAAC,sBAAsB,KAAK,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,eAAe,CAAC,CAAiB,EAAE,MAAc;IACxD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/E,GAAG,CAAC,IAAI,CACN,GAAG,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,IAAI,GAAG,GAAG,IAAI,EAAE;SAC9E,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CACV,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;QACzC,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,WAAW,CAAC,MAAqB;IACxC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;QACjB,KAAK,SAAS;YACZ,OAAO,UAAU,CAAC;QACpB,KAAK,WAAW;YACd,OAAO,WAAW,CAAC;QACrB,KAAK,WAAW;YACd,OAAO,WAAW,CAAC;QACrB,KAAK,eAAe;YAClB,OAAO,eAAe,CAAC;QACzB,KAAK,cAAc;YACjB,OAAO,cAAc,CAAC;QACxB,KAAK,gBAAgB;YACnB,OAAO,gBAAgB,CAAC;QAC1B,KAAK,mBAAmB;YACtB,OAAO,mBAAmB,CAAC;QAC7B,KAAK,WAAW;YACd,OAAO,WAAW,CAAC;QACrB,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,CAAiB;IACrC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACpC,OAAO,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7E,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW;IAC3B,IAAI,CAAC,GAAG;QAAE,OAAO,aAAa,CAAC;IAC/B,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,WAAW,CAAC,KAAoB;IACvC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,KAAK,CAAC,mBAAmB;QAAE,GAAG,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IACxF,IAAI,KAAK,CAAC,oBAAoB;QAAE,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAClE,IAAI,KAAK,CAAC,iBAAiB;QAAE,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC7D,IAAI,KAAK,CAAC,iBAAiB;QAAE,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAC/D,IAAI,KAAK,CAAC,iBAAiB;QAAE,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAClE,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;QACvC,GAAG,CAAC,IAAI,CACN,eAAe,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,eAAe,IAAI,UAAU,MAAM,CAAC,CAAC,cAAc,IAAI,UAAU,EAAE,CAC/F,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,6EAA6E;AAEhE,QAAA,qBAAqB,GAAG,0BAAmC,CAAC;AA8DzE,SAAgB,UAAU,CAAC,MAA4B;IACrD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;IAC5E,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CACjC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,CAAC,cAAc,CAAC,KAAK,CAC1D,CAAC,MAAM,CAAC;IACT,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CACnC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM;QACxB,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK;QACvB,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,cAAc,CAAC,MAAM,KAAK,WAAW,CAAC,CACvF,CAAC,MAAM,CAAC;IACT,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IAE1F,OAAO;QACL,MAAM,EAAE,6BAAqB;QAC7B,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QACxF,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM,CAAC,YAAY;YACzB,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;YAC1B,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS;YACpC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS;YACzC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM;YACnC,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM;SAC/C;QACD,OAAO,EAAE;YACP,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS;YAC7C,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM;YACvC,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM;SAC9C;QACD,OAAO,EAAE;YACP,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ;YACrC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc;gBACnC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,cAAc,EAAE;gBACvD,CAAC,CAAC,EAAE,CAAC;SACR;QACD,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,MAAM,EAAE;YACN,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;YACxB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;YAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;YACxB,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;YACpC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;SACrC;QACD,OAAO,EAAE;YACP,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;YAC1B,QAAQ;YACR,OAAO;YACP,SAAS;YACT,QAAQ;SACT;QACD,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9B,MAAM,EAAE,CAAC,CAAC,cAAc,CAAC,MAAM;YAC/B,MAAM,EAAE,CAAC,CAAC,cAAc,CAAC,MAAM;YAC/B,KAAK,EAAE,CAAC,CAAC,cAAc,CAAC,KAAK;YAC7B,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU;YAC7B,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,GAAG,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,GAAG,CAAC,CAAC,CAAC,oBAAoB,KAAK,SAAS;gBACtC,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,oBAAoB,EAAE;gBAClD,CAAC,CAAC,EAAE,CAAC;YACP,OAAO,EAAE,CAAC,CAAC,cAAc,CAAC,OAAO;SAClC,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,6EAA6E;AAE7E;;;;;;;;;;GAUG;AACH,SAAgB,cAAc,CAAC,MAA4B;IACzD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC/F,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAEnF,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC/F,KAAK,CAAC,IAAI,CAAC,iBAAiB,OAAO,EAAE,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACtF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QAC/D,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACpC,KAAK,MAAM,CAAC,IAAI,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,sBAAsB,OAAO,CAAC,MAAM,aAAa,CAAC,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QAC/D,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACpC,KAAK,MAAM,CAAC,IAAI,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACrD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,CAAC,IAAI,UAAU;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,sBAAsB,QAAQ,CAAC,MAAM,aAAa,CAAC,CAAC;QAC/D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9E,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CACR,iBAAiB,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK;QAClG,cAAc,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK;QAC/D,cAAc,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,KAAK;QACzE,YAAY,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CACnE,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,eAAe,CACtB,MAA4B,EAC5B,aAAqB,EACrB,YAAoB,EACpB,aAAqB;IAErB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,kBAAkB,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,YAAY,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,WAAW,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5F,IAAI,aAAa,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,WAAW,CAAC,CAAC;IAC/D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,6BAA6B,MAAM,CAAC,KAAK,CAAC,MAAM,QAAQ,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;IAClH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;AAChC,CAAC;AAED,SAAS,eAAe,CAAC,CAAiB;IACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7F,OAAO,KAAK,MAAM,MAAM,IAAI,MAAM,GAAG,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC;AACvF,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS;IACzB,mEAAmE;IACnE,+DAA+D;IAC/D,iEAAiE;IACjE,0CAA0C;IAC1C,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACpD,CAAC"}