forgecraft-mcp 1.4.0 → 1.7.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 (418) hide show
  1. package/LICENSE +67 -0
  2. package/README.md +527 -525
  3. package/dist/analyzers/anchors/anchor-loader.d.ts +47 -0
  4. package/dist/analyzers/anchors/anchor-loader.d.ts.map +1 -0
  5. package/dist/analyzers/anchors/anchor-loader.js +113 -0
  6. package/dist/analyzers/anchors/anchor-loader.js.map +1 -0
  7. package/dist/analyzers/anti-pattern.d.ts.map +1 -1
  8. package/dist/analyzers/anti-pattern.js +38 -26
  9. package/dist/analyzers/anti-pattern.js.map +1 -1
  10. package/dist/analyzers/completeness-helpers.d.ts +5 -0
  11. package/dist/analyzers/completeness-helpers.d.ts.map +1 -1
  12. package/dist/analyzers/completeness-helpers.js +17 -0
  13. package/dist/analyzers/completeness-helpers.js.map +1 -1
  14. package/dist/analyzers/completeness.d.ts.map +1 -1
  15. package/dist/analyzers/completeness.js +4 -4
  16. package/dist/analyzers/completeness.js.map +1 -1
  17. package/dist/analyzers/gs-scorer.d.ts +3 -1
  18. package/dist/analyzers/gs-scorer.d.ts.map +1 -1
  19. package/dist/analyzers/gs-scorer.js +5 -2
  20. package/dist/analyzers/gs-scorer.js.map +1 -1
  21. package/dist/analyzers/package-json.d.ts.map +1 -1
  22. package/dist/analyzers/package-json.js +194 -34
  23. package/dist/analyzers/package-json.js.map +1 -1
  24. package/dist/analyzers/scorers/composable-scorer.d.ts +4 -2
  25. package/dist/analyzers/scorers/composable-scorer.d.ts.map +1 -1
  26. package/dist/analyzers/scorers/composable-scorer.js +50 -2
  27. package/dist/analyzers/scorers/composable-scorer.js.map +1 -1
  28. package/dist/analyzers/scorers/executable-scorer.d.ts +3 -2
  29. package/dist/analyzers/scorers/executable-scorer.d.ts.map +1 -1
  30. package/dist/analyzers/scorers/executable-scorer.js +64 -4
  31. package/dist/analyzers/scorers/executable-scorer.js.map +1 -1
  32. package/dist/analyzers/scorers/scorer-utils.d.ts +5 -3
  33. package/dist/analyzers/scorers/scorer-utils.d.ts.map +1 -1
  34. package/dist/analyzers/scorers/scorer-utils.js +34 -9
  35. package/dist/analyzers/scorers/scorer-utils.js.map +1 -1
  36. package/dist/analyzers/scorers/self-describing-scorer.d.ts +7 -4
  37. package/dist/analyzers/scorers/self-describing-scorer.d.ts.map +1 -1
  38. package/dist/analyzers/scorers/self-describing-scorer.js +17 -18
  39. package/dist/analyzers/scorers/self-describing-scorer.js.map +1 -1
  40. package/dist/cli/help.js +51 -51
  41. package/dist/disciplines/catalog.d.ts +16 -0
  42. package/dist/disciplines/catalog.d.ts.map +1 -0
  43. package/dist/disciplines/catalog.js +196 -0
  44. package/dist/disciplines/catalog.js.map +1 -0
  45. package/dist/disciplines/runner.d.ts +13 -0
  46. package/dist/disciplines/runner.d.ts.map +1 -0
  47. package/dist/disciplines/runner.js +35 -0
  48. package/dist/disciplines/runner.js.map +1 -0
  49. package/dist/registry/composer.d.ts.map +1 -1
  50. package/dist/registry/composer.js +9 -4
  51. package/dist/registry/composer.js.map +1 -1
  52. package/dist/registry/loader-tag.d.ts.map +1 -1
  53. package/dist/registry/loader-tag.js +1 -0
  54. package/dist/registry/loader-tag.js.map +1 -1
  55. package/dist/registry/remote-gates.js +1 -1
  56. package/dist/registry/remote-gates.js.map +1 -1
  57. package/dist/registry/renderer-skeletons.js +92 -92
  58. package/dist/registry/sentinel-renderer.js +299 -20
  59. package/dist/registry/sentinel-renderer.js.map +1 -1
  60. package/dist/sentinel/detect.d.ts +41 -0
  61. package/dist/sentinel/detect.d.ts.map +1 -0
  62. package/dist/sentinel/detect.js +122 -0
  63. package/dist/sentinel/detect.js.map +1 -0
  64. package/dist/sentinel/write.d.ts +54 -0
  65. package/dist/sentinel/write.d.ts.map +1 -0
  66. package/dist/sentinel/write.js +75 -0
  67. package/dist/sentinel/write.js.map +1 -0
  68. package/dist/shared/cnt-health.d.ts +16 -0
  69. package/dist/shared/cnt-health.d.ts.map +1 -1
  70. package/dist/shared/cnt-health.js +55 -8
  71. package/dist/shared/cnt-health.js.map +1 -1
  72. package/dist/shared/config.d.ts +14 -0
  73. package/dist/shared/config.d.ts.map +1 -1
  74. package/dist/shared/config.js +45 -0
  75. package/dist/shared/config.js.map +1 -1
  76. package/dist/shared/gs-score-logger.js +6 -6
  77. package/dist/shared/hook-installer.d.ts +58 -0
  78. package/dist/shared/hook-installer.d.ts.map +1 -0
  79. package/dist/shared/hook-installer.js +316 -0
  80. package/dist/shared/hook-installer.js.map +1 -0
  81. package/dist/shared/project-gates-helpers.d.ts +9 -0
  82. package/dist/shared/project-gates-helpers.d.ts.map +1 -1
  83. package/dist/shared/project-gates-helpers.js +35 -0
  84. package/dist/shared/project-gates-helpers.js.map +1 -1
  85. package/dist/shared/types/config.d.ts +7 -1
  86. package/dist/shared/types/config.d.ts.map +1 -1
  87. package/dist/shared/types/gates.d.ts +34 -0
  88. package/dist/shared/types/gates.d.ts.map +1 -1
  89. package/dist/shared/types/project.d.ts +68 -2
  90. package/dist/shared/types/project.d.ts.map +1 -1
  91. package/dist/shared/types/project.js +1 -0
  92. package/dist/shared/types/project.js.map +1 -1
  93. package/dist/shared/types/templates.d.ts +8 -1
  94. package/dist/shared/types/templates.d.ts.map +1 -1
  95. package/dist/shared/types/verify.d.ts +51 -1
  96. package/dist/shared/types/verify.d.ts.map +1 -1
  97. package/dist/shared/types/verify.js +37 -1
  98. package/dist/shared/types/verify.js.map +1 -1
  99. package/dist/tools/add-hook.d.ts.map +1 -1
  100. package/dist/tools/add-hook.js +8 -1
  101. package/dist/tools/add-hook.js.map +1 -1
  102. package/dist/tools/add-module.js +123 -123
  103. package/dist/tools/advice-registry.d.ts.map +1 -1
  104. package/dist/tools/advice-registry.js +108 -18
  105. package/dist/tools/advice-registry.js.map +1 -1
  106. package/dist/tools/advise-session-advisor.d.ts +16 -0
  107. package/dist/tools/advise-session-advisor.d.ts.map +1 -0
  108. package/dist/tools/advise-session-advisor.js +89 -0
  109. package/dist/tools/advise-session-advisor.js.map +1 -0
  110. package/dist/tools/advise-session-signals.d.ts +21 -0
  111. package/dist/tools/advise-session-signals.d.ts.map +1 -0
  112. package/dist/tools/advise-session-signals.js +113 -0
  113. package/dist/tools/advise-session-signals.js.map +1 -0
  114. package/dist/tools/advise-session.d.ts +22 -0
  115. package/dist/tools/advise-session.d.ts.map +1 -0
  116. package/dist/tools/advise-session.js +31 -0
  117. package/dist/tools/advise-session.js.map +1 -0
  118. package/dist/tools/analyze-harness.d.ts +18 -0
  119. package/dist/tools/analyze-harness.d.ts.map +1 -0
  120. package/dist/tools/analyze-harness.js +298 -0
  121. package/dist/tools/analyze-harness.js.map +1 -0
  122. package/dist/tools/audit.d.ts.map +1 -1
  123. package/dist/tools/audit.js +19 -0
  124. package/dist/tools/audit.js.map +1 -1
  125. package/dist/tools/change-request.d.ts +53 -0
  126. package/dist/tools/change-request.d.ts.map +1 -0
  127. package/dist/tools/change-request.js +395 -0
  128. package/dist/tools/change-request.js.map +1 -0
  129. package/dist/tools/check-cascade-contracts.d.ts +13 -0
  130. package/dist/tools/check-cascade-contracts.d.ts.map +1 -1
  131. package/dist/tools/check-cascade-contracts.js +73 -2
  132. package/dist/tools/check-cascade-contracts.js.map +1 -1
  133. package/dist/tools/check-cascade-report.js +64 -64
  134. package/dist/tools/check-cascade-steps.d.ts +3 -0
  135. package/dist/tools/check-cascade-steps.d.ts.map +1 -1
  136. package/dist/tools/check-cascade-steps.js +104 -15
  137. package/dist/tools/check-cascade-steps.js.map +1 -1
  138. package/dist/tools/check-cascade.d.ts +4 -3
  139. package/dist/tools/check-cascade.d.ts.map +1 -1
  140. package/dist/tools/check-cascade.js +30 -12
  141. package/dist/tools/check-cascade.js.map +1 -1
  142. package/dist/tools/check-derivation-chain.d.ts +37 -0
  143. package/dist/tools/check-derivation-chain.d.ts.map +1 -0
  144. package/dist/tools/check-derivation-chain.js +418 -0
  145. package/dist/tools/check-derivation-chain.js.map +1 -0
  146. package/dist/tools/check-spec-consistency.d.ts +25 -0
  147. package/dist/tools/check-spec-consistency.d.ts.map +1 -0
  148. package/dist/tools/check-spec-consistency.js +339 -0
  149. package/dist/tools/check-spec-consistency.js.map +1 -0
  150. package/dist/tools/check-t4.d.ts +54 -0
  151. package/dist/tools/check-t4.d.ts.map +1 -0
  152. package/dist/tools/check-t4.js +305 -0
  153. package/dist/tools/check-t4.js.map +1 -0
  154. package/dist/tools/close-cycle.d.ts +11 -0
  155. package/dist/tools/close-cycle.d.ts.map +1 -1
  156. package/dist/tools/close-cycle.js +364 -4
  157. package/dist/tools/close-cycle.js.map +1 -1
  158. package/dist/tools/cnt-add-routing.d.ts +31 -0
  159. package/dist/tools/cnt-add-routing.d.ts.map +1 -0
  160. package/dist/tools/cnt-add-routing.js +99 -0
  161. package/dist/tools/cnt-add-routing.js.map +1 -0
  162. package/dist/tools/configure-mcp.d.ts.map +1 -1
  163. package/dist/tools/configure-mcp.js +52 -2
  164. package/dist/tools/configure-mcp.js.map +1 -1
  165. package/dist/tools/consolidate-status.d.ts +31 -0
  166. package/dist/tools/consolidate-status.d.ts.map +1 -1
  167. package/dist/tools/consolidate-status.js +105 -0
  168. package/dist/tools/consolidate-status.js.map +1 -1
  169. package/dist/tools/executable-gates.d.ts +52 -0
  170. package/dist/tools/executable-gates.d.ts.map +1 -0
  171. package/dist/tools/executable-gates.js +333 -0
  172. package/dist/tools/executable-gates.js.map +1 -0
  173. package/dist/tools/extract-adrs-from-spec.d.ts +33 -0
  174. package/dist/tools/extract-adrs-from-spec.d.ts.map +1 -0
  175. package/dist/tools/extract-adrs-from-spec.js +410 -0
  176. package/dist/tools/extract-adrs-from-spec.js.map +1 -0
  177. package/dist/tools/extract-adrs-history.d.ts +47 -0
  178. package/dist/tools/extract-adrs-history.d.ts.map +1 -0
  179. package/dist/tools/extract-adrs-history.js +265 -0
  180. package/dist/tools/extract-adrs-history.js.map +1 -0
  181. package/dist/tools/forgecraft-dispatch-extended.d.ts.map +1 -1
  182. package/dist/tools/forgecraft-dispatch-extended.js +137 -0
  183. package/dist/tools/forgecraft-dispatch-extended.js.map +1 -1
  184. package/dist/tools/forgecraft-dispatch.d.ts.map +1 -1
  185. package/dist/tools/forgecraft-dispatch.js +16 -0
  186. package/dist/tools/forgecraft-dispatch.js.map +1 -1
  187. package/dist/tools/forgecraft-schema-params.d.ts +174 -2
  188. package/dist/tools/forgecraft-schema-params.d.ts.map +1 -1
  189. package/dist/tools/forgecraft-schema-params.js +197 -0
  190. package/dist/tools/forgecraft-schema-params.js.map +1 -1
  191. package/dist/tools/forgecraft-schema.d.ts +179 -7
  192. package/dist/tools/forgecraft-schema.d.ts.map +1 -1
  193. package/dist/tools/forgecraft-schema.js +37 -0
  194. package/dist/tools/forgecraft-schema.js.map +1 -1
  195. package/dist/tools/generate-adr.js +6 -6
  196. package/dist/tools/generate-adr.js.map +1 -1
  197. package/dist/tools/generate-decision.d.ts +77 -0
  198. package/dist/tools/generate-decision.d.ts.map +1 -0
  199. package/dist/tools/generate-decision.js +162 -0
  200. package/dist/tools/generate-decision.js.map +1 -0
  201. package/dist/tools/generate-env-probe.d.ts +49 -0
  202. package/dist/tools/generate-env-probe.d.ts.map +1 -0
  203. package/dist/tools/generate-env-probe.js +365 -0
  204. package/dist/tools/generate-env-probe.js.map +1 -0
  205. package/dist/tools/generate-harness.d.ts +53 -0
  206. package/dist/tools/generate-harness.d.ts.map +1 -0
  207. package/dist/tools/generate-harness.js +395 -0
  208. package/dist/tools/generate-harness.js.map +1 -0
  209. package/dist/tools/generate-roadmap.d.ts +1 -1
  210. package/dist/tools/generate-roadmap.d.ts.map +1 -1
  211. package/dist/tools/generate-roadmap.js +38 -4
  212. package/dist/tools/generate-roadmap.js.map +1 -1
  213. package/dist/tools/generate-session-prompt.d.ts +3 -3
  214. package/dist/tools/generate-session-prompt.d.ts.map +1 -1
  215. package/dist/tools/generate-session-prompt.js +9 -1
  216. package/dist/tools/generate-session-prompt.js.map +1 -1
  217. package/dist/tools/generate-slo-probe.d.ts +53 -0
  218. package/dist/tools/generate-slo-probe.d.ts.map +1 -0
  219. package/dist/tools/generate-slo-probe.js +366 -0
  220. package/dist/tools/generate-slo-probe.js.map +1 -0
  221. package/dist/tools/layer-status-gates.d.ts +24 -0
  222. package/dist/tools/layer-status-gates.d.ts.map +1 -0
  223. package/dist/tools/layer-status-gates.js +151 -0
  224. package/dist/tools/layer-status-gates.js.map +1 -0
  225. package/dist/tools/layer-status.d.ts +126 -0
  226. package/dist/tools/layer-status.d.ts.map +1 -0
  227. package/dist/tools/layer-status.js +647 -0
  228. package/dist/tools/layer-status.js.map +1 -0
  229. package/dist/tools/list.d.ts.map +1 -1
  230. package/dist/tools/list.js +9 -5
  231. package/dist/tools/list.js.map +1 -1
  232. package/dist/tools/postcondition-coverage.d.ts +57 -0
  233. package/dist/tools/postcondition-coverage.d.ts.map +1 -0
  234. package/dist/tools/postcondition-coverage.js +256 -0
  235. package/dist/tools/postcondition-coverage.js.map +1 -0
  236. package/dist/tools/probe-runners.d.ts +21 -0
  237. package/dist/tools/probe-runners.d.ts.map +1 -0
  238. package/dist/tools/probe-runners.js +246 -0
  239. package/dist/tools/probe-runners.js.map +1 -0
  240. package/dist/tools/probe-templates.d.ts +27 -0
  241. package/dist/tools/probe-templates.d.ts.map +1 -0
  242. package/dist/tools/probe-templates.js +279 -0
  243. package/dist/tools/probe-templates.js.map +1 -0
  244. package/dist/tools/propose-session.d.ts +28 -0
  245. package/dist/tools/propose-session.d.ts.map +1 -0
  246. package/dist/tools/propose-session.js +333 -0
  247. package/dist/tools/propose-session.js.map +1 -0
  248. package/dist/tools/refresh-output.js +14 -14
  249. package/dist/tools/review-stubs.d.ts +29 -0
  250. package/dist/tools/review-stubs.d.ts.map +1 -0
  251. package/dist/tools/review-stubs.js +173 -0
  252. package/dist/tools/review-stubs.js.map +1 -0
  253. package/dist/tools/roadmap-builder.d.ts +49 -1
  254. package/dist/tools/roadmap-builder.d.ts.map +1 -1
  255. package/dist/tools/roadmap-builder.js +210 -5
  256. package/dist/tools/roadmap-builder.js.map +1 -1
  257. package/dist/tools/run-env-probe.d.ts +57 -0
  258. package/dist/tools/run-env-probe.d.ts.map +1 -0
  259. package/dist/tools/run-env-probe.js +270 -0
  260. package/dist/tools/run-env-probe.js.map +1 -0
  261. package/dist/tools/run-harness.d.ts +52 -0
  262. package/dist/tools/run-harness.d.ts.map +1 -0
  263. package/dist/tools/run-harness.js +279 -0
  264. package/dist/tools/run-harness.js.map +1 -0
  265. package/dist/tools/run-slo-probe.d.ts +50 -0
  266. package/dist/tools/run-slo-probe.d.ts.map +1 -0
  267. package/dist/tools/run-slo-probe.js +281 -0
  268. package/dist/tools/run-slo-probe.js.map +1 -0
  269. package/dist/tools/scaffold-spec-stubs.js +115 -115
  270. package/dist/tools/scaffold-templates.js +62 -62
  271. package/dist/tools/scaffold-writer.d.ts.map +1 -1
  272. package/dist/tools/scaffold-writer.js +9 -0
  273. package/dist/tools/scaffold-writer.js.map +1 -1
  274. package/dist/tools/score-rubric.d.ts +19 -0
  275. package/dist/tools/score-rubric.d.ts.map +1 -0
  276. package/dist/tools/score-rubric.js +411 -0
  277. package/dist/tools/score-rubric.js.map +1 -0
  278. package/dist/tools/session-prompt-builders.d.ts +20 -0
  279. package/dist/tools/session-prompt-builders.d.ts.map +1 -1
  280. package/dist/tools/session-prompt-builders.js +78 -5
  281. package/dist/tools/session-prompt-builders.js.map +1 -1
  282. package/dist/tools/session-prompt-sections.d.ts +4 -2
  283. package/dist/tools/session-prompt-sections.d.ts.map +1 -1
  284. package/dist/tools/session-prompt-sections.js +22 -10
  285. package/dist/tools/session-prompt-sections.js.map +1 -1
  286. package/dist/tools/setup-artifact-writers.d.ts +69 -4
  287. package/dist/tools/setup-artifact-writers.d.ts.map +1 -1
  288. package/dist/tools/setup-artifact-writers.js +681 -5
  289. package/dist/tools/setup-artifact-writers.js.map +1 -1
  290. package/dist/tools/setup-cnt-builders.d.ts.map +1 -1
  291. package/dist/tools/setup-cnt-builders.js +162 -34
  292. package/dist/tools/setup-cnt-builders.js.map +1 -1
  293. package/dist/tools/setup-monitoring.d.ts +41 -0
  294. package/dist/tools/setup-monitoring.d.ts.map +1 -0
  295. package/dist/tools/setup-monitoring.js +364 -0
  296. package/dist/tools/setup-monitoring.js.map +1 -0
  297. package/dist/tools/setup-phase1.d.ts.map +1 -1
  298. package/dist/tools/setup-phase1.js +14 -1
  299. package/dist/tools/setup-phase1.js.map +1 -1
  300. package/dist/tools/setup-phase2.d.ts +14 -0
  301. package/dist/tools/setup-phase2.d.ts.map +1 -1
  302. package/dist/tools/setup-phase2.js +130 -3
  303. package/dist/tools/setup-phase2.js.map +1 -1
  304. package/dist/tools/setup-project.d.ts +8 -0
  305. package/dist/tools/setup-project.d.ts.map +1 -1
  306. package/dist/tools/setup-project.js +52 -2
  307. package/dist/tools/setup-project.js.map +1 -1
  308. package/dist/tools/spec-parser-tags.d.ts.map +1 -1
  309. package/dist/tools/spec-parser-tags.js +1 -0
  310. package/dist/tools/spec-parser-tags.js.map +1 -1
  311. package/dist/tools/verify-formatter.d.ts.map +1 -1
  312. package/dist/tools/verify-formatter.js +15 -1
  313. package/dist/tools/verify-formatter.js.map +1 -1
  314. package/dist/tools/verify.d.ts.map +1 -1
  315. package/dist/tools/verify.js +3 -0
  316. package/dist/tools/verify.js.map +1 -1
  317. package/package.json +98 -89
  318. package/templates/analytics/instructions.yaml +37 -37
  319. package/templates/analytics/mcp-servers.yaml +11 -11
  320. package/templates/analytics/structure.yaml +25 -25
  321. package/templates/api/harness/uc-template.hurl +20 -0
  322. package/templates/api/instructions.yaml +231 -231
  323. package/templates/api/mcp-servers.yaml +22 -22
  324. package/templates/api/nfr.yaml +23 -23
  325. package/templates/api/review.yaml +103 -103
  326. package/templates/api/structure.yaml +34 -34
  327. package/templates/api/verification.yaml +132 -132
  328. package/templates/cli/instructions.yaml +31 -31
  329. package/templates/cli/mcp-servers.yaml +11 -11
  330. package/templates/cli/review.yaml +53 -53
  331. package/templates/cli/structure.yaml +16 -16
  332. package/templates/data-lineage/instructions.yaml +28 -28
  333. package/templates/data-lineage/mcp-servers.yaml +22 -22
  334. package/templates/data-pipeline/instructions.yaml +84 -84
  335. package/templates/data-pipeline/mcp-servers.yaml +13 -13
  336. package/templates/data-pipeline/nfr.yaml +39 -39
  337. package/templates/data-pipeline/structure.yaml +23 -23
  338. package/templates/docs-manifest.yaml +227 -0
  339. package/templates/fintech/hooks.yaml +55 -55
  340. package/templates/fintech/instructions.yaml +112 -112
  341. package/templates/fintech/mcp-servers.yaml +13 -13
  342. package/templates/fintech/nfr.yaml +46 -46
  343. package/templates/fintech/playbook.yaml +210 -210
  344. package/templates/fintech/verification.yaml +239 -239
  345. package/templates/game/harness/uc-template.sim.ts +29 -0
  346. package/templates/game/instructions.yaml +289 -289
  347. package/templates/game/mcp-servers.yaml +38 -38
  348. package/templates/game/nfr.yaml +64 -64
  349. package/templates/game/playbook.yaml +214 -214
  350. package/templates/game/review.yaml +97 -97
  351. package/templates/game/structure.yaml +67 -67
  352. package/templates/game/verification.yaml +174 -174
  353. package/templates/healthcare/instructions.yaml +42 -42
  354. package/templates/healthcare/mcp-servers.yaml +13 -13
  355. package/templates/healthcare/nfr.yaml +47 -47
  356. package/templates/hipaa/instructions.yaml +41 -41
  357. package/templates/hipaa/mcp-servers.yaml +13 -13
  358. package/templates/infra/instructions.yaml +104 -104
  359. package/templates/infra/mcp-servers.yaml +20 -20
  360. package/templates/infra/nfr.yaml +46 -46
  361. package/templates/infra/review.yaml +65 -65
  362. package/templates/infra/structure.yaml +25 -25
  363. package/templates/library/instructions.yaml +36 -36
  364. package/templates/library/mcp-servers.yaml +20 -20
  365. package/templates/library/review.yaml +56 -56
  366. package/templates/library/structure.yaml +19 -19
  367. package/templates/medallion-architecture/instructions.yaml +41 -41
  368. package/templates/medallion-architecture/mcp-servers.yaml +22 -22
  369. package/templates/ml/instructions.yaml +85 -85
  370. package/templates/ml/mcp-servers.yaml +11 -11
  371. package/templates/ml/nfr.yaml +39 -39
  372. package/templates/ml/structure.yaml +25 -25
  373. package/templates/ml/verification.yaml +156 -156
  374. package/templates/mobile/instructions.yaml +44 -44
  375. package/templates/mobile/mcp-servers.yaml +11 -11
  376. package/templates/mobile/nfr.yaml +49 -49
  377. package/templates/mobile/structure.yaml +27 -27
  378. package/templates/mobile/verification.yaml +121 -121
  379. package/templates/observability-xray/instructions.yaml +40 -40
  380. package/templates/observability-xray/mcp-servers.yaml +15 -15
  381. package/templates/realtime/instructions.yaml +42 -42
  382. package/templates/realtime/mcp-servers.yaml +13 -13
  383. package/templates/soc2/instructions.yaml +41 -41
  384. package/templates/soc2/mcp-servers.yaml +24 -24
  385. package/templates/social/instructions.yaml +43 -43
  386. package/templates/social/mcp-servers.yaml +24 -24
  387. package/templates/state-machine/instructions.yaml +42 -42
  388. package/templates/state-machine/mcp-servers.yaml +11 -11
  389. package/templates/tools-registry.yaml +164 -164
  390. package/templates/universal/claude-md-blocks/layer-navigation.md +20 -0
  391. package/templates/universal/claude-md-blocks/nfr-contracts.md +22 -0
  392. package/templates/universal/hooks.yaml +879 -723
  393. package/templates/universal/instructions.yaml +1692 -1692
  394. package/templates/universal/mcp-servers.yaml +50 -50
  395. package/templates/universal/nfr.yaml +197 -197
  396. package/templates/universal/reference.yaml +326 -326
  397. package/templates/universal/review.yaml +204 -204
  398. package/templates/universal/skills.yaml +262 -262
  399. package/templates/universal/structure.yaml +67 -67
  400. package/templates/universal/verification.yaml +416 -416
  401. package/templates/web-next/hooks.yaml +114 -0
  402. package/templates/web-next/instructions.yaml +106 -0
  403. package/templates/web-react/harness/uc-template.spec.ts +35 -0
  404. package/templates/web-react/hooks.yaml +156 -44
  405. package/templates/web-react/instructions.yaml +296 -207
  406. package/templates/web-react/mcp-servers.yaml +20 -20
  407. package/templates/web-react/nfr.yaml +27 -27
  408. package/templates/web-react/review.yaml +94 -94
  409. package/templates/web-react/structure.yaml +46 -46
  410. package/templates/web-react/verification.yaml +126 -126
  411. package/templates/web-static/hooks.yaml +85 -0
  412. package/templates/web-static/instructions.yaml +204 -115
  413. package/templates/web-static/mcp-servers.yaml +20 -20
  414. package/templates/web3/instructions.yaml +44 -44
  415. package/templates/web3/mcp-servers.yaml +11 -11
  416. package/templates/web3/verification.yaml +159 -159
  417. package/templates/zero-trust/instructions.yaml +41 -41
  418. package/templates/zero-trust/mcp-servers.yaml +15 -15
