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
@@ -0,0 +1,246 @@
1
+ /**
2
+ * Probe execution runners for run_harness.
3
+ * Each function executes a probe file of a given type.
4
+ */
5
+ import { spawnSync } from "node:child_process";
6
+ import { existsSync } from "node:fs";
7
+ import { dirname, join } from "node:path";
8
+ // ── Helpers ───────────────────────────────────────────────────────────
9
+ export function combineOutput(stdout, stderr) {
10
+ const parts = [];
11
+ if (stdout?.trim())
12
+ parts.push(stdout.trim());
13
+ if (stderr?.trim())
14
+ parts.push(stderr.trim());
15
+ return parts.join("\n");
16
+ }
17
+ const NOT_IMPLEMENTED_PATTERNS = [
18
+ "not yet implemented",
19
+ "not implemented",
20
+ "TODO: implement",
21
+ "ProbeNotImplemented",
22
+ ];
23
+ export function isNotImplementedOutput(output) {
24
+ const lower = output.toLowerCase();
25
+ return NOT_IMPLEMENTED_PATTERNS.some((p) => lower.includes(p.toLowerCase()));
26
+ }
27
+ export function isToolAvailable(tool) {
28
+ try {
29
+ const result = spawnSync(tool, ["--version"], {
30
+ stdio: ["pipe", "pipe", "pipe"],
31
+ timeout: 5000,
32
+ });
33
+ return result.status !== null && result.error === undefined;
34
+ }
35
+ catch {
36
+ return false;
37
+ }
38
+ }
39
+ // ── Probe dispatch ────────────────────────────────────────────────────
40
+ export function runProbe(probePath, fileName, timeoutMs) {
41
+ const start = Date.now();
42
+ if (fileName.endsWith(".a11y.spec.ts") || fileName.endsWith(".spec.ts")) {
43
+ return runPlaywrightProbe(probePath, timeoutMs, start);
44
+ }
45
+ if (fileName.endsWith(".graphql.hurl") || fileName.endsWith(".hurl")) {
46
+ return runHurlProbe(probePath, timeoutMs, start);
47
+ }
48
+ if (fileName.endsWith(".sim.ts")) {
49
+ return runVitestProbe(probePath, timeoutMs, start);
50
+ }
51
+ if (fileName.endsWith(".consumer.test.ts") ||
52
+ fileName.endsWith(".provider.test.ts")) {
53
+ return runVitestProbe(probePath, timeoutMs, start);
54
+ }
55
+ if (fileName.endsWith(".k6.js")) {
56
+ return runK6Probe(probePath, timeoutMs, start);
57
+ }
58
+ if (fileName.endsWith(".db.sh") ||
59
+ fileName.endsWith(".mq.sh") ||
60
+ fileName.endsWith(".ws.sh") ||
61
+ fileName.endsWith(".log.sh") ||
62
+ fileName.endsWith(".grpc.sh") ||
63
+ fileName.endsWith(".zap.sh") ||
64
+ fileName.endsWith(".sh")) {
65
+ return runShProbe(probePath, timeoutMs, start);
66
+ }
67
+ return {
68
+ status: "error",
69
+ durationMs: Date.now() - start,
70
+ output: `Unknown probe type: ${fileName}`,
71
+ };
72
+ }
73
+ // ── Individual runners ────────────────────────────────────────────────
74
+ export function runPlaywrightProbe(probePath, timeoutMs, start) {
75
+ try {
76
+ const result = spawnSync("npx", ["playwright", "test", probePath, "--reporter=line"], {
77
+ timeout: timeoutMs,
78
+ stdio: ["pipe", "pipe", "pipe"],
79
+ encoding: "utf-8",
80
+ });
81
+ const durationMs = Date.now() - start;
82
+ const output = combineOutput(result.stdout, result.stderr);
83
+ if (result.error?.message?.includes("ENOENT"))
84
+ return {
85
+ status: "tool_missing",
86
+ durationMs,
87
+ output: "playwright not found",
88
+ };
89
+ if (result.signal === "SIGTERM" ||
90
+ result.error?.message?.includes("ETIMEDOUT"))
91
+ return { status: "timeout", durationMs, output: "timed out" };
92
+ if (isNotImplementedOutput(output))
93
+ return { status: "not_implemented", durationMs, output };
94
+ return {
95
+ status: result.status === 0 ? "pass" : "fail",
96
+ durationMs,
97
+ output,
98
+ };
99
+ }
100
+ catch (err) {
101
+ return {
102
+ status: "tool_missing",
103
+ durationMs: Date.now() - start,
104
+ output: `playwright not available: ${String(err)}`,
105
+ };
106
+ }
107
+ }
108
+ export function runHurlProbe(probePath, timeoutMs, start) {
109
+ try {
110
+ // Look for hurl.env in the probe's directory for variable injection ({{host}}, etc.)
111
+ const probeDir = dirname(probePath);
112
+ const hurlEnvPath = join(probeDir, "hurl.env");
113
+ // Inject a per-run unique uid so each harness run uses fresh test users.
114
+ // This avoids 422 failures caused by duplicate username/email from prior runs.
115
+ const runUid = `r${Date.now().toString(36)}`;
116
+ const hurlArgs = existsSync(hurlEnvPath)
117
+ ? [
118
+ "--variables-file",
119
+ hurlEnvPath,
120
+ "--variable",
121
+ `uid=${runUid}`,
122
+ probePath,
123
+ ]
124
+ : ["--variable", `uid=${runUid}`, probePath];
125
+ const result = spawnSync("hurl", hurlArgs, {
126
+ timeout: timeoutMs,
127
+ stdio: ["pipe", "pipe", "pipe"],
128
+ encoding: "utf-8",
129
+ });
130
+ const durationMs = Date.now() - start;
131
+ const output = combineOutput(result.stdout, result.stderr);
132
+ if (result.error?.message?.includes("ENOENT"))
133
+ return { status: "tool_missing", durationMs, output: "hurl not found" };
134
+ if (result.signal === "SIGTERM" ||
135
+ result.error?.message?.includes("ETIMEDOUT"))
136
+ return { status: "timeout", durationMs, output: "timed out" };
137
+ return {
138
+ status: result.status === 0 ? "pass" : "fail",
139
+ durationMs,
140
+ output,
141
+ };
142
+ }
143
+ catch (err) {
144
+ return {
145
+ status: "tool_missing",
146
+ durationMs: Date.now() - start,
147
+ output: `hurl not available: ${String(err)}`,
148
+ };
149
+ }
150
+ }
151
+ export function runVitestProbe(probePath, timeoutMs, start) {
152
+ try {
153
+ const result = spawnSync("npx", ["vitest", "run", probePath], {
154
+ timeout: timeoutMs,
155
+ stdio: ["pipe", "pipe", "pipe"],
156
+ encoding: "utf-8",
157
+ });
158
+ const durationMs = Date.now() - start;
159
+ const output = combineOutput(result.stdout, result.stderr);
160
+ if (result.error?.message?.includes("ENOENT"))
161
+ return { status: "tool_missing", durationMs, output: "vitest not found" };
162
+ if (result.signal === "SIGTERM" ||
163
+ result.error?.message?.includes("ETIMEDOUT"))
164
+ return { status: "timeout", durationMs, output: "timed out" };
165
+ if (isNotImplementedOutput(output))
166
+ return { status: "not_implemented", durationMs, output };
167
+ return {
168
+ status: result.status === 0 ? "pass" : "fail",
169
+ durationMs,
170
+ output,
171
+ };
172
+ }
173
+ catch (err) {
174
+ return {
175
+ status: "tool_missing",
176
+ durationMs: Date.now() - start,
177
+ output: `vitest not available: ${String(err)}`,
178
+ };
179
+ }
180
+ }
181
+ export function runK6Probe(probePath, timeoutMs, start) {
182
+ if (!isToolAvailable("k6")) {
183
+ return {
184
+ status: "tool_missing",
185
+ durationMs: Date.now() - start,
186
+ output: "k6 not found (install: https://k6.io)",
187
+ };
188
+ }
189
+ try {
190
+ const result = spawnSync("k6", ["run", probePath], {
191
+ timeout: timeoutMs,
192
+ stdio: ["pipe", "pipe", "pipe"],
193
+ encoding: "utf-8",
194
+ });
195
+ const durationMs = Date.now() - start;
196
+ const output = combineOutput(result.stdout, result.stderr);
197
+ if (result.error?.message?.includes("ENOENT"))
198
+ return { status: "tool_missing", durationMs, output: "k6 not found" };
199
+ if (result.signal === "SIGTERM" ||
200
+ result.error?.message?.includes("ETIMEDOUT"))
201
+ return { status: "timeout", durationMs, output: "timed out" };
202
+ return {
203
+ status: result.status === 0 ? "pass" : "fail",
204
+ durationMs,
205
+ output,
206
+ };
207
+ }
208
+ catch (err) {
209
+ return {
210
+ status: "tool_missing",
211
+ durationMs: Date.now() - start,
212
+ output: `k6 not available: ${String(err)}`,
213
+ };
214
+ }
215
+ }
216
+ export function runShProbe(probePath, timeoutMs, start) {
217
+ try {
218
+ const result = spawnSync("bash", [probePath], {
219
+ timeout: timeoutMs,
220
+ stdio: ["pipe", "pipe", "pipe"],
221
+ encoding: "utf-8",
222
+ });
223
+ const durationMs = Date.now() - start;
224
+ const output = combineOutput(result.stdout, result.stderr);
225
+ if (result.error?.message?.includes("ENOENT"))
226
+ return { status: "tool_missing", durationMs, output: "bash not found" };
227
+ if (result.signal === "SIGTERM" ||
228
+ result.error?.message?.includes("ETIMEDOUT"))
229
+ return { status: "timeout", durationMs, output: "timed out" };
230
+ if (isNotImplementedOutput(output))
231
+ return { status: "not_implemented", durationMs, output };
232
+ return {
233
+ status: result.status === 0 ? "pass" : "fail",
234
+ durationMs,
235
+ output,
236
+ };
237
+ }
238
+ catch (err) {
239
+ return {
240
+ status: "tool_missing",
241
+ durationMs: Date.now() - start,
242
+ output: `bash not available: ${String(err)}`,
243
+ };
244
+ }
245
+ }
246
+ //# sourceMappingURL=probe-runners.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probe-runners.js","sourceRoot":"","sources":["../../src/tools/probe-runners.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Probe content template generators for generate_harness.
3
+ * Each function returns the file content for a given probe type.
4
+ */
5
+ import type { ProbeType } from "./generate-harness.js";
6
+ export interface UcDetails {
7
+ precondition: string;
8
+ postcondition: string;
9
+ steps: string[];
10
+ }
11
+ export declare function generatePlaywrightProbe(ucId: string, title: string, precondition: string, postcondition: string, steps: string[], scenario?: string): string;
12
+ export declare function generateHurlProbe(ucId: string, title: string, precondition: string, postcondition: string, steps: string[], scenario?: string): string;
13
+ export declare function generateGraphqlHurlProbe(ucId: string, title: string, postcondition: string, scenario?: string): string;
14
+ export declare function generateShProbe(ucId: string, title: string, postcondition: string, probeType: ProbeType, scenario?: string): string;
15
+ export declare function generateDbShProbe(ucId: string, title: string, postcondition: string, scenario?: string): string;
16
+ export declare function generateMqShProbe(ucId: string, title: string, postcondition: string, scenario?: string): string;
17
+ export declare function generateK6Probe(ucId: string, title: string, postcondition: string, scenario?: string): string;
18
+ export declare function generateWsShProbe(ucId: string, title: string, postcondition: string, scenario?: string): string;
19
+ export declare function generateLogShProbe(ucId: string, title: string, _postcondition: string, scenario?: string): string;
20
+ export declare function generateA11yProbe(ucId: string, title: string): string;
21
+ export declare function generateConsumerContractProbe(ucId: string, title: string): string;
22
+ export declare function generateProviderContractProbe(ucId: string, title: string): string;
23
+ export declare function generateGrpcShProbe(ucId: string, title: string, postcondition: string, scenario?: string): string;
24
+ export declare function generateZapShProbe(ucId: string, title: string): string;
25
+ export declare function generateSimProbe(ucId: string, title: string): string;
26
+ export declare function generateProbeContent(ucId: string, title: string, probeType: ProbeType, details: UcDetails, scenario?: string): string;
27
+ //# sourceMappingURL=probe-templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probe-templates.d.ts","sourceRoot":"","sources":["../../src/tools/probe-templates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAID,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EAAE,EACf,QAAQ,SAAU,GACjB,MAAM,CAmBR;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EAAE,EACf,QAAQ,SAAU,GACjB,MAAM,CAcR;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,EACrB,QAAQ,SAAU,GACjB,MAAM,CAUR;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,SAAS,EACpB,QAAQ,SAAU,GACjB,MAAM,CAgBR;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,EACrB,QAAQ,SAAU,GACjB,MAAM,CAaR;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,EACrB,QAAQ,SAAU,GACjB,MAAM,CAkBR;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,EACrB,QAAQ,SAAU,GACjB,MAAM,CAmBR;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,EACrB,QAAQ,SAAU,GACjB,MAAM,CAcR;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,EACtB,QAAQ,SAAU,GACjB,MAAM,CAUR;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAkBrE;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,MAAM,CAkBR;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,MAAM,CAiBR;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,EACrB,QAAQ,SAAU,GACjB,MAAM,CAaR;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAgBtE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAOpE;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,SAAS,EAClB,QAAQ,SAAU,GACjB,MAAM,CAoER"}
@@ -0,0 +1,279 @@
1
+ /**
2
+ * Probe content template generators for generate_harness.
3
+ * Each function returns the file content for a given probe type.
4
+ */
5
+ // ── Template generators ───────────────────────────────────────────────
6
+ export function generatePlaywrightProbe(ucId, title, precondition, postcondition, steps, scenario = "happy") {
7
+ const stepComments = steps.length > 0
8
+ ? steps.map((s, i) => ` // Step ${i + 1}: ${s}`).join("\n")
9
+ : ` // TODO: implement ${ucId} main flow steps`;
10
+ return `import { test, expect } from '@playwright/test';
11
+
12
+ /**
13
+ * L2 Harness: ${ucId} — ${title} [${scenario}]
14
+ * Precondition: ${precondition}
15
+ * Postcondition: ${postcondition}
16
+ */
17
+ test.describe('${ucId}: ${title}', () => {
18
+ test('postcondition: ${postcondition}', async ({ page }) => {
19
+ ${stepComments}
20
+ throw new Error('Probe not yet implemented — fill in the ${ucId} flow');
21
+ });
22
+ });
23
+ `;
24
+ }
25
+ export function generateHurlProbe(ucId, title, precondition, postcondition, steps, scenario = "happy") {
26
+ const stepComments = steps.length > 0
27
+ ? steps.map((s, i) => `# Step ${i + 1}: ${s}`).join("\n")
28
+ : `# TODO: implement ${ucId} main flow steps`;
29
+ return `# L2 Harness: ${ucId} — ${title} [${scenario}]
30
+ # Precondition: ${precondition}
31
+ # Postcondition: ${postcondition}
32
+ ${stepComments}
33
+ POST http://{{host}}/api/endpoint
34
+ Content-Type: application/json
35
+ { "field": "value" }
36
+ HTTP 200
37
+ `;
38
+ }
39
+ export function generateGraphqlHurlProbe(ucId, title, postcondition, scenario = "happy") {
40
+ return `# L2 Harness: ${ucId} — ${title} [${scenario}]
41
+ # GraphQL postcondition: ${postcondition}
42
+ POST http://{{host}}/graphql
43
+ Content-Type: application/json
44
+ { "query": "query { __typename }", "variables": {} }
45
+ HTTP 200
46
+ [Asserts]
47
+ jsonpath "$.data" exists
48
+ `;
49
+ }
50
+ export function generateShProbe(ucId, title, postcondition, probeType, scenario = "happy") {
51
+ if (probeType === "mcp_call") {
52
+ return `#!/usr/bin/env bash
53
+ # L2 Harness: ${ucId} — ${title} [${scenario}]
54
+ # Verifies MCP action postconditions
55
+ set -euo pipefail
56
+ echo "TODO: implement ${ucId} MCP probe"
57
+ exit 1
58
+ `;
59
+ }
60
+ return `#!/usr/bin/env bash
61
+ # L2 Harness: ${ucId} — ${title} [${scenario}]
62
+ # Postcondition: ${postcondition}
63
+ set -euo pipefail
64
+ echo "PASS: ${ucId} postcondition verified"
65
+ `;
66
+ }
67
+ export function generateDbShProbe(ucId, title, postcondition, scenario = "happy") {
68
+ return `#!/usr/bin/env bash
69
+ # L2 Harness: ${ucId} — ${title} [${scenario}]
70
+ # DB postcondition: ${postcondition}
71
+ set -euo pipefail
72
+ DB_URL="\${DATABASE_URL:-}"
73
+ if [ -z "$DB_URL" ]; then
74
+ echo "SKIP: DATABASE_URL not set — cannot verify DB postcondition"
75
+ exit 0
76
+ fi
77
+ echo "TODO: implement DB postcondition check for ${ucId} [${scenario}]"
78
+ exit 1
79
+ `;
80
+ }
81
+ export function generateMqShProbe(ucId, title, postcondition, scenario = "happy") {
82
+ return `#!/usr/bin/env bash
83
+ # L2 Harness: ${ucId} — ${title} [${scenario}]
84
+ # Queue postcondition: ${postcondition}
85
+ set -euo pipefail
86
+ BROKER="\${KAFKA_BROKER:?KAFKA_BROKER is required}"
87
+ TOPIC="\${QUEUE_TOPIC:-}"
88
+ if command -v kcat &>/dev/null; then
89
+ echo "TODO: assert event published to $TOPIC via kcat"
90
+ exit 1
91
+ elif command -v rabbitmqadmin &>/dev/null; then
92
+ echo "TODO: rabbitmqadmin get queue={{queue_name}}"
93
+ exit 1
94
+ else
95
+ echo "SKIP: no queue inspection tool found (kcat, rabbitmqadmin)"
96
+ exit 0
97
+ fi
98
+ `;
99
+ }
100
+ export function generateK6Probe(ucId, title, postcondition, scenario = "happy") {
101
+ return `// L2 Harness: ${ucId} — ${title} [${scenario}]
102
+ // NFR contract: ${postcondition}
103
+ import http from 'k6/http';
104
+ import { check, sleep } from 'k6';
105
+ export const options = {
106
+ vus: 10,
107
+ duration: '30s',
108
+ thresholds: {
109
+ http_req_duration: ['p(99)<500'],
110
+ http_req_failed: ['rate<0.01'],
111
+ },
112
+ };
113
+ export default function () {
114
+ const res = http.get(__ENV.API_URL + '/api/health');
115
+ check(res, { 'status is 200': (r) => r.status === 200 });
116
+ sleep(1);
117
+ }
118
+ `;
119
+ }
120
+ export function generateWsShProbe(ucId, title, postcondition, scenario = "happy") {
121
+ return `#!/usr/bin/env bash
122
+ # L2 Harness: ${ucId} — ${title} [${scenario}]
123
+ # WebSocket postcondition: ${postcondition}
124
+ set -euo pipefail
125
+ WS_URL="\${WS_URL:?WS_URL is required}"
126
+ if command -v wscat &>/dev/null; then
127
+ echo "TODO: assert WebSocket message for ${ucId} [${scenario}]"
128
+ exit 1
129
+ else
130
+ echo "SKIP: wscat not found (npm install -g wscat)"
131
+ exit 0
132
+ fi
133
+ `;
134
+ }
135
+ export function generateLogShProbe(ucId, title, _postcondition, scenario = "happy") {
136
+ return `#!/usr/bin/env bash
137
+ # L2 Harness: ${ucId} — ${title} [${scenario}]
138
+ # Log postcondition: structured log entry must appear after use case execution
139
+ set -euo pipefail
140
+ LOG_FILE="\${LOG_FILE:-/tmp/app.log}"
141
+ EXPECTED_PATTERN="\${LOG_PATTERN:-${ucId}}"
142
+ echo "TODO: implement log assertion for ${ucId} [${scenario}]"
143
+ exit 1
144
+ `;
145
+ }
146
+ export function generateA11yProbe(ucId, title) {
147
+ return `import { test, expect } from '@playwright/test';
148
+ import AxeBuilder from '@axe-core/playwright';
149
+
150
+ /**
151
+ * L2 Harness: ${ucId} — ${title} [Accessibility]
152
+ * Contract: Zero WCAG 2.1 AA violations on the primary use case page.
153
+ */
154
+ test.describe('${ucId} Accessibility: ${title}', () => {
155
+ test('WCAG 2.1 AA — zero violations', async ({ page }) => {
156
+ await page.goto(process.env['BASE_URL'] ?? '');
157
+ const results = await new AxeBuilder({ page })
158
+ .withTags(['wcag2a', 'wcag2aa', 'wcag21aa'])
159
+ .analyze();
160
+ expect(results.violations).toEqual([]);
161
+ });
162
+ });
163
+ `;
164
+ }
165
+ export function generateConsumerContractProbe(ucId, title) {
166
+ return `import { PactV3 } from '@pact-foundation/pact';
167
+ import { join } from 'path';
168
+
169
+ /**
170
+ * L2 Harness: ${ucId} — ${title} [Consumer Contract]
171
+ */
172
+ const provider = new PactV3({
173
+ consumer: '{{consumer_name}}',
174
+ provider: '{{provider_name}}',
175
+ dir: join(__dirname, '../../pacts'),
176
+ });
177
+ describe('${ucId} Consumer Contract', () => {
178
+ it('has a valid interaction for ${title}', async () => {
179
+ throw new Error('Not implemented: define the Pact interaction for ${ucId}');
180
+ });
181
+ });
182
+ `;
183
+ }
184
+ export function generateProviderContractProbe(ucId, title) {
185
+ return `import { Verifier } from '@pact-foundation/pact';
186
+ import { join } from 'path';
187
+
188
+ /**
189
+ * L2 Harness: ${ucId} — ${title} [Provider Verification]
190
+ */
191
+ describe('${ucId} Provider Verification', () => {
192
+ it('satisfies all consumer contracts', async () => {
193
+ return new Verifier({
194
+ provider: '{{provider_name}}',
195
+ providerBaseUrl: process.env.PROVIDER_URL ?? 'http://localhost:3000',
196
+ pactUrls: [join(__dirname, '../../pacts')],
197
+ }).verifyProvider();
198
+ });
199
+ });
200
+ `;
201
+ }
202
+ export function generateGrpcShProbe(ucId, title, postcondition, scenario = "happy") {
203
+ return `#!/usr/bin/env bash
204
+ # L2 Harness: ${ucId} — ${title} [${scenario}]
205
+ # gRPC postcondition: ${postcondition}
206
+ set -euo pipefail
207
+ GRPC_HOST="\${GRPC_HOST:?GRPC_HOST is required}"
208
+ if ! command -v grpcurl &>/dev/null; then
209
+ echo "SKIP: grpcurl not found (brew install grpcurl)"
210
+ exit 0
211
+ fi
212
+ echo "TODO: implement gRPC probe for ${ucId} [${scenario}]"
213
+ exit 1
214
+ `;
215
+ }
216
+ export function generateZapShProbe(ucId, title) {
217
+ return `#!/usr/bin/env bash
218
+ # L2 Harness: ${ucId} — ${title} [Security Scan]
219
+ # Contract: zero HIGH/CRITICAL vulnerabilities on the use case endpoint.
220
+ set -euo pipefail
221
+ TARGET_URL="\${TARGET_URL:?TARGET_URL is required}"
222
+ if ! command -v docker &>/dev/null; then
223
+ echo "SKIP: docker not found — cannot run OWASP ZAP scan"
224
+ exit 0
225
+ fi
226
+ docker run --rm -t owasp/zap2docker-stable \\
227
+ zap-baseline.py -t "$TARGET_URL" -l WARN --exit-code true 2>&1 || {
228
+ echo "FAIL: ZAP found vulnerabilities on $TARGET_URL"
229
+ exit 1
230
+ }
231
+ `;
232
+ }
233
+ export function generateSimProbe(ucId, title) {
234
+ return `/**
235
+ * L2 Harness: ${ucId} — ${title}
236
+ * Headless simulation probe — verifies behavioral invariants without rendering.
237
+ */
238
+ throw new Error('Probe not yet implemented — implement the ${ucId} simulation scenario');
239
+ `;
240
+ }
241
+ export function generateProbeContent(ucId, title, probeType, details, scenario = "happy") {
242
+ switch (probeType) {
243
+ case "playwright":
244
+ return generatePlaywrightProbe(ucId, title, details.precondition, details.postcondition, details.steps, scenario);
245
+ case "api_call":
246
+ case "hurl":
247
+ return generateHurlProbe(ucId, title, details.precondition, details.postcondition, details.steps, scenario);
248
+ case "graphql":
249
+ return generateGraphqlHurlProbe(ucId, title, details.postcondition, scenario);
250
+ case "headless_sim":
251
+ return generateSimProbe(ucId, title);
252
+ case "db_query":
253
+ return generateDbShProbe(ucId, title, details.postcondition, scenario);
254
+ case "message_queue":
255
+ return generateMqShProbe(ucId, title, details.postcondition, scenario);
256
+ case "performance":
257
+ return generateK6Probe(ucId, title, details.postcondition, scenario);
258
+ case "websocket":
259
+ return generateWsShProbe(ucId, title, details.postcondition, scenario);
260
+ case "log_assertion":
261
+ return generateLogShProbe(ucId, title, details.postcondition, scenario);
262
+ case "a11y":
263
+ return generateA11yProbe(ucId, title);
264
+ case "contract_consumer":
265
+ return generateConsumerContractProbe(ucId, title);
266
+ case "contract_provider":
267
+ return generateProviderContractProbe(ucId, title);
268
+ case "grpc":
269
+ return generateGrpcShProbe(ucId, title, details.postcondition, scenario);
270
+ case "security_scan":
271
+ return generateZapShProbe(ucId, title);
272
+ case "mcp_call":
273
+ return generateShProbe(ucId, title, details.postcondition, "mcp_call", scenario);
274
+ case "file_system":
275
+ default:
276
+ return generateShProbe(ucId, title, details.postcondition, "file_system", scenario);
277
+ }
278
+ }
279
+ //# sourceMappingURL=probe-templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probe-templates.js","sourceRoot":"","sources":["../../src/tools/probe-templates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * propose_session tool handler.
3
+ *
4
+ * Produces a pre-implementation impact assessment before generate_session_prompt runs.
5
+ * Adapted from OpenSpec's Propose phase, extended with forgecraft's layer-awareness.
6
+ *
7
+ * Output: which specs will change (ADDED/MODIFIED), which layers are affected,
8
+ * which gates must pass before close_cycle, and an implementation checklist.
9
+ * Writes .forgecraft/proposal.md as a persistent artifact.
10
+ */
11
+ import { z } from "zod";
12
+ import type { ToolResult } from "../shared/types.js";
13
+ export declare const proposeSessionSchema: z.ZodObject<{
14
+ project_dir: z.ZodString;
15
+ item_description: z.ZodOptional<z.ZodString>;
16
+ roadmap_item_id: z.ZodOptional<z.ZodString>;
17
+ }, "strip", z.ZodTypeAny, {
18
+ project_dir: string;
19
+ item_description?: string | undefined;
20
+ roadmap_item_id?: string | undefined;
21
+ }, {
22
+ project_dir: string;
23
+ item_description?: string | undefined;
24
+ roadmap_item_id?: string | undefined;
25
+ }>;
26
+ export type ProposeSessionInput = z.infer<typeof proposeSessionSchema>;
27
+ export declare function proposeSessionHandler(args: ProposeSessionInput): Promise<ToolResult>;
28
+ //# sourceMappingURL=propose-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propose-session.d.ts","sourceRoot":"","sources":["../../src/tools/propose-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAMrD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;EAe/B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAqBvE,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,UAAU,CAAC,CAqDrB"}