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
@@ -60,97 +60,97 @@ function generateTypeScriptModule(moduleDir, moduleName, className, tags) {
60
60
  const files = [];
61
61
  const relBase = `src/modules/${moduleName}`;
62
62
  // Types
63
- const typesContent = `/**
64
- * ${className} module types.
65
- */
66
-
67
- export interface ${className} {
68
- readonly id: string;
69
- // TODO: Define ${className} properties
70
- }
71
-
72
- export interface Create${className}Input {
73
- // TODO: Define creation input
74
- }
75
-
76
- export interface Update${className}Input {
77
- readonly id: string;
78
- // TODO: Define update input
79
- }
63
+ const typesContent = `/**
64
+ * ${className} module types.
65
+ */
66
+
67
+ export interface ${className} {
68
+ readonly id: string;
69
+ // TODO: Define ${className} properties
70
+ }
71
+
72
+ export interface Create${className}Input {
73
+ // TODO: Define creation input
74
+ }
75
+
76
+ export interface Update${className}Input {
77
+ readonly id: string;
78
+ // TODO: Define update input
79
+ }
80
80
  `;
81
81
  writeFileSync(join(moduleDir, "types.ts"), typesContent);
82
82
  files.push(`${relBase}/types.ts`);
83
83
  // Interface
84
- const interfaceContent = `/**
85
- * ${className} service interface.
86
- *
87
- * Defines the contract — implementations are swappable.
88
- */
89
-
90
- import type { ${className}, Create${className}Input, Update${className}Input } from "./types.js";
91
-
92
- export interface I${className}Service {
93
- create(input: Create${className}Input): Promise<${className}>;
94
- findById(id: string): Promise<${className} | null>;
95
- update(input: Update${className}Input): Promise<${className}>;
96
- delete(id: string): Promise<void>;
97
- }
84
+ const interfaceContent = `/**
85
+ * ${className} service interface.
86
+ *
87
+ * Defines the contract — implementations are swappable.
88
+ */
89
+
90
+ import type { ${className}, Create${className}Input, Update${className}Input } from "./types.js";
91
+
92
+ export interface I${className}Service {
93
+ create(input: Create${className}Input): Promise<${className}>;
94
+ findById(id: string): Promise<${className} | null>;
95
+ update(input: Update${className}Input): Promise<${className}>;
96
+ delete(id: string): Promise<void>;
97
+ }
98
98
  `;
99
99
  writeFileSync(join(moduleDir, "interface.ts"), interfaceContent);
100
100
  files.push(`${relBase}/interface.ts`);
101
101
  // Service implementation
102
- const serviceContent = `/**
103
- * ${className} service implementation.
104
- */
105
-
106
- import type { ${className}, Create${className}Input, Update${className}Input } from "./types.js";
107
- import type { I${className}Service } from "./interface.js";
108
-
109
- export class ${className}Service implements I${className}Service {
110
- async create(input: Create${className}Input): Promise<${className}> {
111
- // TODO: Implement creation logic
112
- throw new Error("Not implemented");
113
- }
114
-
115
- async findById(id: string): Promise<${className} | null> {
116
- // TODO: Implement find logic
117
- throw new Error("Not implemented");
118
- }
119
-
120
- async update(input: Update${className}Input): Promise<${className}> {
121
- // TODO: Implement update logic
122
- throw new Error("Not implemented");
123
- }
124
-
125
- async delete(id: string): Promise<void> {
126
- // TODO: Implement delete logic
127
- throw new Error("Not implemented");
128
- }
129
- }
102
+ const serviceContent = `/**
103
+ * ${className} service implementation.
104
+ */
105
+
106
+ import type { ${className}, Create${className}Input, Update${className}Input } from "./types.js";
107
+ import type { I${className}Service } from "./interface.js";
108
+
109
+ export class ${className}Service implements I${className}Service {
110
+ async create(input: Create${className}Input): Promise<${className}> {
111
+ // TODO: Implement creation logic
112
+ throw new Error("Not implemented");
113
+ }
114
+
115
+ async findById(id: string): Promise<${className} | null> {
116
+ // TODO: Implement find logic
117
+ throw new Error("Not implemented");
118
+ }
119
+
120
+ async update(input: Update${className}Input): Promise<${className}> {
121
+ // TODO: Implement update logic
122
+ throw new Error("Not implemented");
123
+ }
124
+
125
+ async delete(id: string): Promise<void> {
126
+ // TODO: Implement delete logic
127
+ throw new Error("Not implemented");
128
+ }
129
+ }
130
130
  `;
131
131
  writeFileSync(join(moduleDir, "service.ts"), serviceContent);
132
132
  files.push(`${relBase}/service.ts`);
133
133
  // Index barrel
134
- const indexContent = `export type { ${className}, Create${className}Input, Update${className}Input } from "./types.js";
135
- export type { I${className}Service } from "./interface.js";
136
- export { ${className}Service } from "./service.js";
134
+ const indexContent = `export type { ${className}, Create${className}Input, Update${className}Input } from "./types.js";
135
+ export type { I${className}Service } from "./interface.js";
136
+ export { ${className}Service } from "./service.js";
137
137
  `;
138
138
  writeFileSync(join(moduleDir, "index.ts"), indexContent);
139
139
  files.push(`${relBase}/index.ts`);
140
140
  // API routes if API tag present
141
141
  if (tags.includes("API")) {
142
- const routesContent = `/**
143
- * ${className} API routes.
144
- */
145
-
146
- // TODO: Register routes with your HTTP framework
147
- // Example:
148
- // router.post("/${moduleName}", create${className}Handler);
149
- // router.get("/${moduleName}/:id", get${className}Handler);
150
- // router.put("/${moduleName}/:id", update${className}Handler);
151
- // router.delete("/${moduleName}/:id", delete${className}Handler);
152
-
153
- export {};
142
+ const routesContent = `/**
143
+ * ${className} API routes.
144
+ */
145
+
146
+ // TODO: Register routes with your HTTP framework
147
+ // Example:
148
+ // router.post("/${moduleName}", create${className}Handler);
149
+ // router.get("/${moduleName}/:id", get${className}Handler);
150
+ // router.put("/${moduleName}/:id", update${className}Handler);
151
+ // router.delete("/${moduleName}/:id", delete${className}Handler);
152
+
153
+ export {};
154
154
  `;
155
155
  writeFileSync(join(moduleDir, "routes.ts"), routesContent);
156
156
  files.push(`${relBase}/routes.ts`);
@@ -158,17 +158,17 @@ export {};
158
158
  // Test file
159
159
  const testDir = join(moduleDir, "__tests__");
160
160
  mkdirSync(testDir, { recursive: true });
161
- const testContent = `import { describe, it, expect } from "vitest";
162
- import { ${className}Service } from "../service.js";
163
-
164
- describe("${className}Service", () => {
165
- it("should be defined", () => {
166
- const service = new ${className}Service();
167
- expect(service).toBeDefined();
168
- });
169
-
170
- // TODO: Add comprehensive tests
171
- });
161
+ const testContent = `import { describe, it, expect } from "vitest";
162
+ import { ${className}Service } from "../service.js";
163
+
164
+ describe("${className}Service", () => {
165
+ it("should be defined", () => {
166
+ const service = new ${className}Service();
167
+ expect(service).toBeDefined();
168
+ });
169
+
170
+ // TODO: Add comprehensive tests
171
+ });
172
172
  `;
173
173
  writeFileSync(join(testDir, `${moduleName}.test.ts`), testContent);
174
174
  files.push(`${relBase}/__tests__/${moduleName}.test.ts`);
@@ -185,48 +185,48 @@ function generatePythonModule(moduleDir, moduleName, className, _tags) {
185
185
  writeFileSync(join(moduleDir, "__init__.py"), `"""${className} module."""\n`);
186
186
  files.push(`${relBase}/__init__.py`);
187
187
  // models.py
188
- const modelsContent = `"""${className} data models."""
189
-
190
- from dataclasses import dataclass
191
-
192
-
193
- @dataclass
194
- class ${className}:
195
- id: str
196
- # TODO: Define ${className} fields
197
-
198
-
199
- @dataclass
200
- class Create${className}Input:
201
- # TODO: Define creation input
202
- pass
203
-
204
-
205
- @dataclass
206
- class Update${className}Input:
207
- id: str
208
- # TODO: Define update input
188
+ const modelsContent = `"""${className} data models."""
189
+
190
+ from dataclasses import dataclass
191
+
192
+
193
+ @dataclass
194
+ class ${className}:
195
+ id: str
196
+ # TODO: Define ${className} fields
197
+
198
+
199
+ @dataclass
200
+ class Create${className}Input:
201
+ # TODO: Define creation input
202
+ pass
203
+
204
+
205
+ @dataclass
206
+ class Update${className}Input:
207
+ id: str
208
+ # TODO: Define update input
209
209
  `;
210
210
  writeFileSync(join(moduleDir, "models.py"), modelsContent);
211
211
  files.push(`${relBase}/models.py`);
212
212
  // service.py
213
- const serviceContent = `"""${className} service."""
214
-
215
- from .models import ${className}, Create${className}Input, Update${className}Input
216
-
217
-
218
- class ${className}Service:
219
- async def create(self, input: Create${className}Input) -> ${className}:
220
- raise NotImplementedError
221
-
222
- async def find_by_id(self, id: str) -> ${className} | None:
223
- raise NotImplementedError
224
-
225
- async def update(self, input: Update${className}Input) -> ${className}:
226
- raise NotImplementedError
227
-
228
- async def delete(self, id: str) -> None:
229
- raise NotImplementedError
213
+ const serviceContent = `"""${className} service."""
214
+
215
+ from .models import ${className}, Create${className}Input, Update${className}Input
216
+
217
+
218
+ class ${className}Service:
219
+ async def create(self, input: Create${className}Input) -> ${className}:
220
+ raise NotImplementedError
221
+
222
+ async def find_by_id(self, id: str) -> ${className} | None:
223
+ raise NotImplementedError
224
+
225
+ async def update(self, input: Update${className}Input) -> ${className}:
226
+ raise NotImplementedError
227
+
228
+ async def delete(self, id: str) -> None:
229
+ raise NotImplementedError
230
230
  `;
231
231
  writeFileSync(join(moduleDir, "service.py"), serviceContent);
232
232
  files.push(`${relBase}/service.py`);
@@ -1 +1 @@
1
- {"version":3,"file":"advice-registry.d.ts","sourceRoot":"","sources":["../../src/tools/advice-registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAI9C,UAAU,SAAS;IACjB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,eAAO,MAAM,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAyJtD,CAAC;AAIF,eAAO,MAAM,UAAU;;;GAMtB,CAAC;AAEF,eAAO,MAAM,UAAU,UAUtB,CAAC;AAIF;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,CAqCtD"}
1
+ {"version":3,"file":"advice-registry.d.ts","sourceRoot":"","sources":["../../src/tools/advice-registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAI9C,UAAU,SAAS;IACjB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,eAAO,MAAM,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAqPtD,CAAC;AAIF,eAAO,MAAM,UAAU;;;GAYtB,CAAC;AAEF,eAAO,MAAM,UAAU,UAUtB,CAAC;AAIF;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,CAuCtD"}
@@ -5,8 +5,14 @@ export const TAG_ADVICE = {
5
5
  API: {
6
6
  tools: [
7
7
  { layer: "Contract (CDC)", tools: "Pact, Spring Cloud Contract" },
8
- { layer: "Subcutaneous / API", tools: "Supertest (Node), httpx (Python)" },
9
- { layer: "Smoke", tools: "Playwright `APIRequestContext` — no browser overhead" },
8
+ {
9
+ layer: "Subcutaneous / API",
10
+ tools: "Supertest (Node), httpx (Python)",
11
+ },
12
+ {
13
+ layer: "Smoke",
14
+ tools: "Playwright `APIRequestContext` — no browser overhead",
15
+ },
10
16
  { layer: "Security DAST", tools: "OWASP ZAP (staging, pre-prod)" },
11
17
  ],
12
18
  cycleAdditions: [
@@ -20,8 +26,14 @@ export const TAG_ADVICE = {
20
26
  },
21
27
  "WEB-REACT": {
22
28
  tools: [
23
- { layer: "Component / Unit", tools: "@testing-library/react + @testing-library/user-event" },
24
- { layer: "Visual Regression", tools: "Chromatic or Percy (per Storybook story)" },
29
+ {
30
+ layer: "Component / Unit",
31
+ tools: "@testing-library/react + @testing-library/user-event",
32
+ },
33
+ {
34
+ layer: "Visual Regression",
35
+ tools: "Chromatic or Percy (per Storybook story)",
36
+ },
25
37
  { layer: "a11y", tools: "axe-core + @axe-core/playwright" },
26
38
  { layer: "Smoke", tools: "Playwright (full browser)" },
27
39
  ],
@@ -35,6 +47,42 @@ export const TAG_ADVICE = {
35
47
  ],
36
48
  smokeNote: "React smoke uses full browser Playwright. Covers: page load + console errors, auth redirect, critical a11y.",
37
49
  },
50
+ "WEB-NEXT": {
51
+ tools: [
52
+ {
53
+ layer: "Component / Unit",
54
+ tools: "@testing-library/react + @testing-library/user-event",
55
+ },
56
+ {
57
+ layer: "API Routes",
58
+ tools: "Hurl (contract tests for /api/* routes) or Supertest",
59
+ },
60
+ {
61
+ layer: "E2E / SSR",
62
+ tools: "Playwright (server-side rendering + hydration verification)",
63
+ },
64
+ {
65
+ layer: "Performance",
66
+ tools: "Lighthouse CI (Core Web Vitals — LCP, FCP, CLS)",
67
+ },
68
+ {
69
+ layer: "Bundle",
70
+ tools: "@next/bundle-analyzer + size-limit (first-load JS budget)",
71
+ },
72
+ { layer: "a11y", tools: "axe-core + @axe-core/playwright" },
73
+ ],
74
+ cycleAdditions: [
75
+ "Pre-commit: `next build` exits 0 — catches server/client boundary violations and type errors",
76
+ "Pre-commit: ESLint @next/next/no-img-element — enforces next/image over raw <img>",
77
+ "PR gate: Hurl contract tests for every /api/* route (happy path + 401 + 400)",
78
+ "PR gate: Playwright E2E — SSR pages render with correct data, auth redirect, form submission",
79
+ "PR gate: axe automated a11y on all public routes (0 violations at A/AA level)",
80
+ "PR gate: Bundle size budget — first-load JS ≤ 200kB per page",
81
+ "Staging: Playwright browser smoke — pages load with real data, no hydration errors in console",
82
+ "Staging: Lighthouse CI — Core Web Vitals (LCP < 2.5s, FCP < 1.8s, CLS < 0.1)",
83
+ ],
84
+ smokeNote: "Next.js smoke is dual-layer: Playwright for UI/SSR (hydration, auth, data) + Hurl for /api/* contracts. Both are required.",
85
+ },
38
86
  "WEB-STATIC": {
39
87
  tools: [
40
88
  { layer: "Smoke", tools: "Playwright (full browser)" },
@@ -49,10 +97,22 @@ export const TAG_ADVICE = {
49
97
  },
50
98
  GAME: {
51
99
  tools: [
52
- { layer: "Headless Unit (Tier 1)", tools: "Vitest / Jest — zero browser, pre-commit" },
53
- { layer: "Browser Smoke (Tier 2)", tools: "Playwright (full browser — canvas, WebGL)" },
54
- { layer: "Perf Smoke (Tier 3)", tools: "Playwright + CDP (`Performance.getMetrics` FPS floor)" },
55
- { layer: "Visual QA Gate", tools: "Playwright screenshots + PCA silhouette checks" },
100
+ {
101
+ layer: "Headless Unit (Tier 1)",
102
+ tools: "Vitest / Jest zero browser, pre-commit",
103
+ },
104
+ {
105
+ layer: "Browser Smoke (Tier 2)",
106
+ tools: "Playwright (full browser — canvas, WebGL)",
107
+ },
108
+ {
109
+ layer: "Perf Smoke (Tier 3)",
110
+ tools: "Playwright + CDP (`Performance.getMetrics` FPS floor)",
111
+ },
112
+ {
113
+ layer: "Visual QA Gate",
114
+ tools: "Playwright screenshots + PCA silhouette checks",
115
+ },
56
116
  ],
57
117
  cycleAdditions: [
58
118
  "Pre-commit: Headless unit — state machines, physics, scoring, save/load round-trip",
@@ -78,7 +138,10 @@ export const TAG_ADVICE = {
78
138
  },
79
139
  ML: {
80
140
  tools: [
81
- { layer: "Model Evaluation", tools: "pytest + metrics assertions (accuracy, F1, AUC floors)" },
141
+ {
142
+ layer: "Model Evaluation",
143
+ tools: "pytest + metrics assertions (accuracy, F1, AUC floors)",
144
+ },
82
145
  { layer: "Drift Detection", tools: "Evidently AI, Alibi Detect" },
83
146
  ],
84
147
  cycleAdditions: [
@@ -91,7 +154,10 @@ export const TAG_ADVICE = {
91
154
  },
92
155
  CLI: {
93
156
  tools: [
94
- { layer: "Subprocess Integration", tools: "execa, child_process, subprocess.run" },
157
+ {
158
+ layer: "Subprocess Integration",
159
+ tools: "execa, child_process, subprocess.run",
160
+ },
95
161
  ],
96
162
  cycleAdditions: [
97
163
  "PR gate: Subprocess integration tests — spawns real CLI binary, asserts stdout/stderr/exit code",
@@ -103,8 +169,14 @@ export const TAG_ADVICE = {
103
169
  },
104
170
  LIBRARY: {
105
171
  tools: [
106
- { layer: "Public API Tests", tools: "Test against exported surface only (not internals)" },
107
- { layer: "Multi-version", tools: "Matrix test against peer dependency version range" },
172
+ {
173
+ layer: "Public API Tests",
174
+ tools: "Test against exported surface only (not internals)",
175
+ },
176
+ {
177
+ layer: "Multi-version",
178
+ tools: "Matrix test against peer dependency version range",
179
+ },
108
180
  ],
109
181
  cycleAdditions: [
110
182
  "PR gate: Test only against the public API surface (barrel exports)",
@@ -116,7 +188,10 @@ export const TAG_ADVICE = {
116
188
  },
117
189
  REALTIME: {
118
190
  tools: [
119
- { layer: "WebSocket / SSE", tools: "ws (test client), EventSource, Socket.IO mock" },
191
+ {
192
+ layer: "WebSocket / SSE",
193
+ tools: "ws (test client), EventSource, Socket.IO mock",
194
+ },
120
195
  ],
121
196
  cycleAdditions: [
122
197
  "PR gate: Reconnect and message ordering tests",
@@ -127,8 +202,14 @@ export const TAG_ADVICE = {
127
202
  },
128
203
  FINTECH: {
129
204
  tools: [
130
- { layer: "Precision", tools: "Decimal arithmetic — never IEEE 754 floats for currency" },
131
- { layer: "Audit Log", tools: "Assert every mutation event is logged (completeness test)" },
205
+ {
206
+ layer: "Precision",
207
+ tools: "Decimal arithmetic — never IEEE 754 floats for currency",
208
+ },
209
+ {
210
+ layer: "Audit Log",
211
+ tools: "Assert every mutation event is logged (completeness test)",
212
+ },
132
213
  ],
133
214
  cycleAdditions: [
134
215
  "PR gate: Financial precision tests — decimal arithmetic, rounding mode asserted",
@@ -140,7 +221,10 @@ export const TAG_ADVICE = {
140
221
  },
141
222
  HEALTHCARE: {
142
223
  tools: [
143
- { layer: "PHI Access Control", tools: "Integration tests asserting role-based PHI visibility" },
224
+ {
225
+ layer: "PHI Access Control",
226
+ tools: "Integration tests asserting role-based PHI visibility",
227
+ },
144
228
  ],
145
229
  cycleAdditions: [
146
230
  "PR gate: PHI field access control — assert non-authorized roles cannot read PHI fields",
@@ -154,8 +238,14 @@ export const TAG_ADVICE = {
154
238
  // ── Base quality cycle ─────────────────────────────────────────────────
155
239
  export const BASE_TOOLS = [
156
240
  { layer: "Unit (Solitary)", tools: "Vitest / Jest (JS/TS), pytest (Python)" },
157
- { layer: "Unit (Sociable)", tools: "Same runner — allow real, fast non-I/O collaborators" },
158
- { layer: "Integration (DB)", tools: "Testcontainers, SQLite in-process, pg-mem" },
241
+ {
242
+ layer: "Unit (Sociable)",
243
+ tools: "Same runner — allow real, fast non-I/O collaborators",
244
+ },
245
+ {
246
+ layer: "Integration (DB)",
247
+ tools: "Testcontainers, SQLite in-process, pg-mem",
248
+ },
159
249
  { layer: "Integration (External)", tools: "msw (HTTP stubs), WireMock" },
160
250
  { layer: "SAST", tools: "npm audit, Semgrep, ESLint security plugins, Snyk" },
161
251
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"advice-registry.js","sourceRoot":"","sources":["../../src/tools/advice-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"advice-registry.js","sourceRoot":"","sources":["../../src/tools/advice-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Advice generation for the session advisor.
3
+ *
4
+ * Converts a ProjectSignals snapshot into a prioritised list of
5
+ * AdviceItems, then formats them as human-readable markdown.
6
+ * Plain-English first — GS vocabulary only when the project is configured.
7
+ */
8
+ import type { ProjectSignals } from "./advise-session-signals.js";
9
+ export interface AdviceItem {
10
+ readonly priority: "critical" | "high" | "medium" | "low";
11
+ readonly message: string;
12
+ readonly action?: string;
13
+ }
14
+ export declare function buildAdviceItems(signals: ProjectSignals, maxItems: number): AdviceItem[];
15
+ export declare function formatAdvice(items: AdviceItem[], recentActivity: string | null): string;
16
+ //# sourceMappingURL=advise-session-advisor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advise-session-advisor.d.ts","sourceRoot":"","sources":["../../src/tools/advise-session-advisor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAIlE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC1D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAwED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,GACf,UAAU,EAAE,CAWd;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,UAAU,EAAE,EACnB,cAAc,EAAE,MAAM,GAAG,IAAI,GAC5B,MAAM,CAaR"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Advice generation for the session advisor.
3
+ *
4
+ * Converts a ProjectSignals snapshot into a prioritised list of
5
+ * AdviceItems, then formats them as human-readable markdown.
6
+ * Plain-English first — GS vocabulary only when the project is configured.
7
+ */
8
+ // ── Priority labels ───────────────────────────────────────────────────
9
+ const LABEL = {
10
+ critical: "[CRITICAL]",
11
+ high: "[HIGH]",
12
+ medium: "[MEDIUM]",
13
+ low: "[LOW]",
14
+ };
15
+ // ── Advice rules ─────────────────────────────────────────────────────
16
+ function violationItems(signals) {
17
+ return signals.topViolations.map((msg) => ({
18
+ priority: "critical",
19
+ message: `Gate violation: ${msg}`,
20
+ }));
21
+ }
22
+ function constitutionItem(signals) {
23
+ if (signals.hasConstitution)
24
+ return null;
25
+ return {
26
+ priority: "high",
27
+ message: "No AI rules file found (CLAUDE.md / .clinerules / .windsurfrules / copilot-instructions.md / CONVENTIONS.md) — the assistant has no project rules to follow.",
28
+ action: 'Run forgecraft_actions { action: "setup_project" } to generate the right file for your agent.',
29
+ };
30
+ }
31
+ function testItem(signals) {
32
+ if (!signals.hasSourceCode || signals.hasTests)
33
+ return null;
34
+ return {
35
+ priority: "high",
36
+ message: "No test directory found — bugs accumulate silently without a test suite.",
37
+ action: "Add a tests/ directory and write at least one test before the next commit.",
38
+ };
39
+ }
40
+ function schemaItem(signals) {
41
+ if (!signals.hasSourceCode || signals.hasSchema)
42
+ return null;
43
+ return {
44
+ priority: "medium",
45
+ message: "No schema artifact found — the system vocabulary (API, DB, events) is implicit.",
46
+ action: "Add openapi.yaml, prisma/schema.prisma, or docs/schemas/ to make contracts explicit.",
47
+ };
48
+ }
49
+ function specItem(signals) {
50
+ if (signals.hasSpec)
51
+ return null;
52
+ return {
53
+ priority: "medium",
54
+ message: "No spec or PRD found — intent exists only in contributor heads.",
55
+ action: "Add docs/specs/PRD.md describing what the project does and why.",
56
+ };
57
+ }
58
+ function greenItem() {
59
+ return {
60
+ priority: "low",
61
+ message: "Project looks healthy — no missing artifacts or active gate violations detected.",
62
+ };
63
+ }
64
+ // ── Public API ───────────────────────────────────────────────────────
65
+ export function buildAdviceItems(signals, maxItems) {
66
+ const candidates = [
67
+ ...violationItems(signals),
68
+ constitutionItem(signals),
69
+ testItem(signals),
70
+ schemaItem(signals),
71
+ specItem(signals),
72
+ ].filter((i) => i !== null);
73
+ if (candidates.length === 0)
74
+ return [greenItem()];
75
+ return candidates.slice(0, maxItems);
76
+ }
77
+ export function formatAdvice(items, recentActivity) {
78
+ const lines = ["## Session Advisor", ""];
79
+ if (recentActivity) {
80
+ lines.push(`**Last commit:** ${recentActivity}`, "");
81
+ }
82
+ for (const item of items) {
83
+ lines.push(`${LABEL[item.priority]} ${item.message}`);
84
+ if (item.action)
85
+ lines.push(` → ${item.action}`);
86
+ }
87
+ return lines.join("\n");
88
+ }
89
+ //# sourceMappingURL=advise-session-advisor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advise-session-advisor.js","sourceRoot":"","sources":["../../src/tools/advise-session-advisor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Project signal reader for the session advisor.
3
+ *
4
+ * Reads filesystem state and active gate violations to produce a
5
+ * ProjectSignals snapshot. Intentionally fast — no git subprocess,
6
+ * no cascade execution. Used both by the MCP action and the shell hook.
7
+ */
8
+ export interface ProjectSignals {
9
+ readonly hasConfig: boolean;
10
+ readonly hasConstitution: boolean;
11
+ readonly hasSpec: boolean;
12
+ readonly hasAdrs: boolean;
13
+ readonly hasTests: boolean;
14
+ readonly hasSchema: boolean;
15
+ readonly hasSourceCode: boolean;
16
+ readonly activeViolationCount: number;
17
+ readonly topViolations: readonly string[];
18
+ readonly recentActivity: string | null;
19
+ }
20
+ export declare function readProjectSignals(projectDir: string): ProjectSignals;
21
+ //# sourceMappingURL=advise-session-signals.d.ts.map