@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,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
-