@paths.design/caws-cli 10.2.0 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (421) hide show
  1. package/README.md +125 -374
  2. package/dist/index.js +43 -785
  3. package/dist/shell/binding/resolve-binding.d.ts +4 -0
  4. package/dist/shell/binding/resolve-binding.d.ts.map +1 -0
  5. package/dist/shell/binding/resolve-binding.js +228 -0
  6. package/dist/shell/binding/resolve-binding.js.map +1 -0
  7. package/dist/shell/binding/types.d.ts +42 -0
  8. package/dist/shell/binding/types.d.ts.map +1 -0
  9. package/dist/shell/binding/types.js +21 -0
  10. package/dist/shell/binding/types.js.map +1 -0
  11. package/dist/shell/commands/claim.d.ts +14 -0
  12. package/dist/shell/commands/claim.d.ts.map +1 -0
  13. package/dist/shell/commands/claim.js +197 -0
  14. package/dist/shell/commands/claim.js.map +1 -0
  15. package/dist/shell/commands/doctor.d.ts +13 -0
  16. package/dist/shell/commands/doctor.d.ts.map +1 -0
  17. package/dist/shell/commands/doctor.js +97 -0
  18. package/dist/shell/commands/doctor.js.map +1 -0
  19. package/dist/shell/commands/evidence.d.ts +28 -0
  20. package/dist/shell/commands/evidence.d.ts.map +1 -0
  21. package/dist/shell/commands/evidence.js +166 -0
  22. package/dist/shell/commands/evidence.js.map +1 -0
  23. package/dist/shell/commands/gates.d.ts +19 -0
  24. package/dist/shell/commands/gates.d.ts.map +1 -0
  25. package/dist/shell/commands/gates.js +181 -0
  26. package/dist/shell/commands/gates.js.map +1 -0
  27. package/dist/shell/commands/init.d.ts +8 -0
  28. package/dist/shell/commands/init.d.ts.map +1 -0
  29. package/dist/shell/commands/init.js +64 -0
  30. package/dist/shell/commands/init.js.map +1 -0
  31. package/dist/shell/commands/scope.d.ts +11 -0
  32. package/dist/shell/commands/scope.d.ts.map +1 -0
  33. package/dist/shell/commands/scope.js +92 -0
  34. package/dist/shell/commands/scope.js.map +1 -0
  35. package/dist/shell/commands/status.d.ts +15 -0
  36. package/dist/shell/commands/status.d.ts.map +1 -0
  37. package/dist/shell/commands/status.js +106 -0
  38. package/dist/shell/commands/status.js.map +1 -0
  39. package/dist/shell/commands/waiver.d.ts +38 -0
  40. package/dist/shell/commands/waiver.d.ts.map +1 -0
  41. package/dist/shell/commands/waiver.js +240 -0
  42. package/dist/shell/commands/waiver.js.map +1 -0
  43. package/dist/shell/gates/disposition.d.ts +23 -0
  44. package/dist/shell/gates/disposition.d.ts.map +1 -0
  45. package/dist/shell/gates/disposition.js +87 -0
  46. package/dist/shell/gates/disposition.js.map +1 -0
  47. package/dist/shell/gates/gate-result-contract.d.ts +39 -0
  48. package/dist/shell/gates/gate-result-contract.d.ts.map +1 -0
  49. package/dist/shell/gates/gate-result-contract.js +150 -0
  50. package/dist/shell/gates/gate-result-contract.js.map +1 -0
  51. package/dist/shell/gates/quality-gates-adapter.d.ts +55 -0
  52. package/dist/shell/gates/quality-gates-adapter.d.ts.map +1 -0
  53. package/dist/shell/gates/quality-gates-adapter.js +161 -0
  54. package/dist/shell/gates/quality-gates-adapter.js.map +1 -0
  55. package/dist/shell/gates/waiver-filter.d.ts +58 -0
  56. package/dist/shell/gates/waiver-filter.d.ts.map +1 -0
  57. package/dist/shell/gates/waiver-filter.js +119 -0
  58. package/dist/shell/gates/waiver-filter.js.map +1 -0
  59. package/dist/shell/index.d.ts +50 -0
  60. package/dist/shell/index.d.ts.map +1 -0
  61. package/dist/shell/index.js +73 -0
  62. package/dist/shell/index.js.map +1 -0
  63. package/dist/shell/register.d.ts +11 -0
  64. package/dist/shell/register.d.ts.map +1 -0
  65. package/dist/shell/register.js +274 -0
  66. package/dist/shell/register.js.map +1 -0
  67. package/dist/shell/render/claim.d.ts +22 -0
  68. package/dist/shell/render/claim.d.ts.map +1 -0
  69. package/dist/shell/render/claim.js +75 -0
  70. package/dist/shell/render/claim.js.map +1 -0
  71. package/dist/shell/render/decision.d.ts +15 -0
  72. package/dist/shell/render/decision.d.ts.map +1 -0
  73. package/dist/shell/render/decision.js +66 -0
  74. package/dist/shell/render/decision.js.map +1 -0
  75. package/dist/shell/render/diagnostic.d.ts +19 -0
  76. package/dist/shell/render/diagnostic.d.ts.map +1 -0
  77. package/dist/shell/render/diagnostic.js +76 -0
  78. package/dist/shell/render/diagnostic.js.map +1 -0
  79. package/dist/shell/render/finding.d.ts +15 -0
  80. package/dist/shell/render/finding.d.ts.map +1 -0
  81. package/dist/shell/render/finding.js +57 -0
  82. package/dist/shell/render/finding.js.map +1 -0
  83. package/dist/shell/render/gates.d.ts +3 -0
  84. package/dist/shell/render/gates.d.ts.map +1 -0
  85. package/dist/shell/render/gates.js +56 -0
  86. package/dist/shell/render/gates.js.map +1 -0
  87. package/dist/shell/render/init.d.ts +11 -0
  88. package/dist/shell/render/init.d.ts.map +1 -0
  89. package/dist/shell/render/init.js +32 -0
  90. package/dist/shell/render/init.js.map +1 -0
  91. package/dist/shell/render/status.d.ts +26 -0
  92. package/dist/shell/render/status.d.ts.map +1 -0
  93. package/dist/shell/render/status.js +143 -0
  94. package/dist/shell/render/status.js.map +1 -0
  95. package/dist/shell/render/waiver.d.ts +21 -0
  96. package/dist/shell/render/waiver.d.ts.map +1 -0
  97. package/dist/shell/render/waiver.js +94 -0
  98. package/dist/shell/render/waiver.js.map +1 -0
  99. package/dist/shell/rules.d.ts +37 -0
  100. package/dist/shell/rules.d.ts.map +1 -0
  101. package/dist/shell/rules.js +51 -0
  102. package/dist/shell/rules.js.map +1 -0
  103. package/dist/shell/session/actor.d.ts +14 -0
  104. package/dist/shell/session/actor.d.ts.map +1 -0
  105. package/dist/shell/session/actor.js +34 -0
  106. package/dist/shell/session/actor.js.map +1 -0
  107. package/dist/shell/session/resolve-session.d.ts +5 -0
  108. package/dist/shell/session/resolve-session.d.ts.map +1 -0
  109. package/dist/shell/session/resolve-session.js +239 -0
  110. package/dist/shell/session/resolve-session.js.map +1 -0
  111. package/dist/shell/session/types.d.ts +56 -0
  112. package/dist/shell/session/types.d.ts.map +1 -0
  113. package/dist/shell/session/types.js +15 -0
  114. package/dist/shell/session/types.js.map +1 -0
  115. package/dist/store/agents-store.d.ts +3 -0
  116. package/dist/store/agents-store.d.ts.map +1 -0
  117. package/dist/store/agents-store.js +63 -0
  118. package/dist/store/agents-store.js.map +1 -0
  119. package/dist/store/apply-patch.d.ts +16 -0
  120. package/dist/store/apply-patch.d.ts.map +1 -0
  121. package/dist/store/apply-patch.js +191 -0
  122. package/dist/store/apply-patch.js.map +1 -0
  123. package/dist/store/atomic-write.d.ts +16 -0
  124. package/dist/store/atomic-write.d.ts.map +1 -0
  125. package/dist/store/atomic-write.js +132 -0
  126. package/dist/store/atomic-write.js.map +1 -0
  127. package/dist/store/doctor-snapshot.d.ts +20 -0
  128. package/dist/store/doctor-snapshot.d.ts.map +1 -0
  129. package/dist/store/doctor-snapshot.js +176 -0
  130. package/dist/store/doctor-snapshot.js.map +1 -0
  131. package/dist/store/events-store.d.ts +33 -0
  132. package/dist/store/events-store.d.ts.map +1 -0
  133. package/dist/store/events-store.js +297 -0
  134. package/dist/store/events-store.js.map +1 -0
  135. package/dist/store/index.d.ts +21 -0
  136. package/dist/store/index.d.ts.map +1 -0
  137. package/dist/store/index.js +47 -0
  138. package/dist/store/index.js.map +1 -0
  139. package/dist/store/init-store.d.ts +21 -0
  140. package/dist/store/init-store.d.ts.map +1 -0
  141. package/dist/store/init-store.js +295 -0
  142. package/dist/store/init-store.js.map +1 -0
  143. package/dist/store/json-store.d.ts +3 -0
  144. package/dist/store/json-store.d.ts.map +1 -0
  145. package/dist/store/json-store.js +65 -0
  146. package/dist/store/json-store.js.map +1 -0
  147. package/dist/store/policy-store.d.ts +3 -0
  148. package/dist/store/policy-store.d.ts.map +1 -0
  149. package/dist/store/policy-store.js +65 -0
  150. package/dist/store/policy-store.js.map +1 -0
  151. package/dist/store/repo-root.d.ts +46 -0
  152. package/dist/store/repo-root.d.ts.map +1 -0
  153. package/dist/store/repo-root.js +145 -0
  154. package/dist/store/repo-root.js.map +1 -0
  155. package/dist/store/rules.d.ts +53 -0
  156. package/dist/store/rules.d.ts.map +1 -0
  157. package/dist/store/rules.js +78 -0
  158. package/dist/store/rules.js.map +1 -0
  159. package/dist/store/specs-store.d.ts +3 -0
  160. package/dist/store/specs-store.d.ts.map +1 -0
  161. package/dist/store/specs-store.js +131 -0
  162. package/dist/store/specs-store.js.map +1 -0
  163. package/dist/store/types.d.ts +84 -0
  164. package/dist/store/types.d.ts.map +1 -0
  165. package/dist/store/types.js +14 -0
  166. package/dist/store/types.js.map +1 -0
  167. package/dist/store/waivers-store.d.ts +25 -0
  168. package/dist/store/waivers-store.d.ts.map +1 -0
  169. package/dist/store/waivers-store.js +232 -0
  170. package/dist/store/waivers-store.js.map +1 -0
  171. package/dist/store/worktrees-store.d.ts +3 -0
  172. package/dist/store/worktrees-store.d.ts.map +1 -0
  173. package/dist/store/worktrees-store.js +62 -0
  174. package/dist/store/worktrees-store.js.map +1 -0
  175. package/dist/store/yaml-store.d.ts +9 -0
  176. package/dist/store/yaml-store.d.ts.map +1 -0
  177. package/dist/store/yaml-store.js +121 -0
  178. package/dist/store/yaml-store.js.map +1 -0
  179. package/package.json +15 -13
  180. package/dist/budget-derivation.js +0 -751
  181. package/dist/cicd-optimizer.js +0 -504
  182. package/dist/commands/agents.js +0 -124
  183. package/dist/commands/archive.js +0 -500
  184. package/dist/commands/burnup.js +0 -198
  185. package/dist/commands/diagnose.js +0 -525
  186. package/dist/commands/evaluate.js +0 -314
  187. package/dist/commands/gates.js +0 -149
  188. package/dist/commands/init.js +0 -857
  189. package/dist/commands/iterate.js +0 -417
  190. package/dist/commands/mode.js +0 -269
  191. package/dist/commands/parallel.js +0 -242
  192. package/dist/commands/plan.js +0 -438
  193. package/dist/commands/provenance.js +0 -1143
  194. package/dist/commands/quality-monitor.js +0 -284
  195. package/dist/commands/scope.js +0 -264
  196. package/dist/commands/session.js +0 -312
  197. package/dist/commands/sidecar.js +0 -74
  198. package/dist/commands/specs.js +0 -1656
  199. package/dist/commands/status.js +0 -1172
  200. package/dist/commands/templates.js +0 -237
  201. package/dist/commands/tool.js +0 -136
  202. package/dist/commands/tutorial.js +0 -480
  203. package/dist/commands/validate.js +0 -357
  204. package/dist/commands/verify-acs.js +0 -443
  205. package/dist/commands/waivers.js +0 -599
  206. package/dist/commands/workflow.js +0 -243
  207. package/dist/commands/worktree.js +0 -502
  208. package/dist/config/lite-scope.js +0 -158
  209. package/dist/config/modes.js +0 -347
  210. package/dist/constants/spec-types.js +0 -65
  211. package/dist/gates/budget-limit.js +0 -121
  212. package/dist/gates/feedback.js +0 -260
  213. package/dist/gates/format.js +0 -179
  214. package/dist/gates/god-object.js +0 -117
  215. package/dist/gates/pipeline.js +0 -167
  216. package/dist/gates/scope-boundary.js +0 -112
  217. package/dist/gates/spec-completeness.js +0 -109
  218. package/dist/gates/todo-detection.js +0 -205
  219. package/dist/generators/jest-config-generator.js +0 -242
  220. package/dist/generators/working-spec.js +0 -237
  221. package/dist/minimal-cli.js +0 -88
  222. package/dist/parallel/parallel-manager.js +0 -433
  223. package/dist/policy/PolicyManager.js +0 -470
  224. package/dist/scaffold/claude-hooks.js +0 -443
  225. package/dist/scaffold/cursor-hooks.js +0 -177
  226. package/dist/scaffold/git-hooks.js +0 -928
  227. package/dist/scaffold/index.js +0 -794
  228. package/dist/session/session-manager.js +0 -653
  229. package/dist/sidecars/index.js +0 -33
  230. package/dist/sidecars/listeners.js +0 -40
  231. package/dist/sidecars/provenance-summary.js +0 -238
  232. package/dist/sidecars/quality-gaps.js +0 -258
  233. package/dist/sidecars/schema.js +0 -149
  234. package/dist/sidecars/spec-drift.js +0 -151
  235. package/dist/sidecars/waiver-draft.js +0 -176
  236. package/dist/spec/SpecFileManager.js +0 -419
  237. package/dist/templates/.caws/schemas/policy.schema.json +0 -117
  238. package/dist/templates/.caws/schemas/scope.schema.json +0 -52
  239. package/dist/templates/.caws/schemas/waivers.schema.json +0 -106
  240. package/dist/templates/.caws/schemas/working-spec.schema.json +0 -340
  241. package/dist/templates/.caws/schemas/worktrees.schema.json +0 -38
  242. package/dist/templates/.caws/templates/working-spec.template.yml +0 -80
  243. package/dist/templates/.caws/tools/README.md +0 -18
  244. package/dist/templates/.caws/tools/scope-guard.js +0 -203
  245. package/dist/templates/.caws/tools-allow.json +0 -331
  246. package/dist/templates/.caws/waivers.yml +0 -19
  247. package/dist/templates/.claude/README.md +0 -190
  248. package/dist/templates/.claude/hooks/audit.sh +0 -121
  249. package/dist/templates/.claude/hooks/block-dangerous.sh +0 -203
  250. package/dist/templates/.claude/hooks/classify_command.py +0 -592
  251. package/dist/templates/.claude/hooks/doc-frontmatter-check.sh +0 -173
  252. package/dist/templates/.claude/hooks/lite-sprawl-check.sh +0 -145
  253. package/dist/templates/.claude/hooks/naming-check.sh +0 -100
  254. package/dist/templates/.claude/hooks/protected-paths.sh +0 -39
  255. package/dist/templates/.claude/hooks/quality-check.sh +0 -81
  256. package/dist/templates/.claude/hooks/scan-secrets.sh +0 -85
  257. package/dist/templates/.claude/hooks/scope-guard.sh +0 -381
  258. package/dist/templates/.claude/hooks/session-caws-status.sh +0 -117
  259. package/dist/templates/.claude/hooks/session-log.sh +0 -634
  260. package/dist/templates/.claude/hooks/simplification-guard.sh +0 -92
  261. package/dist/templates/.claude/hooks/stop-worktree-check.sh +0 -46
  262. package/dist/templates/.claude/hooks/test_classify_command.py +0 -370
  263. package/dist/templates/.claude/hooks/test_wrapper_smoke.sh +0 -96
  264. package/dist/templates/.claude/hooks/validate-spec.sh +0 -76
  265. package/dist/templates/.claude/hooks/worktree-guard.sh +0 -220
  266. package/dist/templates/.claude/hooks/worktree-write-guard.sh +0 -190
  267. package/dist/templates/.claude/rules/git-safety.md +0 -26
  268. package/dist/templates/.claude/rules/worktree-isolation.md +0 -101
  269. package/dist/templates/.claude/settings.json +0 -141
  270. package/dist/templates/.cursor/README.md +0 -299
  271. package/dist/templates/.cursor/hooks/audit.sh +0 -55
  272. package/dist/templates/.cursor/hooks/block-dangerous.sh +0 -84
  273. package/dist/templates/.cursor/hooks/caws-quality-check.sh +0 -52
  274. package/dist/templates/.cursor/hooks/caws-scope-guard.sh +0 -130
  275. package/dist/templates/.cursor/hooks/format.sh +0 -38
  276. package/dist/templates/.cursor/hooks/naming-check.sh +0 -64
  277. package/dist/templates/.cursor/hooks/scan-secrets.sh +0 -51
  278. package/dist/templates/.cursor/hooks/scope-guard.sh +0 -52
  279. package/dist/templates/.cursor/hooks/session-log.sh +0 -924
  280. package/dist/templates/.cursor/hooks/validate-spec.sh +0 -83
  281. package/dist/templates/.cursor/hooks.json +0 -76
  282. package/dist/templates/.cursor/rules/00-claims-verification.mdc +0 -144
  283. package/dist/templates/.cursor/rules/01-working-style.mdc +0 -50
  284. package/dist/templates/.cursor/rules/02-quality-gates.mdc +0 -368
  285. package/dist/templates/.cursor/rules/03-naming-and-refactor.mdc +0 -33
  286. package/dist/templates/.cursor/rules/04-logging-language-style.mdc +0 -23
  287. package/dist/templates/.cursor/rules/05-safe-defaults-guards.mdc +0 -23
  288. package/dist/templates/.cursor/rules/06-typescript-conventions.mdc +0 -36
  289. package/dist/templates/.cursor/rules/07-process-ops.mdc +0 -20
  290. package/dist/templates/.cursor/rules/08-solid-and-architecture.mdc +0 -16
  291. package/dist/templates/.cursor/rules/09-docstrings.mdc +0 -89
  292. package/dist/templates/.cursor/rules/10-documentation-quality-standards.mdc +0 -385
  293. package/dist/templates/.cursor/rules/11-scope-management-waivers.mdc +0 -381
  294. package/dist/templates/.cursor/rules/12-implementation-completeness.mdc +0 -516
  295. package/dist/templates/.cursor/rules/13-language-agnostic-standards.mdc +0 -578
  296. package/dist/templates/.cursor/rules/README.md +0 -148
  297. package/dist/templates/.github/copilot-instructions.md +0 -82
  298. package/dist/templates/.idea/runConfigurations/CAWS_Evaluate.xml +0 -5
  299. package/dist/templates/.idea/runConfigurations/CAWS_Validate.xml +0 -5
  300. package/dist/templates/.junie/guidelines.md +0 -73
  301. package/dist/templates/.vscode/launch.json +0 -17
  302. package/dist/templates/.vscode/settings.json +0 -95
  303. package/dist/templates/.windsurf/rules/caws-quality-standards.md +0 -54
  304. package/dist/templates/.windsurf/workflows/caws-guided-development.md +0 -92
  305. package/dist/templates/CLAUDE.md +0 -196
  306. package/dist/templates/COMMIT_CONVENTIONS.md +0 -86
  307. package/dist/templates/OIDC_SETUP.md +0 -300
  308. package/dist/templates/agents.md +0 -171
  309. package/dist/templates/codemod/README.md +0 -1
  310. package/dist/templates/codemod/test.js +0 -93
  311. package/dist/templates/docs/README.md +0 -151
  312. package/dist/templates/scripts/new_feature.sh +0 -80
  313. package/dist/templates/scripts/quality-gates/check-god-objects.js +0 -146
  314. package/dist/templates/scripts/quality-gates/run-quality-gates.js +0 -50
  315. package/dist/templates/scripts/v3/analysis/todo_analyzer.py +0 -1997
  316. package/dist/test-analysis.js +0 -786
  317. package/dist/tool-interface.js +0 -314
  318. package/dist/tool-loader.js +0 -303
  319. package/dist/tool-validator.js +0 -393
  320. package/dist/utils/agent-display.js +0 -210
  321. package/dist/utils/agent-session.js +0 -344
  322. package/dist/utils/async-utils.js +0 -188
  323. package/dist/utils/command-wrapper.js +0 -200
  324. package/dist/utils/event-log.js +0 -584
  325. package/dist/utils/event-renderer.js +0 -521
  326. package/dist/utils/finalization.js +0 -230
  327. package/dist/utils/git-lock.js +0 -119
  328. package/dist/utils/gitignore-updater.js +0 -158
  329. package/dist/utils/ide-detection.js +0 -133
  330. package/dist/utils/lifecycle-events.js +0 -94
  331. package/dist/utils/project-analysis.js +0 -367
  332. package/dist/utils/promise-utils.js +0 -72
  333. package/dist/utils/quality-gates-errors.js +0 -520
  334. package/dist/utils/quality-gates-utils.js +0 -387
  335. package/dist/utils/schema-validator.js +0 -50
  336. package/dist/utils/spec-resolver.js +0 -711
  337. package/dist/utils/typescript-detector.js +0 -369
  338. package/dist/utils/working-state.js +0 -530
  339. package/dist/utils/yaml-validation.js +0 -156
  340. package/dist/validation/spec-validation.js +0 -924
  341. package/dist/waivers-manager.js +0 -732
  342. package/dist/worktree/worktree-manager.js +0 -1735
  343. package/templates/.caws/schemas/policy.schema.json +0 -117
  344. package/templates/.caws/schemas/scope.schema.json +0 -52
  345. package/templates/.caws/schemas/waivers.schema.json +0 -106
  346. package/templates/.caws/schemas/working-spec.schema.json +0 -340
  347. package/templates/.caws/schemas/worktrees.schema.json +0 -38
  348. package/templates/.caws/templates/working-spec.template.yml +0 -80
  349. package/templates/.caws/tools/README.md +0 -18
  350. package/templates/.caws/tools/scope-guard.js +0 -203
  351. package/templates/.caws/tools-allow.json +0 -331
  352. package/templates/.caws/waivers.yml +0 -19
  353. package/templates/.claude/README.md +0 -190
  354. package/templates/.claude/hooks/audit.sh +0 -121
  355. package/templates/.claude/hooks/block-dangerous.sh +0 -203
  356. package/templates/.claude/hooks/classify_command.py +0 -592
  357. package/templates/.claude/hooks/doc-frontmatter-check.sh +0 -173
  358. package/templates/.claude/hooks/lite-sprawl-check.sh +0 -145
  359. package/templates/.claude/hooks/naming-check.sh +0 -100
  360. package/templates/.claude/hooks/protected-paths.sh +0 -39
  361. package/templates/.claude/hooks/quality-check.sh +0 -81
  362. package/templates/.claude/hooks/scan-secrets.sh +0 -85
  363. package/templates/.claude/hooks/scope-guard.sh +0 -381
  364. package/templates/.claude/hooks/session-caws-status.sh +0 -117
  365. package/templates/.claude/hooks/session-log.sh +0 -634
  366. package/templates/.claude/hooks/simplification-guard.sh +0 -92
  367. package/templates/.claude/hooks/stop-worktree-check.sh +0 -46
  368. package/templates/.claude/hooks/test_classify_command.py +0 -370
  369. package/templates/.claude/hooks/test_wrapper_smoke.sh +0 -96
  370. package/templates/.claude/hooks/validate-spec.sh +0 -76
  371. package/templates/.claude/hooks/worktree-guard.sh +0 -220
  372. package/templates/.claude/hooks/worktree-write-guard.sh +0 -190
  373. package/templates/.claude/rules/git-safety.md +0 -26
  374. package/templates/.claude/rules/worktree-isolation.md +0 -101
  375. package/templates/.claude/settings.json +0 -141
  376. package/templates/.cursor/README.md +0 -299
  377. package/templates/.cursor/hooks/audit.sh +0 -55
  378. package/templates/.cursor/hooks/block-dangerous.sh +0 -84
  379. package/templates/.cursor/hooks/caws-quality-check.sh +0 -52
  380. package/templates/.cursor/hooks/caws-scope-guard.sh +0 -130
  381. package/templates/.cursor/hooks/format.sh +0 -38
  382. package/templates/.cursor/hooks/naming-check.sh +0 -64
  383. package/templates/.cursor/hooks/scan-secrets.sh +0 -51
  384. package/templates/.cursor/hooks/scope-guard.sh +0 -52
  385. package/templates/.cursor/hooks/session-log.sh +0 -924
  386. package/templates/.cursor/hooks/validate-spec.sh +0 -83
  387. package/templates/.cursor/hooks.json +0 -76
  388. package/templates/.cursor/rules/00-claims-verification.mdc +0 -144
  389. package/templates/.cursor/rules/01-working-style.mdc +0 -50
  390. package/templates/.cursor/rules/02-quality-gates.mdc +0 -368
  391. package/templates/.cursor/rules/03-naming-and-refactor.mdc +0 -33
  392. package/templates/.cursor/rules/04-logging-language-style.mdc +0 -23
  393. package/templates/.cursor/rules/05-safe-defaults-guards.mdc +0 -23
  394. package/templates/.cursor/rules/06-typescript-conventions.mdc +0 -36
  395. package/templates/.cursor/rules/07-process-ops.mdc +0 -20
  396. package/templates/.cursor/rules/08-solid-and-architecture.mdc +0 -16
  397. package/templates/.cursor/rules/09-docstrings.mdc +0 -89
  398. package/templates/.cursor/rules/10-documentation-quality-standards.mdc +0 -385
  399. package/templates/.cursor/rules/11-scope-management-waivers.mdc +0 -381
  400. package/templates/.cursor/rules/12-implementation-completeness.mdc +0 -516
  401. package/templates/.cursor/rules/13-language-agnostic-standards.mdc +0 -578
  402. package/templates/.cursor/rules/README.md +0 -148
  403. package/templates/.github/copilot-instructions.md +0 -82
  404. package/templates/.idea/runConfigurations/CAWS_Evaluate.xml +0 -5
  405. package/templates/.idea/runConfigurations/CAWS_Validate.xml +0 -5
  406. package/templates/.junie/guidelines.md +0 -73
  407. package/templates/.vscode/launch.json +0 -17
  408. package/templates/.vscode/settings.json +0 -95
  409. package/templates/.windsurf/rules/caws-quality-standards.md +0 -54
  410. package/templates/.windsurf/workflows/caws-guided-development.md +0 -92
  411. package/templates/CLAUDE.md +0 -196
  412. package/templates/COMMIT_CONVENTIONS.md +0 -86
  413. package/templates/OIDC_SETUP.md +0 -300
  414. package/templates/agents.md +0 -171
  415. package/templates/codemod/README.md +0 -1
  416. package/templates/codemod/test.js +0 -93
  417. package/templates/docs/README.md +0 -151
  418. package/templates/scripts/new_feature.sh +0 -80
  419. package/templates/scripts/quality-gates/check-god-objects.js +0 -146
  420. package/templates/scripts/quality-gates/run-quality-gates.js +0 -50
  421. package/templates/scripts/v3/analysis/todo_analyzer.py +0 -1997
