@harness-engineering/cli 1.13.0 → 1.13.1

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 (267) 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.yaml +1 -0
  15. package/dist/agents/skills/claude-code/harness-caching/SKILL.md +309 -0
  16. package/dist/agents/skills/claude-code/harness-caching/skill.yaml +73 -0
  17. package/dist/agents/skills/claude-code/harness-chaos/SKILL.md +295 -0
  18. package/dist/agents/skills/claude-code/harness-chaos/skill.yaml +72 -0
  19. package/dist/agents/skills/claude-code/harness-code-review/skill.yaml +1 -0
  20. package/dist/agents/skills/claude-code/harness-codebase-cleanup/skill.yaml +1 -0
  21. package/dist/agents/skills/claude-code/harness-compliance/SKILL.md +303 -0
  22. package/dist/agents/skills/claude-code/harness-compliance/skill.yaml +78 -0
  23. package/dist/agents/skills/claude-code/harness-containerization/SKILL.md +284 -0
  24. package/dist/agents/skills/claude-code/harness-containerization/skill.yaml +80 -0
  25. package/dist/agents/skills/claude-code/harness-data-pipeline/SKILL.md +274 -0
  26. package/dist/agents/skills/claude-code/harness-data-pipeline/skill.yaml +81 -0
  27. package/dist/agents/skills/claude-code/harness-data-validation/SKILL.md +343 -0
  28. package/dist/agents/skills/claude-code/harness-data-validation/skill.yaml +75 -0
  29. package/dist/agents/skills/claude-code/harness-database/SKILL.md +258 -0
  30. package/dist/agents/skills/claude-code/harness-database/skill.yaml +80 -0
  31. package/dist/agents/skills/claude-code/harness-debugging/skill.yaml +1 -0
  32. package/dist/agents/skills/claude-code/harness-dependency-health/skill.yaml +1 -0
  33. package/dist/agents/skills/claude-code/harness-deployment/SKILL.md +255 -0
  34. package/dist/agents/skills/claude-code/harness-deployment/skill.yaml +77 -0
  35. package/dist/agents/skills/claude-code/harness-design/skill.yaml +1 -0
  36. package/dist/agents/skills/claude-code/harness-design-mobile/skill.yaml +1 -0
  37. package/dist/agents/skills/claude-code/harness-design-system/skill.yaml +1 -0
  38. package/dist/agents/skills/claude-code/harness-design-web/skill.yaml +1 -0
  39. package/dist/agents/skills/claude-code/harness-diagnostics/skill.yaml +1 -0
  40. package/dist/agents/skills/claude-code/harness-docs-pipeline/skill.yaml +1 -0
  41. package/dist/agents/skills/claude-code/harness-dx/SKILL.md +276 -0
  42. package/dist/agents/skills/claude-code/harness-dx/skill.yaml +76 -0
  43. package/dist/agents/skills/claude-code/harness-e2e/SKILL.md +245 -0
  44. package/dist/agents/skills/claude-code/harness-e2e/skill.yaml +78 -0
  45. package/dist/agents/skills/claude-code/harness-event-driven/SKILL.md +280 -0
  46. package/dist/agents/skills/claude-code/harness-event-driven/skill.yaml +77 -0
  47. package/dist/agents/skills/claude-code/harness-execution/skill.yaml +1 -0
  48. package/dist/agents/skills/claude-code/harness-feature-flags/SKILL.md +287 -0
  49. package/dist/agents/skills/claude-code/harness-feature-flags/skill.yaml +74 -0
  50. package/dist/agents/skills/claude-code/harness-git-workflow/skill.yaml +1 -0
  51. package/dist/agents/skills/claude-code/harness-hotspot-detector/skill.yaml +1 -0
  52. package/dist/agents/skills/claude-code/harness-i18n/skill.yaml +1 -0
  53. package/dist/agents/skills/claude-code/harness-i18n-process/skill.yaml +1 -0
  54. package/dist/agents/skills/claude-code/harness-i18n-workflow/skill.yaml +1 -0
  55. package/dist/agents/skills/claude-code/harness-impact-analysis/skill.yaml +1 -0
  56. package/dist/agents/skills/claude-code/harness-incident-response/SKILL.md +223 -0
  57. package/dist/agents/skills/claude-code/harness-incident-response/skill.yaml +78 -0
  58. package/dist/agents/skills/claude-code/harness-infrastructure-as-code/SKILL.md +279 -0
  59. package/dist/agents/skills/claude-code/harness-infrastructure-as-code/skill.yaml +80 -0
  60. package/dist/agents/skills/claude-code/harness-integration-test/SKILL.md +271 -0
  61. package/dist/agents/skills/claude-code/harness-integration-test/skill.yaml +73 -0
  62. package/dist/agents/skills/claude-code/harness-integrity/skill.yaml +1 -0
  63. package/dist/agents/skills/claude-code/harness-knowledge-mapper/skill.yaml +1 -0
  64. package/dist/agents/skills/claude-code/harness-load-testing/SKILL.md +274 -0
  65. package/dist/agents/skills/claude-code/harness-load-testing/skill.yaml +79 -0
  66. package/dist/agents/skills/claude-code/harness-ml-ops/SKILL.md +341 -0
  67. package/dist/agents/skills/claude-code/harness-ml-ops/skill.yaml +79 -0
  68. package/dist/agents/skills/claude-code/harness-mobile-patterns/SKILL.md +326 -0
  69. package/dist/agents/skills/claude-code/harness-mobile-patterns/skill.yaml +82 -0
  70. package/dist/agents/skills/claude-code/harness-mutation-test/SKILL.md +251 -0
  71. package/dist/agents/skills/claude-code/harness-mutation-test/skill.yaml +70 -0
  72. package/dist/agents/skills/claude-code/harness-observability/SKILL.md +283 -0
  73. package/dist/agents/skills/claude-code/harness-observability/skill.yaml +78 -0
  74. package/dist/agents/skills/claude-code/harness-onboarding/skill.yaml +1 -0
  75. package/dist/agents/skills/claude-code/harness-parallel-agents/skill.yaml +1 -0
  76. package/dist/agents/skills/claude-code/harness-perf/skill.yaml +1 -0
  77. package/dist/agents/skills/claude-code/harness-perf-tdd/skill.yaml +1 -0
  78. package/dist/agents/skills/claude-code/harness-planning/skill.yaml +1 -0
  79. package/dist/agents/skills/claude-code/harness-pre-commit-review/skill.yaml +1 -0
  80. package/dist/agents/skills/claude-code/harness-product-spec/SKILL.md +285 -0
  81. package/dist/agents/skills/claude-code/harness-product-spec/skill.yaml +72 -0
  82. package/dist/agents/skills/claude-code/harness-property-test/SKILL.md +281 -0
  83. package/dist/agents/skills/claude-code/harness-property-test/skill.yaml +71 -0
  84. package/dist/agents/skills/claude-code/harness-refactoring/skill.yaml +1 -0
  85. package/dist/agents/skills/claude-code/harness-release-readiness/skill.yaml +1 -0
  86. package/dist/agents/skills/claude-code/harness-resilience/SKILL.md +255 -0
  87. package/dist/agents/skills/claude-code/harness-resilience/skill.yaml +76 -0
  88. package/dist/agents/skills/claude-code/harness-roadmap/skill.yaml +1 -0
  89. package/dist/agents/skills/claude-code/harness-secrets/SKILL.md +293 -0
  90. package/dist/agents/skills/claude-code/harness-secrets/skill.yaml +76 -0
  91. package/dist/agents/skills/claude-code/harness-security-review/skill.yaml +1 -0
  92. package/dist/agents/skills/claude-code/harness-security-scan/skill.yaml +1 -0
  93. package/dist/agents/skills/claude-code/harness-skill-authoring/skill.yaml +1 -0
  94. package/dist/agents/skills/claude-code/harness-soundness-review/skill.yaml +1 -0
  95. package/dist/agents/skills/claude-code/harness-sql-review/SKILL.md +315 -0
  96. package/dist/agents/skills/claude-code/harness-sql-review/skill.yaml +74 -0
  97. package/dist/agents/skills/claude-code/harness-state-management/skill.yaml +1 -0
  98. package/dist/agents/skills/claude-code/harness-tdd/skill.yaml +1 -0
  99. package/dist/agents/skills/claude-code/harness-test-advisor/skill.yaml +1 -0
  100. package/dist/agents/skills/claude-code/harness-test-data/SKILL.md +268 -0
  101. package/dist/agents/skills/claude-code/harness-test-data/skill.yaml +74 -0
  102. package/dist/agents/skills/claude-code/harness-ux-copy/SKILL.md +271 -0
  103. package/dist/agents/skills/claude-code/harness-ux-copy/skill.yaml +77 -0
  104. package/dist/agents/skills/claude-code/harness-verification/skill.yaml +1 -0
  105. package/dist/agents/skills/claude-code/harness-verify/skill.yaml +1 -0
  106. package/dist/agents/skills/claude-code/harness-visual-regression/SKILL.md +257 -0
  107. package/dist/agents/skills/claude-code/harness-visual-regression/skill.yaml +74 -0
  108. package/dist/agents/skills/claude-code/initialize-harness-project/skill.yaml +1 -0
  109. package/dist/agents/skills/claude-code/validate-context-engineering/skill.yaml +1 -0
  110. package/dist/agents/skills/gemini-cli/add-harness-component/skill.yaml +1 -0
  111. package/dist/agents/skills/gemini-cli/align-documentation/skill.yaml +1 -0
  112. package/dist/agents/skills/gemini-cli/check-mechanical-constraints/skill.yaml +1 -0
  113. package/dist/agents/skills/gemini-cli/cleanup-dead-code/skill.yaml +1 -0
  114. package/dist/agents/skills/gemini-cli/detect-doc-drift/skill.yaml +1 -0
  115. package/dist/agents/skills/gemini-cli/enforce-architecture/skill.yaml +1 -0
  116. package/dist/agents/skills/gemini-cli/harness-accessibility/skill.yaml +1 -0
  117. package/dist/agents/skills/gemini-cli/harness-api-design/SKILL.md +304 -0
  118. package/dist/agents/skills/gemini-cli/harness-api-design/skill.yaml +74 -0
  119. package/dist/agents/skills/gemini-cli/harness-architecture-advisor/skill.yaml +1 -0
  120. package/dist/agents/skills/gemini-cli/harness-auth/SKILL.md +279 -0
  121. package/dist/agents/skills/gemini-cli/harness-auth/skill.yaml +81 -0
  122. package/dist/agents/skills/gemini-cli/harness-autopilot/skill.yaml +1 -0
  123. package/dist/agents/skills/gemini-cli/harness-brainstorming/skill.yaml +1 -0
  124. package/dist/agents/skills/gemini-cli/harness-caching/SKILL.md +309 -0
  125. package/dist/agents/skills/gemini-cli/harness-caching/skill.yaml +73 -0
  126. package/dist/agents/skills/gemini-cli/harness-chaos/SKILL.md +295 -0
  127. package/dist/agents/skills/gemini-cli/harness-chaos/skill.yaml +72 -0
  128. package/dist/agents/skills/gemini-cli/harness-code-review/skill.yaml +1 -0
  129. package/dist/agents/skills/gemini-cli/harness-codebase-cleanup/skill.yaml +1 -0
  130. package/dist/agents/skills/gemini-cli/harness-compliance/SKILL.md +303 -0
  131. package/dist/agents/skills/gemini-cli/harness-compliance/skill.yaml +78 -0
  132. package/dist/agents/skills/gemini-cli/harness-containerization/SKILL.md +284 -0
  133. package/dist/agents/skills/gemini-cli/harness-containerization/skill.yaml +80 -0
  134. package/dist/agents/skills/gemini-cli/harness-data-pipeline/SKILL.md +274 -0
  135. package/dist/agents/skills/gemini-cli/harness-data-pipeline/skill.yaml +81 -0
  136. package/dist/agents/skills/gemini-cli/harness-data-validation/SKILL.md +343 -0
  137. package/dist/agents/skills/gemini-cli/harness-data-validation/skill.yaml +75 -0
  138. package/dist/agents/skills/gemini-cli/harness-database/SKILL.md +258 -0
  139. package/dist/agents/skills/gemini-cli/harness-database/skill.yaml +80 -0
  140. package/dist/agents/skills/gemini-cli/harness-debugging/skill.yaml +1 -0
  141. package/dist/agents/skills/gemini-cli/harness-dependency-health/skill.yaml +1 -0
  142. package/dist/agents/skills/gemini-cli/harness-deployment/SKILL.md +255 -0
  143. package/dist/agents/skills/gemini-cli/harness-deployment/skill.yaml +77 -0
  144. package/dist/agents/skills/gemini-cli/harness-design/skill.yaml +1 -0
  145. package/dist/agents/skills/gemini-cli/harness-design-mobile/skill.yaml +1 -0
  146. package/dist/agents/skills/gemini-cli/harness-design-system/skill.yaml +1 -0
  147. package/dist/agents/skills/gemini-cli/harness-design-web/skill.yaml +1 -0
  148. package/dist/agents/skills/gemini-cli/harness-diagnostics/skill.yaml +1 -0
  149. package/dist/agents/skills/gemini-cli/harness-docs-pipeline/skill.yaml +1 -0
  150. package/dist/agents/skills/gemini-cli/harness-dx/SKILL.md +276 -0
  151. package/dist/agents/skills/gemini-cli/harness-dx/skill.yaml +76 -0
  152. package/dist/agents/skills/gemini-cli/harness-e2e/SKILL.md +245 -0
  153. package/dist/agents/skills/gemini-cli/harness-e2e/skill.yaml +78 -0
  154. package/dist/agents/skills/gemini-cli/harness-event-driven/SKILL.md +280 -0
  155. package/dist/agents/skills/gemini-cli/harness-event-driven/skill.yaml +77 -0
  156. package/dist/agents/skills/gemini-cli/harness-execution/skill.yaml +1 -0
  157. package/dist/agents/skills/gemini-cli/harness-feature-flags/SKILL.md +287 -0
  158. package/dist/agents/skills/gemini-cli/harness-feature-flags/skill.yaml +74 -0
  159. package/dist/agents/skills/gemini-cli/harness-git-workflow/skill.yaml +1 -0
  160. package/dist/agents/skills/gemini-cli/harness-hotspot-detector/skill.yaml +1 -0
  161. package/dist/agents/skills/gemini-cli/harness-i18n/skill.yaml +1 -0
  162. package/dist/agents/skills/gemini-cli/harness-i18n-process/skill.yaml +1 -0
  163. package/dist/agents/skills/gemini-cli/harness-i18n-workflow/skill.yaml +1 -0
  164. package/dist/agents/skills/gemini-cli/harness-impact-analysis/skill.yaml +1 -0
  165. package/dist/agents/skills/gemini-cli/harness-incident-response/SKILL.md +223 -0
  166. package/dist/agents/skills/gemini-cli/harness-incident-response/skill.yaml +78 -0
  167. package/dist/agents/skills/gemini-cli/harness-infrastructure-as-code/SKILL.md +279 -0
  168. package/dist/agents/skills/gemini-cli/harness-infrastructure-as-code/skill.yaml +80 -0
  169. package/dist/agents/skills/gemini-cli/harness-integration-test/SKILL.md +271 -0
  170. package/dist/agents/skills/gemini-cli/harness-integration-test/skill.yaml +73 -0
  171. package/dist/agents/skills/gemini-cli/harness-integrity/skill.yaml +1 -0
  172. package/dist/agents/skills/gemini-cli/harness-knowledge-mapper/skill.yaml +1 -0
  173. package/dist/agents/skills/gemini-cli/harness-load-testing/SKILL.md +274 -0
  174. package/dist/agents/skills/gemini-cli/harness-load-testing/skill.yaml +79 -0
  175. package/dist/agents/skills/gemini-cli/harness-ml-ops/SKILL.md +341 -0
  176. package/dist/agents/skills/gemini-cli/harness-ml-ops/skill.yaml +79 -0
  177. package/dist/agents/skills/gemini-cli/harness-mobile-patterns/SKILL.md +326 -0
  178. package/dist/agents/skills/gemini-cli/harness-mobile-patterns/skill.yaml +82 -0
  179. package/dist/agents/skills/gemini-cli/harness-mutation-test/SKILL.md +251 -0
  180. package/dist/agents/skills/gemini-cli/harness-mutation-test/skill.yaml +70 -0
  181. package/dist/agents/skills/gemini-cli/harness-observability/SKILL.md +283 -0
  182. package/dist/agents/skills/gemini-cli/harness-observability/skill.yaml +78 -0
  183. package/dist/agents/skills/gemini-cli/harness-onboarding/skill.yaml +1 -0
  184. package/dist/agents/skills/gemini-cli/harness-parallel-agents/skill.yaml +1 -0
  185. package/dist/agents/skills/gemini-cli/harness-perf/skill.yaml +1 -0
  186. package/dist/agents/skills/gemini-cli/harness-perf-tdd/skill.yaml +1 -0
  187. package/dist/agents/skills/gemini-cli/harness-planning/skill.yaml +1 -0
  188. package/dist/agents/skills/gemini-cli/harness-pre-commit-review/skill.yaml +1 -0
  189. package/dist/agents/skills/gemini-cli/harness-product-spec/SKILL.md +285 -0
  190. package/dist/agents/skills/gemini-cli/harness-product-spec/skill.yaml +72 -0
  191. package/dist/agents/skills/gemini-cli/harness-property-test/SKILL.md +281 -0
  192. package/dist/agents/skills/gemini-cli/harness-property-test/skill.yaml +71 -0
  193. package/dist/agents/skills/gemini-cli/harness-refactoring/skill.yaml +1 -0
  194. package/dist/agents/skills/gemini-cli/harness-release-readiness/skill.yaml +1 -0
  195. package/dist/agents/skills/gemini-cli/harness-resilience/SKILL.md +255 -0
  196. package/dist/agents/skills/gemini-cli/harness-resilience/skill.yaml +76 -0
  197. package/dist/agents/skills/gemini-cli/harness-roadmap/skill.yaml +1 -0
  198. package/dist/agents/skills/gemini-cli/harness-secrets/SKILL.md +293 -0
  199. package/dist/agents/skills/gemini-cli/harness-secrets/skill.yaml +76 -0
  200. package/dist/agents/skills/gemini-cli/harness-security-review/SKILL.md +240 -0
  201. package/dist/agents/skills/gemini-cli/harness-security-review/skill.yaml +1 -0
  202. package/dist/agents/skills/gemini-cli/harness-security-scan/skill.yaml +1 -0
  203. package/dist/agents/skills/gemini-cli/harness-skill-authoring/skill.yaml +1 -0
  204. package/dist/agents/skills/gemini-cli/harness-soundness-review/skill.yaml +1 -0
  205. package/dist/agents/skills/gemini-cli/harness-sql-review/SKILL.md +315 -0
  206. package/dist/agents/skills/gemini-cli/harness-sql-review/skill.yaml +74 -0
  207. package/dist/agents/skills/gemini-cli/harness-state-management/skill.yaml +1 -0
  208. package/dist/agents/skills/gemini-cli/harness-tdd/skill.yaml +1 -0
  209. package/dist/agents/skills/gemini-cli/harness-test-advisor/skill.yaml +1 -0
  210. package/dist/agents/skills/gemini-cli/harness-test-data/SKILL.md +268 -0
  211. package/dist/agents/skills/gemini-cli/harness-test-data/skill.yaml +74 -0
  212. package/dist/agents/skills/gemini-cli/harness-ux-copy/SKILL.md +271 -0
  213. package/dist/agents/skills/gemini-cli/harness-ux-copy/skill.yaml +77 -0
  214. package/dist/agents/skills/gemini-cli/harness-verification/skill.yaml +1 -0
  215. package/dist/agents/skills/gemini-cli/harness-verify/skill.yaml +1 -0
  216. package/dist/agents/skills/gemini-cli/harness-visual-regression/SKILL.md +257 -0
  217. package/dist/agents/skills/gemini-cli/harness-visual-regression/skill.yaml +74 -0
  218. package/dist/agents/skills/gemini-cli/initialize-harness-project/skill.yaml +1 -0
  219. package/dist/agents/skills/gemini-cli/validate-context-engineering/skill.yaml +1 -0
  220. package/dist/{agents-md-P2RHSUV7.js → agents-md-XU3BHE22.js} +1 -1
  221. package/dist/{architecture-ESOOE26S.js → architecture-2R5Z4ZAF.js} +2 -2
  222. package/dist/bin/harness-mcp.js +14 -13
  223. package/dist/bin/harness.js +22 -21
  224. package/dist/{check-phase-gate-S2MZKLFQ.js → check-phase-gate-2OFZ7OWW.js} +3 -2
  225. package/dist/{chunk-LD3DKUK5.js → chunk-4ZMOCPYO.js} +1 -1
  226. package/dist/{chunk-5VY23YK3.js → chunk-65FRIL4D.js} +2 -2
  227. package/dist/{chunk-L2KLU56K.js → chunk-AOZRDOIP.js} +2 -2
  228. package/dist/{chunk-MACVXDZK.js → chunk-DZS7CJKL.js} +4 -4
  229. package/dist/{chunk-7PZWR4LI.js → chunk-IM32EEDM.js} +9 -9
  230. package/dist/{chunk-2YPZKGAG.js → chunk-IMFVFNJE.js} +1 -1
  231. package/dist/{chunk-HD4IBGLA.js → chunk-N5G5QMS3.js} +24 -1
  232. package/dist/{chunk-MI5XJQDY.js → chunk-ND6PNADU.js} +23 -9
  233. package/dist/{chunk-7KQSUZVG.js → chunk-NERR4TAO.js} +729 -436
  234. package/dist/{chunk-PSNN4LWX.js → chunk-NOPU4RZ4.js} +2 -2
  235. package/dist/{chunk-KELT6K6M.js → chunk-PQ5YK4AY.js} +287 -258
  236. package/dist/{chunk-WPPDRIJL.js → chunk-QY4T6YAZ.js} +3 -3
  237. package/dist/{chunk-RZSUJBZZ.js → chunk-SSKDAOX5.js} +31 -28
  238. package/dist/{chunk-2VU4MFM3.js → chunk-TKJZKICB.js} +6 -6
  239. package/dist/{chunk-GNGELAXY.js → chunk-TS3XWPW5.js} +1 -1
  240. package/dist/chunk-UAX4I5ZE.js +217 -0
  241. package/dist/{chunk-VRFZWGMS.js → chunk-XYLGHKG6.js} +5 -1
  242. package/dist/{chunk-6N4R6FVX.js → chunk-YBJ262QL.js} +1 -1
  243. package/dist/{chunk-3KOLLWWE.js → chunk-Z77YQRQT.js} +11 -207
  244. package/dist/{ci-workflow-4NYBUG6R.js → ci-workflow-EHV65NQB.js} +1 -1
  245. package/dist/{create-skill-WPXHSLX2.js → create-skill-XSWHMSM5.js} +2 -2
  246. package/dist/{dist-WF4C7A4A.js → dist-2B363XUH.js} +1 -1
  247. package/dist/{dist-M6BQODWC.js → dist-HXHWB7SV.js} +2 -2
  248. package/dist/{docs-BPYCN2DR.js → docs-FZOPM4GK.js} +4 -2
  249. package/dist/{engine-LXLIWQQ3.js → engine-OL4T6NZS.js} +1 -1
  250. package/dist/{entropy-4VDVV5CR.js → entropy-LVHJMFGH.js} +2 -2
  251. package/dist/{feedback-63QB5RCA.js → feedback-IHLVLMRD.js} +1 -1
  252. package/dist/{generate-agent-definitions-QABOJG56.js → generate-agent-definitions-64S3CLEZ.js} +3 -3
  253. package/dist/{glob-helper-5OHBUQAI.js → glob-helper-R5FXNUPS.js} +1 -1
  254. package/dist/{graph-loader-KO4GJ5N2.js → graph-loader-GJZ4FN4Y.js} +1 -1
  255. package/dist/index.d.ts +35 -8
  256. package/dist/index.js +23 -21
  257. package/dist/{loader-Z2IT7QX3.js → loader-DPYFB6R6.js} +1 -1
  258. package/dist/{mcp-KQHEL5IF.js → mcp-JQUI7BVZ.js} +14 -13
  259. package/dist/{performance-26BH47O4.js → performance-ZTVSUANN.js} +2 -2
  260. package/dist/{review-pipeline-GHR3WFBI.js → review-pipeline-76JHKGSV.js} +1 -1
  261. package/dist/{runtime-PDWD7UIK.js → runtime-X7U6SC7K.js} +1 -1
  262. package/dist/{security-UQFUZXEN.js → security-FWQZF2IZ.js} +1 -1
  263. package/dist/skill-executor-XZLYZYAK.js +8 -0
  264. package/dist/{validate-N7QJOKFZ.js → validate-GCHZJIL7.js} +2 -2
  265. package/dist/{validate-cross-check-EDQ5QGTM.js → validate-cross-check-STFHYMAZ.js} +1 -1
  266. package/package.json +3 -3
  267. package/dist/skill-executor-RG45LUO5.js +0 -8