@@ -8,16 +8,18 @@
8
8
  * 4. Calls contributeGates() for generalizable gates and promotes them
9
9
  * 5. Detects CodeSeeker gates that need to be run
10
10
  */
11
- import { existsSync, readFileSync } from "fs";
12
- import { join } from "path";
11
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
12
+ import { join, dirname } from "node:path";
13
+ import { buildLayerReport } from "./layer-status.js";
13
14
  import { runCascadeChecks, isCascadeComplete, loadCascadeDecisions, } from "./check-cascade.js";
14
15
  import { contributeGates } from "./contribute-gate.js";
15
16
  import { getActiveProjectGates, promoteGate } from "../shared/project-gates.js";
16
17
  import { detectSpecRoadmapDrift } from "../shared/drift-detector.js";
17
18
  import { scoreGsProperties, findDirectDbCallsInRoutes, findMissingTestFiles, } from "../analyzers/gs-scorer.js";
18
19
  import { computeSRealized, appendGsScoreRow, } from "../shared/gs-score-logger.js";
19
- import { readExperimentConfig } from "../shared/config.js";
20
+ import { readExperimentConfig, readBrownfieldFlag } from "../shared/config.js";
20
21
  import { deriveTestCommand, findCodeseekerGates, findNextRoadmapItem, markRoadmapItemDone, formatCloseCycleResult, } from "./close-cycle-helpers.js";
