@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,69 @@
1
+ import Anthropic from '@anthropic-ai/sdk';
2
+ /**
3
+ * Phase 24.2 — per-task verifier. Sibling to the Phase 15 `Verifier` for
4
+ * `--deep` AC review; this one runs at `cadence build task <id> --status=DONE`
5
+ * against a single task's files+diff and returns a 3-way verdict.
6
+ */
7
+ export type PerTaskVerdict = 'pass' | 'concerns' | 'refuse';
8
+ export interface PerTaskInput {
9
+ /** Task id from the DRAFT, e.g. "T1". */
10
+ taskId: string;
11
+ /** Files declared on the task in the DRAFT. */
12
+ files: string[];
13
+ /** `git diff HEAD -- <files>` output, or empty when nothing changed. */
14
+ diff: string;
15
+ }
16
+ export interface PerTaskResult {
17
+ verdict: PerTaskVerdict;
18
+ /** Short, human-readable reason (≤ 200 chars). */
19
+ reason: string;
20
+ /** Provider name (e.g. "mock", "anthropic"). */
21
+ provider: string;
22
+ /** Optional model name when the provider is an LLM. */
23
+ model?: string;
24
+ }
25
+ export interface PerTaskVerifier {
26
+ readonly name: string;
27
+ verify(input: PerTaskInput): Promise<PerTaskResult>;
28
+ }
29
+ /**
30
+ * Deterministic mock provider. Rule:
31
+ * files empty → 'refuse' ("no files touched")
32
+ * diff empty → 'concerns' ("no diff since last task")
33
+ * otherwise → 'pass'
34
+ *
35
+ * Mirrors the Phase 15 MockVerifier philosophy — a deterministic floor that
36
+ * lets CI exercise the wiring without an API key. Real per-task verifiers
37
+ * read the diff and apply behavioral judgment.
38
+ */
39
+ export declare class MockPerTaskVerifier implements PerTaskVerifier {
40
+ readonly name = "mock";
41
+ verify(input: PerTaskInput): Promise<PerTaskResult>;
42
+ }
43
+ export interface AnthropicPerTaskVerifierOptions {
44
+ apiKey?: string;
45
+ model?: string;
46
+ maxTokens?: number;
47
+ /** Inject a client for tests; production callers should omit this. */
48
+ client?: Anthropic;
49
+ }
50
+ export declare class AnthropicPerTaskVerifier implements PerTaskVerifier {
51
+ readonly name = "anthropic";
52
+ private readonly client;
53
+ private readonly model;
54
+ private readonly maxTokens;
55
+ constructor(opts?: AnthropicPerTaskVerifierOptions);
56
+ verify(input: PerTaskInput): Promise<PerTaskResult>;
57
+ }
58
+ export interface LocalPerTaskVerifierOptions {
59
+ baseURL: string;
60
+ model: string;
61
+ transport?: typeof fetch;
62
+ }
63
+ export declare class LocalPerTaskVerifier implements PerTaskVerifier {
64
+ private readonly o;
65
+ readonly name = "local";
66
+ constructor(o: LocalPerTaskVerifierOptions);
67
+ verify(input: PerTaskInput): Promise<PerTaskResult>;
68
+ }
69
+ //# sourceMappingURL=per-task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"per-task.d.ts","sourceRoot":"","sources":["../../src/verify/per-task.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAK1C;;;;GAIG;AAEH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE5D,MAAM,WAAW,YAAY;IAC3B,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,cAAc,CAAC;IACxB,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CACrD;AAED;;;;;;;;;GASG;AACH,qBAAa,mBAAoB,YAAW,eAAe;IACzD,QAAQ,CAAC,IAAI,UAAU;IAEjB,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;CAqB1D;AAqBD,MAAM,WAAW,+BAA+B;IAC9C,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,wBAAyB,YAAW,eAAe;IAC9D,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,+BAAoC;IAgBhD,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;CA0C1D;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,qBAAa,oBAAqB,YAAW,eAAe;IAE9C,OAAO,CAAC,QAAQ,CAAC,CAAC;IAD9B,QAAQ,CAAC,IAAI,WAAW;gBACK,CAAC,EAAE,2BAA2B;IAErD,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;CAgB1D"}
@@ -0,0 +1,154 @@
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
+ /**
6
+ * Deterministic mock provider. Rule:
7
+ * files empty → 'refuse' ("no files touched")
8
+ * diff empty → 'concerns' ("no diff since last task")
9
+ * otherwise → 'pass'
10
+ *
11
+ * Mirrors the Phase 15 MockVerifier philosophy — a deterministic floor that
12
+ * lets CI exercise the wiring without an API key. Real per-task verifiers
13
+ * read the diff and apply behavioral judgment.
14
+ */
15
+ export class MockPerTaskVerifier {
16
+ name = 'mock';
17
+ async verify(input) {
18
+ if (input.files.length === 0) {
19
+ return {
20
+ verdict: 'refuse',
21
+ reason: 'mock: no files touched',
22
+ provider: this.name,
23
+ };
24
+ }
25
+ if (input.diff.trim().length === 0) {
26
+ return {
27
+ verdict: 'concerns',
28
+ reason: 'mock: no diff since last task',
29
+ provider: this.name,
30
+ };
31
+ }
32
+ return {
33
+ verdict: 'pass',
34
+ reason: `mock: ${input.files.length} file(s), ${input.diff.length} diff bytes`,
35
+ provider: this.name,
36
+ };
37
+ }
38
+ }
39
+ const PerTaskResponseSchema = z.object({
40
+ verdict: z.enum(['pass', 'concerns', 'refuse']),
41
+ reason: z.string(),
42
+ });
43
+ const SYSTEM_PROMPT = `You are an independent per-task verifier for an AI-assisted development tool called CADENCE.
44
+
45
+ You receive the touched files and unified diff for one task within a larger phase. Decide whether the task's diff is a coherent, self-contained step toward the phase goal. Be skeptical: large unrelated edits, churn, or a diff that doesn't match the task's stated files are reasons for concern.
46
+
47
+ Choose exactly one verdict:
48
+ - "pass" — diff is coherent, scoped to this task, and ready to record as DONE
49
+ - "concerns" — diff is workable but has issues a reviewer should know about (record DONE anyway, attach the reason)
50
+ - "refuse" — diff is broken, off-scope, or unsafe enough that DONE should be blocked
51
+
52
+ Keep reason ≤ 200 characters. Return strict JSON matching the requested schema.`;
53
+ const DEFAULT_MODEL = 'claude-sonnet-4-6';
54
+ const DEFAULT_MAX_TOKENS = 4_000;
55
+ export class AnthropicPerTaskVerifier {
56
+ name = 'anthropic';
57
+ client;
58
+ model;
59
+ maxTokens;
60
+ constructor(opts = {}) {
61
+ if (opts.client) {
62
+ this.client = opts.client;
63
+ }
64
+ else {
65
+ const apiKey = opts.apiKey ?? process.env.ANTHROPIC_API_KEY;
66
+ if (!apiKey) {
67
+ throw new Error('AnthropicPerTaskVerifier requires an API key. Set ANTHROPIC_API_KEY or pass `apiKey` / `client`.');
68
+ }
69
+ this.client = new Anthropic({ apiKey });
70
+ }
71
+ this.model = opts.model ?? DEFAULT_MODEL;
72
+ this.maxTokens = opts.maxTokens ?? DEFAULT_MAX_TOKENS;
73
+ }
74
+ async verify(input) {
75
+ const userMessage = formatUserMessage(input);
76
+ let response;
77
+ try {
78
+ response = await this.client.messages.parse({
79
+ model: this.model,
80
+ max_tokens: this.maxTokens,
81
+ system: [
82
+ {
83
+ type: 'text',
84
+ text: SYSTEM_PROMPT,
85
+ cache_control: { type: 'ephemeral' },
86
+ },
87
+ ],
88
+ output_config: {
89
+ format: zodOutputFormat(PerTaskResponseSchema),
90
+ },
91
+ messages: [{ role: 'user', content: userMessage }],
92
+ });
93
+ }
94
+ catch (err) {
95
+ if (err instanceof Anthropic.APIError) {
96
+ throw new Error(`AnthropicPerTaskVerifier API error (${err.status ?? 'unknown'}): ${err.message}`);
97
+ }
98
+ throw err;
99
+ }
100
+ const parsed = response.parsed_output;
101
+ if (!parsed) {
102
+ throw new Error('AnthropicPerTaskVerifier received no parseable output from the model (response.parsed_output was null/undefined).');
103
+ }
104
+ return {
105
+ verdict: parsed.verdict,
106
+ reason: parsed.reason,
107
+ provider: this.name,
108
+ model: this.model,
109
+ };
110
+ }
111
+ }
112
+ export class LocalPerTaskVerifier {
113
+ o;
114
+ name = 'local';
115
+ constructor(o) {
116
+ this.o = o;
117
+ }
118
+ async verify(input) {
119
+ const parsed = await localChatJSON({
120
+ baseURL: this.o.baseURL,
121
+ model: this.o.model,
122
+ system: SYSTEM_PROMPT,
123
+ user: formatUserMessage(input),
124
+ schema: PerTaskResponseSchema,
125
+ ...(this.o.transport ? { transport: this.o.transport } : {}),
126
+ });
127
+ return {
128
+ verdict: parsed.verdict,
129
+ reason: parsed.reason,
130
+ provider: this.name,
131
+ model: this.o.model,
132
+ };
133
+ }
134
+ }
135
+ function formatUserMessage(input) {
136
+ const fileList = input.files.length > 0
137
+ ? input.files.map((f) => `- ${f}`).join('\n')
138
+ : '(none)';
139
+ const diffSection = input.diff || '(no diff supplied)';
140
+ return `# Task
141
+
142
+ Task id: ${input.taskId}
143
+
144
+ # Files declared
145
+
146
+ ${fileList}
147
+
148
+ # Diff (\`git diff HEAD\`)
149
+
150
+ ${diffSection}
151
+
152
+ Return one verdict for this task using the requested schema.`;
153
+ }
154
+ //# sourceMappingURL=per-task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"per-task.js","sourceRoot":"","sources":["../../src/verify/per-task.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAkClD;;;;;;;;;GASG;AACH,MAAM,OAAO,mBAAmB;IACrB,IAAI,GAAG,MAAM,CAAC;IAEvB,KAAK,CAAC,MAAM,CAAC,KAAmB;QAC9B,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO;gBACL,OAAO,EAAE,QAAQ;gBACjB,MAAM,EAAE,wBAAwB;gBAChC,QAAQ,EAAE,IAAI,CAAC,IAAI;aACpB,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO;gBACL,OAAO,EAAE,UAAU;gBACnB,MAAM,EAAE,+BAA+B;gBACvC,QAAQ,EAAE,IAAI,CAAC,IAAI;aACpB,CAAC;QACJ,CAAC;QACD,OAAO;YACL,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,SAAS,KAAK,CAAC,KAAK,CAAC,MAAM,aAAa,KAAK,CAAC,IAAI,CAAC,MAAM,aAAa;YAC9E,QAAQ,EAAE,IAAI,CAAC,IAAI;SACpB,CAAC;IACJ,CAAC;CACF;AAED,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC/C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;CACnB,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG;;;;;;;;;gFAS0D,CAAC;AAEjF,MAAM,aAAa,GAAG,mBAAmB,CAAC;AAC1C,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAUjC,MAAM,OAAO,wBAAwB;IAC1B,IAAI,GAAG,WAAW,CAAC;IACX,MAAM,CAAY;IAClB,KAAK,CAAS;IACd,SAAS,CAAS;IAEnC,YAAY,OAAwC,EAAE;QACpD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;YAC5D,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CACb,kGAAkG,CACnG,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,kBAAkB,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAmB;QAC9B,MAAM,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,QAA6D,CAAC;QAClE,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAC1C,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,UAAU,EAAE,IAAI,CAAC,SAAS;gBAC1B,MAAM,EAAE;oBACN;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,aAAa;wBACnB,aAAa,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;qBACrC;iBACF;gBACD,aAAa,EAAE;oBACb,MAAM,EAAE,eAAe,CAAC,qBAAqB,CAAC;iBAC/C;gBACD,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;aACnD,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CACb,uCAAuC,GAAG,CAAC,MAAM,IAAI,SAAS,MAAM,GAAG,CAAC,OAAO,EAAE,CAClF,CAAC;YACJ,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC;QACtC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,mHAAmH,CACpH,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;IACJ,CAAC;CACF;AAQD,MAAM,OAAO,oBAAoB;IAEF;IADpB,IAAI,GAAG,OAAO,CAAC;IACxB,YAA6B,CAA8B;QAA9B,MAAC,GAAD,CAAC,CAA6B;IAAG,CAAC;IAE/D,KAAK,CAAC,MAAM,CAAC,KAAmB;QAC9B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;YACjC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO;YACvB,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK;YACnB,MAAM,EAAE,aAAa;YACrB,IAAI,EAAE,iBAAiB,CAAC,KAAK,CAAC;YAC9B,MAAM,EAAE,qBAAqB;YAC7B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7D,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK;SACpB,CAAC;IACJ,CAAC;CACF;AAED,SAAS,iBAAiB,CAAC,KAAmB;IAC5C,MAAM,QAAQ,GACZ,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QACpB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7C,CAAC,CAAC,QAAQ,CAAC;IACf,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,IAAI,oBAAoB,CAAC;IACvD,OAAO;;WAEE,KAAK,CAAC,MAAM;;;;EAIrB,QAAQ;;;;EAIR,WAAW;;6DAEgD,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,103 @@
1
+ import { type PlanReviewVerifier } from './plan-review.js';
2
+ import { type VerifierSelectOptions } from './verifier-factory.js';
3
+ /** @deprecated alias of `VerifierSelectOptions` (kept for API stability). */
4
+ export type SelectPlanReviewVerifierOptions = VerifierSelectOptions;
5
+ /** Picks the plan-review verifier given config + env (Phase 25.1). */
6
+ export declare const selectPlanReviewVerifier: (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
+ }, "planReview"> | null, opts?: VerifierSelectOptions) => PlanReviewVerifier;
103
+ //# sourceMappingURL=plan-review-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-review-factory.d.ts","sourceRoot":"","sources":["../../src/verify/plan-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 { AnthropicPlanReviewVerifier, LocalPlanReviewVerifier, MockPlanReviewVerifier, } from './plan-review.js';
2
+ import { createVerifierFactory, } from './verifier-factory.js';
3
+ /** Picks the plan-review verifier given config + env (Phase 25.1). */
4
+ export const selectPlanReviewVerifier = createVerifierFactory({
5
+ label: 'plan-review',
6
+ read: (c) => c?.planReview,
7
+ mock: () => new MockPlanReviewVerifier(),
8
+ anthropic: (o) => new AnthropicPlanReviewVerifier(o),
9
+ local: (o) => new LocalPlanReviewVerifier(o),
10
+ });
11
+ //# sourceMappingURL=plan-review-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-review-factory.js","sourceRoot":"","sources":["../../src/verify/plan-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"}
@@ -0,0 +1,67 @@
1
+ import Anthropic from '@anthropic-ai/sdk';
2
+ import type { Draft } from '@manehorizons/cadence-types';
3
+ /**
4
+ * Phase 25.1 — plan-review verifier. Reviews the parsed DRAFT (objective +
5
+ * ACs + tasks) at `cadence draft approve` when `'plan-review'` is in the
6
+ * effective gate set (strict×complex). `pass=false` refuses approve unless
7
+ * `--allow-plan-review-failure`. Approve-time, not settle-time: there is no
8
+ * diff and no SUMMARY yet — the input is the plan itself.
9
+ */
10
+ export type PlanReviewSeverity = 'high' | 'medium' | 'low';
11
+ export interface PlanReviewFinding {
12
+ severity: PlanReviewSeverity;
13
+ message: string;
14
+ /** Optional concrete edit the author could apply to resolve the finding. */
15
+ suggestedEdit?: string;
16
+ }
17
+ export interface PlanReviewInput {
18
+ /** The parsed DRAFT being approved. */
19
+ draft: Draft;
20
+ }
21
+ export interface PlanReviewResult {
22
+ pass: boolean;
23
+ findings: PlanReviewFinding[];
24
+ provider: string;
25
+ model?: string;
26
+ }
27
+ export interface PlanReviewVerifier {
28
+ readonly name: string;
29
+ verify(input: PlanReviewInput): Promise<PlanReviewResult>;
30
+ }
31
+ /**
32
+ * Deterministic mock — passes iff the plan has ≥1 acceptance criterion and
33
+ * every AC has non-empty trimmed given/when/then. Each defect is one HIGH
34
+ * finding. Intentionally narrow: holistic plan judgment lives in the
35
+ * Anthropic provider; the mock is the offline floor.
36
+ */
37
+ export declare class MockPlanReviewVerifier implements PlanReviewVerifier {
38
+ readonly name = "mock";
39
+ verify(input: PlanReviewInput): Promise<PlanReviewResult>;
40
+ }
41
+ export interface AnthropicPlanReviewVerifierOptions {
42
+ apiKey?: string;
43
+ model?: string;
44
+ maxTokens?: number;
45
+ /** Inject a client for tests; production callers should omit this. */
46
+ client?: Anthropic;
47
+ }
48
+ export declare class AnthropicPlanReviewVerifier implements PlanReviewVerifier {
49
+ readonly name = "anthropic";
50
+ private readonly client;
51
+ private readonly model;
52
+ private readonly maxTokens;
53
+ constructor(opts?: AnthropicPlanReviewVerifierOptions);
54
+ verify(input: PlanReviewInput): Promise<PlanReviewResult>;
55
+ }
56
+ export interface LocalPlanReviewVerifierOptions {
57
+ baseURL: string;
58
+ model: string;
59
+ transport?: typeof fetch;
60
+ }
61
+ export declare class LocalPlanReviewVerifier implements PlanReviewVerifier {
62
+ private readonly o;
63
+ readonly name = "local";
64
+ constructor(o: LocalPlanReviewVerifierOptions);
65
+ verify(input: PlanReviewInput): Promise<PlanReviewResult>;
66
+ }
67
+ //# sourceMappingURL=plan-review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-review.d.ts","sourceRoot":"","sources":["../../src/verify/plan-review.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAG1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAGzD;;;;;;GAMG;AAEH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE3D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,uCAAuC;IACvC,KAAK,EAAE,KAAK,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC3D;AAED;;;;;GAKG;AACH,qBAAa,sBAAuB,YAAW,kBAAkB;IAC/D,QAAQ,CAAC,IAAI,UAAU;IAEjB,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;CA8BhE;AA0BD,MAAM,WAAW,kCAAkC;IACjD,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,2BAA4B,YAAW,kBAAkB;IACpE,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,kCAAuC;IAgBnD,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAoDhE;AAED,MAAM,WAAW,8BAA8B;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,qBAAa,uBAAwB,YAAW,kBAAkB;IAEpD,OAAO,CAAC,QAAQ,CAAC,CAAC;IAD9B,QAAQ,CAAC,IAAI,WAAW;gBACK,CAAC,EAAE,8BAA8B;IAExD,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAwBhE"}
@@ -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
+ /**
6
+ * Deterministic mock — passes iff the plan has ≥1 acceptance criterion and
7
+ * every AC has non-empty trimmed given/when/then. Each defect is one HIGH
8
+ * finding. Intentionally narrow: holistic plan judgment lives in the
9
+ * Anthropic provider; the mock is the offline floor.
10
+ */
11
+ export class MockPlanReviewVerifier {
12
+ name = 'mock';
13
+ async verify(input) {
14
+ const findings = [];
15
+ const acs = input.draft.acceptanceCriteria;
16
+ if (acs.length === 0) {
17
+ findings.push({
18
+ severity: 'high',
19
+ message: 'plan has no acceptance criteria',
20
+ suggestedEdit: 'Add at least one AC with Given/When/Then.',
21
+ });
22
+ }
23
+ for (const ac of acs) {
24
+ for (const field of ['given', 'when', 'then']) {
25
+ if (ac[field].trim().length === 0) {
26
+ findings.push({
27
+ severity: 'high',
28
+ message: `${ac.id} has empty ${field}`,
29
+ suggestedEdit: `Fill in the ${field} clause for ${ac.id}.`,
30
+ });
31
+ }
32
+ }
33
+ }
34
+ return {
35
+ pass: findings.length === 0,
36
+ findings,
37
+ provider: this.name,
38
+ };
39
+ }
40
+ }
41
+ const PlanReviewFindingSchema = z.object({
42
+ severity: z.enum(['high', 'medium', 'low']),
43
+ message: z.string(),
44
+ suggestedEdit: z.string().optional(),
45
+ });
46
+ const PlanReviewResponseSchema = z.object({
47
+ pass: z.boolean(),
48
+ findings: z.array(PlanReviewFindingSchema),
49
+ });
50
+ const SYSTEM_PROMPT = `You are an independent plan reviewer for an AI-assisted development tool called CADENCE.
51
+
52
+ You receive a development phase plan (objective, acceptance criteria, tasks, boundaries) BEFORE any code is written. Decide whether the plan is coherent and ready to build. Be skeptical:
53
+ - objective vague, untestable, or not matched by the ACs → high
54
+ - an AC that is not falsifiable, or whose Given/When/Then doesn't actually pin down an observable outcome → high
55
+ - tasks that don't collectively achieve every AC, or files/actions that don't match the objective → high
56
+ - missing boundaries that invite scope creep → medium
57
+ - wording/ordering nits that don't change buildability → low
58
+
59
+ Set "pass": false if any HIGH finding exists; otherwise "pass": true. Attach a concrete "suggestedEdit" to each finding when you can. Keep each message ≤ 200 characters. If the plan is sound, return "pass": true with an empty findings array. Return strict JSON matching the requested schema.`;
60
+ const DEFAULT_MODEL = 'claude-sonnet-4-6';
61
+ const DEFAULT_MAX_TOKENS = 4_000;
62
+ export class AnthropicPlanReviewVerifier {
63
+ name = 'anthropic';
64
+ client;
65
+ model;
66
+ maxTokens;
67
+ constructor(opts = {}) {
68
+ if (opts.client) {
69
+ this.client = opts.client;
70
+ }
71
+ else {
72
+ const apiKey = opts.apiKey ?? process.env.ANTHROPIC_API_KEY;
73
+ if (!apiKey) {
74
+ throw new Error('AnthropicPlanReviewVerifier requires an API key. Set ANTHROPIC_API_KEY or pass `apiKey` / `client`.');
75
+ }
76
+ this.client = new Anthropic({ apiKey });
77
+ }
78
+ this.model = opts.model ?? DEFAULT_MODEL;
79
+ this.maxTokens = opts.maxTokens ?? DEFAULT_MAX_TOKENS;
80
+ }
81
+ async verify(input) {
82
+ const userMessage = formatUserMessage(input.draft);
83
+ let response;
84
+ try {
85
+ response = await this.client.messages.parse({
86
+ model: this.model,
87
+ max_tokens: this.maxTokens,
88
+ system: [
89
+ {
90
+ type: 'text',
91
+ text: SYSTEM_PROMPT,
92
+ cache_control: { type: 'ephemeral' },
93
+ },
94
+ ],
95
+ output_config: {
96
+ format: zodOutputFormat(PlanReviewResponseSchema),
97
+ },
98
+ messages: [{ role: 'user', content: userMessage }],
99
+ });
100
+ }
101
+ catch (err) {
102
+ if (err instanceof Anthropic.APIError) {
103
+ throw new Error(`AnthropicPlanReviewVerifier API error (${err.status ?? 'unknown'}): ${err.message}`);
104
+ }
105
+ throw err;
106
+ }
107
+ const parsed = response.parsed_output;
108
+ if (!parsed) {
109
+ throw new Error('AnthropicPlanReviewVerifier received no parseable output from the model (response.parsed_output was null/undefined).');
110
+ }
111
+ const findings = [];
112
+ for (const f of parsed.findings) {
113
+ findings.push({
114
+ severity: f.severity,
115
+ message: f.message,
116
+ ...(f.suggestedEdit !== undefined
117
+ ? { suggestedEdit: f.suggestedEdit }
118
+ : {}),
119
+ });
120
+ }
121
+ return {
122
+ pass: parsed.pass,
123
+ findings,
124
+ provider: this.name,
125
+ model: this.model,
126
+ };
127
+ }
128
+ }
129
+ export class LocalPlanReviewVerifier {
130
+ o;
131
+ name = 'local';
132
+ constructor(o) {
133
+ this.o = o;
134
+ }
135
+ async verify(input) {
136
+ const parsed = await localChatJSON({
137
+ baseURL: this.o.baseURL,
138
+ model: this.o.model,
139
+ system: SYSTEM_PROMPT,
140
+ user: formatUserMessage(input.draft),
141
+ schema: PlanReviewResponseSchema,
142
+ ...(this.o.transport ? { transport: this.o.transport } : {}),
143
+ });
144
+ const findings = [];
145
+ for (const f of parsed.findings) {
146
+ findings.push({
147
+ severity: f.severity,
148
+ message: f.message,
149
+ ...(f.suggestedEdit !== undefined ? { suggestedEdit: f.suggestedEdit } : {}),
150
+ });
151
+ }
152
+ return {
153
+ pass: parsed.pass,
154
+ findings,
155
+ provider: this.name,
156
+ model: this.o.model,
157
+ };
158
+ }
159
+ }
160
+ function formatUserMessage(draft) {
161
+ const acs = draft.acceptanceCriteria.length > 0
162
+ ? draft.acceptanceCriteria
163
+ .map((ac) => `### ${ac.id}\nGiven ${ac.given}\nWhen ${ac.when}\nThen ${ac.then}`)
164
+ .join('\n\n')
165
+ : '(none)';
166
+ const tasks = draft.tasks.length > 0
167
+ ? draft.tasks
168
+ .map((t) => `### ${t.id}: ${t.name}\n- files: ${t.files.join(', ') || '(none)'}\n- action: ${t.action}\n- verify: ${t.verify}\n- done: ${t.done}`)
169
+ .join('\n\n')
170
+ : '(none)';
171
+ const boundaries = draft.boundaries.length > 0
172
+ ? draft.boundaries.map((b) => `- ${b}`).join('\n')
173
+ : '(none)';
174
+ return `# Plan: ${draft.id} — ${draft.title}
175
+
176
+ Tier: ${draft.tier}
177
+
178
+ # Objective
179
+
180
+ ${draft.objective}
181
+
182
+ # Acceptance Criteria
183
+
184
+ ${acs}
185
+
186
+ # Tasks
187
+
188
+ ${tasks}
189
+
190
+ # Boundaries
191
+
192
+ ${boundaries}
193
+
194
+ Review this plan and return a verdict using the requested schema.`;
195
+ }
196
+ //# sourceMappingURL=plan-review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-review.js","sourceRoot":"","sources":["../../src/verify/plan-review.ts"],"names":[],"mappings":"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"}