@harness-engineering/cli 1.13.0 → 1.14.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 (367) hide show
  1. package/dist/agents/skills/claude-code/add-harness-component/skill.yaml +1 -0
  2. package/dist/agents/skills/claude-code/align-documentation/skill.yaml +1 -0
  3. package/dist/agents/skills/claude-code/check-mechanical-constraints/skill.yaml +1 -0
  4. package/dist/agents/skills/claude-code/cleanup-dead-code/skill.yaml +1 -0
  5. package/dist/agents/skills/claude-code/detect-doc-drift/skill.yaml +1 -0
  6. package/dist/agents/skills/claude-code/enforce-architecture/skill.yaml +1 -0
  7. package/dist/agents/skills/claude-code/harness-accessibility/skill.yaml +1 -0
  8. package/dist/agents/skills/claude-code/harness-api-design/SKILL.md +304 -0
  9. package/dist/agents/skills/claude-code/harness-api-design/skill.yaml +74 -0
  10. package/dist/agents/skills/claude-code/harness-architecture-advisor/skill.yaml +1 -0
  11. package/dist/agents/skills/claude-code/harness-auth/SKILL.md +279 -0
  12. package/dist/agents/skills/claude-code/harness-auth/skill.yaml +81 -0
  13. package/dist/agents/skills/claude-code/harness-autopilot/skill.yaml +1 -0
  14. package/dist/agents/skills/claude-code/harness-brainstorming/SKILL.md +39 -0
  15. package/dist/agents/skills/claude-code/harness-brainstorming/skill.yaml +1 -0
  16. package/dist/agents/skills/claude-code/harness-caching/SKILL.md +309 -0
  17. package/dist/agents/skills/claude-code/harness-caching/skill.yaml +73 -0
  18. package/dist/agents/skills/claude-code/harness-chaos/SKILL.md +295 -0
  19. package/dist/agents/skills/claude-code/harness-chaos/skill.yaml +72 -0
  20. package/dist/agents/skills/claude-code/harness-code-review/SKILL.md +44 -0
  21. package/dist/agents/skills/claude-code/harness-code-review/skill.yaml +1 -0
  22. package/dist/agents/skills/claude-code/harness-codebase-cleanup/skill.yaml +1 -0
  23. package/dist/agents/skills/claude-code/harness-compliance/SKILL.md +303 -0
  24. package/dist/agents/skills/claude-code/harness-compliance/skill.yaml +78 -0
  25. package/dist/agents/skills/claude-code/harness-containerization/SKILL.md +284 -0
  26. package/dist/agents/skills/claude-code/harness-containerization/skill.yaml +80 -0
  27. package/dist/agents/skills/claude-code/harness-data-pipeline/SKILL.md +274 -0
  28. package/dist/agents/skills/claude-code/harness-data-pipeline/skill.yaml +81 -0
  29. package/dist/agents/skills/claude-code/harness-data-validation/SKILL.md +343 -0
  30. package/dist/agents/skills/claude-code/harness-data-validation/skill.yaml +75 -0
  31. package/dist/agents/skills/claude-code/harness-database/SKILL.md +258 -0
  32. package/dist/agents/skills/claude-code/harness-database/skill.yaml +80 -0
  33. package/dist/agents/skills/claude-code/harness-debugging/skill.yaml +1 -0
  34. package/dist/agents/skills/claude-code/harness-dependency-health/skill.yaml +1 -0
  35. package/dist/agents/skills/claude-code/harness-deployment/SKILL.md +255 -0
  36. package/dist/agents/skills/claude-code/harness-deployment/skill.yaml +77 -0
  37. package/dist/agents/skills/claude-code/harness-design/skill.yaml +1 -0
  38. package/dist/agents/skills/claude-code/harness-design-mobile/skill.yaml +1 -0
  39. package/dist/agents/skills/claude-code/harness-design-system/skill.yaml +1 -0
  40. package/dist/agents/skills/claude-code/harness-design-web/skill.yaml +1 -0
  41. package/dist/agents/skills/claude-code/harness-diagnostics/skill.yaml +1 -0
  42. package/dist/agents/skills/claude-code/harness-docs-pipeline/skill.yaml +1 -0
  43. package/dist/agents/skills/claude-code/harness-dx/SKILL.md +276 -0
  44. package/dist/agents/skills/claude-code/harness-dx/skill.yaml +76 -0
  45. package/dist/agents/skills/claude-code/harness-e2e/SKILL.md +245 -0
  46. package/dist/agents/skills/claude-code/harness-e2e/skill.yaml +78 -0
  47. package/dist/agents/skills/claude-code/harness-event-driven/SKILL.md +280 -0
  48. package/dist/agents/skills/claude-code/harness-event-driven/skill.yaml +77 -0
  49. package/dist/agents/skills/claude-code/harness-execution/SKILL.md +44 -0
  50. package/dist/agents/skills/claude-code/harness-execution/skill.yaml +1 -0
  51. package/dist/agents/skills/claude-code/harness-feature-flags/SKILL.md +287 -0
  52. package/dist/agents/skills/claude-code/harness-feature-flags/skill.yaml +74 -0
  53. package/dist/agents/skills/claude-code/harness-git-workflow/skill.yaml +1 -0
  54. package/dist/agents/skills/claude-code/harness-hotspot-detector/skill.yaml +1 -0
  55. package/dist/agents/skills/claude-code/harness-i18n/skill.yaml +1 -0
  56. package/dist/agents/skills/claude-code/harness-i18n-process/skill.yaml +1 -0
  57. package/dist/agents/skills/claude-code/harness-i18n-workflow/skill.yaml +1 -0
  58. package/dist/agents/skills/claude-code/harness-impact-analysis/skill.yaml +1 -0
  59. package/dist/agents/skills/claude-code/harness-incident-response/SKILL.md +223 -0
  60. package/dist/agents/skills/claude-code/harness-incident-response/skill.yaml +78 -0
  61. package/dist/agents/skills/claude-code/harness-infrastructure-as-code/SKILL.md +279 -0
  62. package/dist/agents/skills/claude-code/harness-infrastructure-as-code/skill.yaml +80 -0
  63. package/dist/agents/skills/claude-code/harness-integration-test/SKILL.md +271 -0
  64. package/dist/agents/skills/claude-code/harness-integration-test/skill.yaml +73 -0
  65. package/dist/agents/skills/claude-code/harness-integrity/skill.yaml +1 -0
  66. package/dist/agents/skills/claude-code/harness-knowledge-mapper/skill.yaml +1 -0
  67. package/dist/agents/skills/claude-code/harness-load-testing/SKILL.md +274 -0
  68. package/dist/agents/skills/claude-code/harness-load-testing/skill.yaml +79 -0
  69. package/dist/agents/skills/claude-code/harness-ml-ops/SKILL.md +341 -0
  70. package/dist/agents/skills/claude-code/harness-ml-ops/skill.yaml +79 -0
  71. package/dist/agents/skills/claude-code/harness-mobile-patterns/SKILL.md +326 -0
  72. package/dist/agents/skills/claude-code/harness-mobile-patterns/skill.yaml +82 -0
  73. package/dist/agents/skills/claude-code/harness-mutation-test/SKILL.md +251 -0
  74. package/dist/agents/skills/claude-code/harness-mutation-test/skill.yaml +70 -0
  75. package/dist/agents/skills/claude-code/harness-observability/SKILL.md +283 -0
  76. package/dist/agents/skills/claude-code/harness-observability/skill.yaml +78 -0
  77. package/dist/agents/skills/claude-code/harness-onboarding/skill.yaml +1 -0
  78. package/dist/agents/skills/claude-code/harness-parallel-agents/skill.yaml +1 -0
  79. package/dist/agents/skills/claude-code/harness-perf/skill.yaml +1 -0
  80. package/dist/agents/skills/claude-code/harness-perf-tdd/skill.yaml +1 -0
  81. package/dist/agents/skills/claude-code/harness-planning/SKILL.md +39 -0
  82. package/dist/agents/skills/claude-code/harness-planning/skill.yaml +1 -0
  83. package/dist/agents/skills/claude-code/harness-pre-commit-review/skill.yaml +1 -0
  84. package/dist/agents/skills/claude-code/harness-product-spec/SKILL.md +285 -0
  85. package/dist/agents/skills/claude-code/harness-product-spec/skill.yaml +72 -0
  86. package/dist/agents/skills/claude-code/harness-property-test/SKILL.md +281 -0
  87. package/dist/agents/skills/claude-code/harness-property-test/skill.yaml +71 -0
  88. package/dist/agents/skills/claude-code/harness-refactoring/skill.yaml +1 -0
  89. package/dist/agents/skills/claude-code/harness-release-readiness/SKILL.md +3 -3
  90. package/dist/agents/skills/claude-code/harness-release-readiness/skill.yaml +1 -0
  91. package/dist/agents/skills/claude-code/harness-resilience/SKILL.md +255 -0
  92. package/dist/agents/skills/claude-code/harness-resilience/skill.yaml +76 -0
  93. package/dist/agents/skills/claude-code/harness-roadmap/skill.yaml +1 -0
  94. package/dist/agents/skills/claude-code/harness-secrets/SKILL.md +293 -0
  95. package/dist/agents/skills/claude-code/harness-secrets/skill.yaml +76 -0
  96. package/dist/agents/skills/claude-code/harness-security-review/skill.yaml +1 -0
  97. package/dist/agents/skills/claude-code/harness-security-scan/skill.yaml +1 -0
  98. package/dist/agents/skills/claude-code/harness-skill-authoring/skill.yaml +1 -0
  99. package/dist/agents/skills/claude-code/harness-soundness-review/skill.yaml +1 -0
  100. package/dist/agents/skills/claude-code/harness-sql-review/SKILL.md +315 -0
  101. package/dist/agents/skills/claude-code/harness-sql-review/skill.yaml +74 -0
  102. package/dist/agents/skills/claude-code/harness-state-management/skill.yaml +1 -0
  103. package/dist/agents/skills/claude-code/harness-tdd/skill.yaml +1 -0
  104. package/dist/agents/skills/claude-code/harness-test-advisor/skill.yaml +1 -0
  105. package/dist/agents/skills/claude-code/harness-test-data/SKILL.md +268 -0
  106. package/dist/agents/skills/claude-code/harness-test-data/skill.yaml +74 -0
  107. package/dist/agents/skills/claude-code/harness-ux-copy/SKILL.md +271 -0
  108. package/dist/agents/skills/claude-code/harness-ux-copy/skill.yaml +77 -0
  109. package/dist/agents/skills/claude-code/harness-verification/SKILL.md +35 -0
  110. package/dist/agents/skills/claude-code/harness-verification/skill.yaml +1 -0
  111. package/dist/agents/skills/claude-code/harness-verify/skill.yaml +1 -0
  112. package/dist/agents/skills/claude-code/harness-visual-regression/SKILL.md +257 -0
  113. package/dist/agents/skills/claude-code/harness-visual-regression/skill.yaml +74 -0
  114. package/dist/agents/skills/claude-code/initialize-harness-project/SKILL.md +11 -3
  115. package/dist/agents/skills/claude-code/initialize-harness-project/skill.yaml +1 -0
  116. package/dist/agents/skills/claude-code/validate-context-engineering/skill.yaml +1 -0
  117. package/dist/agents/skills/gemini-cli/add-harness-component/skill.yaml +1 -0
  118. package/dist/agents/skills/gemini-cli/align-documentation/skill.yaml +1 -0
  119. package/dist/agents/skills/gemini-cli/check-mechanical-constraints/skill.yaml +1 -0
  120. package/dist/agents/skills/gemini-cli/cleanup-dead-code/skill.yaml +1 -0
  121. package/dist/agents/skills/gemini-cli/detect-doc-drift/skill.yaml +1 -0
  122. package/dist/agents/skills/gemini-cli/enforce-architecture/skill.yaml +1 -0
  123. package/dist/agents/skills/gemini-cli/harness-accessibility/skill.yaml +1 -0
  124. package/dist/agents/skills/gemini-cli/harness-api-design/SKILL.md +304 -0
  125. package/dist/agents/skills/gemini-cli/harness-api-design/skill.yaml +74 -0
  126. package/dist/agents/skills/gemini-cli/harness-architecture-advisor/skill.yaml +1 -0
  127. package/dist/agents/skills/gemini-cli/harness-auth/SKILL.md +279 -0
  128. package/dist/agents/skills/gemini-cli/harness-auth/skill.yaml +81 -0
  129. package/dist/agents/skills/gemini-cli/harness-autopilot/skill.yaml +1 -0
  130. package/dist/agents/skills/gemini-cli/harness-brainstorming/SKILL.md +39 -0
  131. package/dist/agents/skills/gemini-cli/harness-brainstorming/skill.yaml +1 -0
  132. package/dist/agents/skills/gemini-cli/harness-caching/SKILL.md +309 -0
  133. package/dist/agents/skills/gemini-cli/harness-caching/skill.yaml +73 -0
  134. package/dist/agents/skills/gemini-cli/harness-chaos/SKILL.md +295 -0
  135. package/dist/agents/skills/gemini-cli/harness-chaos/skill.yaml +72 -0
  136. package/dist/agents/skills/gemini-cli/harness-code-review/SKILL.md +44 -0
  137. package/dist/agents/skills/gemini-cli/harness-code-review/skill.yaml +1 -0
  138. package/dist/agents/skills/gemini-cli/harness-codebase-cleanup/skill.yaml +1 -0
  139. package/dist/agents/skills/gemini-cli/harness-compliance/SKILL.md +303 -0
  140. package/dist/agents/skills/gemini-cli/harness-compliance/skill.yaml +78 -0
  141. package/dist/agents/skills/gemini-cli/harness-containerization/SKILL.md +284 -0
  142. package/dist/agents/skills/gemini-cli/harness-containerization/skill.yaml +80 -0
  143. package/dist/agents/skills/gemini-cli/harness-data-pipeline/SKILL.md +274 -0
  144. package/dist/agents/skills/gemini-cli/harness-data-pipeline/skill.yaml +81 -0
  145. package/dist/agents/skills/gemini-cli/harness-data-validation/SKILL.md +343 -0
  146. package/dist/agents/skills/gemini-cli/harness-data-validation/skill.yaml +75 -0
  147. package/dist/agents/skills/gemini-cli/harness-database/SKILL.md +258 -0
  148. package/dist/agents/skills/gemini-cli/harness-database/skill.yaml +80 -0
  149. package/dist/agents/skills/gemini-cli/harness-debugging/skill.yaml +1 -0
  150. package/dist/agents/skills/gemini-cli/harness-dependency-health/skill.yaml +1 -0
  151. package/dist/agents/skills/gemini-cli/harness-deployment/SKILL.md +255 -0
  152. package/dist/agents/skills/gemini-cli/harness-deployment/skill.yaml +77 -0
  153. package/dist/agents/skills/gemini-cli/harness-design/skill.yaml +1 -0
  154. package/dist/agents/skills/gemini-cli/harness-design-mobile/skill.yaml +1 -0
  155. package/dist/agents/skills/gemini-cli/harness-design-system/skill.yaml +1 -0
  156. package/dist/agents/skills/gemini-cli/harness-design-web/skill.yaml +1 -0
  157. package/dist/agents/skills/gemini-cli/harness-diagnostics/skill.yaml +1 -0
  158. package/dist/agents/skills/gemini-cli/harness-docs-pipeline/skill.yaml +1 -0
  159. package/dist/agents/skills/gemini-cli/harness-dx/SKILL.md +276 -0
  160. package/dist/agents/skills/gemini-cli/harness-dx/skill.yaml +76 -0
  161. package/dist/agents/skills/gemini-cli/harness-e2e/SKILL.md +245 -0
  162. package/dist/agents/skills/gemini-cli/harness-e2e/skill.yaml +78 -0
  163. package/dist/agents/skills/gemini-cli/harness-event-driven/SKILL.md +280 -0
  164. package/dist/agents/skills/gemini-cli/harness-event-driven/skill.yaml +77 -0
  165. package/dist/agents/skills/gemini-cli/harness-execution/SKILL.md +44 -0
  166. package/dist/agents/skills/gemini-cli/harness-execution/skill.yaml +1 -0
  167. package/dist/agents/skills/gemini-cli/harness-feature-flags/SKILL.md +287 -0
  168. package/dist/agents/skills/gemini-cli/harness-feature-flags/skill.yaml +74 -0
  169. package/dist/agents/skills/gemini-cli/harness-git-workflow/skill.yaml +1 -0
  170. package/dist/agents/skills/gemini-cli/harness-hotspot-detector/skill.yaml +1 -0
  171. package/dist/agents/skills/gemini-cli/harness-i18n/skill.yaml +1 -0
  172. package/dist/agents/skills/gemini-cli/harness-i18n-process/skill.yaml +1 -0
  173. package/dist/agents/skills/gemini-cli/harness-i18n-workflow/skill.yaml +1 -0
  174. package/dist/agents/skills/gemini-cli/harness-impact-analysis/skill.yaml +1 -0
  175. package/dist/agents/skills/gemini-cli/harness-incident-response/SKILL.md +223 -0
  176. package/dist/agents/skills/gemini-cli/harness-incident-response/skill.yaml +78 -0
  177. package/dist/agents/skills/gemini-cli/harness-infrastructure-as-code/SKILL.md +279 -0
  178. package/dist/agents/skills/gemini-cli/harness-infrastructure-as-code/skill.yaml +80 -0
  179. package/dist/agents/skills/gemini-cli/harness-integration-test/SKILL.md +271 -0
  180. package/dist/agents/skills/gemini-cli/harness-integration-test/skill.yaml +73 -0
  181. package/dist/agents/skills/gemini-cli/harness-integrity/skill.yaml +1 -0
  182. package/dist/agents/skills/gemini-cli/harness-knowledge-mapper/skill.yaml +1 -0
  183. package/dist/agents/skills/gemini-cli/harness-load-testing/SKILL.md +274 -0
  184. package/dist/agents/skills/gemini-cli/harness-load-testing/skill.yaml +79 -0
  185. package/dist/agents/skills/gemini-cli/harness-ml-ops/SKILL.md +341 -0
  186. package/dist/agents/skills/gemini-cli/harness-ml-ops/skill.yaml +79 -0
  187. package/dist/agents/skills/gemini-cli/harness-mobile-patterns/SKILL.md +326 -0
  188. package/dist/agents/skills/gemini-cli/harness-mobile-patterns/skill.yaml +82 -0
  189. package/dist/agents/skills/gemini-cli/harness-mutation-test/SKILL.md +251 -0
  190. package/dist/agents/skills/gemini-cli/harness-mutation-test/skill.yaml +70 -0
  191. package/dist/agents/skills/gemini-cli/harness-observability/SKILL.md +283 -0
  192. package/dist/agents/skills/gemini-cli/harness-observability/skill.yaml +78 -0
  193. package/dist/agents/skills/gemini-cli/harness-onboarding/skill.yaml +1 -0
  194. package/dist/agents/skills/gemini-cli/harness-parallel-agents/skill.yaml +1 -0
  195. package/dist/agents/skills/gemini-cli/harness-perf/skill.yaml +1 -0
  196. package/dist/agents/skills/gemini-cli/harness-perf-tdd/skill.yaml +1 -0
  197. package/dist/agents/skills/gemini-cli/harness-planning/SKILL.md +39 -0
  198. package/dist/agents/skills/gemini-cli/harness-planning/skill.yaml +1 -0
  199. package/dist/agents/skills/gemini-cli/harness-pre-commit-review/skill.yaml +1 -0
  200. package/dist/agents/skills/gemini-cli/harness-product-spec/SKILL.md +285 -0
  201. package/dist/agents/skills/gemini-cli/harness-product-spec/skill.yaml +72 -0
  202. package/dist/agents/skills/gemini-cli/harness-property-test/SKILL.md +281 -0
  203. package/dist/agents/skills/gemini-cli/harness-property-test/skill.yaml +71 -0
  204. package/dist/agents/skills/gemini-cli/harness-refactoring/skill.yaml +1 -0
  205. package/dist/agents/skills/gemini-cli/harness-release-readiness/SKILL.md +3 -3
  206. package/dist/agents/skills/gemini-cli/harness-release-readiness/skill.yaml +1 -0
  207. package/dist/agents/skills/gemini-cli/harness-resilience/SKILL.md +255 -0
  208. package/dist/agents/skills/gemini-cli/harness-resilience/skill.yaml +76 -0
  209. package/dist/agents/skills/gemini-cli/harness-roadmap/skill.yaml +1 -0
  210. package/dist/agents/skills/gemini-cli/harness-secrets/SKILL.md +293 -0
  211. package/dist/agents/skills/gemini-cli/harness-secrets/skill.yaml +76 -0
  212. package/dist/agents/skills/gemini-cli/harness-security-review/SKILL.md +240 -0
  213. package/dist/agents/skills/gemini-cli/harness-security-review/skill.yaml +1 -0
  214. package/dist/agents/skills/gemini-cli/harness-security-scan/skill.yaml +1 -0
  215. package/dist/agents/skills/gemini-cli/harness-skill-authoring/skill.yaml +1 -0
  216. package/dist/agents/skills/gemini-cli/harness-soundness-review/skill.yaml +1 -0
  217. package/dist/agents/skills/gemini-cli/harness-sql-review/SKILL.md +315 -0
  218. package/dist/agents/skills/gemini-cli/harness-sql-review/skill.yaml +74 -0
  219. package/dist/agents/skills/gemini-cli/harness-state-management/skill.yaml +1 -0
  220. package/dist/agents/skills/gemini-cli/harness-tdd/skill.yaml +1 -0
  221. package/dist/agents/skills/gemini-cli/harness-test-advisor/skill.yaml +1 -0
  222. package/dist/agents/skills/gemini-cli/harness-test-data/SKILL.md +268 -0
  223. package/dist/agents/skills/gemini-cli/harness-test-data/skill.yaml +74 -0
  224. package/dist/agents/skills/gemini-cli/harness-ux-copy/SKILL.md +271 -0
  225. package/dist/agents/skills/gemini-cli/harness-ux-copy/skill.yaml +77 -0
  226. package/dist/agents/skills/gemini-cli/harness-verification/SKILL.md +35 -0
  227. package/dist/agents/skills/gemini-cli/harness-verification/skill.yaml +1 -0
  228. package/dist/agents/skills/gemini-cli/harness-verify/skill.yaml +1 -0
  229. package/dist/agents/skills/gemini-cli/harness-visual-regression/SKILL.md +257 -0
  230. package/dist/agents/skills/gemini-cli/harness-visual-regression/skill.yaml +74 -0
  231. package/dist/agents/skills/gemini-cli/initialize-harness-project/SKILL.md +11 -3
  232. package/dist/agents/skills/gemini-cli/initialize-harness-project/skill.yaml +1 -0
  233. package/dist/agents/skills/gemini-cli/validate-context-engineering/skill.yaml +1 -0
  234. package/dist/agents-md-YTYQDA3P.js +8 -0
  235. package/dist/{architecture-ESOOE26S.js → architecture-JQZYM4US.js} +4 -4
  236. package/dist/bin/harness-mcp.js +16 -15
  237. package/dist/bin/harness.js +31 -30
  238. package/dist/{check-phase-gate-S2MZKLFQ.js → check-phase-gate-L3RADYWO.js} +4 -3
  239. package/dist/{chunk-WPPDRIJL.js → chunk-3C2MLBPJ.js} +4 -4
  240. package/dist/chunk-6KTUUFRN.js +217 -0
  241. package/dist/{chunk-MI5XJQDY.js → chunk-7IP4JIFL.js} +24 -10
  242. package/dist/{chunk-C2ERUR3L.js → chunk-7MJAPE3Z.js} +165 -49
  243. package/dist/{chunk-KELT6K6M.js → chunk-ABQHQ6I5.js} +1861 -1418
  244. package/dist/{chunk-L2KLU56K.js → chunk-AOZRDOIP.js} +2 -2
  245. package/dist/{chunk-QPEH2QPG.js → chunk-DBSOCI3G.js} +53 -54
  246. package/dist/{chunk-MHBMTPW7.js → chunk-ERS5EVUZ.js} +9 -0
  247. package/dist/{chunk-JSTQ3AWB.js → chunk-FIAPHX37.js} +1 -1
  248. package/dist/{chunk-2YPZKGAG.js → chunk-FTMXDOR6.js} +1 -1
  249. package/dist/{chunk-72GHBOL2.js → chunk-GZKSBLQL.js} +1 -1
  250. package/dist/{chunk-K6XAPGML.js → chunk-H7Y5CKTM.js} +1 -1
  251. package/dist/{chunk-HD4IBGLA.js → chunk-N5G5QMS3.js} +24 -1
  252. package/dist/{chunk-LD3DKUK5.js → chunk-NLVUVUGD.js} +1 -1
  253. package/dist/{chunk-3KOLLWWE.js → chunk-O5OJVPL6.js} +26 -211
  254. package/dist/{chunk-NKDM3FMH.js → chunk-OD3S2NHN.js} +1 -1
  255. package/dist/{chunk-5VY23YK3.js → chunk-OSXBPAMK.js} +2 -2
  256. package/dist/{chunk-MACVXDZK.js → chunk-OXLLOSSR.js} +45 -47
  257. package/dist/{chunk-GNGELAXY.js → chunk-RCWZBSK5.js} +2 -2
  258. package/dist/{chunk-PSNN4LWX.js → chunk-S2FXOWOR.js} +3 -3
  259. package/dist/{chunk-VUCPTQ6G.js → chunk-SD3SQOZ2.js} +1 -1
  260. package/dist/{chunk-7PZWR4LI.js → chunk-TPOTOBR7.js} +9 -9
  261. package/dist/{chunk-RZSUJBZZ.js → chunk-XKECDXJS.js} +452 -353
  262. package/dist/{chunk-VRFZWGMS.js → chunk-XYLGHKG6.js} +5 -1
  263. package/dist/{chunk-6N4R6FVX.js → chunk-YBJ262QL.js} +1 -1
  264. package/dist/{chunk-2VU4MFM3.js → chunk-YPYGXRDR.js} +7 -7
  265. package/dist/{chunk-Q6AB7W5Z.js → chunk-YQ6KC6TE.js} +1 -1
  266. package/dist/{chunk-7KQSUZVG.js → chunk-YZD2MRNQ.js} +1528 -1010
  267. package/dist/ci-workflow-EQZFVX3P.js +8 -0
  268. package/dist/{create-skill-WPXHSLX2.js → create-skill-XSWHMSM5.js} +2 -2
  269. package/dist/{dist-M6BQODWC.js → dist-B26DFXMP.js} +573 -480
  270. package/dist/{dist-L7LAAQAS.js → dist-DZ63LLUD.js} +1 -1
  271. package/dist/{dist-WF4C7A4A.js → dist-HWXF2C3R.js} +18 -2
  272. package/dist/{dist-D4RYGUZE.js → dist-USY2C5JL.js} +3 -1
  273. package/dist/{docs-BPYCN2DR.js → docs-7ECGYMAV.js} +5 -3
  274. package/dist/engine-EG4EH4IX.js +8 -0
  275. package/dist/{entropy-4VDVV5CR.js → entropy-5USWKLVS.js} +3 -3
  276. package/dist/{feedback-63QB5RCA.js → feedback-UTBXZZHF.js} +1 -1
  277. package/dist/{generate-agent-definitions-QABOJG56.js → generate-agent-definitions-3PM5EU7V.js} +5 -5
  278. package/dist/{glob-helper-5OHBUQAI.js → glob-helper-R5FXNUPS.js} +1 -1
  279. package/dist/{graph-loader-KO4GJ5N2.js → graph-loader-2M2HXDQI.js} +1 -1
  280. package/dist/index.d.ts +183 -17
  281. package/dist/index.js +32 -30
  282. package/dist/loader-ZPALXIVR.js +10 -0
  283. package/dist/mcp-362EZHF4.js +35 -0
  284. package/dist/{performance-26BH47O4.js → performance-OQAFMJUD.js} +3 -3
  285. package/dist/{review-pipeline-GHR3WFBI.js → review-pipeline-C4GCFVGP.js} +1 -1
  286. package/dist/runtime-7YLVK453.js +9 -0
  287. package/dist/{security-UQFUZXEN.js → security-PZOX7AQS.js} +1 -1
  288. package/dist/skill-executor-XZLYZYAK.js +8 -0
  289. package/dist/templates/axum/Cargo.toml.hbs +8 -0
  290. package/dist/templates/axum/src/main.rs +12 -0
  291. package/dist/templates/axum/template.json +16 -0
  292. package/dist/templates/django/manage.py.hbs +19 -0
  293. package/dist/templates/django/requirements.txt.hbs +1 -0
  294. package/dist/templates/django/src/settings.py.hbs +44 -0
  295. package/dist/templates/django/src/urls.py +6 -0
  296. package/dist/templates/django/src/wsgi.py.hbs +9 -0
  297. package/dist/templates/django/template.json +21 -0
  298. package/dist/templates/express/package.json.hbs +15 -0
  299. package/dist/templates/express/src/app.ts +12 -0
  300. package/dist/templates/express/src/lib/.gitkeep +0 -0
  301. package/dist/templates/express/template.json +16 -0
  302. package/dist/templates/fastapi/requirements.txt.hbs +2 -0
  303. package/dist/templates/fastapi/src/main.py +8 -0
  304. package/dist/templates/fastapi/template.json +20 -0
  305. package/dist/templates/gin/go.mod.hbs +5 -0
  306. package/dist/templates/gin/main.go +15 -0
  307. package/dist/templates/gin/template.json +19 -0
  308. package/dist/templates/go-base/.golangci.yml +16 -0
  309. package/dist/templates/go-base/AGENTS.md.hbs +35 -0
  310. package/dist/templates/go-base/go.mod.hbs +3 -0
  311. package/dist/templates/go-base/harness.config.json.hbs +17 -0
  312. package/dist/templates/go-base/main.go +7 -0
  313. package/dist/templates/go-base/template.json +14 -0
  314. package/dist/templates/java-base/AGENTS.md.hbs +35 -0
  315. package/dist/templates/java-base/checkstyle.xml +20 -0
  316. package/dist/templates/java-base/harness.config.json.hbs +16 -0
  317. package/dist/templates/java-base/pom.xml.hbs +39 -0
  318. package/dist/templates/java-base/src/main/java/App.java.hbs +5 -0
  319. package/dist/templates/java-base/template.json +13 -0
  320. package/dist/templates/nestjs/nest-cli.json +5 -0
  321. package/dist/templates/nestjs/package.json.hbs +18 -0
  322. package/dist/templates/nestjs/src/app.module.ts +8 -0
  323. package/dist/templates/nestjs/src/lib/.gitkeep +0 -0
  324. package/dist/templates/nestjs/src/main.ts +11 -0
  325. package/dist/templates/nestjs/template.json +16 -0
  326. package/dist/templates/nextjs/template.json +15 -1
  327. package/dist/templates/python-base/.python-version +1 -0
  328. package/dist/templates/python-base/AGENTS.md.hbs +32 -0
  329. package/dist/templates/python-base/harness.config.json.hbs +16 -0
  330. package/dist/templates/python-base/pyproject.toml.hbs +18 -0
  331. package/dist/templates/python-base/ruff.toml +5 -0
  332. package/dist/templates/python-base/src/__init__.py +0 -0
  333. package/dist/templates/python-base/template.json +13 -0
  334. package/dist/templates/react-vite/index.html +12 -0
  335. package/dist/templates/react-vite/package.json.hbs +18 -0
  336. package/dist/templates/react-vite/src/App.tsx +7 -0
  337. package/dist/templates/react-vite/src/lib/.gitkeep +0 -0
  338. package/dist/templates/react-vite/src/main.tsx +9 -0
  339. package/dist/templates/react-vite/template.json +19 -0
  340. package/dist/templates/react-vite/vite.config.ts +6 -0
  341. package/dist/templates/rust-base/AGENTS.md.hbs +35 -0
  342. package/dist/templates/rust-base/Cargo.toml.hbs +6 -0
  343. package/dist/templates/rust-base/clippy.toml +2 -0
  344. package/dist/templates/rust-base/harness.config.json.hbs +17 -0
  345. package/dist/templates/rust-base/src/main.rs +3 -0
  346. package/dist/templates/rust-base/template.json +14 -0
  347. package/dist/templates/spring-boot/pom.xml.hbs +50 -0
  348. package/dist/templates/spring-boot/src/main/java/Application.java.hbs +19 -0
  349. package/dist/templates/spring-boot/template.json +15 -0
  350. package/dist/templates/vue/index.html +12 -0
  351. package/dist/templates/vue/package.json.hbs +16 -0
  352. package/dist/templates/vue/src/App.vue +7 -0
  353. package/dist/templates/vue/src/lib/.gitkeep +0 -0
  354. package/dist/templates/vue/src/main.ts +4 -0
  355. package/dist/templates/vue/template.json +19 -0
  356. package/dist/templates/vue/vite.config.ts +6 -0
  357. package/dist/{validate-N7QJOKFZ.js → validate-FD3Z6VJD.js} +4 -4
  358. package/dist/validate-cross-check-WNJM6H2D.js +8 -0
  359. package/package.json +6 -6
  360. package/dist/agents-md-P2RHSUV7.js +0 -8
  361. package/dist/ci-workflow-4NYBUG6R.js +0 -8
  362. package/dist/engine-LXLIWQQ3.js +0 -8
  363. package/dist/loader-Z2IT7QX3.js +0 -10
  364. package/dist/mcp-KQHEL5IF.js +0 -34
  365. package/dist/runtime-PDWD7UIK.js +0 -9
  366. package/dist/skill-executor-RG45LUO5.js +0 -8
  367. package/dist/validate-cross-check-EDQ5QGTM.js +0 -8
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  resolveSkillsDir
3
- } from "./chunk-HD4IBGLA.js";
3
+ } from "./chunk-N5G5QMS3.js";
4
4
  import {
5
5
  SkillMetadataSchema
6
- } from "./chunk-VRFZWGMS.js";
6
+ } from "./chunk-XYLGHKG6.js";
7
7
 
