vaspera 2.9.2 → 2.10.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 (327) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/README.md +58 -1
  3. package/dist/__tests__/autofix/branch-manager.test.d.ts +2 -0
  4. package/dist/__tests__/autofix/branch-manager.test.d.ts.map +1 -0
  5. package/dist/__tests__/autofix/branch-manager.test.js +60 -0
  6. package/dist/__tests__/autofix/branch-manager.test.js.map +1 -0
  7. package/dist/__tests__/autofix/commit-generator.test.d.ts +2 -0
  8. package/dist/__tests__/autofix/commit-generator.test.d.ts.map +1 -0
  9. package/dist/__tests__/autofix/commit-generator.test.js +147 -0
  10. package/dist/__tests__/autofix/commit-generator.test.js.map +1 -0
  11. package/dist/__tests__/autofix/constitution.test.d.ts +9 -0
  12. package/dist/__tests__/autofix/constitution.test.d.ts.map +1 -0
  13. package/dist/__tests__/autofix/constitution.test.js +421 -0
  14. package/dist/__tests__/autofix/constitution.test.js.map +1 -0
  15. package/dist/__tests__/autofix/pr-generator.test.d.ts +2 -0
  16. package/dist/__tests__/autofix/pr-generator.test.d.ts.map +1 -0
  17. package/dist/__tests__/autofix/pr-generator.test.js +152 -0
  18. package/dist/__tests__/autofix/pr-generator.test.js.map +1 -0
  19. package/dist/__tests__/property-test-helpers.d.ts +87 -0
  20. package/dist/__tests__/property-test-helpers.d.ts.map +1 -0
  21. package/dist/__tests__/property-test-helpers.js +136 -0
  22. package/dist/__tests__/property-test-helpers.js.map +1 -0
  23. package/dist/__tests__/scanners/ai-code/ai-detector.test.d.ts +2 -0
  24. package/dist/__tests__/scanners/ai-code/ai-detector.test.d.ts.map +1 -0
  25. package/dist/__tests__/scanners/ai-code/ai-detector.test.js +188 -0
  26. package/dist/__tests__/scanners/ai-code/ai-detector.test.js.map +1 -0
  27. package/dist/__tests__/scanners/ai-code/confidence-scorer.test.d.ts +2 -0
  28. package/dist/__tests__/scanners/ai-code/confidence-scorer.test.d.ts.map +1 -0
  29. package/dist/__tests__/scanners/ai-code/confidence-scorer.test.js +363 -0
  30. package/dist/__tests__/scanners/ai-code/confidence-scorer.test.js.map +1 -0
  31. package/dist/__tests__/scanners/ai-code/hallucination-checker.test.d.ts +2 -0
  32. package/dist/__tests__/scanners/ai-code/hallucination-checker.test.d.ts.map +1 -0
  33. package/dist/__tests__/scanners/ai-code/hallucination-checker.test.js +226 -0
  34. package/dist/__tests__/scanners/ai-code/hallucination-checker.test.js.map +1 -0
  35. package/dist/__tests__/scanners/ai-code/index.test.d.ts +2 -0
  36. package/dist/__tests__/scanners/ai-code/index.test.d.ts.map +1 -0
  37. package/dist/__tests__/scanners/ai-code/index.test.js +214 -0
  38. package/dist/__tests__/scanners/ai-code/index.test.js.map +1 -0
  39. package/dist/__tests__/scanners/dast/index.test.d.ts +2 -0
  40. package/dist/__tests__/scanners/dast/index.test.d.ts.map +1 -0
  41. package/dist/__tests__/scanners/dast/index.test.js +183 -0
  42. package/dist/__tests__/scanners/dast/index.test.js.map +1 -0
  43. package/dist/__tests__/scanners/dast/nuclei.test.d.ts +2 -0
  44. package/dist/__tests__/scanners/dast/nuclei.test.d.ts.map +1 -0
  45. package/dist/__tests__/scanners/dast/nuclei.test.js +166 -0
  46. package/dist/__tests__/scanners/dast/nuclei.test.js.map +1 -0
  47. package/dist/__tests__/scanners/dast/zap.test.d.ts +2 -0
  48. package/dist/__tests__/scanners/dast/zap.test.d.ts.map +1 -0
  49. package/dist/__tests__/scanners/dast/zap.test.js +158 -0
  50. package/dist/__tests__/scanners/dast/zap.test.js.map +1 -0
  51. package/dist/__tests__/scanners/deploy/health-checker.test.d.ts +2 -0
  52. package/dist/__tests__/scanners/deploy/health-checker.test.d.ts.map +1 -0
  53. package/dist/__tests__/scanners/deploy/health-checker.test.js +67 -0
  54. package/dist/__tests__/scanners/deploy/health-checker.test.js.map +1 -0
  55. package/dist/__tests__/scanners/deploy/index.test.d.ts +2 -0
  56. package/dist/__tests__/scanners/deploy/index.test.d.ts.map +1 -0
  57. package/dist/__tests__/scanners/deploy/index.test.js +84 -0
  58. package/dist/__tests__/scanners/deploy/index.test.js.map +1 -0
  59. package/dist/__tests__/scanners/deploy/provider-detector.test.d.ts +2 -0
  60. package/dist/__tests__/scanners/deploy/provider-detector.test.d.ts.map +1 -0
  61. package/dist/__tests__/scanners/deploy/provider-detector.test.js +88 -0
  62. package/dist/__tests__/scanners/deploy/provider-detector.test.js.map +1 -0
  63. package/dist/__tests__/scanners/deploy/types.test.d.ts +2 -0
  64. package/dist/__tests__/scanners/deploy/types.test.d.ts.map +1 -0
  65. package/dist/__tests__/scanners/deploy/types.test.js +126 -0
  66. package/dist/__tests__/scanners/deploy/types.test.js.map +1 -0
  67. package/dist/__tests__/scanners/fp-feedback.test.d.ts +2 -0
  68. package/dist/__tests__/scanners/fp-feedback.test.d.ts.map +1 -0
  69. package/dist/__tests__/scanners/fp-feedback.test.js +202 -0
  70. package/dist/__tests__/scanners/fp-feedback.test.js.map +1 -0
  71. package/dist/__tests__/scanners/fp-filter.property.test.d.ts +9 -0
  72. package/dist/__tests__/scanners/fp-filter.property.test.d.ts.map +1 -0
  73. package/dist/__tests__/scanners/fp-filter.property.test.js +253 -0
  74. package/dist/__tests__/scanners/fp-filter.property.test.js.map +1 -0
  75. package/dist/__tests__/scanners/fp-filter.test.d.ts +2 -0
  76. package/dist/__tests__/scanners/fp-filter.test.d.ts.map +1 -0
  77. package/dist/__tests__/scanners/fp-filter.test.js +234 -0
  78. package/dist/__tests__/scanners/fp-filter.test.js.map +1 -0
  79. package/dist/__tests__/scanners/fp-tracker.test.d.ts +2 -0
  80. package/dist/__tests__/scanners/fp-tracker.test.d.ts.map +1 -0
  81. package/dist/__tests__/scanners/fp-tracker.test.js +262 -0
  82. package/dist/__tests__/scanners/fp-tracker.test.js.map +1 -0
  83. package/dist/__tests__/scanners/logic/endpoint-analyzer.property.test.d.ts +10 -0
  84. package/dist/__tests__/scanners/logic/endpoint-analyzer.property.test.d.ts.map +1 -0
  85. package/dist/__tests__/scanners/logic/endpoint-analyzer.property.test.js +238 -0
  86. package/dist/__tests__/scanners/logic/endpoint-analyzer.property.test.js.map +1 -0
  87. package/dist/__tests__/scanners/logic/endpoint-analyzer.test.d.ts +2 -0
  88. package/dist/__tests__/scanners/logic/endpoint-analyzer.test.d.ts.map +1 -0
  89. package/dist/__tests__/scanners/logic/endpoint-analyzer.test.js +55 -0
  90. package/dist/__tests__/scanners/logic/endpoint-analyzer.test.js.map +1 -0
  91. package/dist/__tests__/scanners/logic/index.test.d.ts +2 -0
  92. package/dist/__tests__/scanners/logic/index.test.d.ts.map +1 -0
  93. package/dist/__tests__/scanners/logic/index.test.js +165 -0
  94. package/dist/__tests__/scanners/logic/index.test.js.map +1 -0
  95. package/dist/__tests__/scanners/logic/types.test.d.ts +2 -0
  96. package/dist/__tests__/scanners/logic/types.test.d.ts.map +1 -0
  97. package/dist/__tests__/scanners/logic/types.test.js +85 -0
  98. package/dist/__tests__/scanners/logic/types.test.js.map +1 -0
  99. package/dist/__tests__/scanners/runtime/app-launcher.test.d.ts +2 -0
  100. package/dist/__tests__/scanners/runtime/app-launcher.test.d.ts.map +1 -0
  101. package/dist/__tests__/scanners/runtime/app-launcher.test.js +94 -0
  102. package/dist/__tests__/scanners/runtime/app-launcher.test.js.map +1 -0
  103. package/dist/__tests__/scanners/runtime/golden-path-runner.test.d.ts +2 -0
  104. package/dist/__tests__/scanners/runtime/golden-path-runner.test.d.ts.map +1 -0
  105. package/dist/__tests__/scanners/runtime/golden-path-runner.test.js +195 -0
  106. package/dist/__tests__/scanners/runtime/golden-path-runner.test.js.map +1 -0
  107. package/dist/__tests__/scanners/runtime/index.test.d.ts +2 -0
  108. package/dist/__tests__/scanners/runtime/index.test.d.ts.map +1 -0
  109. package/dist/__tests__/scanners/runtime/index.test.js +120 -0
  110. package/dist/__tests__/scanners/runtime/index.test.js.map +1 -0
  111. package/dist/__tests__/scanners/runtime/types.test.d.ts +2 -0
  112. package/dist/__tests__/scanners/runtime/types.test.d.ts.map +1 -0
  113. package/dist/__tests__/scanners/runtime/types.test.js +126 -0
  114. package/dist/__tests__/scanners/runtime/types.test.js.map +1 -0
  115. package/dist/__tests__/scanners/scale/bottleneck-detector.test.d.ts +2 -0
  116. package/dist/__tests__/scanners/scale/bottleneck-detector.test.d.ts.map +1 -0
  117. package/dist/__tests__/scanners/scale/bottleneck-detector.test.js +187 -0
  118. package/dist/__tests__/scanners/scale/bottleneck-detector.test.js.map +1 -0
  119. package/dist/__tests__/scanners/scale/index.test.d.ts +2 -0
  120. package/dist/__tests__/scanners/scale/index.test.d.ts.map +1 -0
  121. package/dist/__tests__/scanners/scale/index.test.js +87 -0
  122. package/dist/__tests__/scanners/scale/index.test.js.map +1 -0
  123. package/dist/__tests__/scanners/scale/load-profiler.test.d.ts +2 -0
  124. package/dist/__tests__/scanners/scale/load-profiler.test.d.ts.map +1 -0
  125. package/dist/__tests__/scanners/scale/load-profiler.test.js +122 -0
  126. package/dist/__tests__/scanners/scale/load-profiler.test.js.map +1 -0
  127. package/dist/__tests__/scanners/scale/types.test.d.ts +2 -0
  128. package/dist/__tests__/scanners/scale/types.test.d.ts.map +1 -0
  129. package/dist/__tests__/scanners/scale/types.test.js +129 -0
  130. package/dist/__tests__/scanners/scale/types.test.js.map +1 -0
  131. package/dist/action/pr-comment.test.js +4 -0
  132. package/dist/action/pr-comment.test.js.map +1 -1
  133. package/dist/action/sarif-upload.test.js +4 -0
  134. package/dist/action/sarif-upload.test.js.map +1 -1
  135. package/dist/autofix/branch-manager.d.ts +115 -0
  136. package/dist/autofix/branch-manager.d.ts.map +1 -0
  137. package/dist/autofix/branch-manager.js +308 -0
  138. package/dist/autofix/branch-manager.js.map +1 -0
  139. package/dist/autofix/commit-generator.d.ts +55 -0
  140. package/dist/autofix/commit-generator.d.ts.map +1 -0
  141. package/dist/autofix/commit-generator.js +277 -0
  142. package/dist/autofix/commit-generator.js.map +1 -0
  143. package/dist/autofix/constitution.d.ts +77 -0
  144. package/dist/autofix/constitution.d.ts.map +1 -0
  145. package/dist/autofix/constitution.js +261 -0
  146. package/dist/autofix/constitution.js.map +1 -0
  147. package/dist/autofix/constitution.schema.d.ts +441 -0
  148. package/dist/autofix/constitution.schema.d.ts.map +1 -0
  149. package/dist/autofix/constitution.schema.js +144 -0
  150. package/dist/autofix/constitution.schema.js.map +1 -0
  151. package/dist/autofix/index.d.ts +13 -0
  152. package/dist/autofix/index.d.ts.map +1 -0
  153. package/dist/autofix/index.js +15 -0
  154. package/dist/autofix/index.js.map +1 -0
  155. package/dist/autofix/pr-generator.d.ts +57 -0
  156. package/dist/autofix/pr-generator.d.ts.map +1 -0
  157. package/dist/autofix/pr-generator.js +597 -0
  158. package/dist/autofix/pr-generator.js.map +1 -0
  159. package/dist/autofix/types.d.ts +151 -0
  160. package/dist/autofix/types.d.ts.map +1 -0
  161. package/dist/autofix/types.js +22 -0
  162. package/dist/autofix/types.js.map +1 -0
  163. package/dist/eval/fixtures.d.ts +20 -0
  164. package/dist/eval/fixtures.d.ts.map +1 -1
  165. package/dist/eval/fixtures.js +430 -0
  166. package/dist/eval/fixtures.js.map +1 -1
  167. package/dist/index.d.ts.map +1 -1
  168. package/dist/index.js +874 -0
  169. package/dist/index.js.map +1 -1
  170. package/dist/install-skills.d.ts +11 -0
  171. package/dist/install-skills.d.ts.map +1 -0
  172. package/dist/install-skills.js +81 -0
  173. package/dist/install-skills.js.map +1 -0
  174. package/dist/scanners/ai-code/ai-detector.d.ts +25 -0
  175. package/dist/scanners/ai-code/ai-detector.d.ts.map +1 -0
  176. package/dist/scanners/ai-code/ai-detector.js +192 -0
  177. package/dist/scanners/ai-code/ai-detector.js.map +1 -0
  178. package/dist/scanners/ai-code/confidence-scorer.d.ts +40 -0
  179. package/dist/scanners/ai-code/confidence-scorer.d.ts.map +1 -0
  180. package/dist/scanners/ai-code/confidence-scorer.js +148 -0
  181. package/dist/scanners/ai-code/confidence-scorer.js.map +1 -0
  182. package/dist/scanners/ai-code/hallucination-checker.d.ts +36 -0
  183. package/dist/scanners/ai-code/hallucination-checker.d.ts.map +1 -0
  184. package/dist/scanners/ai-code/hallucination-checker.js +298 -0
  185. package/dist/scanners/ai-code/hallucination-checker.js.map +1 -0
  186. package/dist/scanners/ai-code/index.d.ts +30 -0
  187. package/dist/scanners/ai-code/index.d.ts.map +1 -0
  188. package/dist/scanners/ai-code/index.js +224 -0
  189. package/dist/scanners/ai-code/index.js.map +1 -0
  190. package/dist/scanners/ai-code/types.d.ts +192 -0
  191. package/dist/scanners/ai-code/types.d.ts.map +1 -0
  192. package/dist/scanners/ai-code/types.js +37 -0
  193. package/dist/scanners/ai-code/types.js.map +1 -0
  194. package/dist/scanners/cache.d.ts.map +1 -1
  195. package/dist/scanners/cache.js +4 -0
  196. package/dist/scanners/cache.js.map +1 -1
  197. package/dist/scanners/dast/index.d.ts +39 -0
  198. package/dist/scanners/dast/index.d.ts.map +1 -0
  199. package/dist/scanners/dast/index.js +259 -0
  200. package/dist/scanners/dast/index.js.map +1 -0
  201. package/dist/scanners/dast/nuclei.d.ts +26 -0
  202. package/dist/scanners/dast/nuclei.d.ts.map +1 -0
  203. package/dist/scanners/dast/nuclei.js +354 -0
  204. package/dist/scanners/dast/nuclei.js.map +1 -0
  205. package/dist/scanners/dast/types.d.ts +306 -0
  206. package/dist/scanners/dast/types.d.ts.map +1 -0
  207. package/dist/scanners/dast/types.js +52 -0
  208. package/dist/scanners/dast/types.js.map +1 -0
  209. package/dist/scanners/dast/zap.d.ts +26 -0
  210. package/dist/scanners/dast/zap.d.ts.map +1 -0
  211. package/dist/scanners/dast/zap.js +453 -0
  212. package/dist/scanners/dast/zap.js.map +1 -0
  213. package/dist/scanners/deploy/health-checker.d.ts +38 -0
  214. package/dist/scanners/deploy/health-checker.d.ts.map +1 -0
  215. package/dist/scanners/deploy/health-checker.js +272 -0
  216. package/dist/scanners/deploy/health-checker.js.map +1 -0
  217. package/dist/scanners/deploy/index.d.ts +44 -0
  218. package/dist/scanners/deploy/index.d.ts.map +1 -0
  219. package/dist/scanners/deploy/index.js +208 -0
  220. package/dist/scanners/deploy/index.js.map +1 -0
  221. package/dist/scanners/deploy/provider-detector.d.ts +25 -0
  222. package/dist/scanners/deploy/provider-detector.d.ts.map +1 -0
  223. package/dist/scanners/deploy/provider-detector.js +177 -0
  224. package/dist/scanners/deploy/provider-detector.js.map +1 -0
  225. package/dist/scanners/deploy/types.d.ts +406 -0
  226. package/dist/scanners/deploy/types.d.ts.map +1 -0
  227. package/dist/scanners/deploy/types.js +58 -0
  228. package/dist/scanners/deploy/types.js.map +1 -0
  229. package/dist/scanners/deploy/vercel-integration.d.ts +52 -0
  230. package/dist/scanners/deploy/vercel-integration.d.ts.map +1 -0
  231. package/dist/scanners/deploy/vercel-integration.js +280 -0
  232. package/dist/scanners/deploy/vercel-integration.js.map +1 -0
  233. package/dist/scanners/fp-feedback.d.ts +140 -0
  234. package/dist/scanners/fp-feedback.d.ts.map +1 -0
  235. package/dist/scanners/fp-feedback.js +292 -0
  236. package/dist/scanners/fp-feedback.js.map +1 -0
  237. package/dist/scanners/fp-filter.d.ts +94 -0
  238. package/dist/scanners/fp-filter.d.ts.map +1 -0
  239. package/dist/scanners/fp-filter.js +397 -0
  240. package/dist/scanners/fp-filter.js.map +1 -0
  241. package/dist/scanners/fp-tracker.d.ts +125 -0
  242. package/dist/scanners/fp-tracker.d.ts.map +1 -0
  243. package/dist/scanners/fp-tracker.js +330 -0
  244. package/dist/scanners/fp-tracker.js.map +1 -0
  245. package/dist/scanners/index.d.ts.map +1 -1
  246. package/dist/scanners/index.js +56 -0
  247. package/dist/scanners/index.js.map +1 -1
  248. package/dist/scanners/index.test.js +6 -6
  249. package/dist/scanners/index.test.js.map +1 -1
  250. package/dist/scanners/logic/auth-flow-analyzer.d.ts +18 -0
  251. package/dist/scanners/logic/auth-flow-analyzer.d.ts.map +1 -0
  252. package/dist/scanners/logic/auth-flow-analyzer.js +384 -0
  253. package/dist/scanners/logic/auth-flow-analyzer.js.map +1 -0
  254. package/dist/scanners/logic/endpoint-analyzer.d.ts +29 -0
  255. package/dist/scanners/logic/endpoint-analyzer.d.ts.map +1 -0
  256. package/dist/scanners/logic/endpoint-analyzer.js +528 -0
  257. package/dist/scanners/logic/endpoint-analyzer.js.map +1 -0
  258. package/dist/scanners/logic/index.d.ts +41 -0
  259. package/dist/scanners/logic/index.d.ts.map +1 -0
  260. package/dist/scanners/logic/index.js +268 -0
  261. package/dist/scanners/logic/index.js.map +1 -0
  262. package/dist/scanners/logic/types.d.ts +254 -0
  263. package/dist/scanners/logic/types.d.ts.map +1 -0
  264. package/dist/scanners/logic/types.js +142 -0
  265. package/dist/scanners/logic/types.js.map +1 -0
  266. package/dist/scanners/runtime/app-launcher.d.ts +33 -0
  267. package/dist/scanners/runtime/app-launcher.d.ts.map +1 -0
  268. package/dist/scanners/runtime/app-launcher.js +419 -0
  269. package/dist/scanners/runtime/app-launcher.js.map +1 -0
  270. package/dist/scanners/runtime/golden-path-runner.d.ts +48 -0
  271. package/dist/scanners/runtime/golden-path-runner.d.ts.map +1 -0
  272. package/dist/scanners/runtime/golden-path-runner.js +373 -0
  273. package/dist/scanners/runtime/golden-path-runner.js.map +1 -0
  274. package/dist/scanners/runtime/index.d.ts +41 -0
  275. package/dist/scanners/runtime/index.d.ts.map +1 -0
  276. package/dist/scanners/runtime/index.js +164 -0
  277. package/dist/scanners/runtime/index.js.map +1 -0
  278. package/dist/scanners/runtime/playwright-executor.d.ts +50 -0
  279. package/dist/scanners/runtime/playwright-executor.d.ts.map +1 -0
  280. package/dist/scanners/runtime/playwright-executor.js +387 -0
  281. package/dist/scanners/runtime/playwright-executor.js.map +1 -0
  282. package/dist/scanners/runtime/types.d.ts +215 -0
  283. package/dist/scanners/runtime/types.d.ts.map +1 -0
  284. package/dist/scanners/runtime/types.js +40 -0
  285. package/dist/scanners/runtime/types.js.map +1 -0
  286. package/dist/scanners/scale/bottleneck-detector.d.ts +17 -0
  287. package/dist/scanners/scale/bottleneck-detector.d.ts.map +1 -0
  288. package/dist/scanners/scale/bottleneck-detector.js +250 -0
  289. package/dist/scanners/scale/bottleneck-detector.js.map +1 -0
  290. package/dist/scanners/scale/capacity-estimator.d.ts +17 -0
  291. package/dist/scanners/scale/capacity-estimator.d.ts.map +1 -0
  292. package/dist/scanners/scale/capacity-estimator.js +197 -0
  293. package/dist/scanners/scale/capacity-estimator.js.map +1 -0
  294. package/dist/scanners/scale/index.d.ts +37 -0
  295. package/dist/scanners/scale/index.d.ts.map +1 -0
  296. package/dist/scanners/scale/index.js +101 -0
  297. package/dist/scanners/scale/index.js.map +1 -0
  298. package/dist/scanners/scale/load-profiler.d.ts +48 -0
  299. package/dist/scanners/scale/load-profiler.d.ts.map +1 -0
  300. package/dist/scanners/scale/load-profiler.js +377 -0
  301. package/dist/scanners/scale/load-profiler.js.map +1 -0
  302. package/dist/scanners/scale/types.d.ts +529 -0
  303. package/dist/scanners/scale/types.d.ts.map +1 -0
  304. package/dist/scanners/scale/types.js +57 -0
  305. package/dist/scanners/scale/types.js.map +1 -0
  306. package/dist/scanners/secrets.d.ts.map +1 -1
  307. package/dist/scanners/secrets.js +13 -2
  308. package/dist/scanners/secrets.js.map +1 -1
  309. package/dist/scanners/types.d.ts +1 -1
  310. package/dist/scanners/types.d.ts.map +1 -1
  311. package/dist/scanners/types.js +4 -0
  312. package/dist/scanners/types.js.map +1 -1
  313. package/package.json +8 -4
  314. package/skills/vaspera-add-tests/SKILL.md +102 -0
  315. package/skills/vaspera-ai-verify/SKILL.md +166 -0
  316. package/skills/vaspera-audit/SKILL.md +67 -0
  317. package/skills/vaspera-certify/SKILL.md +130 -0
  318. package/skills/vaspera-deploy/SKILL.md +152 -0
  319. package/skills/vaspera-fix-critical/SKILL.md +52 -0
  320. package/skills/vaspera-fix-high/SKILL.md +81 -0
  321. package/skills/vaspera-fix-medium/SKILL.md +56 -0
  322. package/skills/vaspera-fix-rls/SKILL.md +85 -0
  323. package/skills/vaspera-harden/SKILL.md +102 -0
  324. package/skills/vaspera-help/SKILL.md +61 -0
  325. package/skills/vaspera-load-test/SKILL.md +167 -0
  326. package/skills/vaspera-verify/SKILL.md +70 -0
  327. package/skills/vaspera-verify-e2e/SKILL.md +117 -0
