@paths.design/caws-cli 10.2.0 → 11.1.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 (493) hide show
  1. package/README.md +125 -374
  2. package/dist/index.js +45 -787
  3. package/dist/init/harness-detect.d.ts +18 -0
  4. package/dist/init/harness-detect.d.ts.map +1 -0
  5. package/dist/init/harness-detect.js +90 -0
  6. package/dist/init/harness-detect.js.map +1 -0
  7. package/dist/init/hook-install.d.ts +53 -0
  8. package/dist/init/hook-install.d.ts.map +1 -0
  9. package/dist/init/hook-install.js +421 -0
  10. package/dist/init/hook-install.js.map +1 -0
  11. package/dist/init/hook-packs/manifest-claude-code.d.ts +4 -0
  12. package/dist/init/hook-packs/manifest-claude-code.d.ts.map +1 -0
  13. package/dist/init/hook-packs/manifest-claude-code.js +190 -0
  14. package/dist/init/hook-packs/manifest-claude-code.js.map +1 -0
  15. package/dist/init/hook-packs/register.d.ts +19 -0
  16. package/dist/init/hook-packs/register.d.ts.map +1 -0
  17. package/dist/init/hook-packs/register.js +37 -0
  18. package/dist/init/hook-packs/register.js.map +1 -0
  19. package/dist/init/hook-packs/types.d.ts +123 -0
  20. package/dist/init/hook-packs/types.d.ts.map +1 -0
  21. package/dist/init/hook-packs/types.js +29 -0
  22. package/dist/init/hook-packs/types.js.map +1 -0
  23. package/dist/shell/binding/resolve-binding.d.ts +4 -0
  24. package/dist/shell/binding/resolve-binding.d.ts.map +1 -0
  25. package/dist/shell/binding/resolve-binding.js +228 -0
  26. package/dist/shell/binding/resolve-binding.js.map +1 -0
  27. package/dist/shell/binding/types.d.ts +42 -0
  28. package/dist/shell/binding/types.d.ts.map +1 -0
  29. package/dist/shell/binding/types.js +21 -0
  30. package/dist/shell/binding/types.js.map +1 -0
  31. package/dist/shell/commands/claim.d.ts +14 -0
  32. package/dist/shell/commands/claim.d.ts.map +1 -0
  33. package/dist/shell/commands/claim.js +197 -0
  34. package/dist/shell/commands/claim.js.map +1 -0
  35. package/dist/shell/commands/doctor.d.ts +13 -0
  36. package/dist/shell/commands/doctor.d.ts.map +1 -0
  37. package/dist/shell/commands/doctor.js +97 -0
  38. package/dist/shell/commands/doctor.js.map +1 -0
  39. package/dist/shell/commands/evidence.d.ts +28 -0
  40. package/dist/shell/commands/evidence.d.ts.map +1 -0
  41. package/dist/shell/commands/evidence.js +166 -0
  42. package/dist/shell/commands/evidence.js.map +1 -0
  43. package/dist/shell/commands/gates.d.ts +19 -0
  44. package/dist/shell/commands/gates.d.ts.map +1 -0
  45. package/dist/shell/commands/gates.js +208 -0
  46. package/dist/shell/commands/gates.js.map +1 -0
  47. package/dist/shell/commands/init.d.ts +17 -0
  48. package/dist/shell/commands/init.d.ts.map +1 -0
  49. package/dist/shell/commands/init.js +168 -0
  50. package/dist/shell/commands/init.js.map +1 -0
  51. package/dist/shell/commands/scope.d.ts +11 -0
  52. package/dist/shell/commands/scope.d.ts.map +1 -0
  53. package/dist/shell/commands/scope.js +92 -0
  54. package/dist/shell/commands/scope.js.map +1 -0
  55. package/dist/shell/commands/specs.d.ts +41 -0
  56. package/dist/shell/commands/specs.d.ts.map +1 -0
  57. package/dist/shell/commands/specs.js +264 -0
  58. package/dist/shell/commands/specs.js.map +1 -0
  59. package/dist/shell/commands/status.d.ts +15 -0
  60. package/dist/shell/commands/status.d.ts.map +1 -0
  61. package/dist/shell/commands/status.js +106 -0
  62. package/dist/shell/commands/status.js.map +1 -0
  63. package/dist/shell/commands/waiver.d.ts +38 -0
  64. package/dist/shell/commands/waiver.d.ts.map +1 -0
  65. package/dist/shell/commands/waiver.js +240 -0
  66. package/dist/shell/commands/waiver.js.map +1 -0
  67. package/dist/shell/commands/worktree.d.ts +38 -0
  68. package/dist/shell/commands/worktree.d.ts.map +1 -0
  69. package/dist/shell/commands/worktree.js +286 -0
  70. package/dist/shell/commands/worktree.js.map +1 -0
  71. package/dist/shell/gates/disposition.d.ts +23 -0
  72. package/dist/shell/gates/disposition.d.ts.map +1 -0
  73. package/dist/shell/gates/disposition.js +117 -0
  74. package/dist/shell/gates/disposition.js.map +1 -0
  75. package/dist/shell/gates/gate-result-contract.d.ts +39 -0
  76. package/dist/shell/gates/gate-result-contract.d.ts.map +1 -0
  77. package/dist/shell/gates/gate-result-contract.js +150 -0
  78. package/dist/shell/gates/gate-result-contract.js.map +1 -0
  79. package/dist/shell/gates/local-evaluators/budget-limit.d.ts +24 -0
  80. package/dist/shell/gates/local-evaluators/budget-limit.d.ts.map +1 -0
  81. package/dist/shell/gates/local-evaluators/budget-limit.js +67 -0
  82. package/dist/shell/gates/local-evaluators/budget-limit.js.map +1 -0
  83. package/dist/shell/gates/local-evaluators/diff-helpers.d.ts +25 -0
  84. package/dist/shell/gates/local-evaluators/diff-helpers.d.ts.map +1 -0
  85. package/dist/shell/gates/local-evaluators/diff-helpers.js +74 -0
  86. package/dist/shell/gates/local-evaluators/diff-helpers.js.map +1 -0
  87. package/dist/shell/gates/local-evaluators/index.d.ts +28 -0
  88. package/dist/shell/gates/local-evaluators/index.d.ts.map +1 -0
  89. package/dist/shell/gates/local-evaluators/index.js +67 -0
  90. package/dist/shell/gates/local-evaluators/index.js.map +1 -0
  91. package/dist/shell/gates/local-evaluators/scope-boundary.d.ts +23 -0
  92. package/dist/shell/gates/local-evaluators/scope-boundary.d.ts.map +1 -0
  93. package/dist/shell/gates/local-evaluators/scope-boundary.js +67 -0
  94. package/dist/shell/gates/local-evaluators/scope-boundary.js.map +1 -0
  95. package/dist/shell/gates/local-evaluators/spec-completeness.d.ts +12 -0
  96. package/dist/shell/gates/local-evaluators/spec-completeness.d.ts.map +1 -0
  97. package/dist/shell/gates/local-evaluators/spec-completeness.js +73 -0
  98. package/dist/shell/gates/local-evaluators/spec-completeness.js.map +1 -0
  99. package/dist/shell/gates/quality-gates-adapter.d.ts +55 -0
  100. package/dist/shell/gates/quality-gates-adapter.d.ts.map +1 -0
  101. package/dist/shell/gates/quality-gates-adapter.js +161 -0
  102. package/dist/shell/gates/quality-gates-adapter.js.map +1 -0
  103. package/dist/shell/gates/waiver-filter.d.ts +58 -0
  104. package/dist/shell/gates/waiver-filter.d.ts.map +1 -0
  105. package/dist/shell/gates/waiver-filter.js +119 -0
  106. package/dist/shell/gates/waiver-filter.js.map +1 -0
  107. package/dist/shell/index.d.ts +54 -0
  108. package/dist/shell/index.d.ts.map +1 -0
  109. package/dist/shell/index.js +85 -0
  110. package/dist/shell/index.js.map +1 -0
  111. package/dist/shell/register.d.ts +11 -0
  112. package/dist/shell/register.d.ts.map +1 -0
  113. package/dist/shell/register.js +464 -0
  114. package/dist/shell/register.js.map +1 -0
  115. package/dist/shell/render/claim.d.ts +22 -0
  116. package/dist/shell/render/claim.d.ts.map +1 -0
  117. package/dist/shell/render/claim.js +75 -0
  118. package/dist/shell/render/claim.js.map +1 -0
  119. package/dist/shell/render/decision.d.ts +15 -0
  120. package/dist/shell/render/decision.d.ts.map +1 -0
  121. package/dist/shell/render/decision.js +66 -0
  122. package/dist/shell/render/decision.js.map +1 -0
  123. package/dist/shell/render/diagnostic.d.ts +19 -0
  124. package/dist/shell/render/diagnostic.d.ts.map +1 -0
  125. package/dist/shell/render/diagnostic.js +76 -0
  126. package/dist/shell/render/diagnostic.js.map +1 -0
  127. package/dist/shell/render/finding.d.ts +15 -0
  128. package/dist/shell/render/finding.d.ts.map +1 -0
  129. package/dist/shell/render/finding.js +57 -0
  130. package/dist/shell/render/finding.js.map +1 -0
  131. package/dist/shell/render/gates.d.ts +3 -0
  132. package/dist/shell/render/gates.d.ts.map +1 -0
  133. package/dist/shell/render/gates.js +56 -0
  134. package/dist/shell/render/gates.js.map +1 -0
  135. package/dist/shell/render/init-hook-pack.d.ts +16 -0
  136. package/dist/shell/render/init-hook-pack.d.ts.map +1 -0
  137. package/dist/shell/render/init-hook-pack.js +206 -0
  138. package/dist/shell/render/init-hook-pack.js.map +1 -0
  139. package/dist/shell/render/init.d.ts +11 -0
  140. package/dist/shell/render/init.d.ts.map +1 -0
  141. package/dist/shell/render/init.js +32 -0
  142. package/dist/shell/render/init.js.map +1 -0
  143. package/dist/shell/render/status.d.ts +26 -0
  144. package/dist/shell/render/status.d.ts.map +1 -0
  145. package/dist/shell/render/status.js +143 -0
  146. package/dist/shell/render/status.js.map +1 -0
  147. package/dist/shell/render/waiver.d.ts +21 -0
  148. package/dist/shell/render/waiver.d.ts.map +1 -0
  149. package/dist/shell/render/waiver.js +94 -0
  150. package/dist/shell/render/waiver.js.map +1 -0
  151. package/dist/shell/rules.d.ts +37 -0
  152. package/dist/shell/rules.d.ts.map +1 -0
  153. package/dist/shell/rules.js +51 -0
  154. package/dist/shell/rules.js.map +1 -0
  155. package/dist/shell/session/actor.d.ts +14 -0
  156. package/dist/shell/session/actor.d.ts.map +1 -0
  157. package/dist/shell/session/actor.js +34 -0
  158. package/dist/shell/session/actor.js.map +1 -0
  159. package/dist/shell/session/resolve-session.d.ts +5 -0
  160. package/dist/shell/session/resolve-session.d.ts.map +1 -0
  161. package/dist/shell/session/resolve-session.js +239 -0
  162. package/dist/shell/session/resolve-session.js.map +1 -0
  163. package/dist/shell/session/types.d.ts +56 -0
  164. package/dist/shell/session/types.d.ts.map +1 -0
  165. package/dist/shell/session/types.js +15 -0
  166. package/dist/shell/session/types.js.map +1 -0
  167. package/dist/store/agents-store.d.ts +3 -0
  168. package/dist/store/agents-store.d.ts.map +1 -0
  169. package/dist/store/agents-store.js +63 -0
  170. package/dist/store/agents-store.js.map +1 -0
  171. package/dist/store/apply-patch.d.ts +16 -0
  172. package/dist/store/apply-patch.d.ts.map +1 -0
  173. package/dist/store/apply-patch.js +191 -0
  174. package/dist/store/apply-patch.js.map +1 -0
  175. package/dist/store/atomic-write.d.ts +34 -0
  176. package/dist/store/atomic-write.d.ts.map +1 -0
  177. package/dist/store/atomic-write.js +174 -0
  178. package/dist/store/atomic-write.js.map +1 -0
  179. package/dist/store/doctor-snapshot.d.ts +20 -0
  180. package/dist/store/doctor-snapshot.d.ts.map +1 -0
  181. package/dist/store/doctor-snapshot.js +176 -0
  182. package/dist/store/doctor-snapshot.js.map +1 -0
  183. package/dist/store/events-store.d.ts +33 -0
  184. package/dist/store/events-store.d.ts.map +1 -0
  185. package/dist/store/events-store.js +297 -0
  186. package/dist/store/events-store.js.map +1 -0
  187. package/dist/store/index.d.ts +21 -0
  188. package/dist/store/index.d.ts.map +1 -0
  189. package/dist/store/index.js +47 -0
  190. package/dist/store/index.js.map +1 -0
  191. package/dist/store/init-store.d.ts +21 -0
  192. package/dist/store/init-store.d.ts.map +1 -0
  193. package/dist/store/init-store.js +295 -0
  194. package/dist/store/init-store.js.map +1 -0
  195. package/dist/store/json-store.d.ts +3 -0
  196. package/dist/store/json-store.d.ts.map +1 -0
  197. package/dist/store/json-store.js +65 -0
  198. package/dist/store/json-store.js.map +1 -0
  199. package/dist/store/lifecycle-lock.d.ts +34 -0
  200. package/dist/store/lifecycle-lock.d.ts.map +1 -0
  201. package/dist/store/lifecycle-lock.js +168 -0
  202. package/dist/store/lifecycle-lock.js.map +1 -0
  203. package/dist/store/lifecycle-transaction.d.ts +79 -0
  204. package/dist/store/lifecycle-transaction.d.ts.map +1 -0
  205. package/dist/store/lifecycle-transaction.js +319 -0
  206. package/dist/store/lifecycle-transaction.js.map +1 -0
  207. package/dist/store/policy-store.d.ts +3 -0
  208. package/dist/store/policy-store.d.ts.map +1 -0
  209. package/dist/store/policy-store.js +65 -0
  210. package/dist/store/policy-store.js.map +1 -0
  211. package/dist/store/repo-root.d.ts +46 -0
  212. package/dist/store/repo-root.d.ts.map +1 -0
  213. package/dist/store/repo-root.js +145 -0
  214. package/dist/store/repo-root.js.map +1 -0
  215. package/dist/store/rules.d.ts +69 -0
  216. package/dist/store/rules.d.ts.map +1 -0
  217. package/dist/store/rules.js +95 -0
  218. package/dist/store/rules.js.map +1 -0
  219. package/dist/store/specs-store.d.ts +3 -0
  220. package/dist/store/specs-store.d.ts.map +1 -0
  221. package/dist/store/specs-store.js +131 -0
  222. package/dist/store/specs-store.js.map +1 -0
  223. package/dist/store/specs-writer.d.ts +61 -0
  224. package/dist/store/specs-writer.d.ts.map +1 -0
  225. package/dist/store/specs-writer.js +506 -0
  226. package/dist/store/specs-writer.js.map +1 -0
  227. package/dist/store/types.d.ts +84 -0
  228. package/dist/store/types.d.ts.map +1 -0
  229. package/dist/store/types.js +14 -0
  230. package/dist/store/types.js.map +1 -0
  231. package/dist/store/waivers-store.d.ts +25 -0
  232. package/dist/store/waivers-store.d.ts.map +1 -0
  233. package/dist/store/waivers-store.js +232 -0
  234. package/dist/store/waivers-store.js.map +1 -0
  235. package/dist/store/worktrees-store.d.ts +3 -0
  236. package/dist/store/worktrees-store.d.ts.map +1 -0
  237. package/dist/store/worktrees-store.js +62 -0
  238. package/dist/store/worktrees-store.js.map +1 -0
  239. package/dist/store/worktrees-writer.d.ts +77 -0
  240. package/dist/store/worktrees-writer.d.ts.map +1 -0
  241. package/dist/store/worktrees-writer.js +674 -0
  242. package/dist/store/worktrees-writer.js.map +1 -0
  243. package/dist/store/yaml-patch.d.ts +7 -0
  244. package/dist/store/yaml-patch.d.ts.map +1 -0
  245. package/dist/store/yaml-patch.js +250 -0
  246. package/dist/store/yaml-patch.js.map +1 -0
  247. package/dist/store/yaml-store.d.ts +9 -0
  248. package/dist/store/yaml-store.d.ts.map +1 -0
  249. package/dist/store/yaml-store.js +121 -0
  250. package/dist/store/yaml-store.js.map +1 -0
  251. package/package.json +15 -13
  252. package/dist/budget-derivation.js +0 -751
  253. package/dist/cicd-optimizer.js +0 -504
  254. package/dist/commands/agents.js +0 -124
  255. package/dist/commands/archive.js +0 -500
  256. package/dist/commands/burnup.js +0 -198
  257. package/dist/commands/diagnose.js +0 -525
  258. package/dist/commands/evaluate.js +0 -314
  259. package/dist/commands/gates.js +0 -149
  260. package/dist/commands/init.js +0 -857
  261. package/dist/commands/iterate.js +0 -417
  262. package/dist/commands/mode.js +0 -269
  263. package/dist/commands/parallel.js +0 -242
  264. package/dist/commands/plan.js +0 -438
  265. package/dist/commands/provenance.js +0 -1143
  266. package/dist/commands/quality-monitor.js +0 -284
  267. package/dist/commands/scope.js +0 -264
  268. package/dist/commands/session.js +0 -312
  269. package/dist/commands/sidecar.js +0 -74
  270. package/dist/commands/specs.js +0 -1656
  271. package/dist/commands/status.js +0 -1172
  272. package/dist/commands/templates.js +0 -237
  273. package/dist/commands/tool.js +0 -136
  274. package/dist/commands/tutorial.js +0 -480
  275. package/dist/commands/validate.js +0 -357
  276. package/dist/commands/verify-acs.js +0 -443
  277. package/dist/commands/waivers.js +0 -599
  278. package/dist/commands/workflow.js +0 -243
  279. package/dist/commands/worktree.js +0 -502
  280. package/dist/config/lite-scope.js +0 -158
  281. package/dist/config/modes.js +0 -347
  282. package/dist/constants/spec-types.js +0 -65
  283. package/dist/gates/budget-limit.js +0 -121
  284. package/dist/gates/feedback.js +0 -260
  285. package/dist/gates/format.js +0 -179
  286. package/dist/gates/god-object.js +0 -117
  287. package/dist/gates/pipeline.js +0 -167
  288. package/dist/gates/scope-boundary.js +0 -112
  289. package/dist/gates/spec-completeness.js +0 -109
  290. package/dist/gates/todo-detection.js +0 -205
  291. package/dist/generators/jest-config-generator.js +0 -242
  292. package/dist/generators/working-spec.js +0 -237
  293. package/dist/minimal-cli.js +0 -88
  294. package/dist/parallel/parallel-manager.js +0 -433
  295. package/dist/policy/PolicyManager.js +0 -470
  296. package/dist/scaffold/claude-hooks.js +0 -443
  297. package/dist/scaffold/cursor-hooks.js +0 -177
  298. package/dist/scaffold/git-hooks.js +0 -928
  299. package/dist/scaffold/index.js +0 -794
  300. package/dist/session/session-manager.js +0 -653
  301. package/dist/sidecars/index.js +0 -33
  302. package/dist/sidecars/listeners.js +0 -40
  303. package/dist/sidecars/provenance-summary.js +0 -238
  304. package/dist/sidecars/quality-gaps.js +0 -258
  305. package/dist/sidecars/schema.js +0 -149
  306. package/dist/sidecars/spec-drift.js +0 -151
  307. package/dist/sidecars/waiver-draft.js +0 -176
  308. package/dist/spec/SpecFileManager.js +0 -419
  309. package/dist/templates/.caws/schemas/policy.schema.json +0 -117
  310. package/dist/templates/.caws/schemas/scope.schema.json +0 -52
  311. package/dist/templates/.caws/schemas/waivers.schema.json +0 -106
  312. package/dist/templates/.caws/schemas/working-spec.schema.json +0 -340
  313. package/dist/templates/.caws/schemas/worktrees.schema.json +0 -38
  314. package/dist/templates/.caws/templates/working-spec.template.yml +0 -80
  315. package/dist/templates/.caws/tools/README.md +0 -18
  316. package/dist/templates/.caws/tools/scope-guard.js +0 -203
  317. package/dist/templates/.caws/tools-allow.json +0 -331
  318. package/dist/templates/.caws/waivers.yml +0 -19
  319. package/dist/templates/.claude/README.md +0 -190
  320. package/dist/templates/.claude/hooks/audit.sh +0 -121
  321. package/dist/templates/.claude/hooks/block-dangerous.sh +0 -203
  322. package/dist/templates/.claude/hooks/classify_command.py +0 -592
  323. package/dist/templates/.claude/hooks/doc-frontmatter-check.sh +0 -173
  324. package/dist/templates/.claude/hooks/lite-sprawl-check.sh +0 -145
  325. package/dist/templates/.claude/hooks/naming-check.sh +0 -100
  326. package/dist/templates/.claude/hooks/protected-paths.sh +0 -39
  327. package/dist/templates/.claude/hooks/quality-check.sh +0 -81
  328. package/dist/templates/.claude/hooks/scan-secrets.sh +0 -85
  329. package/dist/templates/.claude/hooks/scope-guard.sh +0 -381
  330. package/dist/templates/.claude/hooks/session-caws-status.sh +0 -117
  331. package/dist/templates/.claude/hooks/session-log.sh +0 -634
  332. package/dist/templates/.claude/hooks/simplification-guard.sh +0 -92
  333. package/dist/templates/.claude/hooks/stop-worktree-check.sh +0 -46
  334. package/dist/templates/.claude/hooks/test_classify_command.py +0 -370
  335. package/dist/templates/.claude/hooks/test_wrapper_smoke.sh +0 -96
  336. package/dist/templates/.claude/hooks/validate-spec.sh +0 -76
  337. package/dist/templates/.claude/hooks/worktree-guard.sh +0 -220
  338. package/dist/templates/.claude/hooks/worktree-write-guard.sh +0 -190
  339. package/dist/templates/.claude/rules/git-safety.md +0 -26
  340. package/dist/templates/.claude/rules/worktree-isolation.md +0 -101
  341. package/dist/templates/.claude/settings.json +0 -141
  342. package/dist/templates/.cursor/README.md +0 -299
  343. package/dist/templates/.cursor/hooks/audit.sh +0 -55
  344. package/dist/templates/.cursor/hooks/block-dangerous.sh +0 -84
  345. package/dist/templates/.cursor/hooks/caws-quality-check.sh +0 -52
  346. package/dist/templates/.cursor/hooks/caws-scope-guard.sh +0 -130
  347. package/dist/templates/.cursor/hooks/format.sh +0 -38
  348. package/dist/templates/.cursor/hooks/naming-check.sh +0 -64
  349. package/dist/templates/.cursor/hooks/scan-secrets.sh +0 -51
  350. package/dist/templates/.cursor/hooks/scope-guard.sh +0 -52
  351. package/dist/templates/.cursor/hooks/session-log.sh +0 -924
  352. package/dist/templates/.cursor/hooks/validate-spec.sh +0 -83
  353. package/dist/templates/.cursor/hooks.json +0 -76
  354. package/dist/templates/.cursor/rules/00-claims-verification.mdc +0 -144
  355. package/dist/templates/.cursor/rules/01-working-style.mdc +0 -50
  356. package/dist/templates/.cursor/rules/02-quality-gates.mdc +0 -368
  357. package/dist/templates/.cursor/rules/03-naming-and-refactor.mdc +0 -33
  358. package/dist/templates/.cursor/rules/04-logging-language-style.mdc +0 -23
  359. package/dist/templates/.cursor/rules/05-safe-defaults-guards.mdc +0 -23
  360. package/dist/templates/.cursor/rules/06-typescript-conventions.mdc +0 -36
  361. package/dist/templates/.cursor/rules/07-process-ops.mdc +0 -20
  362. package/dist/templates/.cursor/rules/08-solid-and-architecture.mdc +0 -16
  363. package/dist/templates/.cursor/rules/09-docstrings.mdc +0 -89
  364. package/dist/templates/.cursor/rules/10-documentation-quality-standards.mdc +0 -385
  365. package/dist/templates/.cursor/rules/11-scope-management-waivers.mdc +0 -381
  366. package/dist/templates/.cursor/rules/12-implementation-completeness.mdc +0 -516
  367. package/dist/templates/.cursor/rules/13-language-agnostic-standards.mdc +0 -578
  368. package/dist/templates/.cursor/rules/README.md +0 -148
  369. package/dist/templates/.github/copilot-instructions.md +0 -82
  370. package/dist/templates/.idea/runConfigurations/CAWS_Evaluate.xml +0 -5
  371. package/dist/templates/.idea/runConfigurations/CAWS_Validate.xml +0 -5
  372. package/dist/templates/.junie/guidelines.md +0 -73
  373. package/dist/templates/.vscode/launch.json +0 -17
  374. package/dist/templates/.vscode/settings.json +0 -95
  375. package/dist/templates/.windsurf/rules/caws-quality-standards.md +0 -54
  376. package/dist/templates/.windsurf/workflows/caws-guided-development.md +0 -92
  377. package/dist/templates/CLAUDE.md +0 -196
  378. package/dist/templates/COMMIT_CONVENTIONS.md +0 -86
  379. package/dist/templates/OIDC_SETUP.md +0 -300
  380. package/dist/templates/agents.md +0 -171
  381. package/dist/templates/codemod/README.md +0 -1
  382. package/dist/templates/codemod/test.js +0 -93
  383. package/dist/templates/docs/README.md +0 -151
  384. package/dist/templates/scripts/new_feature.sh +0 -80
  385. package/dist/templates/scripts/quality-gates/check-god-objects.js +0 -146
  386. package/dist/templates/scripts/quality-gates/run-quality-gates.js +0 -50
  387. package/dist/templates/scripts/v3/analysis/todo_analyzer.py +0 -1997
  388. package/dist/test-analysis.js +0 -786
  389. package/dist/tool-interface.js +0 -314
  390. package/dist/tool-loader.js +0 -303
  391. package/dist/tool-validator.js +0 -393
  392. package/dist/utils/agent-display.js +0 -210
  393. package/dist/utils/agent-session.js +0 -344
  394. package/dist/utils/async-utils.js +0 -188
  395. package/dist/utils/command-wrapper.js +0 -200
  396. package/dist/utils/event-log.js +0 -584
  397. package/dist/utils/event-renderer.js +0 -521
  398. package/dist/utils/finalization.js +0 -230
  399. package/dist/utils/git-lock.js +0 -119
  400. package/dist/utils/gitignore-updater.js +0 -158
  401. package/dist/utils/ide-detection.js +0 -133
  402. package/dist/utils/lifecycle-events.js +0 -94
  403. package/dist/utils/project-analysis.js +0 -367
  404. package/dist/utils/promise-utils.js +0 -72
  405. package/dist/utils/quality-gates-errors.js +0 -520
  406. package/dist/utils/quality-gates-utils.js +0 -387
  407. package/dist/utils/schema-validator.js +0 -50
  408. package/dist/utils/spec-resolver.js +0 -711
  409. package/dist/utils/typescript-detector.js +0 -369
  410. package/dist/utils/working-state.js +0 -530
  411. package/dist/utils/yaml-validation.js +0 -156
  412. package/dist/validation/spec-validation.js +0 -924
  413. package/dist/waivers-manager.js +0 -732
  414. package/dist/worktree/worktree-manager.js +0 -1735
  415. package/templates/.caws/schemas/policy.schema.json +0 -117
  416. package/templates/.caws/schemas/scope.schema.json +0 -52
  417. package/templates/.caws/schemas/waivers.schema.json +0 -106
  418. package/templates/.caws/schemas/working-spec.schema.json +0 -340
  419. package/templates/.caws/schemas/worktrees.schema.json +0 -38
  420. package/templates/.caws/templates/working-spec.template.yml +0 -80
  421. package/templates/.caws/tools/README.md +0 -18
  422. package/templates/.caws/tools/scope-guard.js +0 -203
  423. package/templates/.caws/tools-allow.json +0 -331
  424. package/templates/.caws/waivers.yml +0 -19
  425. package/templates/.claude/README.md +0 -190
  426. package/templates/.claude/hooks/audit.sh +0 -121
  427. package/templates/.claude/hooks/block-dangerous.sh +0 -203
  428. package/templates/.claude/hooks/classify_command.py +0 -592
  429. package/templates/.claude/hooks/doc-frontmatter-check.sh +0 -173
  430. package/templates/.claude/hooks/lite-sprawl-check.sh +0 -145
  431. package/templates/.claude/hooks/naming-check.sh +0 -100
  432. package/templates/.claude/hooks/protected-paths.sh +0 -39
  433. package/templates/.claude/hooks/quality-check.sh +0 -81
  434. package/templates/.claude/hooks/scan-secrets.sh +0 -85
  435. package/templates/.claude/hooks/scope-guard.sh +0 -381
  436. package/templates/.claude/hooks/session-caws-status.sh +0 -117
  437. package/templates/.claude/hooks/session-log.sh +0 -634
  438. package/templates/.claude/hooks/simplification-guard.sh +0 -92
  439. package/templates/.claude/hooks/stop-worktree-check.sh +0 -46
  440. package/templates/.claude/hooks/test_classify_command.py +0 -370
  441. package/templates/.claude/hooks/test_wrapper_smoke.sh +0 -96
  442. package/templates/.claude/hooks/validate-spec.sh +0 -76
  443. package/templates/.claude/hooks/worktree-guard.sh +0 -220
  444. package/templates/.claude/hooks/worktree-write-guard.sh +0 -190
  445. package/templates/.claude/rules/git-safety.md +0 -26
  446. package/templates/.claude/rules/worktree-isolation.md +0 -101
  447. package/templates/.claude/settings.json +0 -141
  448. package/templates/.cursor/README.md +0 -299
  449. package/templates/.cursor/hooks/audit.sh +0 -55
  450. package/templates/.cursor/hooks/block-dangerous.sh +0 -84
  451. package/templates/.cursor/hooks/caws-quality-check.sh +0 -52
  452. package/templates/.cursor/hooks/caws-scope-guard.sh +0 -130
  453. package/templates/.cursor/hooks/format.sh +0 -38
  454. package/templates/.cursor/hooks/naming-check.sh +0 -64
  455. package/templates/.cursor/hooks/scan-secrets.sh +0 -51
  456. package/templates/.cursor/hooks/scope-guard.sh +0 -52
  457. package/templates/.cursor/hooks/session-log.sh +0 -924
  458. package/templates/.cursor/hooks/validate-spec.sh +0 -83
  459. package/templates/.cursor/hooks.json +0 -76
  460. package/templates/.cursor/rules/00-claims-verification.mdc +0 -144
  461. package/templates/.cursor/rules/01-working-style.mdc +0 -50
  462. package/templates/.cursor/rules/02-quality-gates.mdc +0 -368
  463. package/templates/.cursor/rules/03-naming-and-refactor.mdc +0 -33
  464. package/templates/.cursor/rules/04-logging-language-style.mdc +0 -23
  465. package/templates/.cursor/rules/05-safe-defaults-guards.mdc +0 -23
  466. package/templates/.cursor/rules/06-typescript-conventions.mdc +0 -36
  467. package/templates/.cursor/rules/07-process-ops.mdc +0 -20
  468. package/templates/.cursor/rules/08-solid-and-architecture.mdc +0 -16
  469. package/templates/.cursor/rules/09-docstrings.mdc +0 -89
  470. package/templates/.cursor/rules/10-documentation-quality-standards.mdc +0 -385
  471. package/templates/.cursor/rules/11-scope-management-waivers.mdc +0 -381
  472. package/templates/.cursor/rules/12-implementation-completeness.mdc +0 -516
  473. package/templates/.cursor/rules/13-language-agnostic-standards.mdc +0 -578
  474. package/templates/.cursor/rules/README.md +0 -148
  475. package/templates/.github/copilot-instructions.md +0 -82
  476. package/templates/.idea/runConfigurations/CAWS_Evaluate.xml +0 -5
  477. package/templates/.idea/runConfigurations/CAWS_Validate.xml +0 -5
  478. package/templates/.junie/guidelines.md +0 -73
  479. package/templates/.vscode/launch.json +0 -17
  480. package/templates/.vscode/settings.json +0 -95
  481. package/templates/.windsurf/rules/caws-quality-standards.md +0 -54
  482. package/templates/.windsurf/workflows/caws-guided-development.md +0 -92
  483. package/templates/CLAUDE.md +0 -196
  484. package/templates/COMMIT_CONVENTIONS.md +0 -86
  485. package/templates/OIDC_SETUP.md +0 -300
  486. package/templates/agents.md +0 -171
  487. package/templates/codemod/README.md +0 -1
  488. package/templates/codemod/test.js +0 -93
  489. package/templates/docs/README.md +0 -151
  490. package/templates/scripts/new_feature.sh +0 -80
  491. package/templates/scripts/quality-gates/check-god-objects.js +0 -146
  492. package/templates/scripts/quality-gates/run-quality-gates.js +0 -50
  493. package/templates/scripts/v3/analysis/todo_analyzer.py +0 -1997