8
8
  // src/persona/skill-executor.ts
9
9
  import * as fs from "fs";
@@ -264,6 +264,49 @@ async function validate(options) {
264
264
  }
265
265
  return { success: true, ruleCount: parseResult.data.rules.length };
266
266
  }
267
+ function resolveOutputDir(options, configOutput) {
268
+ const configDir = path3.dirname(path3.resolve(options.configPath));
269
+ return options.outputDir ? path3.resolve(options.outputDir) : path3.resolve(configDir, configOutput);
270
+ }
271
+ async function prepareOutputDir(outputDir, clean) {
272
+ if (clean) {
273
+ try {
274
+ await fs3.rm(outputDir, { recursive: true, force: true });
275
+ } catch {
276
+ }
277
+ }
278
+ await fs3.mkdir(outputDir, { recursive: true });
279
+ }
280
+ async function processRule(rule, templates, configDir, outputDir, configPath, dryRun, errors) {
281
+ const templateResult = await loadTemplate(rule.type, templates, configDir);
282
+ if (!templateResult.success) {
283
+ errors.push({ type: "template", error: templateResult.error, ruleName: rule.name });
284
+ return null;
285
+ }
286
+ const ruleResult = generateRule(rule, templateResult.source, outputDir, configPath);
287
+ if (!ruleResult.success) {
288
+ errors.push({ type: "render", error: ruleResult.error, ruleName: ruleResult.ruleName });
289
+ return null;
290
+ }
291
+ if (!dryRun) {
292
+ try {
293
+ await fs3.writeFile(ruleResult.rule.outputPath, ruleResult.rule.content, "utf-8");
294
+ } catch (err) {
295
+ errors.push({ type: "write", error: err, path: ruleResult.rule.outputPath });
296
+ return null;
297
+ }
298
+ }
299
+ return rule.name;
300
+ }
301
+ async function writeIndexFile(outputDir, generatedRules, errors) {
302
+ const indexContent = generateIndex(generatedRules);
303
+ const indexPath = path3.join(outputDir, "index.ts");
304
+ try {
305
+ await fs3.writeFile(indexPath, indexContent, "utf-8");
306
+ } catch (err) {
307
+ errors.push({ type: "write", error: err, path: indexPath });
308
+ }
309
+ }
267
310
  async function generate(options) {
268
311
  const errors = [];
269
312
  const parseResult = await parseConfig(options.configPath);
@@ -271,69 +314,25 @@ async function generate(options) {
271
314
  return { success: false, errors: [{ type: "parse", error: parseResult.error }] };
272
315
  }
273
316
  const config = parseResult.data;
317
+ const outputDir = resolveOutputDir(options, config.output);
318
+ const dryRun = options.dryRun ?? false;
274
319
  const configDir = path3.dirname(path3.resolve(options.configPath));
275
- const outputDir = options.outputDir ? path3.resolve(options.outputDir) : path3.resolve(configDir, config.output);
276
- if (options.clean && !options.dryRun) {
277
- try {
278
- await fs3.rm(outputDir, { recursive: true, force: true });
279
- } catch {
280
- }
281
- }
282
- if (!options.dryRun) {
283
- await fs3.mkdir(outputDir, { recursive: true });
320
+ if (!dryRun) {
321
+ await prepareOutputDir(outputDir, options.clean ?? false);
284
322
  }
285
323
  const generatedRules = [];
286
324
  for (const rule of config.rules) {
287
- const templateResult = await loadTemplate(rule.type, config.templates, configDir);
288
- if (!templateResult.success) {
289
- errors.push({
290
- type: "template",
291
- error: templateResult.error,
292
- ruleName: rule.name
293
- });
294
- continue;
295
- }
296
- const ruleResult = generateRule(rule, templateResult.source, outputDir, options.configPath);
297
- if (!ruleResult.success) {
298
- errors.push({
299
- type: "render",
300
- error: ruleResult.error,
301
- ruleName: ruleResult.ruleName
302
- });
303
- continue;
304
- }
305
- if (!options.dryRun) {
306
- try {
307
- await fs3.writeFile(ruleResult.rule.outputPath, ruleResult.rule.content, "utf-8");
308
- } catch (err) {
309
- errors.push({
310
- type: "write",
311
- error: err,
312
- path: ruleResult.rule.outputPath
313
- });
314
- continue;
315
- }
316
- }
317
- generatedRules.push(rule.name);
325
+ const name = await processRule(rule, config.templates, configDir, outputDir, options.configPath, dryRun, errors);
326
+ if (name)
327
+ generatedRules.push(name);
318
328
  }
319
- if (generatedRules.length > 0 && !options.dryRun) {
320
- const indexContent = generateIndex(generatedRules);
321
- const indexPath = path3.join(outputDir, "index.ts");
322
- try {
323
- await fs3.writeFile(indexPath, indexContent, "utf-8");
324
- } catch (err) {
325
- errors.push({ type: "write", error: err, path: indexPath });
326
- }
329
+ if (generatedRules.length > 0 && !dryRun) {
330
+ await writeIndexFile(outputDir, generatedRules, errors);
327
331
  }
328
332
  if (errors.length > 0) {
329
333
  return { success: false, errors };
330
334
  }
331
- return {
332
- success: true,
333
- rulesGenerated: generatedRules,
334
- outputDir,
335
- dryRun: options.dryRun ?? false
336
- };
335
+ return { success: true, rulesGenerated: generatedRules, outputDir, dryRun };
337
336
  }
338
337
 
339
338
  export {
@@ -1,4 +1,12 @@
1
1
  // ../types/dist/index.mjs
2
+ var SESSION_SECTION_NAMES = [
3
+ "terminology",
4
+ "decisions",
5
+ "constraints",
6
+ "risks",
7
+ "openQuestions",
8
+ "evidence"
9
+ ];
2
10
  function Ok(value) {
3
11
  return { ok: true, value };
4
12
  }
@@ -21,6 +29,7 @@ var STANDARD_COGNITIVE_MODES = [
21
29
  ];
22
30
 
23
31
  export {
32
+ SESSION_SECTION_NAMES,
24
33
  Ok,
25
34
  Err,
26
35
  isOk,
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  Err,
6
6
  Ok
7
- } from "./chunk-MHBMTPW7.js";
7
+ } from "./chunk-ERS5EVUZ.js";
8
8
 
9
9
  // src/persona/generators/runtime.ts
10
10
  function generateRuntime(persona) {
@@ -15,7 +15,7 @@ function evictIfNeeded() {
15
15
  }
16
16
  }
17
17
  async function doLoadGraphStore(projectRoot) {
18
- const { GraphStore } = await import("./dist-M6BQODWC.js");
18
+ const { GraphStore } = await import("./dist-B26DFXMP.js");
19
19
  const graphDir = path.join(projectRoot, ".harness", "graph");
20
20
  const store = new GraphStore();
21
21
  const loaded = await store.load(graphDir);
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Ok
3
- } from "./chunk-MHBMTPW7.js";
3
+ } from "./chunk-ERS5EVUZ.js";
4
4
 
5
5
  // src/commands/validate-cross-check.ts
6
6
  import * as fs from "fs";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  Err,
3
3
  Ok
4
- } from "./chunk-MHBMTPW7.js";
4
+ } from "./chunk-ERS5EVUZ.js";
5
5
 
