@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,314 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * @fileoverview CAWS Tool Interface - Base classes and contracts for tool implementation
5
- * Defines the standard interface that all CAWS tools must implement
6
- * @author @darianrosebrook
7
- */
8
-
9
- /**
10
- * Standard tool execution result
11
- * @typedef {Object} ToolExecutionResult
12
- * @property {boolean} success - Whether execution succeeded
13
- * @property {number} duration - Execution duration in milliseconds
14
- * @property {Object} output - Tool-specific output data
15
- * @property {Array<string>} errors - Error messages if execution failed
16
- * @property {Object} metadata - Additional execution metadata
17
- */
18
-
19
- /**
20
- * Tool metadata structure
21
- * @typedef {Object} ToolMetadata
22
- * @property {string} id - Unique tool identifier
23
- * @property {string} name - Human-readable tool name
24
- * @property {string} version - Tool version (semver)
25
- * @property {string} description - Tool description
26
- * @property {Array<string>} capabilities - Tool capabilities (e.g., ['validation', 'security'])
27
- * @property {string} author - Tool author
28
- * @property {string} license - Tool license
29
- * @property {Array<string>} dependencies - Required Node.js dependencies
30
- */
31
-
32
- /**
33
- * Tool execution context
34
- * @typedef {Object} ToolExecutionContext
35
- * @property {string} workingDirectory - Current working directory
36
- * @property {Object} environment - Environment variables
37
- * @property {Object} config - CAWS configuration
38
- * @property {Object} workingSpec - Current working specification
39
- * @property {number} timeout - Execution timeout in milliseconds
40
- */
41
-
42
- /**
43
- * Base Tool class - All CAWS tools should extend this class
44
- */
45
- class BaseTool {
46
- constructor() {
47
- this.metadata = this.getMetadata();
48
- }
49
-
50
- /**
51
- * Execute the tool with given parameters
52
- * @param {Object} parameters - Tool-specific execution parameters
53
- * @param {ToolExecutionContext} context - Execution context
54
- * @returns {Promise<ToolExecutionResult>} Execution result
55
- */
56
- async execute(parameters = {}, context = {}) {
57
- const startTime = Date.now();
58
-
59
- try {
60
- // Validate parameters
61
- this.validateParameters(parameters);
62
-
63
- // Execute tool logic
64
- const result = await this.executeImpl(parameters, context);
65
-
66
- // Ensure result conforms to interface
67
- const executionResult = this.normalizeResult(result, Date.now() - startTime);
68
-
69
- return executionResult;
70
- } catch (error) {
71
- return this.createErrorResult(error, Date.now() - startTime);
72
- }
73
- }
74
-
75
- /**
76
- * Get tool metadata
77
- * @returns {ToolMetadata} Tool metadata
78
- */
79
- getMetadata() {
80
- throw new Error('Tool must implement getMetadata() method');
81
- }
82
-
83
- /**
84
- * Validate tool parameters
85
- * @param {Object} _parameters - Parameters to validate
86
- * @throws {Error} If parameters are invalid
87
- */
88
- validateParameters(_parameters) {
89
- // Default implementation - override in subclasses
90
- return true;
91
- }
92
-
93
- /**
94
- * Execute tool implementation (must be overridden by subclasses)
95
- * @param {Object} _parameters - Tool parameters
96
- * @param {ToolExecutionContext} _context - Execution context
97
- * @returns {Promise<Object>} Tool-specific result
98
- */
99
- async executeImpl(_parameters, _context) {
100
- throw new Error('Tool must implement executeImpl() method');
101
- }
102
-
103
- /**
104
- * Normalize execution result to standard format
105
- * @private
106
- * @param {Object} result - Raw tool result
107
- * @param {number} duration - Execution duration
108
- * @returns {ToolExecutionResult} Normalized result
109
- */
110
- normalizeResult(result, duration) {
111
- return {
112
- success: result.success !== false,
113
- duration,
114
- output: result.output || result,
115
- errors: Array.isArray(result.errors) ? result.errors : [],
116
- metadata: result.metadata || {},
117
- };
118
- }
119
-
120
- /**
121
- * Create error result
122
- * @private
123
- * @param {Error} error - Execution error
124
- * @param {number} duration - Execution duration
125
- * @returns {ToolExecutionResult} Error result
126
- */
127
- createErrorResult(error, duration) {
128
- return {
129
- success: false,
130
- duration,
131
- output: null,
132
- errors: [error.message],
133
- metadata: {
134
- errorType: error.constructor.name,
135
- stack: error.stack,
136
- },
137
- };
138
- }
139
- }
140
-
141
- /**
142
- * Validation Tool base class - For tools that perform validation checks
143
- */
144
- class ValidationTool extends BaseTool {
145
- constructor() {
146
- super();
147
- this.capabilities = ['validation'];
148
- }
149
-
150
- /**
151
- * Execute validation
152
- * @param {Object} parameters - Validation parameters
153
- * @param {ToolExecutionContext} context - Execution context
154
- * @returns {Promise<ToolExecutionResult>} Validation result
155
- */
156
- async executeImpl(parameters, context) {
157
- const validationResult = await this.validate(parameters, context);
158
-
159
- return {
160
- success: validationResult.valid,
161
- output: validationResult,
162
- errors: validationResult.errors || [],
163
- metadata: {
164
- checksRun: validationResult.checks?.length || 0,
165
- score: validationResult.score || 0,
166
- },
167
- };
168
- }
169
-
170
- /**
171
- * Perform validation (must be implemented by subclasses)
172
- * @param {Object} parameters - Validation parameters
173
- * @param {ToolExecutionContext} context - Execution context
174
- * @returns {Promise<Object>} Validation result
175
- */
176
- async validate(_parameters, _context) {
177
- throw new Error('ValidationTool must implement validate() method');
178
- }
179
- }
180
-
181
- /**
182
- * Quality Gate Tool base class - For tools that enforce quality standards
183
- */
184
- class QualityGateTool extends ValidationTool {
185
- constructor() {
186
- super();
187
- this.capabilities = ['validation', 'quality-gates'];
188
- }
189
-
190
- /**
191
- * Get quality gate thresholds for current tier
192
- * @param {number} tier - Risk tier (1-3)
193
- * @returns {Object} Threshold configuration
194
- */
195
- getTierThresholds(tier) {
196
- const thresholds = {
197
- 1: {
198
- // Tier 1 - Highest rigor
199
- coverage: 0.9,
200
- mutation: 0.7,
201
- contracts: true,
202
- manualReview: true,
203
- },
204
- 2: {
205
- // Tier 2 - Standard rigor
206
- coverage: 0.8,
207
- mutation: 0.5,
208
- contracts: true,
209
- manualReview: false,
210
- },
211
- 3: {
212
- // Tier 3 - Low rigor
213
- coverage: 0.7,
214
- mutation: 0.3,
215
- contracts: false,
216
- manualReview: false,
217
- },
218
- };
219
-
220
- return thresholds[tier] || thresholds[2];
221
- }
222
- }
223
-
224
- /**
225
- * Security Tool base class - For tools that perform security checks
226
- */
227
- class SecurityTool extends ValidationTool {
228
- constructor() {
229
- super();
230
- this.capabilities = ['validation', 'security'];
231
- }
232
-
233
- /**
234
- * Check for security violations
235
- * @param {Object} target - Target to check (file, code, etc.)
236
- * @returns {Promise<Array<Object>>} Array of security violations
237
- */
238
- async checkSecurityViolations(target) {
239
- const violations = [];
240
-
241
- // Check for common security patterns
242
- const patterns = [
243
- { name: 'hardcoded_secrets', pattern: /password|token|key|secret/i, severity: 'high' },
244
- { name: 'unsafe_eval', pattern: /eval\(|Function\(/, severity: 'high' },
245
- { name: 'dangerous_modules', pattern: /child_process|fs-extra/, severity: 'medium' },
246
- ];
247
-
248
- for (const { name, pattern, severity } of patterns) {
249
- if (pattern.test(target)) {
250
- violations.push({ name, severity, message: `${name} pattern detected` });
251
- }
252
- }
253
-
254
- return violations;
255
- }
256
- }
257
-
258
- /**
259
- * Utility functions for tool development
260
- */
261
- const ToolUtils = {
262
- /**
263
- * Create standardized success result
264
- * @param {Object} output - Tool output
265
- * @param {Object} metadata - Additional metadata
266
- * @returns {ToolExecutionResult} Success result
267
- */
268
- createSuccessResult(output = {}, metadata = {}) {
269
- return {
270
- success: true,
271
- duration: 0, // Will be set by BaseTool
272
- output,
273
- errors: [],
274
- metadata,
275
- };
276
- },
277
-
278
- /**
279
- * Create standardized error result
280
- * @param {string} message - Error message
281
- * @param {string} errorType - Error type
282
- * @returns {ToolExecutionResult} Error result
283
- */
284
- createErrorResult(message, errorType = 'ToolError') {
285
- return {
286
- success: false,
287
- duration: 0, // Will be set by BaseTool
288
- output: null,
289
- errors: [message],
290
- metadata: { errorType },
291
- };
292
- },
293
-
294
- /**
295
- * Validate required parameters
296
- * @param {Object} _params - Parameters object
297
- * @param {Array<string>} _required - Required parameter names
298
- * @throws {Error} If required parameters are missing
299
- */
300
- validateRequired(_params, _required) {
301
- const missing = _required.filter((key) => !_params[key]);
302
- if (missing.length > 0) {
303
- throw new Error(`Missing required parameters: ${missing.join(', ')}`);
304
- }
305
- },
306
- };
307
-
308
- module.exports = {
309
- BaseTool,
310
- ValidationTool,
311
- QualityGateTool,
312
- SecurityTool,
313
- ToolUtils,
314
- };
@@ -1,303 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * @fileoverview CAWS Tool Loader - Dynamic tool discovery and loading system
5
- * Provides secure, sandboxed loading of tools from apps/tools/caws/ directory
6
- * @author @darianrosebrook
7
- */
8
-
9
- const fs = require('fs');
10
- const path = require('path');
11
- const { EventEmitter } = require('events');
12
- const { setTimeout, clearTimeout } = require('timers');
13
- const { safeAsync } = require('./error-handler');
14
-
15
- /**
16
- * Tool Loader - Discovers, validates, and loads CAWS tools dynamically
17
- * @extends EventEmitter
18
- */
19
- class ToolLoader extends EventEmitter {
20
- constructor(options = {}) {
21
- super();
22
- // Check new location first, fall back to legacy location
23
- const newToolsDir = path.join(process.cwd(), '.caws/tools');
24
- const legacyToolsDir = path.join(process.cwd(), 'apps/tools/caws');
25
- const defaultToolsDir = fs.existsSync(newToolsDir) ? newToolsDir : legacyToolsDir;
26
-
27
- this.options = {
28
- toolsDir: options.toolsDir || defaultToolsDir,
29
- cacheEnabled: options.cacheEnabled !== false,
30
- timeout: options.timeout || 10000,
31
- maxTools: options.maxTools || 50,
32
- ...options,
33
- };
34
-
35
- this.loadedTools = new Map();
36
- this.discoveredTools = new Set();
37
- this.loadingState = 'idle'; // idle, discovering, loading, ready, error
38
- }
39
-
40
- /**
41
- * Discover available tools in the tools directory
42
- * @returns {Promise<Array<string>>} Array of tool file paths
43
- */
44
- async discoverTools() {
45
- return safeAsync(async () => {
46
- this.loadingState = 'discovering';
47
- this.emit('discovery:start');
48
-
49
- // Check if tools directory exists
50
- if (!fs.existsSync(this.options.toolsDir)) {
51
- this.emit('discovery:complete', { tools: [], reason: 'directory_not_found' });
52
- this.loadingState = 'ready';
53
- return [];
54
- }
55
-
56
- // Read directory contents
57
- const files = await fs.promises.readdir(this.options.toolsDir);
58
-
59
- // Filter for valid tool files
60
- const toolFiles = files
61
- .filter((file) => {
62
- // Must be .js file
63
- if (!file.endsWith('.js')) return false;
64
-
65
- // Must not be hidden or backup file
66
- if (file.startsWith('.') || file.includes('.backup')) return false;
67
-
68
- // Must not be test file (unless explicitly allowed)
69
- if (file.includes('.test.') && !this.options.includeTests) return false;
70
-
71
- return true;
72
- })
73
- .map((file) => path.join(this.options.toolsDir, file))
74
- .filter((filePath) => {
75
- // Validate file exists and is readable
76
- try {
77
- const stats = fs.statSync(filePath);
78
- return stats.isFile() && stats.size > 0 && stats.size < 1024 * 1024; // < 1MB
79
- } catch (error) {
80
- this.emit('discovery:warning', { file: filePath, error: error.message });
81
- return false;
82
- }
83
- })
84
- .slice(0, this.options.maxTools); // Limit number of tools
85
-
86
- this.discoveredTools = new Set(toolFiles);
87
- this.emit('discovery:complete', { tools: toolFiles, count: toolFiles.length });
88
- this.loadingState = 'idle';
89
-
90
- return toolFiles;
91
- }, 'Tool discovery failed');
92
- }
93
-
94
- /**
95
- * Load a specific tool module
96
- * @param {string} toolPath - Path to tool file
97
- * @returns {Promise<Object>} Loaded tool module
98
- */
99
- async loadTool(toolPath) {
100
- return safeAsync(async () => {
101
- const toolId = path.basename(toolPath, '.js');
102
-
103
- // Check cache first
104
- if (this.loadedTools.has(toolId) && this.options.cacheEnabled) {
105
- return this.loadedTools.get(toolId);
106
- }
107
-
108
- this.emit('tool:loading', { id: toolId, path: toolPath });
109
-
110
- // Validate tool file before loading
111
- await this.validateToolFile(toolPath);
112
-
113
- // Load the module with timeout
114
- const toolModule = await this.loadModuleWithTimeout(toolPath);
115
-
116
- // Validate tool interface
117
- await this.validateToolInterface(toolModule, toolId);
118
-
119
- // Cache the loaded tool
120
- const tool = {
121
- module: toolModule,
122
- path: toolPath,
123
- loadedAt: new Date(),
124
- metadata: toolModule.getMetadata ? toolModule.getMetadata() : {},
125
- };
126
-
127
- this.loadedTools.set(toolId, tool);
128
- this.emit('tool:loaded', { id: toolId, metadata: tool.metadata });
129
-
130
- return tool;
131
- }, 'Tool loading failed');
132
- }
133
-
134
- /**
135
- * Load all discovered tools
136
- * @returns {Promise<Map<string, Object>>} Map of loaded tools
137
- */
138
- async loadAllTools() {
139
- this.loadingState = 'loading';
140
- this.emit('loading:start');
141
-
142
- const toolPaths = await this.discoverTools();
143
- const results = new Map();
144
-
145
- for (const toolPath of toolPaths) {
146
- try {
147
- const tool = await this.loadTool(toolPath);
148
- results.set(path.basename(toolPath, '.js'), tool);
149
- } catch (error) {
150
- // Log error but continue loading other tools
151
- this.emit('loading:warning', { path: toolPath, error: error.message });
152
- }
153
- }
154
-
155
- this.loadingState = 'ready';
156
- this.emit('loading:complete', { loaded: results.size, total: toolPaths.length });
157
-
158
- return results;
159
- }
160
-
161
- /**
162
- * Get a loaded tool by ID
163
- * @param {string} toolId - Tool identifier
164
- * @returns {Object|null} Tool object or null if not found
165
- */
166
- getTool(toolId) {
167
- return this.loadedTools.get(toolId) || null;
168
- }
169
-
170
- /**
171
- * Get all loaded tools
172
- * @returns {Map<string, Object>} Map of loaded tools
173
- */
174
- getAllTools() {
175
- return new Map(this.loadedTools);
176
- }
177
-
178
- /**
179
- * Unload a tool (remove from cache)
180
- * @param {string} toolId - Tool identifier
181
- * @returns {boolean} True if tool was unloaded
182
- */
183
- unloadTool(toolId) {
184
- const unloaded = this.loadedTools.delete(toolId);
185
- if (unloaded) {
186
- this.emit('tool:unloaded', { id: toolId });
187
- }
188
- return unloaded;
189
- }
190
-
191
- /**
192
- * Validate tool file before loading
193
- * @private
194
- * @param {string} toolPath - Path to tool file
195
- */
196
- async validateToolFile(toolPath) {
197
- // Basic file validation
198
- const stats = await fs.promises.stat(toolPath);
199
- if (stats.size === 0) {
200
- throw new Error('Tool file is empty');
201
- }
202
-
203
- if (stats.size > 1024 * 1024) {
204
- // 1MB limit
205
- throw new Error('Tool file too large (>1MB)');
206
- }
207
-
208
- // Read first few lines to check for shebang and basic structure
209
- const fd = await fs.promises.open(toolPath, 'r');
210
- try {
211
- const buffer = Buffer.alloc(512);
212
- const { bytesRead } = await fd.read(buffer, 0, 512, 0);
213
- const content = buffer.toString('utf8', 0, bytesRead);
214
-
215
- // Check for shebang
216
- if (!content.startsWith('#!/usr/bin/env node') && !content.startsWith('#!')) {
217
- throw new Error('Tool file missing shebang');
218
- }
219
-
220
- // Basic syntax check - look for module.exports or ES modules
221
- const hasExports = content.includes('module.exports') || content.includes('export ');
222
- if (!hasExports) {
223
- throw new Error('Tool file does not export anything');
224
- }
225
- } finally {
226
- await fd.close();
227
- }
228
- }
229
-
230
- /**
231
- * Load module with timeout protection
232
- * @private
233
- * @param {string} toolPath - Path to tool file
234
- */
235
- async loadModuleWithTimeout(toolPath) {
236
- return new Promise((resolve, reject) => {
237
- const timeout = setTimeout(() => {
238
- reject(new Error(`Tool loading timeout after ${this.options.timeout}ms`));
239
- }, this.options.timeout);
240
-
241
- try {
242
- // Clear require cache to ensure fresh load
243
- delete require.cache[require.resolve(toolPath)];
244
-
245
- const module = require(toolPath);
246
- clearTimeout(timeout);
247
- resolve(module);
248
- } catch (error) {
249
- clearTimeout(timeout);
250
- reject(error);
251
- }
252
- });
253
- }
254
-
255
- /**
256
- * Validate tool interface compliance
257
- * @private
258
- * @param {Object} toolModule - Loaded tool module
259
- * @param {string} toolId - Tool identifier
260
- */
261
- async validateToolInterface(toolModule, toolId) {
262
- const requiredMethods = ['execute', 'getMetadata'];
263
-
264
- for (const method of requiredMethods) {
265
- if (typeof toolModule[method] !== 'function') {
266
- throw new Error(`Tool ${toolId} missing required method: ${method}`);
267
- }
268
- }
269
-
270
- // Validate metadata structure
271
- if (toolModule.getMetadata) {
272
- const metadata = toolModule.getMetadata();
273
- const requiredFields = ['id', 'name', 'version'];
274
-
275
- for (const field of requiredFields) {
276
- if (!metadata[field]) {
277
- throw new Error(`Tool ${toolId} metadata missing required field: ${field}`);
278
- }
279
- }
280
-
281
- // Validate metadata types
282
- if (typeof metadata.id !== 'string' || typeof metadata.name !== 'string') {
283
- throw new Error(`Tool ${toolId} metadata has invalid types`);
284
- }
285
- }
286
- }
287
-
288
- /**
289
- * Get loader statistics
290
- * @returns {Object} Statistics object
291
- */
292
- getStats() {
293
- return {
294
- discovered: this.discoveredTools.size,
295
- loaded: this.loadedTools.size,
296
- state: this.loadingState,
297
- cacheEnabled: this.options.cacheEnabled,
298
- toolsDir: this.options.toolsDir,
299
- };
300
- }
301
- }
302
-
303
- module.exports = ToolLoader;