@@ -38,7 +38,7 @@ async function handleCheckDependencies(input) {
38
38
  const configResult = resolveProjectConfig(projectPath);
39
39
  if (!configResult.ok) return resultToMcpResponse(configResult);
40
40
  try {
41
- const { validateDependencies, TypeScriptParser } = await import("./dist-WF4C7A4A.js");
41
+ const { validateDependencies, TypeScriptParser } = await import("./dist-2B363XUH.js");
42
42
  const config = configResult.value;
43
43
  const rawLayers = Array.isArray(config.layers) ? config.layers : [];
44
44
  const layers = rawLayers.map((l) => ({
@@ -47,11 +47,11 @@ async function handleCheckDependencies(input) {
47
47
  allowedDependencies: l.allowedDependencies
48
48
  }));
49
49
  const parser = new TypeScriptParser();
50
- const { loadGraphStore } = await import("./graph-loader-KO4GJ5N2.js");
50
+ const { loadGraphStore } = await import("./graph-loader-GJZ4FN4Y.js");
51
51
  const store = await loadGraphStore(projectPath);
52
52
  let graphDependencyData;
53
53
  if (store) {
54
- const { GraphConstraintAdapter } = await import("./dist-M6BQODWC.js");
54
+ const { GraphConstraintAdapter } = await import("./dist-HXHWB7SV.js");
55
55
  const adapter = new GraphConstraintAdapter(store);
56
56
  const graphData = adapter.computeDependencyGraph();
57
57
  graphDependencyData = {
@@ -5,14 +5,12 @@ import {
5
5
  OutputFormatter,
6
6
  OutputMode,
7
7
  createCheckPhaseGateCommand,
8
- findConfigFile,
9
- findFiles,
10
- resolveConfig
11
- } from "./chunk-3KOLLWWE.js";
8
+ findFiles
9
+ } from "./chunk-UAX4I5ZE.js";
12
10
  import {
13
11
  createGenerateAgentDefinitionsCommand,
14
12
  generateAgentDefinitions
15
- } from "./chunk-GNGELAXY.js";
13
+ } from "./chunk-TS3XWPW5.js";
16
14
  import {
17
15
  listPersonas,
18
16
  loadPersona
@@ -22,13 +20,13 @@ import {
22
20
  } from "./chunk-TRAPF4IX.js";
23
21
  import {
24
22
  executeSkill
25
- } from "./chunk-L2KLU56K.js";
23
+ } from "./chunk-AOZRDOIP.js";
26
24
  import {
27
25
  ALLOWED_PERSONA_COMMANDS
28
26
  } from "./chunk-TEFCFC4H.js";
29
27
  import {
30
28
  createCreateSkillCommand
31
- } from "./chunk-6N4R6FVX.js";
29
+ } from "./chunk-YBJ262QL.js";
32
30
  import {
33
31
  logger
34
32
  } from "./chunk-EBJQ6N4M.js";
@@ -50,17 +48,21 @@ import {
50
48
  generateSlashCommands,
51
49
  handleGetImpact,
52
50
  handleOrphanDeletion
53
- } from "./chunk-7KQSUZVG.js";
51
+ } from "./chunk-NERR4TAO.js";
54
52
  import {
55
53
  VALID_PLATFORMS
56
54
  } from "./chunk-ZOAWBDWU.js";
55
+ import {
56
+ findConfigFile,
57
+ resolveConfig
58
+ } from "./chunk-Z77YQRQT.js";
57
59
  import {
58
60
  resolveGlobalSkillsDir,
59
61
  resolvePersonasDir,
60
62
  resolveProjectSkillsDir,
61
63
  resolveSkillsDir,
62
64
  resolveTemplatesDir
63
- } from "./chunk-HD4IBGLA.js";
65
+ } from "./chunk-N5G5QMS3.js";
64
66
  import {
65
67
  CLIError,
66
68
  ExitCode,
@@ -68,7 +70,7 @@ import {
68
70
  } from "./chunk-3WGJMBKH.js";
69
71
  import {
70
72
  SkillMetadataSchema
71
- } from "./chunk-VRFZWGMS.js";
73
+ } from "./chunk-XYLGHKG6.js";
72
74
  import {
73
75
  CLI_VERSION
74
76
  } from "./chunk-BM3PWGXQ.js";