6
6
  // src/mcp/utils/config-resolver.ts
7
7
  import * as fs from "fs";
@@ -69,6 +69,28 @@ function resolveCommunitySkillsDir(platform = "claude-code") {
69
69
  }
70
70
  return path.join(__dirname, "agents", "skills", "community", platform);
71
71
  }
72
+ function resolveAllSkillsDirs(platform = "claude-code") {
73
+ const dirs = [];
74
+ const projectDir = resolveProjectSkillsDir();
75
+ if (projectDir) {
76
+ const platformDir = path.join(path.dirname(projectDir), platform);
77
+ if (fs.existsSync(platformDir)) {
78
+ dirs.push(platformDir);
79
+ }
80
+ }
81
+ const communityDir = resolveCommunitySkillsDir(platform);
82
+ if (fs.existsSync(communityDir)) {
83
+ dirs.push(communityDir);
84
+ }
85
+ const globalDir = resolveGlobalSkillsDir();
86
+ const globalPlatformDir = path.join(path.dirname(globalDir), platform);
87
+ if (fs.existsSync(globalPlatformDir)) {
88
+ if (!dirs.some((d) => path.resolve(d) === path.resolve(globalPlatformDir))) {
89
+ dirs.push(globalPlatformDir);
90
+ }
91
+ }
92
+ return dirs;
93
+ }
72
94
 