@@ -1,299 +0,0 @@
1
- # CAWS Cursor IDE Integration
2
-
3
- This directory contains Cursor IDE hooks that provide real-time CAWS quality assurance integration during development.
4
-
5
- ## Overview
6
-
7
- Cursor hooks enable seamless integration between CAWS and the Cursor IDE, providing:
8
-
9
- - **Real-time quality validation** as you code
10
- - **Automatic spec validation** when editing working specs
11
- - **Scope enforcement** preventing out-of-scope file access
12
- - **Quality monitoring** after file edits
13
-
14
- ## Hook Configuration
15
-
16
- The `hooks.json` file defines when each hook runs:
17
-
18
- ```json
19
- {
20
- "beforeShellExecution": ["block-dangerous.sh", "audit.sh"],
21
- "beforeReadFile": ["scan-secrets.sh", "caws-scope-guard.sh"],
22
- "afterFileEdit": ["format.sh", "naming-check.sh", "validate-spec.sh", "caws-quality-check.sh", "audit.sh"],
23
- "beforeSubmitPrompt": ["caws-scope-guard.sh", "audit.sh"],
24
- "stop": ["audit.sh"]
25
- }
26
- ```
27
-
28
- ## Available Hooks
29
-
30
- ### CAWS-Specific Hooks
31
-
32
- #### `caws-quality-check.sh`
33
- - **Trigger**: `afterFileEdit`
34
- - **Purpose**: Runs CAWS quality evaluation after code changes
35
- - **Blocks**: No (provides warnings and suggestions)
36
- - **Fallback**: Graceful degradation if CAWS CLI unavailable
37
-
38
- #### `caws-scope-guard.sh`
39
- - **Trigger**: `beforeReadFile`, `beforeSubmitPrompt`
40
- - **Purpose**: Prevents access to files outside CAWS-defined scope
41
- - **Blocks**: Yes (for out-of-scope file access)
42
- - **Requires**: `.caws/working-spec.yaml`
43
-
44
- ### General Security Hooks
45
-
46
- #### `block-dangerous.sh`
47
- - **Trigger**: `beforeShellExecution`
48
- - **Purpose**: Prevents execution of dangerous shell commands
49
- - **Blocks**: `rm -rf /`, `sudo`, destructive operations
50
-
51
- #### `scan-secrets.sh`
52
- - **Trigger**: `beforeReadFile`
53
- - **Purpose**: Scans for potential secrets before file access
54
- - **Blocks**: Files containing password/token patterns
55
-
56
- ### Code Quality Hooks
57
-
58
- #### `format.sh`
59
- - **Trigger**: `afterFileEdit`
60
- - **Purpose**: Auto-formats code using Prettier/ESLint
61
- - **Blocks**: No (formats in background)
62
-
63
- #### `naming-check.sh`
64
- - **Trigger**: `afterFileEdit`
65
- - **Purpose**: Enforces CAWS naming conventions
66
- - **Blocks**: No (provides warnings)
67
-
68
- #### `validate-spec.sh`
69
- - **Trigger**: `afterFileEdit`
70
- - **Purpose**: Validates CAWS working specs in real-time
71
- - **Blocks**: No (shows validation errors)
72
-
73
- ### Audit Hooks
74
-
75
- #### `audit.sh`
76
- - **Trigger**: Multiple events
77
- - **Purpose**: Logs all hook executions for debugging
78
- - **Blocks**: No (passive logging)
79
-
80
- ## Installation
81
-
82
- ### Automatic Setup
83
-
84
- ```bash
85
- # CAWS init automatically sets up Cursor hooks
86
- caws init my-project --interactive
87
-
88
- # Or manually scaffold hooks
89
- caws scaffold
90
- ```
91
-
92
- ### Manual Setup
93
-
94
- 1. Copy `.cursor/` directory to your project root
95
- 2. Ensure hook scripts are executable: `chmod +x .cursor/hooks/*.sh`
96
- 3. Restart Cursor IDE
97
- 4. Verify hooks are active in Cursor settings
98
-
99
- ## Configuration
100
-
101
- ### Environment Variables
102
-
103
- ```bash
104
- # Enable debug logging
105
- export CURSOR_HOOKS_DEBUG=1
106
-
107
- # CAWS CLI path override
108
- export CAWS_CLI_PATH=/custom/path/to/caws
109
-
110
- # Disable specific hooks
111
- export CURSOR_DISABLE_HOOKS=audit.sh,format.sh
112
- ```
113
-
114
- ### Hook Customization
115
-
116
- Modify `hooks.json` to customize hook behavior:
117
-
118
- ```json
119
- {
120
- "afterFileEdit": [
121
- {
122
- "command": "./.cursor/hooks/caws-quality-check.sh",
123
- "timeout": 5000,
124
- "background": true
125
- }
126
- ]
127
- }
128
- ```
129
-
130
- ## Troubleshooting
131
-
132
- ### Hooks Not Running
133
-
134
- ```bash
135
- # Check hook permissions
136
- ls -la .cursor/hooks/
137
-
138
- # Verify Cursor hooks are enabled
139
- # Cursor Settings → Hooks → Enable hooks
140
-
141
- # Check Cursor logs
142
- # Help → Toggle Developer Tools → Console
143
- ```
144
-
145
- ### CAWS CLI Not Found
146
-
147
- ```bash
148
- # Install CAWS CLI
149
- npm install -g @caws/cli
150
-
151
- # Verify PATH
152
- which caws
153
- ```
154
-
155
- ### False Positives
156
-
157
- ```bash
158
- # Temporarily disable hooks
159
- export CURSOR_DISABLE_HOOKS=caws-scope-guard.sh
160
-
161
- # Or modify hook logic
162
- vim .cursor/hooks/caws-scope-guard.sh
163
- ```
164
-
165
- ### Performance Issues
166
-
167
- ```bash
168
- # Run hooks in background
169
- # Edit hooks.json to add "background": true
170
-
171
- # Increase timeouts
172
- # Edit hooks.json to add "timeout": 10000
173
-
174
- # Disable slow hooks
175
- export CURSOR_DISABLE_HOOKS=format.sh,naming-check.sh
176
- ```
177
-
178
- ## Development
179
-
180
- ### Creating New Hooks
181
-
182
- 1. **Create script** in `.cursor/hooks/`
183
- 2. **Make executable**: `chmod +x .cursor/hooks/your-hook.sh`
184
- 3. **Add to configuration** in `hooks.json`
185
- 4. **Test manually**: `echo '{}' | ./cursor/hooks/your-hook.sh`
186
-
187
- ### Hook Script Template
188
-
189
- ```bash
190
- #!/bin/bash
191
- # CAWS Hook: Description
192
- # @author @darianrosebrook
193
-
194
- set -e
195
-
196
- # Read Cursor input
197
- INPUT=$(cat)
198
- DATA=$(echo "$INPUT" | jq -r '.data // ""')
199
-
200
- # Your hook logic here
201
- if [[ -n "$DATA" ]]; then
202
- # Process data
203
- echo '{"userMessage": "Hook executed", "agentMessage": "Details"}'
204
- fi
205
-
206
- exit 0
207
- ```
208
-
209
- ### Testing Hooks
210
-
211
- ```bash
212
- # Test with sample input
213
- echo '{"action": "edit_file", "file_path": "test.js"}' | ./cursor/hooks/caws-quality-check.sh
214
-
215
- # Test error conditions
216
- echo '{}' | ./cursor/hooks/caws-scope-guard.sh
217
-
218
- # Debug with verbose output
219
- export CURSOR_HOOKS_DEBUG=1
220
- ```
221
-
222
- ## Integration with CAWS Ecosystem
223
-
224
- ### Relationship to Other Tools
225
-
226
- ```
227
- Cursor Hooks ←→ CAWS CLI ←→ VS Code Extension
228
- ↓ ↓ ↓
229
- Real-time Command-line Rich IDE
230
- Validation Interface Integration
231
- ```
232
-
233
- ### Complementary Tools
234
-
235
- - **Git Hooks**: `.git/hooks/` for commit/push validation
236
- - **VS Code Extension**: Rich UI for CAWS operations
237
- - **CAWS CLI**: Core functionality
238
-
239
- ### Data Flow
240
-
241
- ```
242
- File Edit → Cursor Hook → CAWS CLI → Quality Check → User Feedback
243
-
244
- Audit Log → Provenance Tracking
245
- ```
246
-
247
- ## Security Considerations
248
-
249
- ### Safe Execution
250
-
251
- - Hooks run in isolated processes
252
- - No access to sensitive Cursor data
253
- - Input validation on all hook data
254
- - Timeout protection against hanging hooks
255
-
256
- ### Privacy Protection
257
-
258
- - File contents not sent to external services
259
- - Local CAWS CLI execution only
260
- - No telemetry or data collection
261
- - User-controlled hook execution
262
-
263
- ## Performance Optimization
264
-
265
- ### Hook Design Principles
266
-
267
- 1. **Fast Execution**: < 2 seconds for real-time feedback
268
- 2. **Background Processing**: Non-blocking operations
269
- 3. **Selective Running**: Only run relevant hooks
270
- 4. **Caching**: Avoid redundant operations
271
-
272
- ### Optimization Strategies
273
-
274
- - **Debounced execution** for file edit hooks
275
- - **Incremental validation** for large codebases
276
- - **Parallel processing** for independent checks
277
- - **Result caching** for repeated operations
278
-
279
- ## Contributing
280
-
281
- ### Hook Development Guidelines
282
-
283
- - **Clear naming**: `caws-*` prefix for CAWS-specific hooks
284
- - **Comprehensive logging**: Debug-friendly output
285
- - **Error handling**: Graceful failure modes
286
- - **Documentation**: Inline comments and README updates
287
- - **Testing**: Manual and automated test coverage
288
-
289
- ### Pull Request Process
290
-
291
- 1. **Test locally** in Cursor IDE
292
- 2. **Update documentation** in this README
293
- 3. **Add configuration examples** if needed
294
- 4. **Consider performance impact** on large codebases
295
- 5. **Test with different project types** (CAWS/non-CAWS)
296
-
297
- ## License
298
-
299
- MIT License - see main project LICENSE file.
@@ -1,55 +0,0 @@
1
- #!/bin/bash
2
- # Cursor Hook: Audit Trail
3
- #
4
- # Purpose: Log all Cursor AI events for provenance tracking
5
- # Event: All (beforeShellExecution, beforeReadFile,
6
- # afterFileEdit, beforeSubmitPrompt, stop)
7
- #
8
- # @author @darianrosebrook
9
-
10
- set -euo pipefail
11
-
12
- # Read input from Cursor
13
- INPUT=$(cat)
14
-
15
- # Create log directory if it doesn't exist
16
- LOG_DIR=".cursor/logs"
17
- mkdir -p "$LOG_DIR"
18
-
19
- # Log file with date rotation
20
- LOG_FILE="$LOG_DIR/audit-$(date +%Y-%m-%d).log"
21
-
22
- # Extract key information
23
- TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
24
- HOOK_EVENT=$(echo "$INPUT" | jq -r '.hook_event_name // "unknown"')
25
- CONVERSATION_ID=$(echo "$INPUT" | jq -r '.conversation_id // "none"')
26
- GENERATION_ID=$(echo "$INPUT" | jq -r '.generation_id // "none"')
27
-
28
- # Create audit entry
29
- AUDIT_ENTRY=$(cat <<EOF
30
- {
31
- "timestamp": "$TIMESTAMP",
32
- "event": "$HOOK_EVENT",
33
- "conversation_id": "$CONVERSATION_ID",
34
- "generation_id": "$GENERATION_ID",
35
- "details": $INPUT
36
- }
37
- EOF
38
- )
39
-
40
- # Append to audit log
41
- echo "$AUDIT_ENTRY" >> "$LOG_FILE"
42
-
43
- # Try to update CAWS provenance if available
44
- if [ -f "apps/tools/caws/provenance.js" ]; then
45
- node apps/tools/caws/provenance.js log-event \
46
- --event="$HOOK_EVENT" \
47
- --conversation="$CONVERSATION_ID" \
48
- --generation="$GENERATION_ID" \
49
- 2>/dev/null || true
50
- fi
51
-
52
- # Always allow - this is observation only
53
- echo '{"permission":"allow"}' 2>/dev/null || true
54
- exit 0
55
-
@@ -1,84 +0,0 @@
1
- #!/bin/bash
2
- # Cursor Hook: Dangerous Command Blocker
3
- #
4
- # Purpose: Block or ask permission for risky shell commands
5
- # Event: beforeShellExecution
6
- #
7
- # @author @darianrosebrook
8
-
9
- set -euo pipefail
10
-
11
- # Read input from Cursor
12
- INPUT=$(cat)
13
-
14
- # Extract command and cwd
15
- COMMAND=$(echo "$INPUT" | jq -r '.command // ""')
16
- CWD=$(echo "$INPUT" | jq -r '.cwd // ""')
17
-
18
- # Hard blocks - never allow these
19
- # CRITICAL: These commands can cause catastrophic data loss
20
- # git init, git reset --hard, and git push --force were added after an incident
21
- # where an agent panicked at quality gates and wiped thousands of lines of work
22
- HARD_BLOCKS=(
23
- "rm -rf /"
24
- "rm -rf /*"
25
- "rm -rf ~"
26
- "rm -rf $HOME"
27
- "> /dev/sda"
28
- "git init" # Can wipe entire git history and stashed changes
29
- "git commit --amend --no-edit" # Can rewrite commit history destructively
30
- "git reset --hard" # Can lose uncommitted work and stashed changes
31
- "git push --force" # Can overwrite remote repository history
32
- "git rebase" # Rewrites branch history; blocked while worktrees are active
33
- "dd if="
34
- "mkfs"
35
- "format c:"
36
- "del /f /s /q"
37
- "DROP DATABASE"
38
- "TRUNCATE TABLE"
39
- )
40
-
41
- for blocked in "${HARD_BLOCKS[@]}"; do
42
- if [[ "$COMMAND" == *"$blocked"* ]]; then
43
- echo '{"permission":"deny","userMessage":"⚠️ BLOCKED: Dangerous command detected. This operation could cause data loss.","agentMessage":"This command is blocked for safety. If you need to perform this operation, run it manually."}' 2>/dev/null
44
- exit 0
45
- fi
46
- done
47
-
48
- # Ask permission for risky operations
49
- # Note: git commands moved to HARD_BLOCKS after catastrophic data loss incident
50
- ASK_PERMISSION=(
51
- "rm -rf"
52
- "npm publish"
53
- "docker rmi"
54
- "docker system prune"
55
- "kubectl delete"
56
- "terraform destroy"
57
- "DROP TABLE"
58
- "DELETE FROM"
59
- "UPDATE.*SET"
60
- )
61
-
62
- for risky in "${ASK_PERMISSION[@]}"; do
63
- if echo "$COMMAND" | grep -qiE "$risky"; then
64
- echo '{"permission":"ask","userMessage":"⚠️ Risky operation: '"$COMMAND"'. Approve to continue.","agentMessage":"This is a potentially destructive operation. User approval required."}' 2>/dev/null
65
- exit 0
66
- fi
67
- done
68
-
69
- # Block git operations that skip hooks
70
- if echo "$COMMAND" | grep -qE "(--no-verify|--no-gpg-sign)"; then
71
- echo '{"permission":"ask","userMessage":"⚠️ This command skips git hooks. Approve to continue.","agentMessage":"Skipping hooks bypasses quality gates. Use with caution."}' 2>/dev/null
72
- exit 0
73
- fi
74
-
75
- # Block force push to main/master
76
- if echo "$COMMAND" | grep -qE "git push.*(--force|-f).*\s+(origin\s+)?(main|master)"; then
77
- echo '{"permission":"deny","userMessage":"⚠️ BLOCKED: Force push to main/master is not allowed.","agentMessage":"Force pushing to main/master can cause data loss for other developers."}' 2>/dev/null
78
- exit 0
79
- fi
80
-
81
- # Allow by default
82
- echo '{"permission":"allow"}' 2>/dev/null
83
- exit 0
84
-
@@ -1,52 +0,0 @@
1
- #!/bin/bash
2
- # CAWS Quality Check Hook
3
- # Runs CAWS quality validation after file edits
4
- # @author @darianrosebrook
5
-
6
- set -e
7
-
8
- # Read input from Cursor
9
- INPUT=$(cat)
10
- FILE_PATH=$(echo "$INPUT" | jq -r '.file_path // ""')
11
-
12
- # Only run on source files
13
- if [[ "$FILE_PATH" =~ \.(js|ts|jsx|tsx|py|go|rs|java)$ ]] && [[ ! "$FILE_PATH" =~ node_modules ]] && [[ ! "$FILE_PATH" =~ dist ]]; then
14
-
15
- # Check if CAWS is available
16
- if command -v caws &> /dev/null; then
17
-
18
- # Check if we're in a CAWS project
19
- if [[ -f ".caws/working-spec.yaml" ]]; then
20
-
21
- echo "🔍 Running CAWS quality check..." >&2
22
-
23
- # Run CAWS evaluation in quiet mode for fast feedback
24
- if caws evaluate .caws/working-spec.yaml --quiet 2>/dev/null; then
25
- echo '{"userMessage": "✅ CAWS quality check passed", "agentMessage": "Quality standards maintained"}'
26
- else
27
- # Get detailed feedback
28
- EVALUATION=$(caws evaluate .caws/working-spec.yaml --json 2>/dev/null || echo '{"success": false, "error": "Evaluation failed"}')
29
-
30
- # Parse the evaluation result
31
- SUCCESS=$(echo "$EVALUATION" | jq -r '.success // false')
32
- SCORE=$(echo "$EVALUATION" | jq -r '.evaluation.quality_score // 0')
33
-
34
- if [[ "$SUCCESS" == "true" ]] && (( $(echo "$SCORE > 0.75" | bc -l) )); then
35
- echo '{"userMessage": "✅ CAWS quality standards met", "agentMessage": "Code meets quality requirements"}'
36
- else
37
- FAILED_GATES=$(echo "$EVALUATION" | jq -r '.evaluation.criteria[] | select(.status == "failed") | .name' | tr '\n' ', ' | sed 's/, $//')
38
-
39
- echo '{
40
- "userMessage": "⚠️ CAWS quality issues detected. Run: caws evaluate",
41
- "agentMessage": "Quality gates failed: '"$FAILED_GATES"'",
42
- "suggestions": [
43
- "Run caws evaluate for detailed feedback",
44
- "Consider creating a waiver if justified: caws waivers create",
45
- "Address failing quality gates before proceeding"
46
- ]
47
- }'
48
- fi
49
- fi
50
- fi
51
- fi
52
- fi
@@ -1,130 +0,0 @@
1
- #!/bin/bash
2
- # CAWS Scope Guard Hook
3
- # Prevents agents from accessing files outside CAWS-defined scope
4
- # @author @darianrosebrook
5
-
6
- set -e
7
-
8
- # Read input from Cursor
9
- INPUT=$(cat)
10
- ACTION=$(echo "$INPUT" | jq -r '.action // ""')
11
- FILE_PATH=$(echo "$INPUT" | jq -r '.file_path // ""')
12
-
13
- # Check if CAWS is available and we have a working spec
14
- if command -v caws &> /dev/null && [[ -f ".caws/working-spec.yaml" ]]; then
15
-
16
- # AGENT GUARDRAILS - Prevent policy bypass attempts
17
- if [[ "$ACTION" == "edit_file" ]] || [[ "$ACTION" == "create_file" ]]; then
18
- if [[ "$FILE_PATH" == ".caws/policy.yaml" ]]; then
19
- echo '{
20
- "userMessage": "🚫 Policy file editing blocked by agent guardrails",
21
- "agentMessage": "Agents cannot edit .caws/policy.yaml - requires human dual control",
22
- "block": true,
23
- "suggestions": [
24
- "Policy changes must be approved by humans with Gatekeeper role",
25
- "Create a separate PR for policy changes",
26
- "For budget exceptions: caws waivers create --title=\"Budget exception\" --reason=architectural_refactor --gates=budget_limit",
27
- "Contact @gatekeepers for policy modifications"
28
- ]
29
- }'
30
- exit 1
31
- fi
32
-
33
- if [[ "$FILE_PATH" == "CODEOWNERS" ]]; then
34
- echo '{
35
- "userMessage": "🚫 CODEOWNERS editing blocked by agent guardrails",
36
- "agentMessage": "Agents cannot modify CODEOWNERS - governance changes require approval",
37
- "block": true,
38
- "suggestions": [
39
- "CODEOWNERS changes require governance review",
40
- "Contact repository maintainers for ownership changes",
41
- "For approval workflows: caws waivers create --reason=governance_change"
42
- ]
43
- }'
44
- exit 1
45
- fi
46
-
47
- if [[ "$FILE_PATH" == ".caws/working-spec.yaml" ]]; then
48
- # Check if trying to add change_budget
49
- FILE_CONTENT=$(echo "$INPUT" | jq -r '.content // ""')
50
- if echo "$FILE_CONTENT" | grep -q "change_budget"; then
51
- echo '{
52
- "userMessage": "🚫 Budget editing blocked by agent guardrails",
53
- "agentMessage": "Agents cannot introduce change_budget fields - budgets are derived automatically",
54
- "block": true,
55
- "suggestions": [
56
- "Check current budget status: caws burnup",
57
- "For budget exceptions: caws waivers create --title=\"Scope expansion\" --reason=architectural_refactor --gates=budget_limit --expires-at=\"2025-12-31T23:59:59Z\"",
58
- "Add waiver_ids to working spec instead: [\"WV-XXXX\"]",
59
- "Validate waiver: caws validate .caws/working-spec.yaml"
60
- ]
61
- }'
62
- exit 1
63
- fi
64
- fi
65
- fi
66
-
67
- # For file access actions, check scope
68
- if [[ "$ACTION" == "read_file" ]] || [[ "$ACTION" == "edit_file" ]] || [[ -n "$FILE_PATH" ]]; then
69
-
70
- # Get scope information from CAWS spec
71
- SCOPE_CHECK=$(caws validate .caws/working-spec.yaml --scope-check "$FILE_PATH" 2>/dev/null || echo "unknown")
72
-
73
- if [[ "$SCOPE_CHECK" == "out_of_scope" ]]; then
74
- echo '{
75
- "userMessage": "🚫 File access blocked by CAWS scope guard",
76
- "agentMessage": "Cannot access '"$FILE_PATH"' - outside CAWS defined scope",
77
- "block": true,
78
- "suggestions": [
79
- "Check current scope: caws validate .caws/working-spec.yaml",
80
- "Update scope in working spec: edit .caws/working-spec.yaml scope.in array",
81
- "For scope exceptions: caws waivers create --title=\"Scope expansion\" --reason=architectural_refactor --gates=scope_boundary --description=\"Need access to '"$FILE_PATH"' for implementation\"",
82
- "Validate changes: caws validate .caws/working-spec.yaml"
83
- ]
84
- }'
85
- exit 1
86
- elif [[ "$SCOPE_CHECK" == "scope_warning" ]]; then
87
- echo '{
88
- "userMessage": "⚠️ File access outside primary scope",
89
- "agentMessage": "File '"$FILE_PATH"' is outside primary scope but allowed",
90
- "suggestions": [
91
- "Check if needed in primary scope: edit .caws/working-spec.yaml scope.in",
92
- "Consider scope implications: caws evaluate",
93
- "Document scope decision in working spec invariants",
94
- "Validate scope changes: caws validate .caws/working-spec.yaml"
95
- ]
96
- }'
97
- fi
98
- fi
99
-
100
- # For prompt submissions, check working spec compliance
101
- if [[ "$ACTION" == "submit_prompt" ]]; then
102
- PROMPT_CONTENT=$(echo "$INPUT" | jq -r '.prompt // ""')
103
-
104
- # Check if prompt mentions files outside scope
105
- if [[ -n "$PROMPT_CONTENT" ]]; then
106
- MENTIONED_FILES=$(echo "$PROMPT_CONTENT" | grep -oE '\b[a-zA-Z0-9_/.-]+\.(js|ts|jsx|tsx|py|go|rs|java|yaml|json|md)\b' | sort | uniq || true)
107
-
108
- OUT_OF_SCOPE=""
109
- for file in $MENTIONED_FILES; do
110
- if [[ -f "$file" ]] && ! caws validate .caws/working-spec.yaml --scope-check "$file" 2>/dev/null | grep -q "in_scope"; then
111
- OUT_OF_SCOPE="$OUT_OF_SCOPE $file"
112
- fi
113
- done
114
-
115
- if [[ -n "$OUT_OF_SCOPE" ]]; then
116
- echo '{
117
- "userMessage": "⚠️ Prompt references files outside CAWS scope",
118
- "agentMessage": "Prompt mentions out-of-scope files: '"$OUT_OF_SCOPE"'",
119
- "suggestions": [
120
- "Check current scope definition: caws validate .caws/working-spec.yaml",
121
- "Update working spec scope: edit .caws/working-spec.yaml scope.in array",
122
- "For scope exceptions: caws waivers create --title=\"Scope expansion\" --reason=architectural_refactor --gates=scope_boundary",
123
- "Refocus prompt on in-scope files or request scope update approval",
124
- "Validate scope changes: caws validate .caws/working-spec.yaml"
125
- ]
126
- }'
127
- fi
128
- fi
129
- fi
130
- fi
@@ -1,38 +0,0 @@
1
- #!/bin/bash
2
- # Cursor Hook: Auto-formatting
3
- #
4
- # Purpose: Run formatters after file edits
5
- # Event: afterFileEdit
6
- #
7
- # @author @darianrosebrook
8
-
9
- set -euo pipefail
10
-
11
- # Read input from Cursor
12
- INPUT=$(cat)
13
-
14
- # Extract file path
15
- FILE_PATH=$(echo "$INPUT" | jq -r '.file_path // ""')
16
-
17
- # Only format source code files
18
- if [[ "$FILE_PATH" =~ \.(js|ts|jsx|tsx|json|md|yml|yaml)$ ]]; then
19
- # Try prettier if available
20
- if command -v prettier &> /dev/null; then
21
- prettier --write "$FILE_PATH" 2>/dev/null || true
22
- elif [ -f "node_modules/.bin/prettier" ]; then
23
- node_modules/.bin/prettier --write "$FILE_PATH" 2>/dev/null || true
24
- fi
25
-
26
- # Try eslint for JS/TS files
27
- if [[ "$FILE_PATH" =~ \.(js|ts|jsx|tsx)$ ]]; then
28
- if command -v eslint &> /dev/null; then
29
- eslint --fix "$FILE_PATH" 2>/dev/null || true
30
- elif [ -f "node_modules/.bin/eslint" ]; then
31
- node_modules/.bin/eslint --fix "$FILE_PATH" 2>/dev/null || true
32
- fi
33
- fi
34
- fi
35
-
36
- # Always allow - formatting is non-blocking
37
- exit 0
38
-