22
+ import { getImplementingChanges } from "./change-request.js";
21
23
  import { suggestVersionBump, appendChangelogEntry, } from "./close-cycle-versioning.js";
22
24
  export { deriveTestCommand, findNextRoadmapItem, parseRoadmapItems, markRoadmapItemDone, formatCloseCycleResult, findCodeseekerGates, } from "./close-cycle-helpers.js";
23
25
  export { suggestVersionBump, appendChangelogEntry, readCommitsSinceLastTag, } from "./close-cycle-versioning.js";
@@ -51,6 +53,26 @@ export async function closeCycle(options) {
51
53
  ready: false,
52
54
  };
53
55
  }
56
+ // Step 1.5 -- In-flight change check
57
+ const implementingChanges = getImplementingChanges(projectRoot);
58
+ if (implementingChanges.length > 0) {
59
+ const blockers = implementingChanges.map((c) => c.required_gates.length > 0
60
+ ? `${c.id} (gates: ${c.required_gates.join(", ")})`
61
+ : c.id);
62
+ return {
63
+ cascadeStatus: "fail",
64
+ cascadeBlockers: blockers,
65
+ gatesAssessed: 0,
66
+ gatesPromoted: 0,
67
+ codeseekerGates: [],
68
+ nextSteps: [
69
+ `${implementingChanges.length} change(s) still in 'implementing' status — verify or close them before close_cycle:`,
70
+ ...implementingChanges.map((c) => ` • ${c.id}: ${c.title}${c.required_gates.length > 0 ? ` (requires: ${c.required_gates.join(", ")})` : ""}`),
71
+ "Run `list_changes` to review. Set status to 'verified' or 'closed' in .forgecraft/changes/<id>.yaml.",
72
+ ],
73
+ ready: false,
74
+ };
75
+ }
54
76
  // Step 2 -- Test command