@@ -1,470 +0,0 @@
1
- /**
2
- * @fileoverview Policy Manager with Intelligent Caching
3
- * Manages policy.yaml loading with caching, default fallback, and waiver validation.
4
- * Ported from agent-agency v2 CAWS integration patterns.
5
- * @author @darianrosebrook
6
- */
7
-
8
- const fs = require('fs-extra');
9
- const path = require('path');
10
- const yaml = require('js-yaml');
11
- const { createValidator, getSchemaPath } = require('../utils/schema-validator');
12
-
13
- /**
14
- * Policy Manager - Handles policy loading with intelligent caching
15
- *
16
- * Features:
17
- * - TTL-based caching for performance
18
- * - Graceful fallback to defaults when policy.yaml missing
19
- * - Cache inspection and management API
20
- * - Waiver validation and delta application
21
- */
22
- class PolicyManager {
23
- constructor(options = {}) {
24
- this.enableCaching = options.enableCaching ?? true;
25
- this.cacheTTL = options.cacheTTL ?? 300000; // 5 minutes default
26
- this.policyCache = new Map(); // projectRoot -> { policy, cachedAt, ttl }
27
- }
28
-
29
- /**
30
- * Load CAWS policy from policy.yaml with caching
31
- *
32
- * @param {string} projectRoot - Project root directory
33
- * @param {Object} options - Loading options
34
- * @param {boolean} options.useCache - Use cache if available (default: true)
35
- * @param {number} options.cacheTTL - Cache TTL override in milliseconds
36
- * @returns {Promise<Object>} Policy object
37
- */
38
- async loadPolicy(projectRoot, options = {}) {
39
- const useCache = options.useCache ?? this.enableCaching;
40
- const cacheTTL = options.cacheTTL ?? this.cacheTTL;
41
- const startTime = Date.now();
42
-
43
- try {
44
- // Check cache first
45
- if (useCache && this.policyCache.has(projectRoot)) {
46
- const cached = this.policyCache.get(projectRoot);
47
- const cacheAge = Date.now() - cached.cachedAt;
48
-
49
- if (cacheAge < cacheTTL) {
50
- return {
51
- ...cached.policy,
52
- _cacheHit: true,
53
- _loadDuration: Date.now() - startTime,
54
- };
55
- }
56
- }
57
-
58
- // Load from file - check multiple locations for backward compatibility
59
- const policyPaths = [
60
- path.join(projectRoot, '.caws', 'policy.yaml'), // Preferred location
61
- path.join(projectRoot, '.caws', 'policy', 'tier-policy.json'), // Legacy location
62
- ];
63
-
64
- let policyPath = null;
65
- let policyContent = null;
66
-
67
- // Try each path in order
68
- for (const candidatePath of policyPaths) {
69
- try {
70
- if (await fs.pathExists(candidatePath)) {
71
- policyPath = candidatePath;
72
- const content = await fs.readFile(candidatePath, 'utf-8');
73
-
74
- // Handle JSON format (legacy)
75
- if (candidatePath.endsWith('.json')) {
76
- policyContent = JSON.parse(content);
77
- } else {
78
- // Handle YAML format (preferred)
79
- policyContent = yaml.load(content);
80
- }
81
- break;
82
- }
83
- } catch (error) {
84
- // Continue to next path if this one fails
85
- continue;
86
- }
87
- }
88
-
89
- if (policyPath && policyContent) {
90
- // Schema validation (warn and fall back to defaults on failure)
91
- try {
92
- const schemaFilePath = getSchemaPath('policy.schema.json', projectRoot);
93
- const validate = createValidator(schemaFilePath);
94
- const schemaResult = validate(policyContent);
95
- if (!schemaResult.valid) {
96
- console.warn('Policy has schema violations:', schemaResult.errors);
97
- console.warn('Falling back to default policy');
98
- const defaultPolicy = this.getDefaultPolicy();
99
- if (this.enableCaching) {
100
- this.policyCache.set(projectRoot, {
101
- policy: defaultPolicy,
102
- cachedAt: Date.now(),
103
- ttl: cacheTTL,
104
- });
105
- }
106
- return {
107
- ...defaultPolicy,
108
- _isDefault: true,
109
- _schemaErrors: schemaResult.errors,
110
- _cacheHit: false,
111
- _loadDuration: Date.now() - startTime,
112
- };
113
- }
114
- } catch (schemaErr) {
115
- console.warn('Could not validate policy schema:', schemaErr.message);
116
- }
117
-
118
- // Validate policy structure
119
- this.validatePolicy(policyContent);
120
-
121
- // Update cache
122
- if (this.enableCaching) {
123
- this.policyCache.set(projectRoot, {
124
- policy: policyContent,
125
- cachedAt: Date.now(),
126
- ttl: cacheTTL,
127
- });
128
- }
129
-
130
- // Warn if using legacy location
131
- if (policyPath.endsWith('.json')) {
132
- console.warn(
133
- 'Using legacy policy file location: .caws/policy/tier-policy.json\n' +
134
- ' Migrate to .caws/policy.yaml for better compatibility\n' +
135
- ' Run: caws init --migrate-policy'
136
- );
137
- }
138
-
139
- return {
140
- ...policyContent,
141
- _cacheHit: false,
142
- _loadDuration: Date.now() - startTime,
143
- _policyPath: policyPath,
144
- };
145
- } else {
146
- // Policy file doesn't exist - use default
147
- const defaultPolicy = this.getDefaultPolicy();
148
-
149
- if (this.enableCaching) {
150
- this.policyCache.set(projectRoot, {
151
- policy: defaultPolicy,
152
- cachedAt: Date.now(),
153
- ttl: cacheTTL,
154
- });
155
- }
156
-
157
- return {
158
- ...defaultPolicy,
159
- _isDefault: true,
160
- _cacheHit: false,
161
- _loadDuration: Date.now() - startTime,
162
- };
163
- }
164
- } catch (error) {
165
- throw new Error(`Policy load failed: ${error.message}`);
166
- }
167
- }
168
-
169
- /**
170
- * Load a waiver document by ID
171
- *
172
- * @param {string} waiverId - Waiver ID (e.g., WV-0001)
173
- * @param {string} projectRoot - Project root directory
174
- * @returns {Promise<Object|null>} Waiver document or null if not found
175
- */
176
- async loadWaiver(waiverId, projectRoot) {
177
- try {
178
- const waiverPath = path.join(projectRoot, '.caws', 'waivers', `${waiverId}.yaml`);
179
-
180
- const content = await fs.readFile(waiverPath, 'utf-8');
181
- return yaml.load(content);
182
- } catch (error) {
183
- if (error.code === 'ENOENT') {
184
- return null;
185
- }
186
- throw new Error(`Failed to load waiver ${waiverId}: ${error.message}`);
187
- }
188
- }
189
-
190
- /**
191
- * Check if a waiver is currently valid
192
- *
193
- * @param {Object} waiver - Waiver document
194
- * @returns {boolean} True if waiver is valid and active
195
- */
196
- isWaiverValid(waiver) {
197
- if (!waiver) {
198
- return false;
199
- }
200
-
201
- // Check status
202
- if (waiver.status !== 'active') {
203
- return false;
204
- }
205
-
206
- // Check expiry
207
- if (waiver.expires_at) {
208
- const expiryDate = new Date(waiver.expires_at);
209
- const now = new Date();
210
- if (now > expiryDate) {
211
- return false;
212
- }
213
- }
214
-
215
- // Check if it has required approvals
216
- if (!waiver.approvers || waiver.approvers.length === 0) {
217
- return false;
218
- }
219
-
220
- return true;
221
- }
222
-
223
- /**
224
- * Apply waivers to baseline budget
225
- *
226
- * @param {Object} baseline - Baseline budget from policy
227
- * @param {string[]} waiverIds - Array of waiver IDs to apply
228
- * @param {string} projectRoot - Project root directory
229
- * @returns {Promise<Object>} Effective budget with waivers applied
230
- */
231
- async applyWaivers(baseline, waiverIds, projectRoot) {
232
- const effective = { ...baseline };
233
- const applied = [];
234
-
235
- for (const waiverId of waiverIds) {
236
- const waiver = await this.loadWaiver(waiverId, projectRoot);
237
-
238
- if (waiver && this.isWaiverValid(waiver)) {
239
- // Apply additive delta
240
- if (waiver.delta) {
241
- if (waiver.delta.max_files) {
242
- effective.max_files += waiver.delta.max_files;
243
- }
244
- if (waiver.delta.max_loc) {
245
- effective.max_loc += waiver.delta.max_loc;
246
- }
247
- }
248
- applied.push(waiverId);
249
- }
250
- }
251
-
252
- return {
253
- effective,
254
- applied,
255
- };
256
- }
257
-
258
- /**
259
- * Validate policy structure
260
- *
261
- * @param {Object} policy - Policy to validate
262
- * @throws {Error} If policy is invalid
263
- */
264
- validatePolicy(policy) {
265
- if (!policy.version) {
266
- throw new Error('Policy missing version field');
267
- }
268
-
269
- if (!policy.risk_tiers) {
270
- throw new Error('Policy missing risk_tiers configuration');
271
- }
272
-
273
- const tierKeys = Object.keys(policy.risk_tiers);
274
- if (tierKeys.length === 0) {
275
- throw new Error('Policy risk_tiers must define at least one risk tier (1, 2, or 3)');
276
- }
277
- for (const key of tierKeys) {
278
- if (!/^[1-3]$/.test(key)) {
279
- throw new Error(`Policy risk_tiers has unknown tier '${key}' (expected 1, 2, or 3)`);
280
- }
281
- const budget = policy.risk_tiers[key];
282
- if (typeof budget.max_files !== 'number' || typeof budget.max_loc !== 'number') {
283
- throw new Error(`Risk tier ${key} missing or invalid budget limits`);
284
- }
285
- }
286
-
287
- // Validate edit rules if present
288
- if (policy.edit_rules) {
289
- if (typeof policy.edit_rules.policy_and_code_same_pr !== 'boolean') {
290
- throw new Error('edit_rules.policy_and_code_same_pr must be boolean');
291
- }
292
- if (typeof policy.edit_rules.min_approvers_for_budget_raise !== 'number') {
293
- throw new Error('edit_rules.min_approvers_for_budget_raise must be number');
294
- }
295
- }
296
- }
297
-
298
- /**
299
- * Get default CAWS policy
300
- *
301
- * Returns sensible defaults when policy.yaml doesn't exist.
302
- *
303
- * @returns {Object} Default policy configuration
304
- */
305
- getDefaultPolicy() {
306
- return {
307
- version: 1,
308
- risk_tiers: {
309
- 1: {
310
- max_files: 25,
311
- max_loc: 1000,
312
- description: 'Critical changes requiring manual review',
313
- },
314
- 2: {
315
- max_files: 50,
316
- max_loc: 2000,
317
- description: 'Standard features with automated gates',
318
- },
319
- 3: {
320
- max_files: 100,
321
- max_loc: 5000,
322
- description: 'Low-risk changes with minimal oversight',
323
- },
324
- },
325
- edit_rules: {
326
- policy_and_code_same_pr: false,
327
- min_approvers_for_budget_raise: 2,
328
- require_signed_commits: true,
329
- },
330
- gates: {
331
- budget_limit: {
332
- enabled: true,
333
- mode: 'block',
334
- description: 'Enforce change budget limits',
335
- },
336
- spec_completeness: {
337
- enabled: true,
338
- mode: 'block',
339
- description: 'Require complete working specifications',
340
- },
341
- scope_boundary: {
342
- enabled: true,
343
- mode: 'block',
344
- description: 'Enforce spec scope boundaries',
345
- },
346
- god_object: {
347
- enabled: true,
348
- mode: 'warn',
349
- thresholds: { warning: 1750, critical: 2000 },
350
- description: 'Detect oversized source files',
351
- },
352
- todo_detection: {
353
- enabled: true,
354
- mode: 'warn',
355
- thresholds: { min_confidence: 0.8 },
356
- description: 'Scan for TODO/FIXME/HACK/XXX markers',
357
- },
358
- },
359
- // CAWSFIX-26 / D9: empty by default. Projects that need to opt a
360
- // subtree out of scope enforcement (e.g., research/, playground/)
361
- // add glob patterns here, e.g. ['research/**']. Paths matching any
362
- // pattern bypass scope-boundary checks entirely.
363
- non_governed_zones: [],
364
- };
365
- }
366
-
367
- /**
368
- * Clear policy cache
369
- *
370
- * @param {string} [projectRoot] - Specific project to clear, or all if omitted
371
- */
372
- clearCache(projectRoot) {
373
- if (projectRoot) {
374
- this.policyCache.delete(projectRoot);
375
- } else {
376
- this.policyCache.clear();
377
- }
378
- }
379
-
380
- /**
381
- * Get cache status for a project
382
- *
383
- * @param {string} projectRoot - Project root directory
384
- * @returns {Object} Cache status information
385
- */
386
- getCacheStatus(projectRoot) {
387
- const cached = this.policyCache.get(projectRoot);
388
-
389
- if (!cached) {
390
- return {
391
- cached: false,
392
- ttl: this.cacheTTL,
393
- };
394
- }
395
-
396
- return {
397
- cached: true,
398
- age: Date.now() - cached.cachedAt,
399
- ttl: cached.ttl,
400
- remainingTTL: Math.max(0, cached.ttl - (Date.now() - cached.cachedAt)),
401
- };
402
- }
403
-
404
- /**
405
- * Reload policy from disk (bypassing cache)
406
- *
407
- * @param {string} projectRoot - Project root directory
408
- * @returns {Promise<Object>} Fresh policy
409
- */
410
- async reloadPolicy(projectRoot) {
411
- this.clearCache(projectRoot);
412
- return this.loadPolicy(projectRoot, { useCache: false });
413
- }
414
-
415
- /**
416
- * Get all cached projects
417
- *
418
- * @returns {string[]} Array of project roots with cached policies
419
- */
420
- getCachedProjects() {
421
- return Array.from(this.policyCache.keys());
422
- }
423
-
424
- /**
425
- * Get cache statistics
426
- *
427
- * @returns {Object} Cache statistics
428
- */
429
- getCacheStats() {
430
- const projects = this.getCachedProjects();
431
- const now = Date.now();
432
-
433
- const stats = {
434
- totalCached: projects.length,
435
- validCaches: 0,
436
- expiredCaches: 0,
437
- totalAge: 0,
438
- };
439
-
440
- for (const project of projects) {
441
- const cached = this.policyCache.get(project);
442
- const age = now - cached.cachedAt;
443
-
444
- stats.totalAge += age;
445
-
446
- if (age < cached.ttl) {
447
- stats.validCaches++;
448
- } else {
449
- stats.expiredCaches++;
450
- }
451
- }
452
-
453
- stats.averageAge = projects.length > 0 ? stats.totalAge / projects.length : 0;
454
-
455
- return stats;
456
- }
457
- }
458
-
459
- // Export singleton instance with default configuration
460
- const defaultPolicyManager = new PolicyManager();
461
-
462
- module.exports = {
463
- PolicyManager,
464
- defaultPolicyManager,
465
-
466
- // Convenience exports for backward compatibility
467
- loadPolicy: (projectRoot, options) => defaultPolicyManager.loadPolicy(projectRoot, options),
468
- clearCache: (projectRoot) => defaultPolicyManager.clearCache(projectRoot),
469
- getCacheStatus: (projectRoot) => defaultPolicyManager.getCacheStatus(projectRoot),
470
- };