@@ -0,0 +1,277 @@
1
+ /**
2
+ * Commit Generator
3
+ *
4
+ * Generates conventional commit messages for autofix PRs.
5
+ *
6
+ * @module autofix/commit-generator
7
+ */
8
+ import { git, getStagedFiles } from "./branch-manager.js";
9
+ import { logger } from "../logger.js";
10
+ /**
11
+ * Map severity to commit urgency indicators
12
+ */
13
+ const SEVERITY_INDICATORS = {
14
+ critical: "🚨",
15
+ high: "⚠️",
16
+ medium: "🔧",
17
+ low: "📝",
18
+ info: "ℹ️",
19
+ };
20
+ /**
21
+ * Map pattern categories to commit types
22
+ */
23
+ function getCommitType(patternId) {
24
+ if (patternId.startsWith("sec-")) {
25
+ return "security";
26
+ }
27
+ if (patternId.startsWith("perf-")) {
28
+ return "perf";
29
+ }
30
+ if (patternId.startsWith("type-") || patternId.startsWith("qual-")) {
31
+ return "refactor";
32
+ }
33
+ return "fix";
34
+ }
35
+ /**
36
+ * Generate a commit message for a batch of fixes
37
+ */
38
+ export function generateCommitMessage(fixes, severity, options) {
39
+ const { includeEmoji = false, includeSeverity = true, maxLength = 72, } = options ?? {};
40
+ const appliedFixes = fixes.filter((f) => f.applied || f.diff);
41
+ if (appliedFixes.length === 0) {
42
+ return "chore: attempted autofix (no changes applied)";
43
+ }
44
+ // Group by pattern type
45
+ const patterns = new Map();
46
+ const files = new Set();
47
+ for (const fix of appliedFixes) {
48
+ files.add(fix.file);
49
+ // Extract pattern from findingId (e.g., "sec-001" -> "sec")
50
+ const parts = fix.findingId.split("-");
51
+ if (parts.length >= 1) {
52
+ const prefix = parts[0];
53
+ patterns.set(prefix, (patterns.get(prefix) || 0) + 1);
54
+ }
55
+ }
56
+ // Determine primary commit type
57
+ const patternEntries = Array.from(patterns.entries());
58
+ const primaryPattern = patternEntries.sort((a, b) => b[1] - a[1])[0]?.[0] ?? "fix";
59
+ const commitType = primaryPattern === "sec" ? "security" : "fix";
60
+ // Build message parts
61
+ const parts = [];
62
+ // Emoji prefix
63
+ if (includeEmoji && severity) {
64
+ parts.push(SEVERITY_INDICATORS[severity]);
65
+ }
66
+ // Commit type and scope
67
+ const scope = commitType === "security" ? "security" : undefined;
68
+ const typeScope = scope ? `fix(${scope})` : "fix";
69
+ parts.push(`${typeScope}:`);
70
+ // Summary
71
+ if (appliedFixes.length === 1) {
72
+ parts.push(`Apply autofix for ${appliedFixes[0].findingId}`);
73
+ }
74
+ else {
75
+ parts.push(`Apply ${appliedFixes.length} automated fixes`);
76
+ }
77
+ // Severity tag
78
+ if (includeSeverity && severity) {
79
+ parts.push(`[${severity}]`);
80
+ }
81
+ let message = parts.join(" ");
82
+ // Truncate if needed
83
+ if (message.length > maxLength) {
84
+ message = message.slice(0, maxLength - 3) + "...";
85
+ }
86
+ return message;
87
+ }
88
+ /**
89
+ * Generate extended commit body with details
90
+ */
91
+ export function generateCommitBody(fixes, severity) {
92
+ const lines = [];
93
+ const appliedFixes = fixes.filter((f) => f.applied || f.diff);
94
+ if (appliedFixes.length === 0) {
95
+ return "";
96
+ }
97
+ // Summary
98
+ lines.push("## Automated Security Fixes\n");
99
+ if (severity) {
100
+ lines.push(`Severity: **${severity.toUpperCase()}**\n`);
101
+ }
102
+ // Group fixes by file
103
+ const byFile = new Map();
104
+ for (const fix of appliedFixes) {
105
+ const existing = byFile.get(fix.file) || [];
106
+ existing.push(fix);
107
+ byFile.set(fix.file, existing);
108
+ }
109
+ lines.push("### Changes\n");
110
+ for (const [file, fileFixes] of byFile) {
111
+ lines.push(`- **${file}**`);
112
+ for (const fix of fileFixes) {
113
+ lines.push(` - ${fix.findingId}: Line ${fix.diff?.lineNumber || "unknown"}`);
114
+ }
115
+ }
116
+ lines.push("\n---");
117
+ lines.push("Generated by Vaspera Hardening MCP");
118
+ return lines.join("\n");
119
+ }
120
+ /**
121
+ * Create a commit with the staged changes
122
+ */
123
+ export async function createCommit(cwd, message, body, options) {
124
+ const stagedFiles = await getStagedFiles(cwd);
125
+ if (stagedFiles.length === 0) {
126
+ return { error: "No staged files to commit" };
127
+ }
128
+ // Build full commit message
129
+ const fullMessage = body ? `${message}\n\n${body}` : message;
130
+ // Add co-authors
131
+ let finalMessage = fullMessage;
132
+ const coAuthors = options?.coAuthors ?? ["Claude <noreply@anthropic.com>"];
133
+ if (coAuthors.length > 0) {
134
+ const coAuthorLines = coAuthors
135
+ .map((author) => `Co-Authored-By: ${author}`)
136
+ .join("\n");
137
+ finalMessage = `${finalMessage}\n\n${coAuthorLines}`;
138
+ }
139
+ // Build commit args
140
+ const args = ["commit", "-m", finalMessage];
141
+ if (options?.signOff) {
142
+ args.push("--signoff");
143
+ }
144
+ logger.info("git.commit", {
145
+ files: stagedFiles.length,
146
+ messagePreview: message.slice(0, 50),
147
+ });
148
+ const result = await git(args, { cwd });
149
+ if (!result.success) {
150
+ logger.error("git.commit_failed", {
151
+ error: result.stderr,
152
+ exitCode: result.exitCode,
153
+ });
154
+ return { error: result.stderr || "Commit failed" };
155
+ }
156
+ // Get the commit SHA
157
+ const shaResult = await git(["rev-parse", "HEAD"], { cwd });
158
+ const sha = shaResult.success ? shaResult.stdout : undefined;
159
+ logger.info("git.commit_success", { sha, files: stagedFiles.length });
160
+ return {
161
+ message,
162
+ sha,
163
+ files: stagedFiles,
164
+ author: "vaspera-hardening",
165
+ coAuthors,
166
+ signed: false,
167
+ };
168
+ }
169
+ /**
170
+ * Generate PR title based on fixes
171
+ */
172
+ export function generatePRTitle(fixes, severity, template) {
173
+ const appliedFixes = fixes.filter((f) => f.applied || f.diff);
174
+ const count = appliedFixes.length;
175
+ const files = new Set(appliedFixes.map((f) => f.file)).size;
176
+ if (template) {
177
+ return template
178
+ .replace("{{count}}", String(count))
179
+ .replace("{{severity}}", severity ?? "mixed")
180
+ .replace("{{files}}", String(files));
181
+ }
182
+ if (severity) {
183
+ return `fix(security): Apply ${count} ${severity}-severity autofix${count !== 1 ? "es" : ""}`;
184
+ }
185
+ return `fix(security): Apply ${count} automated security fix${count !== 1 ? "es" : ""}`;
186
+ }
187
+ /**
188
+ * Generate PR body/description
189
+ */
190
+ export function generatePRBody(fixes, severity, options) {
191
+ const lines = [];
192
+ const appliedFixes = fixes.filter((f) => f.applied || f.diff);
193
+ lines.push("## Summary\n");
194
+ lines.push("This PR contains automated security fixes generated by Vaspera Hardening MCP.\n");
195
+ if (severity) {
196
+ lines.push(`**Severity Level:** ${severity.toUpperCase()}\n`);
197
+ }
198
+ if (options?.certificationId) {
199
+ lines.push(`**Certification ID:** \`${options.certificationId}\`\n`);
200
+ }
201
+ lines.push("## Fixes Applied\n");
202
+ // Group by file
203
+ const byFile = new Map();
204
+ for (const fix of appliedFixes) {
205
+ const existing = byFile.get(fix.file) || [];
206
+ existing.push(fix);
207
+ byFile.set(fix.file, existing);
208
+ }
209
+ for (const [file, fileFixes] of byFile) {
210
+ lines.push(`### \`${file}\`\n`);
211
+ for (const fix of fileFixes) {
212
+ lines.push(`- **${fix.findingId}** (line ${fix.diff?.lineNumber || "?"})`);
213
+ if (options?.includeBeforeAfter && fix.diff) {
214
+ lines.push("");
215
+ lines.push("<details>");
216
+ lines.push("<summary>View changes</summary>\n");
217
+ lines.push("**Before:**");
218
+ lines.push("```");
219
+ lines.push(fix.diff.before);
220
+ lines.push("```\n");
221
+ lines.push("**After:**");
222
+ lines.push("```");
223
+ lines.push(fix.diff.after);
224
+ lines.push("```");
225
+ lines.push("</details>\n");
226
+ }
227
+ }
228
+ }
229
+ lines.push("\n## Review Checklist\n");
230
+ lines.push("- [ ] Changes are semantically correct");
231
+ lines.push("- [ ] No regressions introduced");
232
+ lines.push("- [ ] Tests pass");
233
+ lines.push("\n---");
234
+ lines.push("🤖 Generated with [Vaspera Hardening MCP](https://github.com/RCOLKITT/hardening-mcp)");
235
+ return lines.join("\n");
236
+ }
237
+ /**
238
+ * Categorize fixes by severity
239
+ */
240
+ export function groupFixesBySeverity(fixes, findingSeverities) {
241
+ const groups = new Map();
242
+ for (const fix of fixes) {
243
+ const severity = findingSeverities.get(fix.findingId) ?? "medium";
244
+ const existing = groups.get(severity) || [];
245
+ existing.push(fix);
246
+ groups.set(severity, existing);
247
+ }
248
+ return groups;
249
+ }
250
+ /**
251
+ * Categorize fixes by file
252
+ */
253
+ export function groupFixesByFile(fixes) {
254
+ const groups = new Map();
255
+ for (const fix of fixes) {
256
+ const existing = groups.get(fix.file) || [];
257
+ existing.push(fix);
258
+ groups.set(fix.file, existing);
259
+ }
260
+ return groups;
261
+ }
262
+ /**
263
+ * Categorize fixes by pattern
264
+ */
265
+ export function groupFixesByPattern(fixes) {
266
+ const groups = new Map();
267
+ for (const fix of fixes) {
268
+ // Extract pattern from findingId (e.g., "sec-hardcoded-secret-001" -> "sec-hardcoded-secret")
269
+ const parts = fix.findingId.split("-");
270
+ const patternId = parts.slice(0, -1).join("-") || fix.findingId;
271
+ const existing = groups.get(patternId) || [];
272
+ existing.push(fix);
273
+ groups.set(patternId, existing);
274
+ }
275
+ return groups;
276
+ }
277
+ //# sourceMappingURL=commit-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commit-generator.js","sourceRoot":"","sources":["../../src/autofix/commit-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Constitution Loader and Evaluator
3
+ *
4
+ * Loads constitution files and evaluates pattern approval
5
+ * based on risk tolerance and conditions.
6
+ *
7
+ * @module autofix/constitution
8
+ */
9
+ import { type Constitution, type Severity } from "./constitution.schema.js";
10
+ import type { FixPattern } from "../certification/autofix.js";
11
+ /**
12
+ * Default constitution file locations (checked in order)
13
+ */
14
+ export declare const CONSTITUTION_PATHS: string[];
15
+ /**
16
+ * Load constitution from project directory
17
+ */
18
+ export declare function loadConstitution(projectPath: string, constitutionPath?: string): Promise<Constitution>;
19
+ /**
20
+ * Result of pattern approval check
21
+ */
22
+ export interface ApprovalResult {
23
+ /** Whether the pattern is approved for auto-application */
24
+ approved: boolean;
25
+ /** Reason for the decision */
26
+ reason?: string;
27
+ /** Required reviewer if not auto-approved */
28
+ requiredReviewer?: string;
29
+ }
30
+ /**
31
+ * Context for evaluating pattern approval
32
+ */
33
+ export interface ApprovalContext {
34
+ /** File path being fixed */
35
+ filePath: string;
36
+ /** Severity of the finding */
37
+ severity: Severity;
38
+ /** Number of lines changed (optional) */
39
+ linesChanged?: number;
40
+ }
41
+ /**
42
+ * Check if a pattern is approved for auto-application
43
+ */
44
+ export declare function isPatternApproved(constitution: Constitution, pattern: FixPattern, context: ApprovalContext): ApprovalResult;
45
+ /**
46
+ * Result of path check
47
+ */
48
+ export interface PathCheckResult {
49
+ /** Whether the path is allowed for autofix */
50
+ allowed: boolean;
51
+ /** Reason for the decision */
52
+ reason?: string;
53
+ /** Whether additional review is required */
54
+ requiresReview: boolean;
55
+ }
56
+ /**
57
+ * Check if file path is allowed for autofix
58
+ */
59
+ export declare function isPathAllowed(constitution: Constitution, filePath: string): PathCheckResult;
60
+ /**
61
+ * Get effective safeToAutoApply status for patterns based on constitution
62
+ */
63
+ export declare function getEffectivePatterns(constitution: Constitution, patterns: FixPattern[]): FixPattern[];
64
+ /**
65
+ * Validate a constitution file
66
+ */
67
+ export declare function validateConstitution(content: unknown): {
68
+ valid: boolean;
69
+ errors?: string[];
70
+ };
71
+ /**
72
+ * Generate a default constitution file content
73
+ */
74
+ export declare function generateDefaultConstitution(): string;
75
+ export { ConstitutionSchema, DEFAULT_CONSTITUTION } from "./constitution.schema.js";
76
+ export type { Constitution, RiskTolerance, Severity, PatternApproval, PRRules, DirectoryRules, SafetyConstraints, } from "./constitution.schema.js";
77
+ //# sourceMappingURL=constitution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constitution.d.ts","sourceRoot":"","sources":["../../src/autofix/constitution.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAGL,KAAK,YAAY,EAEjB,KAAK,QAAQ,EACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAG9D;;GAEG;AACH,eAAO,MAAM,kBAAkB,UAM9B,CAAC;AAEF;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,YAAY,CAAC,CAuBvB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,2DAA2D;IAC3D,QAAQ,EAAE,OAAO,CAAC;IAClB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,eAAe,GACvB,cAAc,CA0EhB;AAoCD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,MAAM,GACf,eAAe,CAwBjB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,UAAU,EAAE,GACrB,UAAU,EAAE,CAwBd;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,GACf;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAWvC;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,CAyDpD;AAGD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACpF,YAAY,EACV,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,eAAe,EACf,OAAO,EACP,cAAc,EACd,iBAAiB,GAClB,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,261 @@
1
+ /**
2
+ * Constitution Loader and Evaluator
3
+ *
4
+ * Loads constitution files and evaluates pattern approval
5
+ * based on risk tolerance and conditions.
6
+ *
7
+ * @module autofix/constitution
8
+ */
9
+ import { readFile } from "fs/promises";
10
+ import { join } from "path";
11
+ import { parse as parseYaml } from "yaml";
12
+ import { ConstitutionSchema, DEFAULT_CONSTITUTION, } from "./constitution.schema.js";
13
+ import { logger } from "../logger.js";
14
+ /**
15
+ * Default constitution file locations (checked in order)
16
+ */
17
+ export const CONSTITUTION_PATHS = [
18
+ ".vaspera/constitution.yaml",
19
+ ".vaspera/constitution.yml",
20
+ ".vaspera/constitution.json",
21
+ "vaspera.constitution.yaml",
22
+ "vaspera.constitution.json",
23
+ ];
24
+ /**
25
+ * Load constitution from project directory
26
+ */
27
+ export async function loadConstitution(projectPath, constitutionPath) {
28
+ const pathsToTry = constitutionPath
29
+ ? [constitutionPath]
30
+ : CONSTITUTION_PATHS.map((p) => join(projectPath, p));
31
+ for (const path of pathsToTry) {
32
+ try {
33
+ const content = await readFile(path, "utf-8");
34
+ const parsed = path.endsWith(".json")
35
+ ? JSON.parse(content)
36
+ : parseYaml(content);
37
+ const validated = ConstitutionSchema.parse(parsed);
38
+ logger.info("constitution.loaded", { path });
39
+ return validated;
40
+ }
41
+ catch {
42
+ // Continue to next path
43
+ }
44
+ }
45
+ // Return default constitution if none found
46
+ logger.info("constitution.using_defaults", { projectPath });
47
+ return DEFAULT_CONSTITUTION;
48
+ }
49
+ /**
50
+ * Check if a pattern is approved for auto-application
51
+ */
52
+ export function isPatternApproved(constitution, pattern, context) {
53
+ // Find pattern-specific rule
54
+ const patternRule = constitution.patterns.find((p) => p.patternId === pattern.patternId);
55
+ // If no specific rule, use risk tolerance
56
+ if (!patternRule) {
57
+ return evaluateByRiskTolerance(constitution.riskTolerance, pattern);
58
+ }
59
+ // Check explicit approval
60
+ if (!patternRule.autoApprove) {
61
+ return {
62
+ approved: false,
63
+ reason: `Pattern ${pattern.patternId} requires manual review`,
64
+ requiredReviewer: patternRule.requiredReviewer,
65
+ };
66
+ }
67
+ // Check conditions
68
+ if (patternRule.conditions) {
69
+ const { allowedPaths, excludedPaths, maxLinesChanged, minSeverity } = patternRule.conditions;
70
+ // Check allowed paths
71
+ if (allowedPaths && allowedPaths.length > 0) {
72
+ const inAllowed = allowedPaths.some((p) => context.filePath.includes(p));
73
+ if (!inAllowed) {
74
+ return {
75
+ approved: false,
76
+ reason: `File path ${context.filePath} not in allowed paths`,
77
+ };
78
+ }
79
+ }
80
+ // Check excluded paths
81
+ if (excludedPaths && excludedPaths.length > 0) {
82
+ const inExcluded = excludedPaths.some((p) => context.filePath.includes(p));
83
+ if (inExcluded) {
84
+ return {
85
+ approved: false,
86
+ reason: `File path ${context.filePath} is in excluded paths`,
87
+ };
88
+ }
89
+ }
90
+ // Check max lines changed
91
+ if (maxLinesChanged !== undefined &&
92
+ context.linesChanged !== undefined &&
93
+ context.linesChanged > maxLinesChanged) {
94
+ return {
95
+ approved: false,
96
+ reason: `Change affects ${context.linesChanged} lines, exceeds max ${maxLinesChanged}`,
97
+ };
98
+ }
99
+ // Check min severity
100
+ if (minSeverity) {
101
+ const severityOrder = ["info", "low", "medium", "high", "critical"];
102
+ const minIdx = severityOrder.indexOf(minSeverity);
103
+ const actualIdx = severityOrder.indexOf(context.severity);
104
+ if (actualIdx < minIdx) {
105
+ return {
106
+ approved: false,
107
+ reason: `Severity ${context.severity} below minimum ${minSeverity}`,
108
+ };
109
+ }
110
+ }
111
+ }
112
+ return { approved: true };
113
+ }
114
+ /**
115
+ * Evaluate pattern approval by risk tolerance
116
+ */
117
+ function evaluateByRiskTolerance(tolerance, pattern) {
118
+ switch (tolerance) {
119
+ case "conservative":
120
+ // Only auto-apply patterns marked as safe with low risk
121
+ if (pattern.safeToAutoApply && pattern.risk === "low") {
122
+ return { approved: true };
123
+ }
124
+ return {
125
+ approved: false,
126
+ reason: "Conservative mode: only low-risk safe patterns auto-applied",
127
+ };
128
+ case "moderate":
129
+ // Auto-apply safe patterns and low/medium risk
130
+ if (pattern.safeToAutoApply || pattern.risk !== "high") {
131
+ return { approved: true };
132
+ }
133
+ return {
134
+ approved: false,
135
+ reason: "Moderate mode: high-risk patterns require review",
136
+ };
137
+ case "aggressive":
138
+ // Auto-apply all patterns
139
+ return { approved: true };
140
+ }
141
+ }
142
+ /**
143
+ * Check if file path is allowed for autofix
144
+ */
145
+ export function isPathAllowed(constitution, filePath) {
146
+ const { neverAutofix, requireReview } = constitution.directories;
147
+ // Check never-autofix directories
148
+ const inNeverAutofix = neverAutofix.some((dir) => filePath.includes(dir));
149
+ if (inNeverAutofix) {
150
+ return {
151
+ allowed: false,
152
+ reason: `Path ${filePath} is in never-autofix directory`,
153
+ requiresReview: false,
154
+ };
155
+ }
156
+ // Check require-review directories (allowed but flagged)
157
+ const inRequireReview = requireReview.some((dir) => filePath.includes(dir));
158
+ if (inRequireReview) {
159
+ return {
160
+ allowed: true,
161
+ reason: `Path ${filePath} requires additional review`,
162
+ requiresReview: true,
163
+ };
164
+ }
165
+ return { allowed: true, requiresReview: false };
166
+ }
167
+ /**
168
+ * Get effective safeToAutoApply status for patterns based on constitution
169
+ */
170
+ export function getEffectivePatterns(constitution, patterns) {
171
+ return patterns.map((pattern) => {
172
+ const rule = constitution.patterns.find((p) => p.patternId === pattern.patternId);
173
+ if (rule) {
174
+ return {
175
+ ...pattern,
176
+ safeToAutoApply: rule.autoApprove,
177
+ };
178
+ }
179
+ // Apply risk tolerance
180
+ const { approved } = evaluateByRiskTolerance(constitution.riskTolerance, pattern);
181
+ return {
182
+ ...pattern,
183
+ safeToAutoApply: approved,
184
+ };
185
+ });
186
+ }
187
+ /**
188
+ * Validate a constitution file
189
+ */
190
+ export function validateConstitution(content) {
191
+ const result = ConstitutionSchema.safeParse(content);
192
+ if (result.success) {
193
+ return { valid: true };
194
+ }
195
+ const errors = result.error.errors.map((e) => `${e.path.join(".")}: ${e.message}`);
196
+ return { valid: false, errors };
197
+ }
198
+ /**
199
+ * Generate a default constitution file content
200
+ */
201
+ export function generateDefaultConstitution() {
202
+ return `# Vaspera Autofix Constitution
203
+ # This file governs which patterns can be automatically applied
204
+ # and under what conditions.
205
+
206
+ version: "1.0"
207
+
208
+ # Risk tolerance: conservative | moderate | aggressive
209
+ # - conservative: Only auto-apply safe patterns with low risk
210
+ # - moderate: Auto-apply safe patterns and low/medium risk
211
+ # - aggressive: Auto-apply all patterns
212
+ riskTolerance: "conservative"
213
+
214
+ # Pattern-specific approvals
215
+ patterns:
216
+ # Example: Auto-approve console.log removal
217
+ - patternId: "qual-console-log"
218
+ autoApprove: true
219
+
220
+ # Example: Require security review for SQL fixes
221
+ - patternId: "sec-sql-injection"
222
+ autoApprove: false
223
+ requiredReviewer: "security-team"
224
+
225
+ # PR creation rules
226
+ prRules:
227
+ requireApproval: true
228
+ minApprovers: 1
229
+ requiredLabels:
230
+ - autofix
231
+ - security
232
+ commitPrefix: "fix(security):"
233
+ maxPRsPerRun: 10
234
+ groupBy: "severity"
235
+
236
+ # Directory restrictions
237
+ directories:
238
+ neverAutofix:
239
+ - node_modules
240
+ - vendor
241
+ - .git
242
+ - dist
243
+ requireReview:
244
+ - src/auth/
245
+ - src/crypto/
246
+ - src/payment/
247
+
248
+ # Safety constraints
249
+ safety:
250
+ requireCleanWorkingTree: true
251
+ createBackupBranch: true
252
+ runTestsAfterFix: true
253
+ testCommand: "npm test"
254
+ revertOnTestFailure: true
255
+ maxFilesPerRun: 20
256
+ dryRunDefault: true
257
+ `;
258
+ }
259
+ // Re-export types and schema
260
+ export { ConstitutionSchema, DEFAULT_CONSTITUTION } from "./constitution.schema.js";
261
+ //# sourceMappingURL=constitution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constitution.js","sourceRoot":"","sources":["../../src/autofix/constitution.ts"],"names":[],"mappings":"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"}