55
77
  const testCommand = deriveTestCommand(projectRoot);
56
78
  // Step 3 -- Gate assessment and contribution
@@ -156,6 +178,324 @@ export async function closeCycle(options) {
156
178
  ...(experiment?.id ? { experimentId: experiment.id } : {}),
157
179
  };
158
180
  }
181
+ /**
182
+ * Derive the "Next Action" string for .claude/state.md using waterfall logic.
183
+ * First gap in the layer stack wins.
184
+ */
185
+ function deriveNextAction(l1GateViolations, l2Covered, total, harnessRun, l3Status, l4Status) {
186
+ if (l1GateViolations.length > 0) {
187
+ return `Resolve ${l1GateViolations.length} active gate violation${l1GateViolations.length === 1 ? "" : "s"}. Run \`layer_status\` to see details.`;
188
+ }
189
+ if (l2Covered < total) {
190
+ const missing = total - l2Covered;
191
+ return `Add harness specs for ${missing} UC${missing === 1 ? "" : "s"} missing probes. Run \`generate_harness\`.`;
192
+ }
193
+ if (!harnessRun) {
194
+ return "Run `run_harness` to verify behavioral contracts.";
195
+ }
196
+ if ((harnessRun.notImplemented ?? 0) > 0) {
197
+ const n = harnessRun.notImplemented;
198
+ return `Implement ${n} stub probe${n === 1 ? "" : "s"} — not_implemented probes exit 0 but verify nothing. Fill the TODO sections.`;
199
+ }
200
+ if (harnessRun.failed > 0) {
201
+ return `Fix ${harnessRun.failed} failing L2 probe${harnessRun.failed === 1 ? "" : "s"} — specification violations. Regenerate from spec.`;
202
+ }
203
+ if (l3Status === "not-started" || l3Status === "partial") {
204
+ return "Run `run_env_probe` to verify environment contracts.";
205
+ }
206
+ if (l4Status === "not-started" || l4Status === "partial") {
207
+ return "Run `run_slo_probe` to verify SLO monitoring contracts.";
208
+ }
209
+ return "All layers verified. Advance to next roadmap item via `generate_session_prompt`.";
210
+ }
211
+ /**
212
+ * Write .claude/state.md after a successful cycle.
213
+ * Non-throwing — errors are silently swallowed to avoid breaking close_cycle.
214
+ */
215
+ function writeStateLeaf(projectDir, timestamp) {
216
+ try {
217
+ const report = buildLayerReport(projectDir);
218
+ const total = report.ucs.length;
219
+ const l2Covered = report.l2.filter((u) => u.hasProbe).length;
220
+ // Read harness run evidence
221
+ const harnessRunPath = join(projectDir, ".forgecraft", "harness-run.json");
222
+ let harnessRun = null;
223
+ if (existsSync(harnessRunPath)) {
224
+ try {
225
+ const raw = JSON.parse(readFileSync(harnessRunPath, "utf-8"));
226
+ if (raw.timestamp) {
227
+ const notImplemented = (raw.results ?? []).filter((r) => r.status === "not_implemented").length;
228
+ harnessRun = {
229
+ passed: raw.passed ?? 0,
230
+ failed: raw.failed ?? 0,
231
+ notImplemented: notImplemented > 0 ? notImplemented : undefined,
232
+ timestamp: raw.timestamp,
233
+ };
234
+ }
235
+ }
236
+ catch {
237
+ // ignore
238
+ }
239
+ }
240
+ // Read env probe evidence
241
+ const envProbeRunPath = join(projectDir, ".forgecraft", "env-probe-run.json");
242
+ let envProbeTimestamp = "not run";
243
+ let envProbeStatus = "not-started";
244
+ if (existsSync(envProbeRunPath)) {
245
+ try {
246
+ const raw = JSON.parse(readFileSync(envProbeRunPath, "utf-8"));
247
+ envProbeTimestamp = raw.timestamp ?? "not run";
248
+ const passed = raw.passed ?? 0;
249
+ const failed = raw.failed ?? 0;
250
+ envProbeStatus =
251
+ failed > 0 ? "partial" : passed > 0 ? "complete" : "not-started";
252
+ }
253
+ catch {
254
+ // ignore
255
+ }
256
+ }
257
+ // Read SLO probe evidence
258
+ const sloProbeRunPath = join(projectDir, ".forgecraft", "slo-probe-run.json");
259
+ let sloProbeTimestamp = "not run";
260
+ let sloProbeStatus = "not-started";
261
+ if (existsSync(sloProbeRunPath)) {
262
+ try {
263
+ const raw = JSON.parse(readFileSync(sloProbeRunPath, "utf-8"));
264
+ sloProbeTimestamp = raw.timestamp ?? "not run";
265
+ const passed = raw.passed ?? 0;
266
+ const failed = raw.failed ?? 0;
267
+ sloProbeStatus =
268
+ failed > 0 ? "partial" : passed > 0 ? "complete" : "not-started";
269
+ }
270
+ catch {
271
+ // ignore
272
+ }
273
+ }
274
+ const l1GateCount = report.l1GateViolations.length;
275
+ const l2Total = report.l2.length;
276
+ const harnessTimestamp = harnessRun?.timestamp ?? "not run";
277
+ const harnessLine = harnessRun
278
+ ? `${harnessRun.passed}/${l2Total} probes passing`
279
+ : "not run";
280
+ const violationLines = report.l1GateViolations.length > 0
281
+ ? report.l1GateViolations
282
+ .map((v) => `- [${v.gateId}]: ${v.message ?? "gate violation"}`)
283
+ .join("\n")
284
+ : "None";
285
+ const driftLine = "None detected";
286
+ const cascadeResult = `PASS`;
287
+ const nextAction = deriveNextAction(report.l1GateViolations, l2Covered, total, harnessRun, report.l3, report.l4);
288
+ const lines = [
289
+ "# Project State",
290
+ `_Last updated by close_cycle: ${timestamp}_`,
291
+ "",
292
+ "## Layer Completion",
293
+ "| Layer | Status | Evidence |",
294
+ "|---|---|---|",
295
+ `| L1 Blueprint | ${total}/${total} UCs · ${l1GateCount} gate violation${l1GateCount === 1 ? "" : "s"} | close_cycle: ${timestamp} |`,
296
+ `| L2 Harness | ${harnessLine} | harness-run.json: ${harnessTimestamp} |`,
297
+ `| L3 Environment | ${envProbeStatus} | env-probe-run.json: ${envProbeTimestamp} |`,
298
+ `| L4 Monitoring | ${sloProbeStatus} | slo-probe-run.json: ${sloProbeTimestamp} |`,
299
+ "",
300
+ "## Active Gate Violations",
301
+ violationLines,
302
+ "",
303
+ "## Spec Drift",
304
+ driftLine,
305
+ "",
306
+ "## Last Cycle",
307
+ `${timestamp} — cascade: ${cascadeResult} · gates: ${l1GateCount} violation${l1GateCount === 1 ? "" : "s"} · harness: ${harnessLine}`,
308
+ "",
309
+ "## Next Action",
310
+ nextAction,
311
+ ];
312
+ const outPath = join(projectDir, ".claude", "state.md");
313
+ mkdirSync(dirname(outPath), { recursive: true });
314
+ writeFileSync(outPath, lines.join("\n"), "utf-8");
315
+ }
316
+ catch {
317
+ // non-throwing
318
+ }
319
+ }
320
+ /**
321
+ * Write docs/layer-status.md snapshot after a successful cycle.
322
+ * Non-throwing — errors are silently swallowed to avoid breaking close_cycle.
323
+ */
324
+ function writeLayerStatusSnapshot(projectDir, timestamp, harnessSection) {
325
+ try {
326
+ const report = buildLayerReport(projectDir);
327
+ const total = report.ucs.length;
328
+ const l2Covered = report.l2.filter((u) => u.hasProbe).length;
329
+ // Probe file counts
330
+ const harnessRunPath = join(projectDir, ".forgecraft", "harness-run.json");
331
+ let harnessTimestamp = "(not run)";
332
+ let harnessPassed = 0;
333
+ let harnessFailed = 0;
334
+ if (existsSync(harnessRunPath)) {
335
+ try {
336
+ const run = JSON.parse(readFileSync(harnessRunPath, "utf-8"));
337
+ harnessTimestamp = run.timestamp ?? "(not run)";
338
+ harnessPassed = run.passed ?? 0;
339
+ harnessFailed = run.failed ?? 0;
340
+ }
341
+ catch {
342
+ // ignore
343
+ }
344
+ }
345
+ // Determine next action from harness section
346
+ const nextAction = harnessSection.some((l) => l.includes("⛔"))
347
+ ? "Resolve failing probes — they are specification violations. Regenerate from spec."
348
+ : harnessSection.some((l) => l.includes("no execution evidence"))
349
+ ? "Run run_harness to generate behavioral execution evidence."
350
+ : "All probes passing — commit changes and advance the cycle.";
351
+ const l3Status = report.l3;
352
+ const l4Status = report.l4;
353
+ const lines = [
354
+ "# Layer Status Snapshot",
355
+ `_Last updated by close_cycle: ${timestamp}_`,
356
+ "",
357
+ "## L1: Blueprint",
358
+ `${total}/${total} cascade steps passing`,
359
+ `Active gate violations: ${report.l1GateViolations.length} (see layer_status for details)`,
360
+ "",
361
+ "## L2: Behavioral Harness",
362
+ `${l2Covered}/${total} use cases with probe specs`,
363
+ `Last run: ${harnessTimestamp} — ${harnessPassed} passed / ${harnessFailed} failed`,
364
+ "",
365
+ "## L3: Environment",
366
+ l3Status,
367
+ "",
368
+ "## L4: Monitoring",
369
+ l4Status,
370
+ "",
371
+ "## Next Action",
372
+ nextAction,
373
+ ];
374
+ const outPath = join(projectDir, "docs", "layer-status.md");
375
+ mkdirSync(dirname(outPath), { recursive: true });
376
+ writeFileSync(outPath, lines.join("\n"), "utf-8");
377
+ }
378
+ catch {
379
+ // non-throwing
380
+ }
381
+ }
382
+ /**
383
+ * Build the L2 harness section for the close-cycle report.
384
+ * Non-throwing — missing/unparseable harness-run.json produces a "no evidence" section.
385
+ */
386
+ function buildHarnessSection(projectDir) {
387
+ const harnessRunPath = join(projectDir, ".forgecraft", "harness-run.json");
388
+ const harnessSection = [""];
389
+ if (existsSync(harnessRunPath)) {
390
+ try {
391
+ const run = JSON.parse(readFileSync(harnessRunPath, "utf-8"));
392
+ const total = run.passed + run.failed + run.errors + run.notFound;
393
+ const pct = total > 0 ? Math.round((run.passed / total) * 100) : 0;
394
+ harnessSection.push(`### L2 Harness: ${run.passed}/${total} probes passing (${pct}%)`);
395
+ if (run.failed > 0) {
396
+ harnessSection.push(`⛔ ${run.failed} failing probe(s) — resolve before advancing.`);
397
+ harnessSection.push("Failing probes are specification violations. Regenerate from spec.");
398
+ }
399
+ const notImpl = (run.results ?? []).filter((r) => r.status === "not_implemented");
400
+ if (notImpl.length > 0) {
401
+ harnessSection.push(`⛔ ${notImpl.length} probe(s) are not_implemented — fill TODO sections before close_cycle.`);
402
+ harnessSection.push(` Affected: ${notImpl.map((r) => r.ucId).join(", ")}`);
403
+ harnessSection.push(" A not_implemented probe exits 0 but verifies nothing — false confidence.");
404
+ }
405
+ if (pct < 50) {
406
+ harnessSection.push(`⚠️ L2 coverage below 50% — expand harness before pre-release.`);
407
+ }
408
+ }
409
+ catch {
410
+ harnessSection.push("### L2 Harness: no execution evidence");
411
+ harnessSection.push("Run run_harness before close_cycle for behavioral execution evidence.");
412
+ }
413
+ }
414
+ else {
415
+ harnessSection.push("### L2 Harness: no execution evidence");
416
+ harnessSection.push("Run run_harness before close_cycle for behavioral execution evidence.");
417
+ }
418
+ return harnessSection;
419
+ }
420
+ /**
421
+ * Build the L3 env probe section for the close-cycle report.
422
+ * Non-throwing — missing/unparseable env-probe-run.json produces a "not yet run" section.
423
+ */
424
+ function buildEnvProbeSection(projectDir) {
425
+ const envProbeRunPath = join(projectDir, ".forgecraft", "env-probe-run.json");
426
+ const section = [""];
427
+ if (existsSync(envProbeRunPath)) {
428
+ try {
429
+ const run = JSON.parse(readFileSync(envProbeRunPath, "utf-8"));
430
+ const total = run.passed + run.failed;
431
+ if (run.failed > 0) {
432
+ section.push(`### L3 Env Probes: ${run.passed}/${total} passing`);
433
+ section.push(`⛔ ${run.failed} failing env probe(s) — environment contracts not satisfied.`);
434
+ }
435
+ else {
436
+ section.push(`### L3 Env Probes: ${run.passed}/${total} passing`);
437
+ section.push(`✅ All env probes passing — environment contracts verified.`);
438
+ }
439
+ }
440
+ catch {
441
+ section.push("### L3 Env Probes: not yet run");
442
+ section.push(" Run `run_env_probe` to verify environment contracts.");
443
+ }
444
+ }
445
+ else {
446
+ section.push("### L3 Env Probes: not yet run");
447
+ section.push(" Run `run_env_probe` to verify environment contracts.");
448
+ }
449
+ return section;
450
+ }
451
+ /**
452
+ * Build the L4 slo probe section for the close-cycle report.
453
+ * Non-throwing — missing/unparseable slo-probe-run.json produces a "not yet run" section.
454
+ */
455
+ function buildSloProbeSection(projectDir) {
456
+ const sloProbeRunPath = join(projectDir, ".forgecraft", "slo-probe-run.json");
457
+ const section = [""];
458
+ if (existsSync(sloProbeRunPath)) {
459
+ try {
460
+ const run = JSON.parse(readFileSync(sloProbeRunPath, "utf-8"));
461
+ const total = run.passed + run.failed;
462
+ if (run.failed > 0) {
463
+ section.push(`### L4 SLO Probes: ${run.passed}/${total} passing`);
464
+ section.push(`⛔ ${run.failed} failing SLO probe(s) — monitoring contracts not satisfied.`);
465
+ }
466
+ else {
467
+ section.push(`### L4 SLO Probes: ${run.passed}/${total} passing`);
468
+ section.push(`✅ All SLO probes passing — monitoring contracts verified.`);
469
+ }
470
+ }
471
+ catch {
472
+ section.push("### L4 SLO Probes: not yet run");
473
+ section.push(" Run `run_slo_probe` to verify monitoring contracts.");
474
+ }
475
+ }
476
+ else {
477
+ section.push("### L4 SLO Probes: not yet run");
478
+ section.push(" Run `run_slo_probe` to verify monitoring contracts.");
479
+ }
480
+ return section;
481
+ }
482
+ /**
483
+ * Return warning-severity gate IDs that should be promoted to error severity
484
+ * now that the project has a clean cascade baseline.
485
+ *
486
+ * Only returns candidates when forgecraft.yaml has `brownfield: true`.
487
+ * Called after a successful close_cycle to surface the ramp opportunity.
488
+ *
489
+ * @param projectRoot - Absolute path to project root
490
+ * @returns Gate IDs at severity: warning
491
+ */
492
+ export function detectSeverityRampCandidates(projectRoot) {
493
+ if (!readBrownfieldFlag(projectRoot))
494
+ return [];
495
+ return getActiveProjectGates(projectRoot)
496
+ .filter((g) => g.severity === "warning")
497
+ .map((g) => g.id);
498
+ }
159
499
  /**
160
500
  * MCP handler for the close_cycle action.
161
501
  *
@@ -180,8 +520,28 @@ export async function closeCycleHandler(args) {
180
520
  if (roadmapItem && result.cascadeStatus === "pass" && !dryRun) {
181
521
  markRoadmapItemDone(projectRoot, roadmapItem);
182
522
  }
523
+ const reportLines = [formatCloseCycleResult(result)];
524
+ // Append L2 Harness section when cascade passed
525
+ if (result.cascadeStatus === "pass") {
526
+ const harnessLines = buildHarnessSection(projectRoot);
527
+ reportLines.push(...harnessLines);
528
+ const envProbeLines = buildEnvProbeSection(projectRoot);
529
+ reportLines.push(...envProbeLines);
530
+ const sloProbeLines = buildSloProbeSection(projectRoot);
531
+ reportLines.push(...sloProbeLines);
532
+ // Brownfield severity ramp
533
+ const rampCandidates = detectSeverityRampCandidates(projectRoot);
534
+ if (rampCandidates.length > 0) {
535
+ reportLines.push("", "### Brownfield Severity Ramp", "", `Baseline clean. ${rampCandidates.length} gate(s) are at \`severity: warning\` — promote to \`error\` now that the project has a clean baseline:`, ...rampCandidates.map((id) => `- ${id}`), "", "To flip: edit `.forgecraft/gates/project/active/<id>.yaml` and set `severity: error`.", "Future audit runs will then fail on violations instead of warning.");
536
+ }
537
+ // Write docs/layer-status.md snapshot
538
+ const cycleTimestamp = new Date().toISOString();
539
+ writeLayerStatusSnapshot(projectRoot, cycleTimestamp, harnessLines);
540
+ // Write .claude/state.md sentinel leaf
541
+ writeStateLeaf(projectRoot, cycleTimestamp);
542
+ }
183
543
  return {
184
- content: [{ type: "text", text: formatCloseCycleResult(result) }],
544
+ content: [{ type: "text", text: reportLines.join("\n") }],
185
545
  };
186
546
  }
187
547
  //# sourceMappingURL=close-cycle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"close-cycle.js","sourceRoot":"","sources":["../../src/tools/close-cycle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"close-cycle.js","sourceRoot":"","sources":["../../src/tools/close-cycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACL,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,6BAA6B,CAAC;AAMrC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,6BAA6B,CAAC;AAErC,uEAAuE;AAEvE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAA6D;IAE7D,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAEhD,0BAA0B;IAC1B,MAAM,SAAS,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAC9D,MAAM,aAAa,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAEtD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,QAAQ,GAAG,YAAY;aAC1B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;aACzD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtB,MAAM,SAAS,GAAG;YAChB,kDAAkD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SACxE,CAAC;QACF,OAAO;YACL,aAAa,EAAE,MAAM;YACrB,eAAe,EAAE,QAAQ;YACzB,aAAa,EAAE,CAAC;YAChB,aAAa,EAAE,CAAC;YAChB,eAAe,EAAE,EAAE;YACnB,SAAS;YACT,KAAK,EAAE,KAAK;SACb,CAAC;IACJ,CAAC;IAED,qCAAqC;IACrC,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAChE,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC7C,CAAC,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;YACzB,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YACnD,CAAC,CAAC,CAAC,CAAC,EAAE,CACT,CAAC;QACF,OAAO;YACL,aAAa,EAAE,MAAM;YACrB,eAAe,EAAE,QAAQ;YACzB,aAAa,EAAE,CAAC;YAChB,aAAa,EAAE,CAAC;YAChB,eAAe,EAAE,EAAE;YACnB,SAAS,EAAE;gBACT,GAAG,mBAAmB,CAAC,MAAM,sFAAsF;gBACnH,GAAG,mBAAmB,CAAC,GAAG,CACxB,CAAC,CAAC,EAAE,EAAE,CACJ,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/G;gBACD,sGAAsG;aACvG;YACD,KAAK,EAAE,KAAK;SACb,CAAC;IACJ,CAAC;IAED,yBAAyB;IACzB,MAAM,WAAW,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAEnD,6CAA6C;IAC7C,MAAM,WAAW,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;IACvD,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC;IAEzC,MAAM,UAAU,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACrD,MAAM,eAAe,GAAG,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IAExD,MAAM,kBAAkB,GAAG,MAAM,eAAe,CAAC;QAC/C,WAAW;QACX,MAAM,EAAE,eAAe;QACvB,YAAY,EAAE,UAAU,EAAE,EAAE;KAC7B,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,IAAI,GAAG,CAC1B,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAClD,CAAC;IACF,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;gBACjC,aAAa,EAAE,CAAC;YAClB,CAAC;YAAC,MAAM,CAAC;gBACP,gDAAgD;YAClD,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC;IACpC,CAAC;IAED,6BAA6B;IAC7B,MAAM,eAAe,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAEzD,8BAA8B;IAC9B,MAAM,eAAe,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACzD,MAAM,eAAe,GACnB,eAAe,KAAK,IAAI;QACxB,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAEtD,6CAA6C;IAC7C,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC1D,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAE9E,+BAA+B;IAC/B,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,WAA+B,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;QACjD,MAAM,eAAe,GAAG,yBAAyB,CAAC,WAAW,CAAC,CAAC;QAC/D,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,cAAc,GAAG,iBAAiB,CACtC,WAAW,EACX,IAAI,EACJ,eAAe,EACf,gBAAgB,CACjB,CAAC;QAEF,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;QAC7D,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACnD,gBAAgB,GAAG,OAAO;iBACvB,KAAK,CAAC,IAAI,CAAC;iBACX,MAAM,CACL,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAC3D,CAAC,MAAM,CAAC;YACX,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,GAAG,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,WAAW,GAAG,gBAAgB,GAAG,CAAC,CAAC;QAEnC,gBAAgB,CAAC;YACf,UAAU,EAAE,WAAW;YACvB,IAAI,EAAE,WAAW;YACjB,aAAa,EAAE,eAAe,EAAE,EAAE;YAClC,SAAS;YACT,cAAc;SACf,CAAC,CAAC;QACH,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,aAAa,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,uBAAuB;IACvB,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACtB,SAAS,CAAC,IAAI,CACZ,GAAG,aAAa,QAAQ,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,+EAA+E,CACtI,CAAC;IACJ,CAAC;IAED,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,SAAS,CAAC,IAAI,CACZ,0CAA0C,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvE,CAAC;IACJ,CAAC;IAED,wBAAwB;IACxB,MAAM,WAAW,GAAG,sBAAsB,CAAC,WAAW,CAAC,CAAC;IACxD,IAAI,WAAW,CAAC,aAAa,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QACrD,SAAS,CAAC,IAAI,CAAC,mBAAmB,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,SAAS,CAAC,IAAI,CACZ,0EAA0E,CAC3E,CAAC;IACJ,CAAC;IAED,OAAO;QACL,aAAa,EAAE,MAAM;QACrB,WAAW;QACX,aAAa;QACb,aAAa;QACb,kBAAkB,EAAE;YAClB,SAAS,EAAE,kBAAkB,CAAC,SAAS,CAAC,MAAM;YAC9C,OAAO,EAAE,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAC1C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAC9B,CAAC,MAAM;SACT;QACD,eAAe;QACf,SAAS;QACT,KAAK,EAAE,IAAI;QACX,eAAe;QACf,iBAAiB,EAAE,iBAAiB,IAAI,SAAS;QACjD,gBAAgB;QAChB,eAAe;QACf,aAAa;QACb,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3D,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CACvB,gBAAmD,EACnD,SAAiB,EACjB,KAAa,EACb,UAKQ,EACR,QAAgB,EAChB,QAAgB;IAEhB,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,WAAW,gBAAgB,CAAC,MAAM,yBAAyB,gBAAgB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,wCAAwC,CAAC;IACrJ,CAAC;IACD,IAAI,SAAS,GAAG,KAAK,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;QAClC,OAAO,yBAAyB,OAAO,MAAM,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,4CAA4C,CAAC;IACpH,CAAC;IACD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,mDAAmD,CAAC;IAC7D,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,cAAc,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,UAAU,CAAC,cAAe,CAAC;QACrC,OAAO,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,8EAA8E,CAAC;IACtI,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,OAAO,UAAU,CAAC,MAAM,oBAAoB,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,oDAAoD,CAAC;IAC5I,CAAC;IACD,IAAI,QAAQ,KAAK,aAAa,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzD,OAAO,sDAAsD,CAAC;IAChE,CAAC;IACD,IAAI,QAAQ,KAAK,aAAa,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzD,OAAO,yDAAyD,CAAC;IACnE,CAAC;IACD,OAAO,kFAAkF,CAAC;AAC5F,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CAAC,UAAkB,EAAE,SAAiB;IAC3D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;QAChC,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;QAE7D,4BAA4B;QAC5B,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC;QAC3E,IAAI,UAAU,GAKH,IAAI,CAAC;QAChB,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAK3D,CAAC;gBACF,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;oBAClB,MAAM,cAAc,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAC/C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,iBAAiB,CACtC,CAAC,MAAM,CAAC;oBACT,UAAU,GAAG;wBACX,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC;wBACvB,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC;wBACvB,cAAc,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;wBAC/D,SAAS,EAAE,GAAG,CAAC,SAAS;qBACzB,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QAED,0BAA0B;QAC1B,MAAM,eAAe,GAAG,IAAI,CAC1B,UAAU,EACV,aAAa,EACb,oBAAoB,CACrB,CAAC;QACF,IAAI,iBAAiB,GAAG,SAAS,CAAC;QAClC,IAAI,cAAc,GAAG,aAAa,CAAC;QACnC,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAI5D,CAAC;gBACF,iBAAiB,GAAG,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC;gBAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;gBAC/B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;gBAC/B,cAAc;oBACZ,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC;YACrE,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QAED,0BAA0B;QAC1B,MAAM,eAAe,GAAG,IAAI,CAC1B,UAAU,EACV,aAAa,EACb,oBAAoB,CACrB,CAAC;QACF,IAAI,iBAAiB,GAAG,SAAS,CAAC;QAClC,IAAI,cAAc,GAAG,aAAa,CAAC;QACnC,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAI5D,CAAC;gBACF,iBAAiB,GAAG,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC;gBAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;gBAC/B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;gBAC/B,cAAc;oBACZ,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC;YACrE,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC;QACnD,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC;QACjC,MAAM,gBAAgB,GAAG,UAAU,EAAE,SAAS,IAAI,SAAS,CAAC;QAC5D,MAAM,WAAW,GAAG,UAAU;YAC5B,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,IAAI,OAAO,iBAAiB;YAClD,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,cAAc,GAClB,MAAM,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;YAChC,CAAC,CAAC,MAAM,CAAC,gBAAgB;iBACpB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,OAAO,IAAI,gBAAgB,EAAE,CAAC;iBAC/D,IAAI,CAAC,IAAI,CAAC;YACf,CAAC,CAAC,MAAM,CAAC;QAEb,MAAM,SAAS,GAAG,eAAe,CAAC;QAElC,MAAM,aAAa,GAAG,MAAM,CAAC;QAC7B,MAAM,UAAU,GAAG,gBAAgB,CACjC,MAAM,CAAC,gBAAgB,EACvB,SAAS,EACT,KAAK,EACL,UAAU,EACV,MAAM,CAAC,EAAE,EACT,MAAM,CAAC,EAAE,CACV,CAAC;QAEF,MAAM,KAAK,GAAG;YACZ,iBAAiB;YACjB,iCAAiC,SAAS,GAAG;YAC7C,EAAE;YACF,qBAAqB;YACrB,+BAA+B;YAC/B,eAAe;YACf,oBAAoB,KAAK,IAAI,KAAK,UAAU,WAAW,kBAAkB,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,mBAAmB,SAAS,IAAI;YACrI,kBAAkB,WAAW,wBAAwB,gBAAgB,IAAI;YACzE,sBAAsB,cAAc,0BAA0B,iBAAiB,IAAI;YACnF,qBAAqB,cAAc,0BAA0B,iBAAiB,IAAI;YAClF,EAAE;YACF,2BAA2B;YAC3B,cAAc;YACd,EAAE;YACF,eAAe;YACf,SAAS;YACT,EAAE;YACF,eAAe;YACf,GAAG,SAAS,eAAe,aAAa,aAAa,WAAW,aAAa,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,eAAe,WAAW,EAAE;YACrI,EAAE;YACF,gBAAgB;YAChB,UAAU;SACX,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QACxD,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,wBAAwB,CAC/B,UAAkB,EAClB,SAAiB,EACjB,cAAwB;IAExB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;QAChC,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;QAE7D,oBAAoB;QACpB,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC;QAC3E,IAAI,gBAAgB,GAAG,WAAW,CAAC;QACnC,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAI3D,CAAC;gBACF,gBAAgB,GAAG,GAAG,CAAC,SAAS,IAAI,WAAW,CAAC;gBAChD,aAAa,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;gBAChC,aAAa,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;YAClC,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QAED,6CAA6C;QAC7C,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC5D,CAAC,CAAC,mFAAmF;YACrF,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;gBAC/D,CAAC,CAAC,4DAA4D;gBAC9D,CAAC,CAAC,4DAA4D,CAAC;QAEnE,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;QAE3B,MAAM,KAAK,GAAG;YACZ,yBAAyB;YACzB,iCAAiC,SAAS,GAAG;YAC7C,EAAE;YACF,kBAAkB;YAClB,GAAG,KAAK,IAAI,KAAK,wBAAwB;YACzC,2BAA2B,MAAM,CAAC,gBAAgB,CAAC,MAAM,iCAAiC;YAC1F,EAAE;YACF,2BAA2B;YAC3B,GAAG,SAAS,IAAI,KAAK,6BAA6B;YAClD,aAAa,gBAAgB,MAAM,aAAa,aAAa,aAAa,SAAS;YACnF,EAAE;YACF,oBAAoB;YACpB,QAAQ;YACR,EAAE;YACF,mBAAmB;YACnB,QAAQ;YACR,EAAE;YACF,gBAAgB;YAChB,UAAU;SACX,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAC5D,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB,CAAC,UAAkB;IAC7C,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC;IAC3E,MAAM,cAAc,GAAa,CAAC,EAAE,CAAC,CAAC;IAEtC,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAM3D,CAAC;YACF,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC;YAClE,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnE,cAAc,CAAC,IAAI,CACjB,mBAAmB,GAAG,CAAC,MAAM,IAAI,KAAK,oBAAoB,GAAG,IAAI,CAClE,CAAC;YACF,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnB,cAAc,CAAC,IAAI,CACjB,KAAK,GAAG,CAAC,MAAM,+CAA+C,CAC/D,CAAC;gBACF,cAAc,CAAC,IAAI,CACjB,oEAAoE,CACrE,CAAC;YACJ,CAAC;YACD,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CACxC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,iBAAiB,CACtC,CAAC;YACF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,cAAc,CAAC,IAAI,CACjB,KAAK,OAAO,CAAC,MAAM,wEAAwE,CAC5F,CAAC;gBACF,cAAc,CAAC,IAAI,CACjB,eAAe,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvD,CAAC;gBACF,cAAc,CAAC,IAAI,CACjB,4EAA4E,CAC7E,CAAC;YACJ,CAAC;YACD,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC;gBACb,cAAc,CAAC,IAAI,CACjB,+DAA+D,CAChE,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,cAAc,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;YAC7D,cAAc,CAAC,IAAI,CACjB,uEAAuE,CACxE,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,cAAc,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QAC7D,cAAc,CAAC,IAAI,CACjB,uEAAuE,CACxE,CAAC;IACJ,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,UAAkB;IAC9C,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAa,CAAC,EAAE,CAAC,CAAC;IAE/B,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAI5D,CAAC;YACF,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;YACtC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC,sBAAsB,GAAG,CAAC,MAAM,IAAI,KAAK,UAAU,CAAC,CAAC;gBAClE,OAAO,CAAC,IAAI,CACV,KAAK,GAAG,CAAC,MAAM,8DAA8D,CAC9E,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,sBAAsB,GAAG,CAAC,MAAM,IAAI,KAAK,UAAU,CAAC,CAAC;gBAClE,OAAO,CAAC,IAAI,CACV,4DAA4D,CAC7D,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,UAAkB;IAC9C,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAa,CAAC,EAAE,CAAC,CAAC;IAE/B,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAI5D,CAAC;YACF,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;YACtC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC,sBAAsB,GAAG,CAAC,MAAM,IAAI,KAAK,UAAU,CAAC,CAAC;gBAClE,OAAO,CAAC,IAAI,CACV,KAAK,GAAG,CAAC,MAAM,6DAA6D,CAC7E,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,sBAAsB,GAAG,CAAC,MAAM,IAAI,KAAK,UAAU,CAAC,CAAC;gBAClE,OAAO,CAAC,IAAI,CACV,2DAA2D,CAC5D,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,4BAA4B,CAAC,WAAmB;IAC9D,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,CAAC;IAChD,OAAO,qBAAqB,CAAC,WAAW,CAAC;SACtC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC;SACvC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACtB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAA6B;IAE7B,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAuB,CAAC;IAC9D,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,2EAA2E;iBAClF;aACF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAI,IAAI,CAAC,SAAS,CAAyB,IAAI,KAAK,CAAC;IACjE,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAuB,CAAC;IAC/D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;IAEzD,IAAI,WAAW,IAAI,MAAM,CAAC,aAAa,KAAK,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QAC9D,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,WAAW,GAAG,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC;IAErD,gDAAgD;IAChD,IAAI,MAAM,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;QACpC,MAAM,YAAY,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;QACtD,WAAW,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;QAElC,MAAM,aAAa,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACxD,WAAW,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;QAEnC,MAAM,aAAa,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACxD,WAAW,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;QAEnC,2BAA2B;QAC3B,MAAM,cAAc,GAAG,4BAA4B,CAAC,WAAW,CAAC,CAAC;QACjE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,WAAW,CAAC,IAAI,CACd,EAAE,EACF,8BAA8B,EAC9B,EAAE,EACF,mBAAmB,cAAc,CAAC,MAAM,yGAAyG,EACjJ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,EACxC,EAAE,EACF,uFAAuF,EACvF,oEAAoE,CACrE,CAAC;QACJ,CAAC;QAED,sCAAsC;QACtC,MAAM,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAChD,wBAAwB,CAAC,WAAW,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;QAEpE,uCAAuC;QACvC,cAAc,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;KAC1D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * cnt_add_routing tool handler.
3
+ *
4
+ * Generates and appends a routing block to .claude/index.md — one line per
5
+ * leaf node in .claude/standards/, with a "[NEEDS CLARIFICATION: when to load]"
6
+ * placeholder that the practitioner fills in.
7
+ *
8
+ * This closes the "Bounded" property gap: without explicit routing directives,
9
+ * the AI has no instruction about when to descend to each leaf, so it either
10
+ * loads everything (expensive) or guesses (unreliable).
11
+ *
12
+ * Idempotent: leaves already referenced in index.md are skipped.
13
+ */
14
+ import type { ToolResult } from "../shared/types.js";
15
+ export interface CntAddRoutingInput {
16
+ readonly project_dir: string;
17
+ /** Optional domain-level description hints keyed by leaf stem name. */
18
+ readonly hints?: Record<string, string>;
19
+ }
20
+ /**
21
+ * Append routing directives for unrouted leaves into .claude/index.md.
22
+ *
23
+ * @param args - Input with project_dir and optional hints
24
+ * @returns MCP tool result with added/skipped counts and the appended block
25
+ */
26
+ export declare function cntAddRoutingHandler(args: CntAddRoutingInput): Promise<ToolResult>;
27
+ /**
28
+ * Build the routing block markdown to append to index.md.
29
+ */
30
+ export declare function buildRoutingBlock(unrouted: string[], hints: Record<string, string>): string;
31
+ //# sourceMappingURL=cnt-add-routing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cnt-add-routing.d.ts","sourceRoot":"","sources":["../../src/tools/cnt-add-routing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,uEAAuE;IACvE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,UAAU,CAAC,CAgErB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,MAAM,CAiBR"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * cnt_add_routing tool handler.
3
+ *
4
+ * Generates and appends a routing block to .claude/index.md — one line per
5
+ * leaf node in .claude/standards/, with a "[NEEDS CLARIFICATION: when to load]"
6
+ * placeholder that the practitioner fills in.
7
+ *
8
+ * This closes the "Bounded" property gap: without explicit routing directives,
9
+ * the AI has no instruction about when to descend to each leaf, so it either
10
+ * loads everything (expensive) or guesses (unreliable).
11
+ *
12
+ * Idempotent: leaves already referenced in index.md are skipped.
13
+ */
14
+ import { existsSync, readFileSync, writeFileSync } from "node:fs";
15
+ import { join } from "node:path";
16
+ import { findUnroutedLeaves } from "../shared/cnt-health.js";
17
+ /**
18
+ * Append routing directives for unrouted leaves into .claude/index.md.
19
+ *
20
+ * @param args - Input with project_dir and optional hints
21
+ * @returns MCP tool result with added/skipped counts and the appended block
22
+ */
23
+ export async function cntAddRoutingHandler(args) {
24
+ const { project_dir, hints = {} } = args;
25
+ const indexPath = join(project_dir, ".claude", "index.md");
26
+ if (!existsSync(indexPath)) {
27
+ return {
28
+ content: [
29
+ {
30
+ type: "text",
31
+ text: "`.claude/index.md` not found — run `cnt_add_node` or `scaffold` first to initialize the CNT.",
32
+ },
33
+ ],
34
+ };
35
+ }
36
+ const unrouted = findUnroutedLeaves(project_dir);
37
+ if (unrouted.length === 0) {
38
+ return {
39
+ content: [
40
+ {
41
+ type: "text",
42
+ text: "All CNT leaf nodes already have routing directives in `.claude/index.md`. No changes needed.",
43
+ },
44
+ ],
45
+ };
46
+ }
47
+ const routingBlock = buildRoutingBlock(unrouted, hints);
48
+ const existing = readFileSync(indexPath, "utf-8");
49
+ // Append after a separator if the file doesn't already end with one
50
+ const separator = existing.trimEnd().endsWith("---") ? "\n" : "\n\n---\n\n";
51
+ const updated = existing.trimEnd() + separator + routingBlock + "\n";
52
+ writeFileSync(indexPath, updated, "utf-8");
53
+ const lines = [
54
+ `## CNT Routing Updated`,
55
+ ``,
56
+ `Added routing directives for **${unrouted.length}** leaf node(s) to \`.claude/index.md\`.`,
57
+ ``,
58
+ `**Added:**`,
59
+ ...unrouted.map((leaf) => `- \`${leaf}\``),
60
+ ``,
61
+ `**Next step:** Replace each \`[NEEDS CLARIFICATION]\` placeholder with a concrete "when to load" condition.`,
62
+ ``,
63
+ `Example good routing:`,
64
+ `\`\`\``,
65
+ `- **tools-routing** → load \`.claude/standards/tools-routing.md\` when working on MCP tool handlers in \`src/tools/\``,
66
+ `\`\`\``,
67
+ ``,
68
+ `Example weak routing (avoid — too broad):`,
69
+ `\`\`\``,
70
+ `- **tools-routing** → general guidelines`,
71
+ `\`\`\``,
72
+ ``,
73
+ `### Appended block`,
74
+ ``,
75
+ "```markdown",
76
+ routingBlock,
77
+ "```",
78
+ ];
79
+ return { content: [{ type: "text", text: lines.join("\n") }] };
80
+ }
81
+ /**
82
+ * Build the routing block markdown to append to index.md.
83
+ */
84
+ export function buildRoutingBlock(unrouted, hints) {
85
+ const lines = [
86
+ `## Context Navigation — When to Load Each Leaf`,
87
+ ``,
88
+ `Load the relevant leaf file BEFORE modifying code in the corresponding domain.`,
89
+ `Do NOT load all leaves at session start — load on demand per task.`,
90
+ ``,
91
+ ];
92
+ for (const leaf of unrouted) {
93
+ const hint = hints[leaf] ??
94
+ `[NEEDS CLARIFICATION: describe what task or file pattern triggers loading \`.claude/standards/${leaf}.md\`]`;
95
+ lines.push(`- **${leaf}** → \`.claude/standards/${leaf}.md\` — ${hint}`);
96
+ }
97
+ return lines.join("\n");
98
+ }
99
+ //# sourceMappingURL=cnt-add-routing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cnt-add-routing.js","sourceRoot":"","sources":["../../src/tools/cnt-add-routing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAS7D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAwB;IAExB,MAAM,EAAE,WAAW,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAE3D,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,8FAA8F;iBACrG;aACF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAEjD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,8FAA8F;iBACrG;aACF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAElD,oEAAoE;IACpE,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC;IAC5E,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,SAAS,GAAG,YAAY,GAAG,IAAI,CAAC;IACrE,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAE3C,MAAM,KAAK,GAAG;QACZ,wBAAwB;QACxB,EAAE;QACF,kCAAkC,QAAQ,CAAC,MAAM,0CAA0C;QAC3F,EAAE;QACF,YAAY;QACZ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,IAAI,CAAC;QAC1C,EAAE;QACF,6GAA6G;QAC7G,EAAE;QACF,uBAAuB;QACvB,QAAQ;QACR,uHAAuH;QACvH,QAAQ;QACR,EAAE;QACF,2CAA2C;QAC3C,QAAQ;QACR,0CAA0C;QAC1C,QAAQ;QACR,EAAE;QACF,oBAAoB;QACpB,EAAE;QACF,aAAa;QACb,YAAY;QACZ,KAAK;KACN,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACjE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAkB,EAClB,KAA6B;IAE7B,MAAM,KAAK,GAAG;QACZ,gDAAgD;QAChD,EAAE;QACF,gFAAgF;QAChF,oEAAoE;QACpE,EAAE;KACH,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,GACR,KAAK,CAAC,IAAI,CAAC;YACX,iGAAiG,IAAI,QAAQ,CAAC;QAChH,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,4BAA4B,IAAI,WAAW,IAAI,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"configure-mcp.d.ts","sourceRoot":"","sources":["../../src/tools/configure-mcp.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAKxE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoD7B,CAAC;AAOH;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,mBAAmB,GAAG,SAAS,GACvC,IAAI,CAEN;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,GACvC,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA2I7D"}
1
+ {"version":3,"file":"configure-mcp.d.ts","sourceRoot":"","sources":["../../src/tools/configure-mcp.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAKxE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoD7B,CAAC;AAOH;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,mBAAmB,GAAG,SAAS,GACvC,IAAI,CAEN;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,GACvC,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAmM7D"}