@manehorizons/cadence-core 1.1.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 (476) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +5 -0
  3. package/bin/cadence.cjs +4 -0
  4. package/dist/build/record.d.ts +16 -0
  5. package/dist/build/record.d.ts.map +1 -0
  6. package/dist/build/record.js +33 -0
  7. package/dist/build/record.js.map +1 -0
  8. package/dist/checks/boundary.d.ts +35 -0
  9. package/dist/checks/boundary.d.ts.map +1 -0
  10. package/dist/checks/boundary.js +29 -0
  11. package/dist/checks/boundary.js.map +1 -0
  12. package/dist/checks/skill-audit.d.ts +29 -0
  13. package/dist/checks/skill-audit.d.ts.map +1 -0
  14. package/dist/checks/skill-audit.js +57 -0
  15. package/dist/checks/skill-audit.js.map +1 -0
  16. package/dist/classify/tier.d.ts +9 -0
  17. package/dist/classify/tier.d.ts.map +1 -0
  18. package/dist/classify/tier.js +15 -0
  19. package/dist/classify/tier.js.map +1 -0
  20. package/dist/cli/commands/assumption.d.ts +3 -0
  21. package/dist/cli/commands/assumption.d.ts.map +1 -0
  22. package/dist/cli/commands/assumption.js +313 -0
  23. package/dist/cli/commands/assumption.js.map +1 -0
  24. package/dist/cli/commands/block.d.ts +3 -0
  25. package/dist/cli/commands/block.d.ts.map +1 -0
  26. package/dist/cli/commands/block.js +23 -0
  27. package/dist/cli/commands/block.js.map +1 -0
  28. package/dist/cli/commands/build.d.ts +3 -0
  29. package/dist/cli/commands/build.d.ts.map +1 -0
  30. package/dist/cli/commands/build.js +89 -0
  31. package/dist/cli/commands/build.js.map +1 -0
  32. package/dist/cli/commands/config.d.ts +3 -0
  33. package/dist/cli/commands/config.d.ts.map +1 -0
  34. package/dist/cli/commands/config.js +91 -0
  35. package/dist/cli/commands/config.js.map +1 -0
  36. package/dist/cli/commands/context.d.ts +3 -0
  37. package/dist/cli/commands/context.d.ts.map +1 -0
  38. package/dist/cli/commands/context.js +31 -0
  39. package/dist/cli/commands/context.js.map +1 -0
  40. package/dist/cli/commands/decision.d.ts +3 -0
  41. package/dist/cli/commands/decision.d.ts.map +1 -0
  42. package/dist/cli/commands/decision.js +390 -0
  43. package/dist/cli/commands/decision.js.map +1 -0
  44. package/dist/cli/commands/done.d.ts +3 -0
  45. package/dist/cli/commands/done.d.ts.map +1 -0
  46. package/dist/cli/commands/done.js +23 -0
  47. package/dist/cli/commands/done.js.map +1 -0
  48. package/dist/cli/commands/draft-new.d.ts +4 -0
  49. package/dist/cli/commands/draft-new.d.ts.map +1 -0
  50. package/dist/cli/commands/draft-new.js +108 -0
  51. package/dist/cli/commands/draft-new.js.map +1 -0
  52. package/dist/cli/commands/draft.d.ts +4 -0
  53. package/dist/cli/commands/draft.d.ts.map +1 -0
  54. package/dist/cli/commands/draft.js +125 -0
  55. package/dist/cli/commands/draft.js.map +1 -0
  56. package/dist/cli/commands/hook.d.ts +3 -0
  57. package/dist/cli/commands/hook.d.ts.map +1 -0
  58. package/dist/cli/commands/hook.js +50 -0
  59. package/dist/cli/commands/hook.js.map +1 -0
  60. package/dist/cli/commands/init.d.ts +21 -0
  61. package/dist/cli/commands/init.d.ts.map +1 -0
  62. package/dist/cli/commands/init.js +255 -0
  63. package/dist/cli/commands/init.js.map +1 -0
  64. package/dist/cli/commands/inspect.d.ts +3 -0
  65. package/dist/cli/commands/inspect.d.ts.map +1 -0
  66. package/dist/cli/commands/inspect.js +24 -0
  67. package/dist/cli/commands/inspect.js.map +1 -0
  68. package/dist/cli/commands/intelligence.d.ts +3 -0
  69. package/dist/cli/commands/intelligence.d.ts.map +1 -0
  70. package/dist/cli/commands/intelligence.js +173 -0
  71. package/dist/cli/commands/intelligence.js.map +1 -0
  72. package/dist/cli/commands/milestone.d.ts +3 -0
  73. package/dist/cli/commands/milestone.d.ts.map +1 -0
  74. package/dist/cli/commands/milestone.js +119 -0
  75. package/dist/cli/commands/milestone.js.map +1 -0
  76. package/dist/cli/commands/needs-context.d.ts +3 -0
  77. package/dist/cli/commands/needs-context.d.ts.map +1 -0
  78. package/dist/cli/commands/needs-context.js +23 -0
  79. package/dist/cli/commands/needs-context.js.map +1 -0
  80. package/dist/cli/commands/progress.d.ts +3 -0
  81. package/dist/cli/commands/progress.d.ts.map +1 -0
  82. package/dist/cli/commands/progress.js +21 -0
  83. package/dist/cli/commands/progress.js.map +1 -0
  84. package/dist/cli/commands/recommend.d.ts +3 -0
  85. package/dist/cli/commands/recommend.d.ts.map +1 -0
  86. package/dist/cli/commands/recommend.js +24 -0
  87. package/dist/cli/commands/recommend.js.map +1 -0
  88. package/dist/cli/commands/recommendation.d.ts +3 -0
  89. package/dist/cli/commands/recommendation.d.ts.map +1 -0
  90. package/dist/cli/commands/recommendation.js +360 -0
  91. package/dist/cli/commands/recommendation.js.map +1 -0
  92. package/dist/cli/commands/settle.d.ts +3 -0
  93. package/dist/cli/commands/settle.d.ts.map +1 -0
  94. package/dist/cli/commands/settle.js +453 -0
  95. package/dist/cli/commands/settle.js.map +1 -0
  96. package/dist/cli/commands/spec.d.ts +10 -0
  97. package/dist/cli/commands/spec.d.ts.map +1 -0
  98. package/dist/cli/commands/spec.js +246 -0
  99. package/dist/cli/commands/spec.js.map +1 -0
  100. package/dist/cli/commands/status.d.ts +11 -0
  101. package/dist/cli/commands/status.d.ts.map +1 -0
  102. package/dist/cli/commands/status.js +211 -0
  103. package/dist/cli/commands/status.js.map +1 -0
  104. package/dist/cli/index.d.ts +3 -0
  105. package/dist/cli/index.d.ts.map +1 -0
  106. package/dist/cli/index.js +21 -0
  107. package/dist/cli/index.js.map +1 -0
  108. package/dist/cli/register.d.ts +3 -0
  109. package/dist/cli/register.d.ts.map +1 -0
  110. package/dist/cli/register.js +43 -0
  111. package/dist/cli/register.js.map +1 -0
  112. package/dist/coherence/check.d.ts +11 -0
  113. package/dist/coherence/check.d.ts.map +1 -0
  114. package/dist/coherence/check.js +34 -0
  115. package/dist/coherence/check.js.map +1 -0
  116. package/dist/config/loader.d.ts +4 -0
  117. package/dist/config/loader.d.ts.map +1 -0
  118. package/dist/config/loader.js +40 -0
  119. package/dist/config/loader.js.map +1 -0
  120. package/dist/errors.d.ts +23 -0
  121. package/dist/errors.d.ts.map +1 -0
  122. package/dist/errors.js +31 -0
  123. package/dist/errors.js.map +1 -0
  124. package/dist/gates/approve.d.ts +20 -0
  125. package/dist/gates/approve.d.ts.map +1 -0
  126. package/dist/gates/approve.js +55 -0
  127. package/dist/gates/approve.js.map +1 -0
  128. package/dist/gates/build-context.d.ts +17 -0
  129. package/dist/gates/build-context.d.ts.map +1 -0
  130. package/dist/gates/build-context.js +81 -0
  131. package/dist/gates/build-context.js.map +1 -0
  132. package/dist/gates/build-test-must-pass.d.ts +12 -0
  133. package/dist/gates/build-test-must-pass.d.ts.map +1 -0
  134. package/dist/gates/build-test-must-pass.js +23 -0
  135. package/dist/gates/build-test-must-pass.js.map +1 -0
  136. package/dist/gates/build-types.d.ts +54 -0
  137. package/dist/gates/build-types.d.ts.map +1 -0
  138. package/dist/gates/build-types.js +2 -0
  139. package/dist/gates/build-types.js.map +1 -0
  140. package/dist/gates/code-review.d.ts +20 -0
  141. package/dist/gates/code-review.d.ts.map +1 -0
  142. package/dist/gates/code-review.js +137 -0
  143. package/dist/gates/code-review.js.map +1 -0
  144. package/dist/gates/coherence.d.ts +26 -0
  145. package/dist/gates/coherence.d.ts.map +1 -0
  146. package/dist/gates/coherence.js +59 -0
  147. package/dist/gates/coherence.js.map +1 -0
  148. package/dist/gates/coverage.d.ts +8 -0
  149. package/dist/gates/coverage.d.ts.map +1 -0
  150. package/dist/gates/coverage.js +26 -0
  151. package/dist/gates/coverage.js.map +1 -0
  152. package/dist/gates/deep-verify.d.ts +7 -0
  153. package/dist/gates/deep-verify.d.ts.map +1 -0
  154. package/dist/gates/deep-verify.js +77 -0
  155. package/dist/gates/deep-verify.js.map +1 -0
  156. package/dist/gates/draft-context.d.ts +20 -0
  157. package/dist/gates/draft-context.d.ts.map +1 -0
  158. package/dist/gates/draft-context.js +87 -0
  159. package/dist/gates/draft-context.js.map +1 -0
  160. package/dist/gates/draft-read.d.ts +10 -0
  161. package/dist/gates/draft-read.d.ts.map +1 -0
  162. package/dist/gates/draft-read.js +24 -0
  163. package/dist/gates/draft-read.js.map +1 -0
  164. package/dist/gates/draft-types.d.ts +75 -0
  165. package/dist/gates/draft-types.d.ts.map +1 -0
  166. package/dist/gates/draft-types.js +2 -0
  167. package/dist/gates/draft-types.js.map +1 -0
  168. package/dist/gates/engine.d.ts +21 -0
  169. package/dist/gates/engine.d.ts.map +1 -0
  170. package/dist/gates/engine.js +98 -0
  171. package/dist/gates/engine.js.map +1 -0
  172. package/dist/gates/interactive.d.ts +11 -0
  173. package/dist/gates/interactive.d.ts.map +1 -0
  174. package/dist/gates/interactive.js +55 -0
  175. package/dist/gates/interactive.js.map +1 -0
  176. package/dist/gates/per-task-verify.d.ts +12 -0
  177. package/dist/gates/per-task-verify.d.ts.map +1 -0
  178. package/dist/gates/per-task-verify.js +52 -0
  179. package/dist/gates/per-task-verify.js.map +1 -0
  180. package/dist/gates/plan-review.d.ts +13 -0
  181. package/dist/gates/plan-review.d.ts.map +1 -0
  182. package/dist/gates/plan-review.js +98 -0
  183. package/dist/gates/plan-review.js.map +1 -0
  184. package/dist/gates/registry.d.ts +53 -0
  185. package/dist/gates/registry.d.ts.map +1 -0
  186. package/dist/gates/registry.js +66 -0
  187. package/dist/gates/registry.js.map +1 -0
  188. package/dist/gates/security-audit.d.ts +11 -0
  189. package/dist/gates/security-audit.d.ts.map +1 -0
  190. package/dist/gates/security-audit.js +40 -0
  191. package/dist/gates/security-audit.js.map +1 -0
  192. package/dist/gates/structural-verifier.d.ts +8 -0
  193. package/dist/gates/structural-verifier.d.ts.map +1 -0
  194. package/dist/gates/structural-verifier.js +25 -0
  195. package/dist/gates/structural-verifier.js.map +1 -0
  196. package/dist/gates/types.d.ts +202 -0
  197. package/dist/gates/types.d.ts.map +1 -0
  198. package/dist/gates/types.js +12 -0
  199. package/dist/gates/types.js.map +1 -0
  200. package/dist/hooks/dispatcher.d.ts +8 -0
  201. package/dist/hooks/dispatcher.d.ts.map +1 -0
  202. package/dist/hooks/dispatcher.js +31 -0
  203. package/dist/hooks/dispatcher.js.map +1 -0
  204. package/dist/hooks/handlers.d.ts +21 -0
  205. package/dist/hooks/handlers.d.ts.map +1 -0
  206. package/dist/hooks/handlers.js +121 -0
  207. package/dist/hooks/handlers.js.map +1 -0
  208. package/dist/index.d.ts +2 -0
  209. package/dist/index.d.ts.map +1 -0
  210. package/dist/index.js +2 -0
  211. package/dist/index.js.map +1 -0
  212. package/dist/init/claude-md-template.d.ts +34 -0
  213. package/dist/init/claude-md-template.d.ts.map +1 -0
  214. package/dist/init/claude-md-template.js +72 -0
  215. package/dist/init/claude-md-template.js.map +1 -0
  216. package/dist/intelligence/backend/cadence.d.ts +21 -0
  217. package/dist/intelligence/backend/cadence.d.ts.map +1 -0
  218. package/dist/intelligence/backend/cadence.js +127 -0
  219. package/dist/intelligence/backend/cadence.js.map +1 -0
  220. package/dist/intelligence/context.d.ts +11 -0
  221. package/dist/intelligence/context.d.ts.map +1 -0
  222. package/dist/intelligence/context.js +197 -0
  223. package/dist/intelligence/context.js.map +1 -0
  224. package/dist/intelligence/graph-decision.d.ts +9 -0
  225. package/dist/intelligence/graph-decision.d.ts.map +1 -0
  226. package/dist/intelligence/graph-decision.js +55 -0
  227. package/dist/intelligence/graph-decision.js.map +1 -0
  228. package/dist/intelligence/inspect.d.ts +9 -0
  229. package/dist/intelligence/inspect.d.ts.map +1 -0
  230. package/dist/intelligence/inspect.js +93 -0
  231. package/dist/intelligence/inspect.js.map +1 -0
  232. package/dist/intelligence/milestone.d.ts +40 -0
  233. package/dist/intelligence/milestone.d.ts.map +1 -0
  234. package/dist/intelligence/milestone.js +312 -0
  235. package/dist/intelligence/milestone.js.map +1 -0
  236. package/dist/intelligence/recommend.d.ts +20 -0
  237. package/dist/intelligence/recommend.d.ts.map +1 -0
  238. package/dist/intelligence/recommend.js +185 -0
  239. package/dist/intelligence/recommend.js.map +1 -0
  240. package/dist/intelligence/render-assumption-detail.d.ts +3 -0
  241. package/dist/intelligence/render-assumption-detail.d.ts.map +1 -0
  242. package/dist/intelligence/render-assumption-detail.js +16 -0
  243. package/dist/intelligence/render-assumption-detail.js.map +1 -0
  244. package/dist/intelligence/render-assumption.d.ts +3 -0
  245. package/dist/intelligence/render-assumption.d.ts.map +1 -0
  246. package/dist/intelligence/render-assumption.js +37 -0
  247. package/dist/intelligence/render-assumption.js.map +1 -0
  248. package/dist/intelligence/render-context.d.ts +3 -0
  249. package/dist/intelligence/render-context.d.ts.map +1 -0
  250. package/dist/intelligence/render-context.js +92 -0
  251. package/dist/intelligence/render-context.js.map +1 -0
  252. package/dist/intelligence/render-decision-detail.d.ts +3 -0
  253. package/dist/intelligence/render-decision-detail.d.ts.map +1 -0
  254. package/dist/intelligence/render-decision-detail.js +30 -0
  255. package/dist/intelligence/render-decision-detail.js.map +1 -0
  256. package/dist/intelligence/render-decision-graph.d.ts +3 -0
  257. package/dist/intelligence/render-decision-graph.d.ts.map +1 -0
  258. package/dist/intelligence/render-decision-graph.js +49 -0
  259. package/dist/intelligence/render-decision-graph.js.map +1 -0
  260. package/dist/intelligence/render-decision.d.ts +3 -0
  261. package/dist/intelligence/render-decision.d.ts.map +1 -0
  262. package/dist/intelligence/render-decision.js +45 -0
  263. package/dist/intelligence/render-decision.js.map +1 -0
  264. package/dist/intelligence/render-inspection.d.ts +3 -0
  265. package/dist/intelligence/render-inspection.d.ts.map +1 -0
  266. package/dist/intelligence/render-inspection.js +69 -0
  267. package/dist/intelligence/render-inspection.js.map +1 -0
  268. package/dist/intelligence/render-intelligence-audit.d.ts +5 -0
  269. package/dist/intelligence/render-intelligence-audit.d.ts.map +1 -0
  270. package/dist/intelligence/render-intelligence-audit.js +93 -0
  271. package/dist/intelligence/render-intelligence-audit.js.map +1 -0
  272. package/dist/intelligence/render-intelligence-stats.d.ts +6 -0
  273. package/dist/intelligence/render-intelligence-stats.d.ts.map +1 -0
  274. package/dist/intelligence/render-intelligence-stats.js +76 -0
  275. package/dist/intelligence/render-intelligence-stats.js.map +1 -0
  276. package/dist/intelligence/render-milestone.d.ts +3 -0
  277. package/dist/intelligence/render-milestone.d.ts.map +1 -0
  278. package/dist/intelligence/render-milestone.js +80 -0
  279. package/dist/intelligence/render-milestone.js.map +1 -0
  280. package/dist/intelligence/render-recommend.d.ts +3 -0
  281. package/dist/intelligence/render-recommend.d.ts.map +1 -0
  282. package/dist/intelligence/render-recommend.js +62 -0
  283. package/dist/intelligence/render-recommend.js.map +1 -0
  284. package/dist/intelligence/render-recommendation-detail.d.ts +7 -0
  285. package/dist/intelligence/render-recommendation-detail.d.ts.map +1 -0
  286. package/dist/intelligence/render-recommendation-detail.js +93 -0
  287. package/dist/intelligence/render-recommendation-detail.js.map +1 -0
  288. package/dist/intelligence/render.d.ts +3 -0
  289. package/dist/intelligence/render.d.ts.map +1 -0
  290. package/dist/intelligence/render.js +57 -0
  291. package/dist/intelligence/render.js.map +1 -0
  292. package/dist/intelligence/scan.d.ts +3 -0
  293. package/dist/intelligence/scan.d.ts.map +1 -0
  294. package/dist/intelligence/scan.js +103 -0
  295. package/dist/intelligence/scan.js.map +1 -0
  296. package/dist/intelligence/store.d.ts +143 -0
  297. package/dist/intelligence/store.d.ts.map +1 -0
  298. package/dist/intelligence/store.js +701 -0
  299. package/dist/intelligence/store.js.map +1 -0
  300. package/dist/notify/code-review.d.ts +34 -0
  301. package/dist/notify/code-review.d.ts.map +1 -0
  302. package/dist/notify/code-review.js +56 -0
  303. package/dist/notify/code-review.js.map +1 -0
  304. package/dist/notify/collect.d.ts +31 -0
  305. package/dist/notify/collect.d.ts.map +1 -0
  306. package/dist/notify/collect.js +127 -0
  307. package/dist/notify/collect.js.map +1 -0
  308. package/dist/notify/emit-unconverged.d.ts +26 -0
  309. package/dist/notify/emit-unconverged.d.ts.map +1 -0
  310. package/dist/notify/emit-unconverged.js +31 -0
  311. package/dist/notify/emit-unconverged.js.map +1 -0
  312. package/dist/notify/factory.d.ts +12 -0
  313. package/dist/notify/factory.d.ts.map +1 -0
  314. package/dist/notify/factory.js +29 -0
  315. package/dist/notify/factory.js.map +1 -0
  316. package/dist/notify/file.d.ts +13 -0
  317. package/dist/notify/file.d.ts.map +1 -0
  318. package/dist/notify/file.js +21 -0
  319. package/dist/notify/file.js.map +1 -0
  320. package/dist/notify/loop-violation.d.ts +10 -0
  321. package/dist/notify/loop-violation.d.ts.map +1 -0
  322. package/dist/notify/loop-violation.js +46 -0
  323. package/dist/notify/loop-violation.js.map +1 -0
  324. package/dist/notify/notifier.d.ts +13 -0
  325. package/dist/notify/notifier.d.ts.map +1 -0
  326. package/dist/notify/notifier.js +2 -0
  327. package/dist/notify/notifier.js.map +1 -0
  328. package/dist/notify/null.d.ts +11 -0
  329. package/dist/notify/null.d.ts.map +1 -0
  330. package/dist/notify/null.js +11 -0
  331. package/dist/notify/null.js.map +1 -0
  332. package/dist/notify/plan-review.d.ts +20 -0
  333. package/dist/notify/plan-review.d.ts.map +1 -0
  334. package/dist/notify/plan-review.js +15 -0
  335. package/dist/notify/plan-review.js.map +1 -0
  336. package/dist/notify/skill-audit.d.ts +18 -0
  337. package/dist/notify/skill-audit.d.ts.map +1 -0
  338. package/dist/notify/skill-audit.js +33 -0
  339. package/dist/notify/skill-audit.js.map +1 -0
  340. package/dist/notify/spec-review.d.ts +20 -0
  341. package/dist/notify/spec-review.d.ts.map +1 -0
  342. package/dist/notify/spec-review.js +15 -0
  343. package/dist/notify/spec-review.js.map +1 -0
  344. package/dist/notify/stderr.d.ts +17 -0
  345. package/dist/notify/stderr.d.ts.map +1 -0
  346. package/dist/notify/stderr.js +17 -0
  347. package/dist/notify/stderr.js.map +1 -0
  348. package/dist/notify/webhook.d.ts +33 -0
  349. package/dist/notify/webhook.d.ts.map +1 -0
  350. package/dist/notify/webhook.js +55 -0
  351. package/dist/notify/webhook.js.map +1 -0
  352. package/dist/parse/draft-parser.d.ts +3 -0
  353. package/dist/parse/draft-parser.d.ts.map +1 -0
  354. package/dist/parse/draft-parser.js +99 -0
  355. package/dist/parse/draft-parser.js.map +1 -0
  356. package/dist/parse/draft-scaffold.d.ts +14 -0
  357. package/dist/parse/draft-scaffold.d.ts.map +1 -0
  358. package/dist/parse/draft-scaffold.js +31 -0
  359. package/dist/parse/draft-scaffold.js.map +1 -0
  360. package/dist/parse/spec-parser.d.ts +3 -0
  361. package/dist/parse/spec-parser.d.ts.map +1 -0
  362. package/dist/parse/spec-parser.js +68 -0
  363. package/dist/parse/spec-parser.js.map +1 -0
  364. package/dist/parse/summary-writer.d.ts +3 -0
  365. package/dist/parse/summary-writer.d.ts.map +1 -0
  366. package/dist/parse/summary-writer.js +41 -0
  367. package/dist/parse/summary-writer.js.map +1 -0
  368. package/dist/progress.d.ts +7 -0
  369. package/dist/progress.d.ts.map +1 -0
  370. package/dist/progress.js +37 -0
  371. package/dist/progress.js.map +1 -0
  372. package/dist/render/state-md.d.ts +3 -0
  373. package/dist/render/state-md.d.ts.map +1 -0
  374. package/dist/render/state-md.js +33 -0
  375. package/dist/render/state-md.js.map +1 -0
  376. package/dist/state/atomic-write.d.ts +3 -0
  377. package/dist/state/atomic-write.d.ts.map +1 -0
  378. package/dist/state/atomic-write.js +52 -0
  379. package/dist/state/atomic-write.js.map +1 -0
  380. package/dist/state/backend.d.ts +13 -0
  381. package/dist/state/backend.d.ts.map +1 -0
  382. package/dist/state/backend.js +2 -0
  383. package/dist/state/backend.js.map +1 -0
  384. package/dist/state/simple.d.ts +18 -0
  385. package/dist/state/simple.d.ts.map +1 -0
  386. package/dist/state/simple.js +67 -0
  387. package/dist/state/simple.js.map +1 -0
  388. package/dist/status.d.ts +47 -0
  389. package/dist/status.d.ts.map +1 -0
  390. package/dist/status.js +209 -0
  391. package/dist/status.js.map +1 -0
  392. package/dist/verify/anthropic-verifier.d.ts +28 -0
  393. package/dist/verify/anthropic-verifier.d.ts.map +1 -0
  394. package/dist/verify/anthropic-verifier.js +109 -0
  395. package/dist/verify/anthropic-verifier.js.map +1 -0
  396. package/dist/verify/code-review-factory.d.ts +103 -0
  397. package/dist/verify/code-review-factory.d.ts.map +1 -0
  398. package/dist/verify/code-review-factory.js +11 -0
  399. package/dist/verify/code-review-factory.js.map +1 -0
  400. package/dist/verify/code-review.d.ts +65 -0
  401. package/dist/verify/code-review.d.ts.map +1 -0
  402. package/dist/verify/code-review.js +189 -0
  403. package/dist/verify/code-review.js.map +1 -0
  404. package/dist/verify/converge.d.ts +14 -0
  405. package/dist/verify/converge.d.ts.map +1 -0
  406. package/dist/verify/converge.js +17 -0
  407. package/dist/verify/converge.js.map +1 -0
  408. package/dist/verify/coverage.d.ts +31 -0
  409. package/dist/verify/coverage.d.ts.map +1 -0
  410. package/dist/verify/coverage.js +125 -0
  411. package/dist/verify/coverage.js.map +1 -0
  412. package/dist/verify/factory.d.ts +107 -0
  413. package/dist/verify/factory.d.ts.map +1 -0
  414. package/dist/verify/factory.js +17 -0
  415. package/dist/verify/factory.js.map +1 -0
  416. package/dist/verify/interactive.d.ts +22 -0
  417. package/dist/verify/interactive.d.ts.map +1 -0
  418. package/dist/verify/interactive.js +61 -0
  419. package/dist/verify/interactive.js.map +1 -0
  420. package/dist/verify/local-client.d.ts +13 -0
  421. package/dist/verify/local-client.d.ts.map +1 -0
  422. package/dist/verify/local-client.js +73 -0
  423. package/dist/verify/local-client.js.map +1 -0
  424. package/dist/verify/mock-verifier.d.ts +16 -0
  425. package/dist/verify/mock-verifier.d.ts.map +1 -0
  426. package/dist/verify/mock-verifier.js +30 -0
  427. package/dist/verify/mock-verifier.js.map +1 -0
  428. package/dist/verify/per-task-factory.d.ts +103 -0
  429. package/dist/verify/per-task-factory.d.ts.map +1 -0
  430. package/dist/verify/per-task-factory.js +11 -0
  431. package/dist/verify/per-task-factory.js.map +1 -0
  432. package/dist/verify/per-task.d.ts +69 -0
  433. package/dist/verify/per-task.d.ts.map +1 -0
  434. package/dist/verify/per-task.js +154 -0
  435. package/dist/verify/per-task.js.map +1 -0
  436. package/dist/verify/plan-review-factory.d.ts +103 -0
  437. package/dist/verify/plan-review-factory.d.ts.map +1 -0
  438. package/dist/verify/plan-review-factory.js +11 -0
  439. package/dist/verify/plan-review-factory.js.map +1 -0
  440. package/dist/verify/plan-review.d.ts +67 -0
  441. package/dist/verify/plan-review.d.ts.map +1 -0
  442. package/dist/verify/plan-review.js +196 -0
  443. package/dist/verify/plan-review.js.map +1 -0
  444. package/dist/verify/prompter.d.ts +40 -0
  445. package/dist/verify/prompter.d.ts.map +1 -0
  446. package/dist/verify/prompter.js +48 -0
  447. package/dist/verify/prompter.js.map +1 -0
  448. package/dist/verify/security-audit-factory.d.ts +103 -0
  449. package/dist/verify/security-audit-factory.d.ts.map +1 -0
  450. package/dist/verify/security-audit-factory.js +11 -0
  451. package/dist/verify/security-audit-factory.js.map +1 -0
  452. package/dist/verify/security-audit.d.ts +63 -0
  453. package/dist/verify/security-audit.d.ts.map +1 -0
  454. package/dist/verify/security-audit.js +196 -0
  455. package/dist/verify/security-audit.js.map +1 -0
  456. package/dist/verify/skill-match.d.ts +10 -0
  457. package/dist/verify/skill-match.d.ts.map +1 -0
  458. package/dist/verify/skill-match.js +15 -0
  459. package/dist/verify/skill-match.js.map +1 -0
  460. package/dist/verify/spec-review-factory.d.ts +103 -0
  461. package/dist/verify/spec-review-factory.d.ts.map +1 -0
  462. package/dist/verify/spec-review-factory.js +11 -0
  463. package/dist/verify/spec-review-factory.js.map +1 -0
  464. package/dist/verify/spec-review.d.ts +63 -0
  465. package/dist/verify/spec-review.d.ts.map +1 -0
  466. package/dist/verify/spec-review.js +182 -0
  467. package/dist/verify/spec-review.js.map +1 -0
  468. package/dist/verify/verifier-factory.d.ts +45 -0
  469. package/dist/verify/verifier-factory.d.ts.map +1 -0
  470. package/dist/verify/verifier-factory.js +38 -0
  471. package/dist/verify/verifier-factory.js.map +1 -0
  472. package/dist/verify/verifier.d.ts +63 -0
  473. package/dist/verify/verifier.d.ts.map +1 -0
  474. package/dist/verify/verifier.js +32 -0
  475. package/dist/verify/verifier.js.map +1 -0
  476. package/package.json +62 -0
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Abstract one-line prompt. `ask(question)` writes the question to the output
3
+ * stream and resolves with the user's reply (without trailing newline).
4
+ *
5
+ * Production: `StdinPrompter` over `readline/promises`. Tests: `ScriptedPrompter`.
6
+ */
7
+ export interface Prompter {
8
+ ask(question: string): Promise<string>;
9
+ close?(): Promise<void> | void;
10
+ }
11
+ export interface StdinPrompterOptions {
12
+ input?: NodeJS.ReadableStream & {
13
+ isTTY?: boolean;
14
+ };
15
+ output?: NodeJS.WritableStream;
16
+ }
17
+ /**
18
+ * Real prompter backed by stdin/stdout. Refuses to construct when the input
19
+ * stream is not a TTY (CI, piped invocations) — the caller must bypass via
20
+ * `--no-interactive` or fall through to other gates.
21
+ */
22
+ export declare class StdinPrompter implements Prompter {
23
+ private readonly rl;
24
+ constructor(opts?: StdinPrompterOptions);
25
+ ask(question: string): Promise<string>;
26
+ close(): void;
27
+ }
28
+ /**
29
+ * Deterministic prompter for tests. Returns pre-seeded answers in order;
30
+ * throws on exhaustion so tests fail fast when the prompt count drifts.
31
+ */
32
+ export declare class ScriptedPrompter implements Prompter {
33
+ private readonly answers;
34
+ private cursor;
35
+ constructor(answers: string[]);
36
+ ask(_question: string): Promise<string>;
37
+ /** Indexed for assertions. */
38
+ get used(): number;
39
+ }
40
+ //# sourceMappingURL=prompter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompter.d.ts","sourceRoot":"","sources":["../../src/verify/prompter.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,GAAG;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;CAChC;AAED;;;;GAIG;AACH,qBAAa,aAAc,YAAW,QAAQ;IAC5C,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAY;gBAEnB,IAAI,GAAE,oBAAyB;IAWrC,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK5C,KAAK,IAAI,IAAI;CAGd;AAED;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,QAAQ;IAEnC,OAAO,CAAC,QAAQ,CAAC,OAAO;IADpC,OAAO,CAAC,MAAM,CAAK;gBACU,OAAO,EAAE,MAAM,EAAE;IAExC,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAW7C,8BAA8B;IAC9B,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
@@ -0,0 +1,48 @@
1
+ import { createInterface } from 'node:readline/promises';
2
+ /**
3
+ * Real prompter backed by stdin/stdout. Refuses to construct when the input
4
+ * stream is not a TTY (CI, piped invocations) — the caller must bypass via
5
+ * `--no-interactive` or fall through to other gates.
6
+ */
7
+ export class StdinPrompter {
8
+ rl;
9
+ constructor(opts = {}) {
10
+ const input = opts.input ?? process.stdin;
11
+ const output = opts.output ?? process.stdout;
12
+ if (input === process.stdin && !process.stdin.isTTY) {
13
+ throw new Error('StdinPrompter: stdin is not a TTY. Use --no-interactive to bypass or pipe answers via a scripted prompter.');
14
+ }
15
+ this.rl = createInterface({ input, output });
16
+ }
17
+ async ask(question) {
18
+ const answer = await this.rl.question(question);
19
+ return answer;
20
+ }
21
+ close() {
22
+ this.rl.close();
23
+ }
24
+ }
25
+ /**
26
+ * Deterministic prompter for tests. Returns pre-seeded answers in order;
27
+ * throws on exhaustion so tests fail fast when the prompt count drifts.
28
+ */
29
+ export class ScriptedPrompter {
30
+ answers;
31
+ cursor = 0;
32
+ constructor(answers) {
33
+ this.answers = answers;
34
+ }
35
+ async ask(_question) {
36
+ if (this.cursor >= this.answers.length) {
37
+ throw new Error(`ScriptedPrompter exhausted after ${this.answers.length} answer(s). Last question: ${_question}`);
38
+ }
39
+ const answer = this.answers[this.cursor];
40
+ this.cursor += 1;
41
+ return answer;
42
+ }
43
+ /** Indexed for assertions. */
44
+ get used() {
45
+ return this.cursor;
46
+ }
47
+ }
48
+ //# sourceMappingURL=prompter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompter.js","sourceRoot":"","sources":["../../src/verify/prompter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAkB,MAAM,wBAAwB,CAAC;AAkBzE;;;;GAIG;AACH,MAAM,OAAO,aAAa;IACP,EAAE,CAAY;IAE/B,YAAY,OAA6B,EAAE;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAK,OAAO,CAAC,KAAqD,CAAC;QAC3F,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;QAC7C,IAAI,KAAK,KAAK,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CACb,4GAA4G,CAC7G,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,QAAgB;QACxB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IAEE;IADrB,MAAM,GAAG,CAAC,CAAC;IACnB,YAA6B,OAAiB;QAAjB,YAAO,GAAP,OAAO,CAAU;IAAG,CAAC;IAElD,KAAK,CAAC,GAAG,CAAC,SAAiB;QACzB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CACb,oCAAoC,IAAI,CAAC,OAAO,CAAC,MAAM,8BAA8B,SAAS,EAAE,CACjG,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAE,CAAC;QAC1C,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QACjB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,8BAA8B;IAC9B,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF"}
@@ -0,0 +1,103 @@
1
+ import { type SecurityAuditVerifier } from './security-audit.js';
2
+ import { type VerifierSelectOptions } from './verifier-factory.js';
3
+ /** @deprecated alias of `VerifierSelectOptions` (kept for API stability). */
4
+ export type SelectSecurityAuditVerifierOptions = VerifierSelectOptions;
5
+ /** Picks the security-audit verifier given config + env (Phase 25.2). */
6
+ export declare const selectSecurityAuditVerifier: (config: Pick<{
7
+ schemaVersion: 1;
8
+ profile: "strict" | "standard" | "auto";
9
+ loopEnforcement: "strict" | "soft" | "reminder";
10
+ acDiscipline: "strict" | "tier-scaled" | "optional";
11
+ workstreamBackend: string;
12
+ ruleProvider: string;
13
+ subagentPolicy: {
14
+ contextBudgetThreshold: number;
15
+ largeTaskTokens: number;
16
+ mechanicalBatchMin: number;
17
+ };
18
+ modelPerClass: {
19
+ standard: string;
20
+ mechanical: string;
21
+ complex: string;
22
+ drafting: string;
23
+ };
24
+ commitCadence: "task" | "draft" | "manual";
25
+ templates: {
26
+ dir: string;
27
+ overrides: string[];
28
+ };
29
+ hooks: {
30
+ sessionStart: boolean;
31
+ stopReminder: boolean;
32
+ preToolUseBuildGate: boolean;
33
+ userPromptSubmit: boolean;
34
+ };
35
+ packs: {
36
+ enabled: string[];
37
+ disabled: string[];
38
+ };
39
+ telemetry: {
40
+ tokenUtilization: boolean;
41
+ skillInvocations: boolean;
42
+ remoteOptIn: boolean;
43
+ };
44
+ skillAudit: {
45
+ required: string[];
46
+ };
47
+ convergence: {
48
+ maxAttempts: number;
49
+ };
50
+ specReview: {
51
+ provider: "mock" | "anthropic" | "local";
52
+ model?: string | undefined;
53
+ };
54
+ tier: {
55
+ standard: {
56
+ maxTasks: number;
57
+ maxFiles: number;
58
+ };
59
+ complex: {
60
+ maxTasks: number;
61
+ minTasks: number;
62
+ };
63
+ quickFix: {
64
+ maxTasks: number;
65
+ maxFiles: number;
66
+ };
67
+ };
68
+ verification: {
69
+ testGlobs: string[];
70
+ testCommand?: string | undefined;
71
+ };
72
+ verifier: {
73
+ provider: "mock" | "anthropic" | "local";
74
+ model?: string | undefined;
75
+ };
76
+ perTaskVerifier: {
77
+ provider: "mock" | "anthropic" | "local";
78
+ model?: string | undefined;
79
+ };
80
+ codeReview: {
81
+ provider: "mock" | "anthropic" | "local";
82
+ model?: string | undefined;
83
+ };
84
+ planReview: {
85
+ provider: "mock" | "anthropic" | "local";
86
+ model?: string | undefined;
87
+ };
88
+ securityAudit: {
89
+ provider: "mock" | "anthropic" | "local";
90
+ model?: string | undefined;
91
+ };
92
+ notify: {
93
+ transport: "stderr" | "file" | "none" | "webhook";
94
+ file?: string | undefined;
95
+ webhook?: {
96
+ url: string;
97
+ headers?: Record<string, string> | undefined;
98
+ timeoutMs?: number | undefined;
99
+ } | undefined;
100
+ };
101
+ $schema?: string | undefined;
102
+ }, "securityAudit"> | null, opts?: VerifierSelectOptions) => SecurityAuditVerifier;
103
+ //# sourceMappingURL=security-audit-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security-audit-factory.d.ts","sourceRoot":"","sources":["../../src/verify/security-audit-factory.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,uBAAuB,CAAC;AAE/B,6EAA6E;AAC7E,MAAM,MAAM,kCAAkC,GAAG,qBAAqB,CAAC;AAEvE,yEAAyE;AACzE,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAU0xY,CAAC;;;;;;;;;;;;;;;;;;mBAAoY,CAAC;;;;aAA4G,CAAC;;;;aAAmH,CAAC;;;;aAA8G,CAAC;;;;aAA8G,CAAC;;;;aAAiH,CAAC;;;;YAAkH,CAAC;eAAqC,CAAC;;mBAAgD,CAAC;qBAA2D,CAAC;;;;kFAD7/a,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { AnthropicSecurityAuditVerifier, LocalSecurityAuditVerifier, MockSecurityAuditVerifier, } from './security-audit.js';
2
+ import { createVerifierFactory, } from './verifier-factory.js';
3
+ /** Picks the security-audit verifier given config + env (Phase 25.2). */
4
+ export const selectSecurityAuditVerifier = createVerifierFactory({
5
+ label: 'security-audit',
6
+ read: (c) => c?.securityAudit,
7
+ mock: () => new MockSecurityAuditVerifier(),
8
+ anthropic: (o) => new AnthropicSecurityAuditVerifier(o),
9
+ local: (o) => new LocalSecurityAuditVerifier(o),
10
+ });
11
+ //# sourceMappingURL=security-audit-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security-audit-factory.js","sourceRoot":"","sources":["../../src/verify/security-audit-factory.ts"],"names":[],"mappings":"AACA,OAAO,EACL,8BAA8B,EAC9B,0BAA0B,EAC1B,yBAAyB,GAE1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,qBAAqB,GAEtB,MAAM,uBAAuB,CAAC;AAK/B,yEAAyE;AACzE,MAAM,CAAC,MAAM,2BAA2B,GAAG,qBAAqB,CAG9D;IACA,KAAK,EAAE,gBAAgB;IACvB,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,aAAa;IAC7B,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,yBAAyB,EAAE;IAC3C,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,8BAA8B,CAAC,CAAC,CAAC;IACvD,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,0BAA0B,CAAC,CAAC,CAAC;CAChD,CAAC,CAAC"}
@@ -0,0 +1,63 @@
1
+ import Anthropic from '@anthropic-ai/sdk';
2
+ import type { Finding } from '@manehorizons/cadence-types';
3
+ /**
4
+ * Phase 25.2 — security-audit verifier. The final, most expensive gate:
5
+ * fires at `cadence settle run` after code-review and before SUMMARY write
6
+ * when `'security-audit'` is in the effective gate set (strict×complex
7
+ * only — the rarest cell). CRITICAL findings refuse settle unless
8
+ * `--force` / `--allow-security-audit-failure`. All findings (any
9
+ * severity) land on `SUMMARY.securityAudit`.
10
+ */
11
+ export interface SecurityAuditInput {
12
+ /** Touched files (union across draft tasks). Scopes the diff + prompt. */
13
+ files: string[];
14
+ /** Unified diff (`git diff HEAD -- <files>`). May be empty. */
15
+ diff: string;
16
+ }
17
+ export interface SecurityAuditResult {
18
+ /** Flat finding list (not per-file — security issues span files). */
19
+ findings: Finding[];
20
+ provider: string;
21
+ model?: string;
22
+ }
23
+ export interface SecurityAuditVerifier {
24
+ readonly name: string;
25
+ verify(input: SecurityAuditInput): Promise<SecurityAuditResult>;
26
+ }
27
+ /**
28
+ * Deterministic mock — walks the unified diff and flags every added line
29
+ * carrying a hardcoded `Authorization:` header value or a JWT-shaped string
30
+ * as CRITICAL. Empty diff (or no matches) returns no findings. The rule is
31
+ * intentionally narrow: real OWASP review lives in the Anthropic provider.
32
+ */
33
+ export declare class MockSecurityAuditVerifier implements SecurityAuditVerifier {
34
+ readonly name = "mock";
35
+ verify(input: SecurityAuditInput): Promise<SecurityAuditResult>;
36
+ }
37
+ export interface AnthropicSecurityAuditVerifierOptions {
38
+ apiKey?: string;
39
+ model?: string;
40
+ maxTokens?: number;
41
+ /** Inject a client for tests; production callers should omit this. */
42
+ client?: Anthropic;
43
+ }
44
+ export declare class AnthropicSecurityAuditVerifier implements SecurityAuditVerifier {
45
+ readonly name = "anthropic";
46
+ private readonly client;
47
+ private readonly model;
48
+ private readonly maxTokens;
49
+ constructor(opts?: AnthropicSecurityAuditVerifierOptions);
50
+ verify(input: SecurityAuditInput): Promise<SecurityAuditResult>;
51
+ }
52
+ export interface LocalSecurityAuditVerifierOptions {
53
+ baseURL: string;
54
+ model: string;
55
+ transport?: typeof fetch;
56
+ }
57
+ export declare class LocalSecurityAuditVerifier implements SecurityAuditVerifier {
58
+ private readonly o;
59
+ readonly name = "local";
60
+ constructor(o: LocalSecurityAuditVerifierOptions);
61
+ verify(input: SecurityAuditInput): Promise<SecurityAuditResult>;
62
+ }
63
+ //# sourceMappingURL=security-audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security-audit.d.ts","sourceRoot":"","sources":["../../src/verify/security-audit.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAG1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAG3D;;;;;;;GAOG;AAEH,MAAM,WAAW,kBAAkB;IACjC,0EAA0E;IAC1E,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,qEAAqE;IACrE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACjE;AAQD;;;;;GAKG;AACH,qBAAa,yBAA0B,YAAW,qBAAqB;IACrE,QAAQ,CAAC,IAAI,UAAU;IAEjB,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CA+CtE;AA2BD,MAAM,WAAW,qCAAqC;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,qBAAa,8BACX,YAAW,qBAAqB;IAEhC,QAAQ,CAAC,IAAI,eAAe;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,IAAI,GAAE,qCAA0C;IAgBtD,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAiDtE;AAED,MAAM,WAAW,iCAAiC;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,qBAAa,0BAA2B,YAAW,qBAAqB;IAE1D,OAAO,CAAC,QAAQ,CAAC,CAAC;IAD9B,QAAQ,CAAC,IAAI,WAAW;gBACK,CAAC,EAAE,iCAAiC;IAE3D,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAsBtE"}
@@ -0,0 +1,196 @@
1
+ import Anthropic from '@anthropic-ai/sdk';
2
+ import { zodOutputFormat } from '@anthropic-ai/sdk/helpers/zod';
3
+ import { z } from 'zod/v4';
4
+ import { localChatJSON } from './local-client.js';
5
+ /** `Authorization:` header carrying a literal credential value. */
6
+ const AUTH_HEADER_RE = /authorization['"\s:=]+\s*(?:bearer|basic|token)\s+\S+/i;
7
+ /** A JWT-shaped string: three dot-separated base64url segments after `eyJ`. */
8
+ const JWT_RE = /eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/;
9
+ /**
10
+ * Deterministic mock — walks the unified diff and flags every added line
11
+ * carrying a hardcoded `Authorization:` header value or a JWT-shaped string
12
+ * as CRITICAL. Empty diff (or no matches) returns no findings. The rule is
13
+ * intentionally narrow: real OWASP review lives in the Anthropic provider.
14
+ */
15
+ export class MockSecurityAuditVerifier {
16
+ name = 'mock';
17
+ async verify(input) {
18
+ const findings = [];
19
+ if (input.diff.trim().length === 0) {
20
+ return { findings, provider: this.name };
21
+ }
22
+ let inFile = false;
23
+ let postLine = 0;
24
+ for (const raw of input.diff.split('\n')) {
25
+ if (raw.startsWith('+++ ')) {
26
+ const m = /^\+\+\+\s+(?:b\/)?(.+?)\s*$/.exec(raw);
27
+ inFile = !!(m && m[1] && m[1] !== '/dev/null');
28
+ continue;
29
+ }
30
+ if (raw.startsWith('--- '))
31
+ continue;
32
+ if (raw.startsWith('@@')) {
33
+ const m = /\+(\d+)(?:,\d+)?/.exec(raw);
34
+ postLine = m ? Number.parseInt(m[1], 10) : 0;
35
+ continue;
36
+ }
37
+ if (!inFile || raw.startsWith('++'))
38
+ continue;
39
+ if (raw.startsWith('+')) {
40
+ const body = raw.slice(1);
41
+ if (AUTH_HEADER_RE.test(body)) {
42
+ findings.push({
43
+ severity: 'critical',
44
+ message: 'hardcoded Authorization header',
45
+ line: postLine,
46
+ });
47
+ }
48
+ if (JWT_RE.test(body)) {
49
+ findings.push({
50
+ severity: 'critical',
51
+ message: 'hardcoded JWT-shaped credential',
52
+ line: postLine,
53
+ });
54
+ }
55
+ postLine += 1;
56
+ }
57
+ else if (raw.startsWith('-')) {
58
+ // pre-image line — does not advance the post-image counter
59
+ }
60
+ else {
61
+ postLine += 1;
62
+ }
63
+ }
64
+ return { findings, provider: this.name };
65
+ }
66
+ }
67
+ const FindingResponseSchema = z.object({
68
+ severity: z.enum(['critical', 'high', 'medium', 'low']),
69
+ message: z.string(),
70
+ line: z.number().int().positive().optional(),
71
+ });
72
+ const SecurityAuditResponseSchema = z.object({
73
+ findings: z.array(FindingResponseSchema),
74
+ });
75
+ const SYSTEM_PROMPT = `You are an independent application security auditor for an AI-assisted development tool called CADENCE.
76
+
77
+ You receive the touched files and unified diff for a development phase. Perform an OWASP-aware security pass. Prioritize:
78
+ - hardcoded secrets / credentials / tokens / private keys in source → critical
79
+ - injection (SQL, command, path traversal, SSRF, template) reachable from untrusted input → critical
80
+ - broken authn/authz, missing access checks on sensitive operations → critical
81
+ - unsafe deserialization, prototype pollution, insecure crypto / weak randomness for security use → high
82
+ - sensitive data in logs, missing input validation that is exploitable → high
83
+ - defense-in-depth gaps that are not directly exploitable → medium
84
+ - hardening nits → low
85
+
86
+ Use severities exactly: "critical" | "high" | "medium" | "low". Only report issues you can tie to the diff. If there are none, return an empty findings array. Keep each message ≤ 200 characters. Return strict JSON matching the requested schema.`;
87
+ const DEFAULT_MODEL = 'claude-sonnet-4-6';
88
+ const DEFAULT_MAX_TOKENS = 8_000;
89
+ export class AnthropicSecurityAuditVerifier {
90
+ name = 'anthropic';
91
+ client;
92
+ model;
93
+ maxTokens;
94
+ constructor(opts = {}) {
95
+ if (opts.client) {
96
+ this.client = opts.client;
97
+ }
98
+ else {
99
+ const apiKey = opts.apiKey ?? process.env.ANTHROPIC_API_KEY;
100
+ if (!apiKey) {
101
+ throw new Error('AnthropicSecurityAuditVerifier requires an API key. Set ANTHROPIC_API_KEY or pass `apiKey` / `client`.');
102
+ }
103
+ this.client = new Anthropic({ apiKey });
104
+ }
105
+ this.model = opts.model ?? DEFAULT_MODEL;
106
+ this.maxTokens = opts.maxTokens ?? DEFAULT_MAX_TOKENS;
107
+ }
108
+ async verify(input) {
109
+ if (input.files.length === 0 && input.diff.trim().length === 0) {
110
+ return { findings: [], provider: this.name, model: this.model };
111
+ }
112
+ const userMessage = formatUserMessage(input);
113
+ let response;
114
+ try {
115
+ response = await this.client.messages.parse({
116
+ model: this.model,
117
+ max_tokens: this.maxTokens,
118
+ system: [
119
+ {
120
+ type: 'text',
121
+ text: SYSTEM_PROMPT,
122
+ cache_control: { type: 'ephemeral' },
123
+ },
124
+ ],
125
+ output_config: {
126
+ format: zodOutputFormat(SecurityAuditResponseSchema),
127
+ },
128
+ messages: [{ role: 'user', content: userMessage }],
129
+ });
130
+ }
131
+ catch (err) {
132
+ if (err instanceof Anthropic.APIError) {
133
+ throw new Error(`AnthropicSecurityAuditVerifier API error (${err.status ?? 'unknown'}): ${err.message}`);
134
+ }
135
+ throw err;
136
+ }
137
+ const parsed = response.parsed_output;
138
+ if (!parsed) {
139
+ throw new Error('AnthropicSecurityAuditVerifier received no parseable output from the model (response.parsed_output was null/undefined).');
140
+ }
141
+ const findings = [];
142
+ for (const f of parsed.findings) {
143
+ findings.push({
144
+ severity: f.severity,
145
+ message: f.message,
146
+ ...(f.line !== undefined ? { line: f.line } : {}),
147
+ });
148
+ }
149
+ return { findings, provider: this.name, model: this.model };
150
+ }
151
+ }
152
+ export class LocalSecurityAuditVerifier {
153
+ o;
154
+ name = 'local';
155
+ constructor(o) {
156
+ this.o = o;
157
+ }
158
+ async verify(input) {
159
+ if (input.files.length === 0 && input.diff.trim().length === 0) {
160
+ return { findings: [], provider: this.name, model: this.o.model };
161
+ }
162
+ const parsed = await localChatJSON({
163
+ baseURL: this.o.baseURL,
164
+ model: this.o.model,
165
+ system: SYSTEM_PROMPT,
166
+ user: formatUserMessage(input),
167
+ schema: SecurityAuditResponseSchema,
168
+ ...(this.o.transport ? { transport: this.o.transport } : {}),
169
+ });
170
+ const findings = [];
171
+ for (const f of parsed.findings) {
172
+ findings.push({
173
+ severity: f.severity,
174
+ message: f.message,
175
+ ...(f.line !== undefined ? { line: f.line } : {}),
176
+ });
177
+ }
178
+ return { findings, provider: this.name, model: this.o.model };
179
+ }
180
+ }
181
+ function formatUserMessage(input) {
182
+ const fileList = input.files.length > 0
183
+ ? input.files.map((f) => `- ${f}`).join('\n')
184
+ : '(none)';
185
+ const diffSection = input.diff || '(no diff supplied)';
186
+ return `# Touched files
187
+
188
+ ${fileList}
189
+
190
+ # Diff (\`git diff HEAD\`)
191
+
192
+ ${diffSection}
193
+
194
+ Return security findings (possibly empty) using the requested schema.`;
195
+ }
196
+ //# sourceMappingURL=security-audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security-audit.js","sourceRoot":"","sources":["../../src/verify/security-audit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * A required skill token `req` is satisfied by an invoked entry `inv` iff
3
+ * `inv === req` OR `inv` ends with `:${req}` (tolerates plugin/namespace
4
+ * prefixes like `superpowers:brainstorming` without loose substring matching).
5
+ * Case-sensitive — skill ids are.
6
+ */
7
+ export declare function satisfies(req: string, invoked: readonly string[]): boolean;
8
+ /** Required tokens with no satisfying invoked entry, order preserved. */
9
+ export declare function missingSkills(required: readonly string[], invoked: readonly string[]): string[];
10
+ //# sourceMappingURL=skill-match.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-match.d.ts","sourceRoot":"","sources":["../../src/verify/skill-match.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAG1E;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,MAAM,EAAE,CAEV"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * A required skill token `req` is satisfied by an invoked entry `inv` iff
3
+ * `inv === req` OR `inv` ends with `:${req}` (tolerates plugin/namespace
4
+ * prefixes like `superpowers:brainstorming` without loose substring matching).
5
+ * Case-sensitive — skill ids are.
6
+ */
7
+ export function satisfies(req, invoked) {
8
+ const suffix = `:${req}`;
9
+ return invoked.some((inv) => inv === req || inv.endsWith(suffix));
10
+ }
11
+ /** Required tokens with no satisfying invoked entry, order preserved. */
12
+ export function missingSkills(required, invoked) {
13
+ return required.filter((r) => !satisfies(r, invoked));
14
+ }
15
+ //# sourceMappingURL=skill-match.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-match.js","sourceRoot":"","sources":["../../src/verify/skill-match.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,OAA0B;IAC/D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;IACzB,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,aAAa,CAC3B,QAA2B,EAC3B,OAA0B;IAE1B,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AACxD,CAAC"}
@@ -0,0 +1,103 @@
1
+ import { type SpecReviewVerifier } from './spec-review.js';
2
+ import { type VerifierSelectOptions } from './verifier-factory.js';
3
+ /** @deprecated alias of `VerifierSelectOptions` (kept for API stability). */
4
+ export type SelectSpecReviewVerifierOptions = VerifierSelectOptions;
5
+ /** Picks the spec-review verifier given config + env (Phase 25.x). */
6
+ export declare const selectSpecReviewVerifier: (config: Pick<{
7
+ schemaVersion: 1;
8
+ profile: "strict" | "standard" | "auto";
9
+ loopEnforcement: "strict" | "soft" | "reminder";
10
+ acDiscipline: "strict" | "tier-scaled" | "optional";
11
+ workstreamBackend: string;
12
+ ruleProvider: string;
13
+ subagentPolicy: {
14
+ contextBudgetThreshold: number;
15
+ largeTaskTokens: number;
16
+ mechanicalBatchMin: number;
17
+ };
18
+ modelPerClass: {
19
+ standard: string;
20
+ mechanical: string;
21
+ complex: string;
22
+ drafting: string;
23
+ };
24
+ commitCadence: "task" | "draft" | "manual";
25
+ templates: {
26
+ dir: string;
27
+ overrides: string[];
28
+ };
29
+ hooks: {
30
+ sessionStart: boolean;
31
+ stopReminder: boolean;
32
+ preToolUseBuildGate: boolean;
33
+ userPromptSubmit: boolean;
34
+ };
35
+ packs: {
36
+ enabled: string[];
37
+ disabled: string[];
38
+ };
39
+ telemetry: {
40
+ tokenUtilization: boolean;
41
+ skillInvocations: boolean;
42
+ remoteOptIn: boolean;
43
+ };
44
+ skillAudit: {
45
+ required: string[];
46
+ };
47
+ convergence: {
48
+ maxAttempts: number;
49
+ };
50
+ specReview: {
51
+ provider: "mock" | "anthropic" | "local";
52
+ model?: string | undefined;
53
+ };
54
+ tier: {
55
+ standard: {
56
+ maxTasks: number;
57
+ maxFiles: number;
58
+ };
59
+ complex: {
60
+ maxTasks: number;
61
+ minTasks: number;
62
+ };
63
+ quickFix: {
64
+ maxTasks: number;
65
+ maxFiles: number;
66
+ };
67
+ };
68
+ verification: {
69
+ testGlobs: string[];
70
+ testCommand?: string | undefined;
71
+ };
72
+ verifier: {
73
+ provider: "mock" | "anthropic" | "local";
74
+ model?: string | undefined;
75
+ };
76
+ perTaskVerifier: {
77
+ provider: "mock" | "anthropic" | "local";
78
+ model?: string | undefined;
79
+ };
80
+ codeReview: {
81
+ provider: "mock" | "anthropic" | "local";
82
+ model?: string | undefined;
83
+ };
84
+ planReview: {
85
+ provider: "mock" | "anthropic" | "local";
86
+ model?: string | undefined;
87
+ };
88
+ securityAudit: {
89
+ provider: "mock" | "anthropic" | "local";
90
+ model?: string | undefined;
91
+ };
92
+ notify: {
93
+ transport: "stderr" | "file" | "none" | "webhook";
94
+ file?: string | undefined;
95
+ webhook?: {
96
+ url: string;
97
+ headers?: Record<string, string> | undefined;
98
+ timeoutMs?: number | undefined;
99
+ } | undefined;
100
+ };
101
+ $schema?: string | undefined;
102
+ }, "specReview"> | null, opts?: VerifierSelectOptions) => SpecReviewVerifier;
103
+ //# sourceMappingURL=spec-review-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-review-factory.d.ts","sourceRoot":"","sources":["../../src/verify/spec-review-factory.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,kBAAkB,EACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,uBAAuB,CAAC;AAE/B,6EAA6E;AAC7E,MAAM,MAAM,+BAA+B,GAAG,qBAAqB,CAAC;AAEpE,sEAAsE;AACtE,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAU00Y,CAAC;;;;;;;;;;;;;;;;;;mBAAoY,CAAC;;;;aAA4G,CAAC;;;;aAAmH,CAAC;;;;aAA8G,CAAC;;;;aAA8G,CAAC;;;;aAAiH,CAAC;;;;YAAkH,CAAC;eAAqC,CAAC;;mBAAgD,CAAC;qBAA2D,CAAC;;;;4EAD1ib,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { AnthropicSpecReviewVerifier, LocalSpecReviewVerifier, MockSpecReviewVerifier, } from './spec-review.js';
2
+ import { createVerifierFactory, } from './verifier-factory.js';
3
+ /** Picks the spec-review verifier given config + env (Phase 25.x). */
4
+ export const selectSpecReviewVerifier = createVerifierFactory({
5
+ label: 'spec-review',
6
+ read: (c) => c?.specReview,
7
+ mock: () => new MockSpecReviewVerifier(),
8
+ anthropic: (o) => new AnthropicSpecReviewVerifier(o),
9
+ local: (o) => new LocalSpecReviewVerifier(o),
10
+ });
11
+ //# sourceMappingURL=spec-review-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-review-factory.js","sourceRoot":"","sources":["../../src/verify/spec-review-factory.ts"],"names":[],"mappings":"AACA,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,EACvB,sBAAsB,GAEvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,qBAAqB,GAEtB,MAAM,uBAAuB,CAAC;AAK/B,sEAAsE;AACtE,MAAM,CAAC,MAAM,wBAAwB,GAAG,qBAAqB,CAG3D;IACA,KAAK,EAAE,aAAa;IACpB,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU;IAC1B,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,sBAAsB,EAAE;IACxC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,2BAA2B,CAAC,CAAC,CAAC;IACpD,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,uBAAuB,CAAC,CAAC,CAAC;CAC7C,CAAC,CAAC"}