@@ -123,7 +125,7 @@ import {
123
125
  validateKnowledgeMap,
124
126
  writeConfig,
125
127
  writeLockfile
126
- } from "./chunk-KELT6K6M.js";
128
+ } from "./chunk-PQ5YK4AY.js";
127
129
  import {
128
130
  Err,
129
131
  Ok
@@ -209,7 +211,7 @@ function createValidateCommand() {
209
211
  process.exit(result.error.exitCode);
210
212
  }
211
213
  if (opts.crossCheck) {
212
- const { runCrossCheck: runCrossCheck2 } = await import("./validate-cross-check-EDQ5QGTM.js");
214
+ const { runCrossCheck: runCrossCheck2 } = await import("./validate-cross-check-STFHYMAZ.js");
213
215
  const cwd = process.cwd();
214
216
  const specsDir = path.join(cwd, "docs", "specs");
215
217
  const plansDir = path.join(cwd, "docs", "plans");
@@ -567,7 +569,7 @@ function createPerfCommand() {
567
569
  perf.command("bench [glob]").description("Run benchmarks via vitest bench").action(async (glob, _opts, cmd) => {
568
570
  const globalOpts = cmd.optsWithGlobals();
569
571
  const cwd = process.cwd();
570
- const { BenchmarkRunner } = await import("./dist-WF4C7A4A.js");
572
+ const { BenchmarkRunner } = await import("./dist-2B363XUH.js");
571
573
  const runner = new BenchmarkRunner();
572
574
  const benchFiles = runner.discover(cwd, glob);
573
575
  if (benchFiles.length === 0) {
@@ -636,7 +638,7 @@ Results (${result.results.length} benchmarks):`);
636
638
  baselines.command("update").description("Update baselines from latest benchmark run").action(async (_opts, cmd) => {
637
639
  const globalOpts = cmd.optsWithGlobals();
638
640
  const cwd = process.cwd();
639
- const { BenchmarkRunner } = await import("./dist-WF4C7A4A.js");
641
+ const { BenchmarkRunner } = await import("./dist-2B363XUH.js");
640
642
  const runner = new BenchmarkRunner();
641
643
  const manager = new BaselineManager(cwd);
642
644
  logger.info("Running benchmarks to update baselines...");
@@ -664,7 +666,7 @@ Results (${result.results.length} benchmarks):`);
664
666
  perf.command("report").description("Full performance report with metrics, trends, and hotspots").action(async (_opts, cmd) => {
665
667
  const globalOpts = cmd.optsWithGlobals();
666
668
  const cwd = process.cwd();
667
- const { EntropyAnalyzer: EntropyAnalyzer2 } = await import("./dist-WF4C7A4A.js");
669
+ const { EntropyAnalyzer: EntropyAnalyzer2 } = await import("./dist-2B363XUH.js");
668
670
  const analyzer = new EntropyAnalyzer2({
669
671
  rootDir: path5.resolve(cwd),
670
672
  analyze: { complexity: true, coupling: true }
@@ -1607,7 +1609,8 @@ async function runAdd(componentType, name, options) {
1607
1609
  break;
1608
1610
  }
1609
1611
  case "doc": {
1610
- const docsDir = path12.join(cwd, "docs");
1612
+ const configDocsDir = configResult.ok ? configResult.value.docsDir : "./docs";
1613
+ const docsDir = path12.resolve(cwd, configDocsDir);
1611
1614
  if (!fs3.existsSync(docsDir)) {
1612
1615
  fs3.mkdirSync(docsDir, { recursive: true });
1613
1616
  }
@@ -1616,11 +1619,11 @@ async function runAdd(componentType, name, options) {
1616
1619
  return Err(new CLIError(`Doc ${name} already exists`, ExitCode.ERROR));
1617
1620
  }
1618
1621
  fs3.writeFileSync(docPath, DOC_TEMPLATE(name));
1619
- created.push(`docs/${name}.md`);
1622
+ created.push(`${configDocsDir.replace(/^\.[\\/]/, "")}/${name}.md`);
1620
1623
  break;
1621
1624
  }
1622
1625
  case "skill": {
1623
- const { generateSkillFiles: generateSkillFiles2 } = await import("./create-skill-WPXHSLX2.js");
1626
+ const { generateSkillFiles: generateSkillFiles2 } = await import("./create-skill-XSWHMSM5.js");
1624
1627
  generateSkillFiles2({
1625
1628
  name,
1626
1629
  description: `${name} skill`,
@@ -3028,8 +3031,8 @@ function createResetCommand() {
3028
3031
  }
3029
3032
  if (!opts.yes) {
3030
3033
  const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
3031
- const answer = await new Promise((resolve28) => {
3032
- rl.question("Reset project state? This cannot be undone. [y/N] ", resolve28);
3034
+ const answer = await new Promise((resolve29) => {
3035
+ rl.question("Reset project state? This cannot be undone. [y/N] ", resolve29);
3033
3036
  });
3034
3037
  rl.close();
3035
3038
  if (answer.toLowerCase() !== "y" && answer.toLowerCase() !== "yes") {
@@ -3436,10 +3439,10 @@ function prompt(question) {
3436
3439
  input: process.stdin,
3437
3440
  output: process.stdout
3438
3441
  });
3439
- return new Promise((resolve28) => {
3442
+ return new Promise((resolve29) => {
3440
3443
  rl.question(question, (answer) => {
3441
3444
  rl.close();
3442
- resolve28(answer.trim().toLowerCase());
3445
+ resolve29(answer.trim().toLowerCase());
3443
3446
  });
3444
3447
  });
3445
3448
  }
@@ -3579,7 +3582,7 @@ function createGenerateCommand3() {
3579
3582
  import { Command as Command39 } from "commander";
3580
3583
  import * as path29 from "path";
3581
3584
  async function runScan(projectPath) {
3582
- const { GraphStore, CodeIngestor, TopologicalLinker, KnowledgeIngestor, GitIngestor } = await import("./dist-M6BQODWC.js");
3585
+ const { GraphStore, CodeIngestor, TopologicalLinker, KnowledgeIngestor, GitIngestor } = await import("./dist-HXHWB7SV.js");
3583
3586
  const store = new GraphStore();
3584
3587
  const start = Date.now();
3585
3588
  await new CodeIngestor(store).ingest(projectPath);
@@ -3660,7 +3663,7 @@ async function runIngest(projectPath, source, opts) {
3660
3663
  SyncManager,
3661
3664
  JiraConnector,
3662
3665
  SlackConnector
3663
- } = await import("./dist-M6BQODWC.js");
3666
+ } = await import("./dist-HXHWB7SV.js");
3664
3667
  const graphDir = path30.join(projectPath, ".harness", "graph");
3665
3668
  const store = new GraphStore();
3666
3669
  await store.load(graphDir);
@@ -3753,7 +3756,7 @@ function createIngestCommand() {
3753
3756
  import { Command as Command41 } from "commander";
3754
3757
  import * as path31 from "path";
3755
3758
  async function runQuery(projectPath, rootNodeId, opts) {
3756
- const { GraphStore, ContextQL } = await import("./dist-M6BQODWC.js");
3759
+ const { GraphStore, ContextQL } = await import("./dist-HXHWB7SV.js");
3757
3760
  const store = new GraphStore();
3758
3761
  const graphDir = path31.join(projectPath, ".harness", "graph");
3759
3762
  const loaded = await store.load(graphDir);
@@ -3802,7 +3805,7 @@ import { Command as Command42 } from "commander";
3802
3805
  // src/commands/graph/status.ts
3803
3806
  import * as path32 from "path";
3804
3807
  async function runGraphStatus(projectPath) {
3805
- const { GraphStore } = await import("./dist-M6BQODWC.js");
3808
+ const { GraphStore } = await import("./dist-HXHWB7SV.js");
3806
3809
  const graphDir = path32.join(projectPath, ".harness", "graph");
3807
3810
  const store = new GraphStore();
3808
3811
  const loaded = await store.load(graphDir);
@@ -3842,7 +3845,7 @@ async function runGraphStatus(projectPath) {
3842
3845
  // src/commands/graph/export.ts
3843
3846
  import * as path33 from "path";
3844
3847
  async function runGraphExport(projectPath, format) {
3845
- const { GraphStore } = await import("./dist-M6BQODWC.js");
3848
+ const { GraphStore } = await import("./dist-HXHWB7SV.js");
3846
3849
  const graphDir = path33.join(projectPath, ".harness", "graph");
3847
3850
  const store = new GraphStore();
3848
3851
  const loaded = await store.load(graphDir);
@@ -3921,7 +3924,7 @@ function createGraphCommand() {
3921
3924
  import { Command as Command43 } from "commander";
3922
3925
  function createMcpCommand() {
3923
3926
  return new Command43("mcp").description("Start the MCP (Model Context Protocol) server on stdio").action(async () => {
3924
- const { startServer: startServer2 } = await import("./mcp-KQHEL5IF.js");
3927
+ const { startServer: startServer2 } = await import("./mcp-JQUI7BVZ.js");
3925
3928
  await startServer2();
3926
3929
  });
3927
3930
  }
@@ -27,7 +27,7 @@ var checkPerformanceDefinition = {
27
27
  };
28
28
  async function handleCheckPerformance(input) {
29
29
  try {
30
- const { EntropyAnalyzer } = await import("./dist-WF4C7A4A.js");
30
+ const { EntropyAnalyzer } = await import("./dist-2B363XUH.js");
31
31
  const typeFilter = input.type ?? "all";
32
32
  const projectPath = sanitizePath(input.path);
33
33
  const analyzer = new EntropyAnalyzer({
@@ -40,10 +40,10 @@ async function handleCheckPerformance(input) {
40
40
  });
41
41
  let graphOptions;
42
42
  try {
43
- const { loadGraphStore } = await import("./graph-loader-KO4GJ5N2.js");
43
+ const { loadGraphStore } = await import("./graph-loader-GJZ4FN4Y.js");
44
44
  const store = await loadGraphStore(projectPath);
45
45
  if (store) {
46
- const { GraphComplexityAdapter, GraphCouplingAdapter } = await import("./dist-M6BQODWC.js");
46
+ const { GraphComplexityAdapter, GraphCouplingAdapter } = await import("./dist-HXHWB7SV.js");
47
47
  const complexityAdapter = new GraphComplexityAdapter(store);
48
48
  const couplingAdapter = new GraphCouplingAdapter(store);
49
49
  graphOptions = {
@@ -80,7 +80,7 @@ var getPerfBaselinesDefinition = {
80
80
  };
81
81
  async function handleGetPerfBaselines(input) {
82
82
  try {
83
- const { BaselineManager } = await import("./dist-WF4C7A4A.js");
83
+ const { BaselineManager } = await import("./dist-2B363XUH.js");
84
84
  const manager = new BaselineManager(sanitizePath(input.path));
85
85
  const baselines = manager.load();
86
86
  return resultToMcpResponse(
@@ -128,7 +128,7 @@ var updatePerfBaselinesDefinition = {
128
128
  };
129
129
  async function handleUpdatePerfBaselines(input) {
130
130
  try {
131
- const { BaselineManager } = await import("./dist-WF4C7A4A.js");
131
+ const { BaselineManager } = await import("./dist-2B363XUH.js");
132
132
  const manager = new BaselineManager(sanitizePath(input.path));
133
133
  manager.save(input.results, input.commitHash);
134
134
  const updated = manager.load();
@@ -158,7 +158,7 @@ var getCriticalPathsDefinition = {
158
158
  };
159
159
  async function handleGetCriticalPaths(input) {
160
160
  try {
161
- const { CriticalPathResolver } = await import("./dist-WF4C7A4A.js");
161
+ const { CriticalPathResolver } = await import("./dist-2B363XUH.js");
162
162
  const resolver = new CriticalPathResolver(sanitizePath(input.path));
163
163
  const result = await resolver.resolve();
164
164
  return resultToMcpResponse(Ok(result));
@@ -14,7 +14,7 @@ import {
14
14
  import {
15
15
  resolvePersonasDir,
16
16
  resolveSkillsDir
17
- } from "./chunk-HD4IBGLA.js";
17
+ } from "./chunk-N5G5QMS3.js";
18
18
  import {
19
19
  CLIError,
20
20
  ExitCode,
@@ -0,0 +1,217 @@
1
+ import {
2
+ logger
3
+ } from "./chunk-EBJQ6N4M.js";
4
+ import {
5
+ resolveConfig
6
+ } from "./chunk-Z77YQRQT.js";
7
+ import {
8
+ ExitCode
9
+ } from "./chunk-3WGJMBKH.js";
10
+ import {
11
+ Ok
12
+ } from "./chunk-MHBMTPW7.js";
13
+
14
+ // src/commands/check-phase-gate.ts
15
+ import { Command } from "commander";
16
+ import * as path from "path";
17
+ import * as fs from "fs";
18
+
19
+ // src/utils/files.ts
20
+ import { glob } from "glob";
21
+ async function findFiles(pattern, cwd = process.cwd()) {
22
+ return glob(pattern, { cwd, absolute: true });
23
+ }
24
+
25
+ // src/output/formatter.ts
26
+ import chalk from "chalk";
27
+ var OutputMode = {
28
+ /** Output as formatted JSON */
29
+ JSON: "json",
30
+ /** Output as human-readable text */
31
+ TEXT: "text",
32
+ /** Minimal output, only errors and successes */
33
+ QUIET: "quiet",
34
+ /** Full output with detailed context and suggestions */
35
+ VERBOSE: "verbose"
36
+ };
37
+ var OutputFormatter = class {
38
+ /**
39
+ * Creates a new OutputFormatter.
40
+ *
41
+ * @param mode - The output mode to use. Defaults to TEXT.
42
+ */
43
+ constructor(mode = OutputMode.TEXT) {
44
+ this.mode = mode;
45
+ }
46
+ /**
47
+ * Formats raw data for output.
48
+ *
49
+ * @param data - The data to format.
50
+ * @returns A string representation of the data based on the current mode.
51
+ */
52
+ format(data) {
53
+ if (this.mode === OutputMode.JSON) {
54
+ return JSON.stringify(data, null, 2);
55
+ }
56
+ return String(data);
57
+ }
58
+ /**
59
+ * Formats a validation result into a user-friendly string.
60
+ *
61
+ * @param result - The validation result to format.
62
+ * @returns A formatted string containing the validation status and any issues.
63
+ */
64
+ formatValidation(result) {
65
+ if (this.mode === OutputMode.JSON) {
66
+ return JSON.stringify(result, null, 2);
67
+ }
68
+ if (this.mode === OutputMode.QUIET) {
69
+ if (result.valid) return "";
70
+ return result.issues.map((i) => `${i.file ?? ""}: ${i.message}`).join("\n");
71
+ }
72
+ const lines = [];
73
+ if (result.valid) {
74
+ lines.push(chalk.green("v validation passed"));
75
+ } else {
76
+ lines.push(chalk.red(`x Validation failed (${result.issues.length} issues)`));
77
+ lines.push("");
78
+ for (const issue of result.issues) {
79
+ const location = issue.file ? issue.line ? `${issue.file}:${issue.line}` : issue.file : "unknown";
80
+ lines.push(` ${chalk.yellow("*")} ${chalk.dim(location)}`);
81
+ lines.push(` ${issue.message}`);
82
+ if (issue.suggestion && this.mode === OutputMode.VERBOSE) {
83
+ lines.push(` ${chalk.dim("->")} ${issue.suggestion}`);
84
+ }
85
+ }
86
+ }
87
+ return lines.join("\n");
88
+ }
89
+ /**
90
+ * Formats a summary line with a success/failure icon and label.
91
+ *
92
+ * @param label - The name of the field to summarize.
93
+ * @param value - The value to display.
94
+ * @param success - Whether the summary represents a success or failure state.
95
+ * @returns A formatted summary string, or an empty string in JSON or QUIET modes.
96
+ */
97
+ formatSummary(label, value, success) {
98
+ if (this.mode === OutputMode.JSON || this.mode === OutputMode.QUIET) {
99
+ return "";
100
+ }
101
+ const icon = success ? chalk.green("v") : chalk.red("x");
102
+ return `${icon} ${label}: ${value}`;
103
+ }
104
+ };
105
+
106
+ // src/commands/check-phase-gate.ts
107
+ function resolveSpecPath(implFile, implPattern, specPattern, cwd) {
108
+ const relImpl = path.relative(cwd, implFile).replace(/\\/g, "/");
109
+ const implBase = (implPattern.split("*")[0] ?? "").replace(/\/+$/, "");
110
+ const afterBase = relImpl.startsWith(implBase + "/") ? relImpl.slice(implBase.length + 1) : relImpl;
111
+ const segments = afterBase.split("/");
112
+ const firstSegment = segments[0] ?? "";
113
+ const feature = segments.length > 1 ? firstSegment : path.basename(firstSegment, path.extname(firstSegment));
114
+ const specRelative = specPattern.replace("{feature}", feature);
115
+ return path.resolve(cwd, specRelative);
116
+ }
117
+ async function runCheckPhaseGate(options) {
118
+ const configResult = resolveConfig(options.configPath);
119
+ if (!configResult.ok) {
120
+ return configResult;
121
+ }
122
+ const config = configResult.value;
123
+ const cwd = options.cwd ?? (options.configPath ? path.dirname(path.resolve(options.configPath)) : process.cwd());
124
+ if (!config.phaseGates?.enabled) {
125
+ return Ok({
126
+ pass: true,
127
+ skipped: true,
128
+ missingSpecs: [],
129
+ checkedFiles: 0
130
+ });
131
+ }
132
+ const phaseGates = config.phaseGates;
133
+ const missingSpecs = [];
134
+ let checkedFiles = 0;
135
+ for (const mapping of phaseGates.mappings) {
136
+ const implFiles = await findFiles(mapping.implPattern, cwd);
137
+ for (const implFile of implFiles) {
138
+ checkedFiles++;
139
+ const expectedSpec = resolveSpecPath(implFile, mapping.implPattern, mapping.specPattern, cwd);
140
+ if (!fs.existsSync(expectedSpec)) {
141
+ missingSpecs.push({
142
+ implFile: path.relative(cwd, implFile).replace(/\\/g, "/"),
143
+ expectedSpec: path.relative(cwd, expectedSpec).replace(/\\/g, "/")
144
+ });
145
+ }
146
+ }
147
+ }
148
+ const pass = missingSpecs.length === 0;
149
+ return Ok({
150
+ pass,
151
+ skipped: false,
152
+ severity: phaseGates.severity,
153
+ missingSpecs,
154
+ checkedFiles
155
+ });
156
+ }
157
+ function createCheckPhaseGateCommand() {
158
+ const command = new Command("check-phase-gate").description("Verify that implementation files have matching spec documents").action(async (_opts, cmd) => {
159
+ const globalOpts = cmd.optsWithGlobals();
160
+ const mode = globalOpts.json ? OutputMode.JSON : globalOpts.quiet ? OutputMode.QUIET : globalOpts.verbose ? OutputMode.VERBOSE : OutputMode.TEXT;
161
+ const formatter = new OutputFormatter(mode);
162
+ const result = await runCheckPhaseGate({
163
+ configPath: globalOpts.config,
164
+ json: globalOpts.json,
165
+ verbose: globalOpts.verbose,
166
+ quiet: globalOpts.quiet
167
+ });
168
+ if (!result.ok) {
169
+ if (mode === OutputMode.JSON) {
170
+ console.log(JSON.stringify({ error: result.error.message }));
171
+ } else {
172
+ logger.error(result.error.message);
173
+ }
174
+ process.exit(result.error.exitCode);
175
+ }
176
+ const value = result.value;
177
+ if (value.skipped) {
178
+ if (mode === OutputMode.JSON) {
179
+ console.log(formatter.format(value));
180
+ } else if (mode !== OutputMode.QUIET) {
181
+ logger.dim("Phase gates not enabled, skipping.");
182
+ }
183
+ process.exit(ExitCode.SUCCESS);
184
+ }
185
+ const output = formatter.formatValidation({
186
+ valid: value.pass,
187
+ issues: value.missingSpecs.map((m) => ({
188
+ file: m.implFile,
189
+ message: `Missing spec: ${m.expectedSpec}`
190
+ }))
191
+ });
192
+ if (output) {
193
+ console.log(output);
194
+ }
195
+ const summary = formatter.formatSummary(
196
+ "Phase gate check",
197
+ `${value.checkedFiles} files checked, ${value.missingSpecs.length} missing specs`,
198
+ value.pass
199
+ );
200
+ if (summary) {
201
+ console.log(summary);
202
+ }
203
+ if (!value.pass && value.severity === "error") {
204
+ process.exit(ExitCode.VALIDATION_FAILED);
205
+ }
206
+ process.exit(ExitCode.SUCCESS);
207
+ });
208
+ return command;
209
+ }
210
+
211
+ export {
212
+ OutputMode,
213
+ OutputFormatter,
214
+ findFiles,
215
+ runCheckPhaseGate,
216
+ createCheckPhaseGateCommand
217
+ };
@@ -59,7 +59,11 @@ var SkillMetadataSchema = z.object({
59
59
  phases: z.array(SkillPhaseSchema).optional(),
60
60
  state: SkillStateSchema.default({}),
61
61
  depends_on: z.array(z.string()).default([]),
62
- repository: z.string().url().optional()
62
+ repository: z.string().url().optional(),
63
+ tier: z.number().int().min(1).max(3).optional(),
64
+ internal: z.boolean().default(false),
65
+ keywords: z.array(z.string()).default([]),
66
+ stack_signals: z.array(z.string()).default([])
63
67
  });
64
68
 
65
69
  export {
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-3WGJMBKH.js";
8
8
  import {
9
9
  ALLOWED_COGNITIVE_MODES
10
- } from "./chunk-VRFZWGMS.js";
10
+ } from "./chunk-XYLGHKG6.js";
11
11
 
12
12
  // src/commands/create-skill.ts
13
13
  import { Command } from "commander";