73
95
  export {
74
96
  resolveTemplatesDir,
@@ -76,5 +98,6 @@ export {
76
98
  resolveSkillsDir,
77
99
  resolveProjectSkillsDir,
78
100
  resolveGlobalSkillsDir,
79
- resolveCommunitySkillsDir
101
+ resolveCommunitySkillsDir,
102
+ resolveAllSkillsDirs
80
103
  };
@@ -45,7 +45,7 @@ var runCodeReviewDefinition = {
45
45
  };
46
46
  async function handleRunCodeReview(input) {
47
47
  try {
48
- const { parseDiff, runReviewPipeline } = await import("./dist-WF4C7A4A.js");
48
+ const { parseDiff, runReviewPipeline } = await import("./dist-HWXF2C3R.js");
49
49
  const parseResult = parseDiff(input.diff);
50
50
  if (!parseResult.ok) {
51
51
  return {
@@ -1,22 +1,14 @@
1
- import {
2
- logger
3
- } from "./chunk-EBJQ6N4M.js";
4
1
  import {
5
2
  CLIError,
6
3
  ExitCode
7
4
  } from "./chunk-3WGJMBKH.js";
8
5
  import {
9
6
  ArchConfigSchema
10
- } from "./chunk-KELT6K6M.js";
7
+ } from "./chunk-ABQHQ6I5.js";
11
8
  import {
12
9
  Err,
13
10
  Ok
14
- } from "./chunk-MHBMTPW7.js";
15
-
16
- // src/commands/check-phase-gate.ts
17
- import { Command } from "commander";
18
- import * as path2 from "path";
19
- import * as fs2 from "fs";
11
+ } from "./chunk-ERS5EVUZ.js";
20
12
 
21
13
  // src/config/loader.ts
22
14
  import * as fs from "fs";
@@ -192,12 +184,23 @@ var HarnessConfigSchema = z.object({
192
184
  performance: PerformanceConfigSchema.optional(),
193
185
  /** Project template settings (used by 'harness init') */
194
186
  template: z.object({
195
- /** Complexity level of the template */
196
- level: z.enum(["basic", "intermediate", "advanced"]),
187
+ /** Complexity level of the template (JS/TS only) */
188
+ level: z.enum(["basic", "intermediate", "advanced"]).optional(),
189
+ /** Target language */
190
+ language: z.enum(["typescript", "python", "go", "rust", "java"]).optional(),
197
191
  /** Primary technology framework */
198
192
  framework: z.string().optional(),
199
193
  /** Template version */
200
- version: z.number()
194
+ version: z.number(),
195
+ /** Language-specific tooling configuration */
196
+ tooling: z.object({
197
+ packageManager: z.string().optional(),
198
+ linter: z.string().optional(),
199
+ formatter: z.string().optional(),
200
+ buildTool: z.string().optional(),
201
+ testRunner: z.string().optional(),
202
+ lockFile: z.string().optional()
203
+ }).optional()
201
204
  }).optional(),
202
205
  /** Phase gate and readiness check configuration */
203
206
  phaseGates: PhaseGatesConfigSchema.optional(),
@@ -209,6 +212,15 @@ var HarnessConfigSchema = z.object({
209
212
  review: ReviewConfigSchema.optional(),
210
213
  /** General architectural enforcement settings */
211
214
  architecture: ArchConfigSchema.optional(),
215
+ /** Skill loading, suggestion, and tier override settings */
216
+ skills: z.object({
217
+ /** Skills to always suggest in the dispatcher, regardless of scoring */
218
+ alwaysSuggest: z.array(z.string()).default([]),
219
+ /** Skills to never suggest in the dispatcher, even if they score highly */
220
+ neverSuggest: z.array(z.string()).default([]),
221
+ /** Override the tier of specific skills (e.g., promote a Tier 3 skill to Tier 2) */
222
+ tierOverrides: z.record(z.string(), z.number().int().min(1).max(3)).default({})
223
+ }).optional(),
212
224
  /** How often (in ms) to check for CLI updates */
213
225
  updateCheckInterval: z.number().int().min(0).optional()
214
226
  });
@@ -266,205 +278,8 @@ function resolveConfig(configPath) {
266
278
  return loadConfig(findResult.value);
267
279
  }
268
280
 
269
- // src/utils/files.ts
270
- import { glob } from "glob";
271
- async function findFiles(pattern, cwd = process.cwd()) {
272
- return glob(pattern, { cwd, absolute: true });
273
- }
274
-
275
- // src/output/formatter.ts
276
- import chalk from "chalk";
277
- var OutputMode = {
278
- /** Output as formatted JSON */
279
- JSON: "json",
280
- /** Output as human-readable text */
281
- TEXT: "text",
282
- /** Minimal output, only errors and successes */
283
- QUIET: "quiet",
284
- /** Full output with detailed context and suggestions */
285
- VERBOSE: "verbose"
286
- };
287
- var OutputFormatter = class {
288
- /**
289
- * Creates a new OutputFormatter.
290
- *
291
- * @param mode - The output mode to use. Defaults to TEXT.
292
- */
293
- constructor(mode = OutputMode.TEXT) {
294
- this.mode = mode;
295
- }
296
- /**
297
- * Formats raw data for output.
298
- *
299
- * @param data - The data to format.
300
- * @returns A string representation of the data based on the current mode.
301
- */
302
- format(data) {
303
- if (this.mode === OutputMode.JSON) {
304
- return JSON.stringify(data, null, 2);
305
- }
306
- return String(data);
307
- }
308
- /**
309
- * Formats a validation result into a user-friendly string.
310
- *
311
- * @param result - The validation result to format.
312
- * @returns A formatted string containing the validation status and any issues.
313
- */
314
- formatValidation(result) {
315
- if (this.mode === OutputMode.JSON) {
316
- return JSON.stringify(result, null, 2);
317
- }
318
- if (this.mode === OutputMode.QUIET) {
319
- if (result.valid) return "";
320
- return result.issues.map((i) => `${i.file ?? ""}: ${i.message}`).join("\n");
321
- }
322
- const lines = [];
323
- if (result.valid) {
324
- lines.push(chalk.green("v validation passed"));
325
- } else {
326
- lines.push(chalk.red(`x Validation failed (${result.issues.length} issues)`));
327
- lines.push("");
328
- for (const issue of result.issues) {
329
- const location = issue.file ? issue.line ? `${issue.file}:${issue.line}` : issue.file : "unknown";
330
- lines.push(` ${chalk.yellow("*")} ${chalk.dim(location)}`);
331
- lines.push(` ${issue.message}`);
332
- if (issue.suggestion && this.mode === OutputMode.VERBOSE) {
333
- lines.push(` ${chalk.dim("->")} ${issue.suggestion}`);
334
- }
335
- }
336
- }
337
- return lines.join("\n");
338
- }
339
- /**
340
- * Formats a summary line with a success/failure icon and label.
341
- *
342
- * @param label - The name of the field to summarize.
343
- * @param value - The value to display.
344
- * @param success - Whether the summary represents a success or failure state.
345
- * @returns A formatted summary string, or an empty string in JSON or QUIET modes.
346
- */
347
- formatSummary(label, value, success) {
348
- if (this.mode === OutputMode.JSON || this.mode === OutputMode.QUIET) {
349
- return "";
350
- }
351
- const icon = success ? chalk.green("v") : chalk.red("x");
352
- return `${icon} ${label}: ${value}`;
353
- }
354
- };
355
-
356
- // src/commands/check-phase-gate.ts
357
- function resolveSpecPath(implFile, implPattern, specPattern, cwd) {
358
- const relImpl = path2.relative(cwd, implFile).replace(/\\/g, "/");
359
- const implBase = (implPattern.split("*")[0] ?? "").replace(/\/+$/, "");
360
- const afterBase = relImpl.startsWith(implBase + "/") ? relImpl.slice(implBase.length + 1) : relImpl;
361
- const segments = afterBase.split("/");
362
- const firstSegment = segments[0] ?? "";
363
- const feature = segments.length > 1 ? firstSegment : path2.basename(firstSegment, path2.extname(firstSegment));
364
- const specRelative = specPattern.replace("{feature}", feature);
365
- return path2.resolve(cwd, specRelative);
366
- }
367
- async function runCheckPhaseGate(options) {
368
- const configResult = resolveConfig(options.configPath);
369
- if (!configResult.ok) {
370
- return configResult;
371
- }
372
- const config = configResult.value;
373
- const cwd = options.cwd ?? (options.configPath ? path2.dirname(path2.resolve(options.configPath)) : process.cwd());
374
- if (!config.phaseGates?.enabled) {
375
- return Ok({
376
- pass: true,
377
- skipped: true,
378
- missingSpecs: [],
379
- checkedFiles: 0
380
- });
381
- }
382
- const phaseGates = config.phaseGates;
383
- const missingSpecs = [];
384
- let checkedFiles = 0;
385
- for (const mapping of phaseGates.mappings) {
386
- const implFiles = await findFiles(mapping.implPattern, cwd);
387
- for (const implFile of implFiles) {
388
- checkedFiles++;
389
- const expectedSpec = resolveSpecPath(implFile, mapping.implPattern, mapping.specPattern, cwd);
390
- if (!fs2.existsSync(expectedSpec)) {
391
- missingSpecs.push({
392
- implFile: path2.relative(cwd, implFile).replace(/\\/g, "/"),
393
- expectedSpec: path2.relative(cwd, expectedSpec).replace(/\\/g, "/")
394
- });
395
- }
396
- }
397
- }
398
- const pass = missingSpecs.length === 0;
399
- return Ok({
400
- pass,
401
- skipped: false,
402
- severity: phaseGates.severity,
403
- missingSpecs,
404
- checkedFiles
405
- });
406
- }
407
- function createCheckPhaseGateCommand() {
408
- const command = new Command("check-phase-gate").description("Verify that implementation files have matching spec documents").action(async (_opts, cmd) => {
409
- const globalOpts = cmd.optsWithGlobals();
410
- const mode = globalOpts.json ? OutputMode.JSON : globalOpts.quiet ? OutputMode.QUIET : globalOpts.verbose ? OutputMode.VERBOSE : OutputMode.TEXT;
411
- const formatter = new OutputFormatter(mode);
412
- const result = await runCheckPhaseGate({
413
- configPath: globalOpts.config,
414
- json: globalOpts.json,
415
- verbose: globalOpts.verbose,
416
- quiet: globalOpts.quiet
417
- });
418
- if (!result.ok) {
419
- if (mode === OutputMode.JSON) {
420
- console.log(JSON.stringify({ error: result.error.message }));
421
- } else {
422
- logger.error(result.error.message);
423
- }
424
- process.exit(result.error.exitCode);
425
- }
426
- const value = result.value;
427
- if (value.skipped) {
428
- if (mode === OutputMode.JSON) {
429
- console.log(formatter.format(value));
430
- } else if (mode !== OutputMode.QUIET) {
431
- logger.dim("Phase gates not enabled, skipping.");
432
- }
433
- process.exit(ExitCode.SUCCESS);
434
- }
435
- const output = formatter.formatValidation({
436
- valid: value.pass,
437
- issues: value.missingSpecs.map((m) => ({
438
- file: m.implFile,
439
- message: `Missing spec: ${m.expectedSpec}`
440
- }))
441
- });
442
- if (output) {
443
- console.log(output);
444
- }
445
- const summary = formatter.formatSummary(
446
- "Phase gate check",
447
- `${value.checkedFiles} files checked, ${value.missingSpecs.length} missing specs`,
448
- value.pass
449
- );
450
- if (summary) {
451
- console.log(summary);
452
- }
453
- if (!value.pass && value.severity === "error") {
454
- process.exit(ExitCode.VALIDATION_FAILED);
455
- }
456
- process.exit(ExitCode.SUCCESS);
457
- });
458
- return command;
459
- }
460
-
461
281
  export {
462
282
  findConfigFile,
463
283
  loadConfig,
464
- resolveConfig,
465
- OutputMode,
466
- OutputFormatter,
467
- findFiles,
468
- runCheckPhaseGate,
469
- createCheckPhaseGateCommand
284
+ resolveConfig
470
285
  };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  Err,
3
3
  Ok
4
- } from "./chunk-MHBMTPW7.js";
4
+ } from "./chunk-ERS5EVUZ.js";
5
5
 
6
6
  // src/persona/generators/agents-md.ts
7
7
  function formatTrigger(trigger) {
@@ -26,7 +26,7 @@ var runSecurityScanDefinition = {
26
26
  };
27
27
  async function handleRunSecurityScan(input) {
28
28
  try {
29
- const core = await import("./dist-WF4C7A4A.js");
29
+ const core = await import("./dist-HWXF2C3R.js");
30
30
  const projectRoot = sanitizePath(input.path);
31
31
  let configData = {};
32
32
  try {
@@ -49,7 +49,7 @@ async function handleRunSecurityScan(input) {
49
49
  if (input.files && input.files.length > 0) {
50
50
  filesToScan = input.files.map((f) => path.resolve(projectRoot, f));
51
51
  } else {
52
- const { globFiles } = await import("./glob-helper-5OHBUQAI.js");
52
+ const { globFiles } = await import("./glob-helper-R5FXNUPS.js");
53
53
  filesToScan = await globFiles(projectRoot, securityConfig.exclude);
54
54
  }
55
55
  const result = await scanner.scanFiles(filesToScan);
@@ -6,14 +6,14 @@ import {
6
6
  } from "./chunk-W6Y7ZW3Y.js";
7
7
  import {
8
8
  Ok
9
- } from "./chunk-MHBMTPW7.js";
9
+ } from "./chunk-ERS5EVUZ.js";
10
10
 
11
11
  // src/mcp/tools/entropy.ts
12
12
  async function loadEntropyGraphOptions(projectPath) {
13
- const { loadGraphStore } = await import("./graph-loader-KO4GJ5N2.js");
13
+ const { loadGraphStore } = await import("./graph-loader-2M2HXDQI.js");
14
14
  const store = await loadGraphStore(projectPath);
15
15
  if (!store) return void 0;
16
- const { GraphEntropyAdapter } = await import("./dist-M6BQODWC.js");
16
+ const { GraphEntropyAdapter } = await import("./dist-B26DFXMP.js");
17
17
  const adapter = new GraphEntropyAdapter(store);
18
18
  const driftData = adapter.computeDriftData();
19
19
  const deadCodeData = adapter.computeDeadCodeData();
@@ -82,9 +82,48 @@ var detectEntropyDefinition = {
82
82
  required: ["path"]
83
83
  }
84
84
  };
85
+ function summarizeDrift(drift) {
86
+ const driftIssues = (drift.drifts ?? []).map(
87
+ (d) => `Drift: ${d.type}${d.file ? ` in ${d.file}` : ""}`
88
+ );
89
+ return { issueCount: driftIssues.length, topIssues: driftIssues.slice(0, 3) };
90
+ }
91
+ function summarizeDeadCode(deadCode) {
92
+ const deadIssues = [
93
+ ...(deadCode.unusedImports ?? []).map(
94
+ (i) => `Unused import: ${i.specifiers.join(", ")} from ${i.source}`
95
+ ),
96
+ ...(deadCode.deadExports ?? []).map(
97
+ (e) => `Dead export: ${e.name} in ${e.file}`
98
+ ),
99
+ ...(deadCode.deadFiles ?? []).map((f) => `Dead file: ${f.path}`)
100
+ ];
101
+ return { issueCount: deadIssues.length, topIssues: deadIssues.slice(0, 3) };
102
+ }
103
+ function summarizePatterns(patterns) {
104
+ const patternIssues = (patterns.violations ?? []).map(
105
+ (v) => `${v.pattern}: ${v.file}`
106
+ );
107
+ return { issueCount: patternIssues.length, topIssues: patternIssues.slice(0, 3) };
108
+ }
109
+ function buildSummaryResponse(report) {
110
+ const summary = {};
111
+ if (report.drift) summary["drift"] = summarizeDrift(report.drift);
112
+ if (report.deadCode) summary["deadCode"] = summarizeDeadCode(report.deadCode);
113
+ if (report.patterns) summary["patterns"] = summarizePatterns(report.patterns);
114
+ const totalIssues = Object.values(summary).reduce((s, c) => s + c.issueCount, 0);
115
+ return {
116
+ content: [
117
+ {
118
+ type: "text",
119
+ text: JSON.stringify({ mode: "summary", totalIssues, categories: summary })
120
+ }
121
+ ]
122
+ };
123
+ }
85
124
  async function handleDetectEntropy(input) {
86
125
  try {
87
- const { EntropyAnalyzer } = await import("./dist-WF4C7A4A.js");
126
+ const { EntropyAnalyzer } = await import("./dist-HWXF2C3R.js");
88
127
  const typeFilter = input.type ?? "all";
89
128
  const analyzer = new EntropyAnalyzer({
90
129
  rootDir: sanitizePath(input.path),
@@ -97,54 +136,13 @@ async function handleDetectEntropy(input) {
97
136
  const graphOptions = await loadEntropyGraphOptions(sanitizePath(input.path));
98
137
  const result = await analyzer.analyze(graphOptions);
99
138
  if (input.mode === "summary" && result.ok && !input.autoFix) {
100
- const report2 = result.value;
101
- const summary = {};
102
- if (report2.drift) {
103
- const driftIssues = (report2.drift.drifts ?? []).map(
104
- (d) => `Drift: ${d.type}${d.file ? ` in ${d.file}` : ""}`
105
- );
106
- summary["drift"] = {
107
- issueCount: driftIssues.length,
108
- topIssues: driftIssues.slice(0, 3)
109
- };
110
- }
111
- if (report2.deadCode) {
112
- const deadIssues = [
113
- ...(report2.deadCode.unusedImports ?? []).map(
114
- (i) => `Unused import: ${i.specifiers.join(", ")} from ${i.source}`
115
- ),
116
- ...(report2.deadCode.deadExports ?? []).map((e) => `Dead export: ${e.name} in ${e.file}`),
117
- ...(report2.deadCode.deadFiles ?? []).map((f) => `Dead file: ${f.path}`)
118
- ];
119
- summary["deadCode"] = {
120
- issueCount: deadIssues.length,
121
- topIssues: deadIssues.slice(0, 3)
122
- };
123
- }
124
- if (report2.patterns) {
125
- const patternIssues = (report2.patterns.violations ?? []).map(
126
- (v) => `${v.pattern}: ${v.file}`
127
- );
128
- summary["patterns"] = {
129
- issueCount: patternIssues.length,
130
- topIssues: patternIssues.slice(0, 3)
131
- };
132
- }
133
- const totalIssues = Object.values(summary).reduce((s, c) => s + c.issueCount, 0);
134
- return {
135
- content: [
136
- {
137
- type: "text",
138
- text: JSON.stringify({ mode: "summary", totalIssues, categories: summary })
139
- }
140
- ]
141
- };
139
+ return buildSummaryResponse(result.value);
142
140
  }
143
141
  if (!input.autoFix) {
144
142
  return resultToMcpResponse(result);
145
143
  }
146
144
  if (!result.ok) return resultToMcpResponse(result);
147
- const { createFixes, applyFixes, generateSuggestions } = await import("./dist-WF4C7A4A.js");
145
+ const { createFixes, applyFixes, generateSuggestions } = await import("./dist-HWXF2C3R.js");
148
146
  const report = result.value;
149
147
  const deadCode = report.deadCode;
150
148
  const fixTypesConfig = input.fixTypes ? { fixTypes: input.fixTypes } : void 0;