@paths.design/caws-cli 10.1.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 (419) hide show
  1. package/README.md +125 -374
  2. package/dist/index.js +43 -756
  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/archive.js +0 -500
  183. package/dist/commands/burnup.js +0 -198
  184. package/dist/commands/diagnose.js +0 -525
  185. package/dist/commands/evaluate.js +0 -314
  186. package/dist/commands/gates.js +0 -149
  187. package/dist/commands/init.js +0 -857
  188. package/dist/commands/iterate.js +0 -417
  189. package/dist/commands/mode.js +0 -269
  190. package/dist/commands/parallel.js +0 -242
  191. package/dist/commands/plan.js +0 -438
  192. package/dist/commands/provenance.js +0 -1143
  193. package/dist/commands/quality-monitor.js +0 -284
  194. package/dist/commands/scope.js +0 -264
  195. package/dist/commands/session.js +0 -312
  196. package/dist/commands/sidecar.js +0 -74
  197. package/dist/commands/specs.js +0 -1448
  198. package/dist/commands/status.js +0 -1151
  199. package/dist/commands/templates.js +0 -237
  200. package/dist/commands/tool.js +0 -136
  201. package/dist/commands/tutorial.js +0 -480
  202. package/dist/commands/validate.js +0 -357
  203. package/dist/commands/verify-acs.js +0 -443
  204. package/dist/commands/waivers.js +0 -599
  205. package/dist/commands/workflow.js +0 -243
  206. package/dist/commands/worktree.js +0 -386
  207. package/dist/config/lite-scope.js +0 -158
  208. package/dist/config/modes.js +0 -347
  209. package/dist/constants/spec-types.js +0 -65
  210. package/dist/gates/budget-limit.js +0 -121
  211. package/dist/gates/feedback.js +0 -260
  212. package/dist/gates/format.js +0 -179
  213. package/dist/gates/god-object.js +0 -117
  214. package/dist/gates/pipeline.js +0 -167
  215. package/dist/gates/scope-boundary.js +0 -93
  216. package/dist/gates/spec-completeness.js +0 -109
  217. package/dist/gates/todo-detection.js +0 -205
  218. package/dist/generators/jest-config-generator.js +0 -242
  219. package/dist/generators/working-spec.js +0 -237
  220. package/dist/minimal-cli.js +0 -88
  221. package/dist/parallel/parallel-manager.js +0 -433
  222. package/dist/policy/PolicyManager.js +0 -465
  223. package/dist/scaffold/claude-hooks.js +0 -443
  224. package/dist/scaffold/cursor-hooks.js +0 -177
  225. package/dist/scaffold/git-hooks.js +0 -928
  226. package/dist/scaffold/index.js +0 -794
  227. package/dist/session/session-manager.js +0 -653
  228. package/dist/sidecars/index.js +0 -33
  229. package/dist/sidecars/listeners.js +0 -40
  230. package/dist/sidecars/provenance-summary.js +0 -238
  231. package/dist/sidecars/quality-gaps.js +0 -258
  232. package/dist/sidecars/schema.js +0 -149
  233. package/dist/sidecars/spec-drift.js +0 -151
  234. package/dist/sidecars/waiver-draft.js +0 -176
  235. package/dist/spec/SpecFileManager.js +0 -419
  236. package/dist/templates/.caws/schemas/policy.schema.json +0 -112
  237. package/dist/templates/.caws/schemas/scope.schema.json +0 -52
  238. package/dist/templates/.caws/schemas/waivers.schema.json +0 -106
  239. package/dist/templates/.caws/schemas/working-spec.schema.json +0 -340
  240. package/dist/templates/.caws/schemas/worktrees.schema.json +0 -38
  241. package/dist/templates/.caws/templates/working-spec.template.yml +0 -80
  242. package/dist/templates/.caws/tools/README.md +0 -18
  243. package/dist/templates/.caws/tools/scope-guard.js +0 -203
  244. package/dist/templates/.caws/tools-allow.json +0 -331
  245. package/dist/templates/.caws/waivers.yml +0 -19
  246. package/dist/templates/.claude/README.md +0 -190
  247. package/dist/templates/.claude/hooks/audit.sh +0 -121
  248. package/dist/templates/.claude/hooks/block-dangerous.sh +0 -203
  249. package/dist/templates/.claude/hooks/classify_command.py +0 -592
  250. package/dist/templates/.claude/hooks/doc-frontmatter-check.sh +0 -173
  251. package/dist/templates/.claude/hooks/lite-sprawl-check.sh +0 -145
  252. package/dist/templates/.claude/hooks/naming-check.sh +0 -100
  253. package/dist/templates/.claude/hooks/protected-paths.sh +0 -39
  254. package/dist/templates/.claude/hooks/quality-check.sh +0 -81
  255. package/dist/templates/.claude/hooks/scan-secrets.sh +0 -85
  256. package/dist/templates/.claude/hooks/scope-guard.sh +0 -381
  257. package/dist/templates/.claude/hooks/session-caws-status.sh +0 -117
  258. package/dist/templates/.claude/hooks/session-log.sh +0 -634
  259. package/dist/templates/.claude/hooks/simplification-guard.sh +0 -92
  260. package/dist/templates/.claude/hooks/stop-worktree-check.sh +0 -46
  261. package/dist/templates/.claude/hooks/test_classify_command.py +0 -370
  262. package/dist/templates/.claude/hooks/test_wrapper_smoke.sh +0 -96
  263. package/dist/templates/.claude/hooks/validate-spec.sh +0 -76
  264. package/dist/templates/.claude/hooks/worktree-guard.sh +0 -220
  265. package/dist/templates/.claude/hooks/worktree-write-guard.sh +0 -190
  266. package/dist/templates/.claude/rules/git-safety.md +0 -26
  267. package/dist/templates/.claude/rules/worktree-isolation.md +0 -83
  268. package/dist/templates/.claude/settings.json +0 -141
  269. package/dist/templates/.cursor/README.md +0 -299
  270. package/dist/templates/.cursor/hooks/audit.sh +0 -55
  271. package/dist/templates/.cursor/hooks/block-dangerous.sh +0 -84
  272. package/dist/templates/.cursor/hooks/caws-quality-check.sh +0 -52
  273. package/dist/templates/.cursor/hooks/caws-scope-guard.sh +0 -130
  274. package/dist/templates/.cursor/hooks/format.sh +0 -38
  275. package/dist/templates/.cursor/hooks/naming-check.sh +0 -64
  276. package/dist/templates/.cursor/hooks/scan-secrets.sh +0 -51
  277. package/dist/templates/.cursor/hooks/scope-guard.sh +0 -52
  278. package/dist/templates/.cursor/hooks/session-log.sh +0 -924
  279. package/dist/templates/.cursor/hooks/validate-spec.sh +0 -83
  280. package/dist/templates/.cursor/hooks.json +0 -76
  281. package/dist/templates/.cursor/rules/00-claims-verification.mdc +0 -144
  282. package/dist/templates/.cursor/rules/01-working-style.mdc +0 -50
  283. package/dist/templates/.cursor/rules/02-quality-gates.mdc +0 -368
  284. package/dist/templates/.cursor/rules/03-naming-and-refactor.mdc +0 -33
  285. package/dist/templates/.cursor/rules/04-logging-language-style.mdc +0 -23
  286. package/dist/templates/.cursor/rules/05-safe-defaults-guards.mdc +0 -23
  287. package/dist/templates/.cursor/rules/06-typescript-conventions.mdc +0 -36
  288. package/dist/templates/.cursor/rules/07-process-ops.mdc +0 -20
  289. package/dist/templates/.cursor/rules/08-solid-and-architecture.mdc +0 -16
  290. package/dist/templates/.cursor/rules/09-docstrings.mdc +0 -89
  291. package/dist/templates/.cursor/rules/10-documentation-quality-standards.mdc +0 -385
  292. package/dist/templates/.cursor/rules/11-scope-management-waivers.mdc +0 -381
  293. package/dist/templates/.cursor/rules/12-implementation-completeness.mdc +0 -516
  294. package/dist/templates/.cursor/rules/13-language-agnostic-standards.mdc +0 -578
  295. package/dist/templates/.cursor/rules/README.md +0 -148
  296. package/dist/templates/.github/copilot-instructions.md +0 -82
  297. package/dist/templates/.idea/runConfigurations/CAWS_Evaluate.xml +0 -5
  298. package/dist/templates/.idea/runConfigurations/CAWS_Validate.xml +0 -5
  299. package/dist/templates/.junie/guidelines.md +0 -73
  300. package/dist/templates/.vscode/launch.json +0 -17
  301. package/dist/templates/.vscode/settings.json +0 -95
  302. package/dist/templates/.windsurf/rules/caws-quality-standards.md +0 -54
  303. package/dist/templates/.windsurf/workflows/caws-guided-development.md +0 -92
  304. package/dist/templates/CLAUDE.md +0 -174
  305. package/dist/templates/COMMIT_CONVENTIONS.md +0 -86
  306. package/dist/templates/OIDC_SETUP.md +0 -300
  307. package/dist/templates/agents.md +0 -145
  308. package/dist/templates/codemod/README.md +0 -1
  309. package/dist/templates/codemod/test.js +0 -93
  310. package/dist/templates/docs/README.md +0 -151
  311. package/dist/templates/scripts/new_feature.sh +0 -80
  312. package/dist/templates/scripts/quality-gates/check-god-objects.js +0 -146
  313. package/dist/templates/scripts/quality-gates/run-quality-gates.js +0 -50
  314. package/dist/templates/scripts/v3/analysis/todo_analyzer.py +0 -1997
  315. package/dist/test-analysis.js +0 -786
  316. package/dist/tool-interface.js +0 -314
  317. package/dist/tool-loader.js +0 -303
  318. package/dist/tool-validator.js +0 -393
  319. package/dist/utils/agent-session.js +0 -202
  320. package/dist/utils/async-utils.js +0 -188
  321. package/dist/utils/command-wrapper.js +0 -200
  322. package/dist/utils/event-log.js +0 -584
  323. package/dist/utils/event-renderer.js +0 -521
  324. package/dist/utils/finalization.js +0 -230
  325. package/dist/utils/git-lock.js +0 -119
  326. package/dist/utils/gitignore-updater.js +0 -158
  327. package/dist/utils/ide-detection.js +0 -133
  328. package/dist/utils/lifecycle-events.js +0 -94
  329. package/dist/utils/project-analysis.js +0 -367
  330. package/dist/utils/promise-utils.js +0 -72
  331. package/dist/utils/quality-gates-errors.js +0 -520
  332. package/dist/utils/quality-gates-utils.js +0 -387
  333. package/dist/utils/schema-validator.js +0 -50
  334. package/dist/utils/spec-resolver.js +0 -711
  335. package/dist/utils/typescript-detector.js +0 -369
  336. package/dist/utils/working-state.js +0 -530
  337. package/dist/utils/yaml-validation.js +0 -156
  338. package/dist/validation/spec-validation.js +0 -921
  339. package/dist/waivers-manager.js +0 -732
  340. package/dist/worktree/worktree-manager.js +0 -1374
  341. package/templates/.caws/schemas/policy.schema.json +0 -112
  342. package/templates/.caws/schemas/scope.schema.json +0 -52
  343. package/templates/.caws/schemas/waivers.schema.json +0 -106
  344. package/templates/.caws/schemas/working-spec.schema.json +0 -340
  345. package/templates/.caws/schemas/worktrees.schema.json +0 -38
  346. package/templates/.caws/templates/working-spec.template.yml +0 -80
  347. package/templates/.caws/tools/README.md +0 -18
  348. package/templates/.caws/tools/scope-guard.js +0 -203
  349. package/templates/.caws/tools-allow.json +0 -331
  350. package/templates/.caws/waivers.yml +0 -19
  351. package/templates/.claude/README.md +0 -190
  352. package/templates/.claude/hooks/audit.sh +0 -121
  353. package/templates/.claude/hooks/block-dangerous.sh +0 -203
  354. package/templates/.claude/hooks/classify_command.py +0 -592
  355. package/templates/.claude/hooks/doc-frontmatter-check.sh +0 -173
  356. package/templates/.claude/hooks/lite-sprawl-check.sh +0 -145
  357. package/templates/.claude/hooks/naming-check.sh +0 -100
  358. package/templates/.claude/hooks/protected-paths.sh +0 -39
  359. package/templates/.claude/hooks/quality-check.sh +0 -81
  360. package/templates/.claude/hooks/scan-secrets.sh +0 -85
  361. package/templates/.claude/hooks/scope-guard.sh +0 -381
  362. package/templates/.claude/hooks/session-caws-status.sh +0 -117
  363. package/templates/.claude/hooks/session-log.sh +0 -634
  364. package/templates/.claude/hooks/simplification-guard.sh +0 -92
  365. package/templates/.claude/hooks/stop-worktree-check.sh +0 -46
  366. package/templates/.claude/hooks/test_classify_command.py +0 -370
  367. package/templates/.claude/hooks/test_wrapper_smoke.sh +0 -96
  368. package/templates/.claude/hooks/validate-spec.sh +0 -76
  369. package/templates/.claude/hooks/worktree-guard.sh +0 -220
  370. package/templates/.claude/hooks/worktree-write-guard.sh +0 -190
  371. package/templates/.claude/rules/git-safety.md +0 -26
  372. package/templates/.claude/rules/worktree-isolation.md +0 -83
  373. package/templates/.claude/settings.json +0 -141
  374. package/templates/.cursor/README.md +0 -299
  375. package/templates/.cursor/hooks/audit.sh +0 -55
  376. package/templates/.cursor/hooks/block-dangerous.sh +0 -84
  377. package/templates/.cursor/hooks/caws-quality-check.sh +0 -52
  378. package/templates/.cursor/hooks/caws-scope-guard.sh +0 -130
  379. package/templates/.cursor/hooks/format.sh +0 -38
  380. package/templates/.cursor/hooks/naming-check.sh +0 -64
  381. package/templates/.cursor/hooks/scan-secrets.sh +0 -51
  382. package/templates/.cursor/hooks/scope-guard.sh +0 -52
  383. package/templates/.cursor/hooks/session-log.sh +0 -924
  384. package/templates/.cursor/hooks/validate-spec.sh +0 -83
  385. package/templates/.cursor/hooks.json +0 -76
  386. package/templates/.cursor/rules/00-claims-verification.mdc +0 -144
  387. package/templates/.cursor/rules/01-working-style.mdc +0 -50
  388. package/templates/.cursor/rules/02-quality-gates.mdc +0 -368
  389. package/templates/.cursor/rules/03-naming-and-refactor.mdc +0 -33
  390. package/templates/.cursor/rules/04-logging-language-style.mdc +0 -23
  391. package/templates/.cursor/rules/05-safe-defaults-guards.mdc +0 -23
  392. package/templates/.cursor/rules/06-typescript-conventions.mdc +0 -36
  393. package/templates/.cursor/rules/07-process-ops.mdc +0 -20
  394. package/templates/.cursor/rules/08-solid-and-architecture.mdc +0 -16
  395. package/templates/.cursor/rules/09-docstrings.mdc +0 -89
  396. package/templates/.cursor/rules/10-documentation-quality-standards.mdc +0 -385
  397. package/templates/.cursor/rules/11-scope-management-waivers.mdc +0 -381
  398. package/templates/.cursor/rules/12-implementation-completeness.mdc +0 -516
  399. package/templates/.cursor/rules/13-language-agnostic-standards.mdc +0 -578
  400. package/templates/.cursor/rules/README.md +0 -148
  401. package/templates/.github/copilot-instructions.md +0 -82
  402. package/templates/.idea/runConfigurations/CAWS_Evaluate.xml +0 -5
  403. package/templates/.idea/runConfigurations/CAWS_Validate.xml +0 -5
  404. package/templates/.junie/guidelines.md +0 -73
  405. package/templates/.vscode/launch.json +0 -17
  406. package/templates/.vscode/settings.json +0 -95
  407. package/templates/.windsurf/rules/caws-quality-standards.md +0 -54
  408. package/templates/.windsurf/workflows/caws-guided-development.md +0 -92
  409. package/templates/CLAUDE.md +0 -174
  410. package/templates/COMMIT_CONVENTIONS.md +0 -86
  411. package/templates/OIDC_SETUP.md +0 -300
  412. package/templates/agents.md +0 -145
  413. package/templates/codemod/README.md +0 -1
  414. package/templates/codemod/test.js +0 -93
  415. package/templates/docs/README.md +0 -151
  416. package/templates/scripts/new_feature.sh +0 -80
  417. package/templates/scripts/quality-gates/check-god-objects.js +0 -146
  418. package/templates/scripts/quality-gates/run-quality-gates.js +0 -50
  419. package/templates/scripts/v3/analysis/todo_analyzer.py +0 -1997
@@ -1,242 +0,0 @@
1
- /**
2
- * @fileoverview Jest Configuration Generator
3
- * Generates Jest configuration for TypeScript projects
4
- * @author @darianrosebrook
5
- */
6
-
7
- const fs = require('fs-extra');
8
- const path = require('path');
9
- const chalk = require('chalk');
10
-
11
- /**
12
- * Generate Jest configuration for TypeScript project
13
- * @param {Object} options - Configuration options
14
- * @returns {string} Jest configuration content
15
- */
16
- function generateJestConfig(options = {}) {
17
- const {
18
- preset = 'ts-jest',
19
- testEnvironment = 'node',
20
- rootDir = '.',
21
- testMatch = ['**/__tests__/**/*.ts', '**/?(*.)+(spec|test).ts'],
22
- moduleFileExtensions = ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
23
- collectCoverageFrom = ['src/**/*.ts', '!src/**/*.d.ts', '!src/**/*.test.ts'],
24
- coverageThreshold = {
25
- global: {
26
- branches: 80,
27
- functions: 80,
28
- lines: 80,
29
- statements: 80,
30
- },
31
- },
32
- } = options;
33
-
34
- const config = {
35
- preset,
36
- testEnvironment,
37
- rootDir,
38
- testMatch,
39
- moduleFileExtensions,
40
- collectCoverageFrom,
41
- coverageThreshold,
42
- transform: {
43
- '^.+\\.tsx?$': [
44
- 'ts-jest',
45
- {
46
- tsconfig: 'tsconfig.json',
47
- },
48
- ],
49
- },
50
- moduleNameMapper: {
51
- '^@/(.*)$': '<rootDir>/src/$1',
52
- },
53
- };
54
-
55
- return `module.exports = ${JSON.stringify(config, null, 2)};\n`;
56
- }
57
-
58
- /**
59
- * Generate test setup file for TypeScript
60
- * @returns {string} Setup file content
61
- */
62
- function generateTestSetup() {
63
- return `/**
64
- * Jest setup file for TypeScript tests
65
- * @author @darianrosebrook
66
- */
67
-
68
- // Add custom matchers or global test setup here
69
- beforeAll(() => {
70
- // Global setup
71
- });
72
-
73
- afterAll(() => {
74
- // Global teardown
75
- });
76
- `;
77
- }
78
-
79
- /**
80
- * Install Jest and TypeScript dependencies
81
- * @param {string} projectDir - Project directory
82
- * @param {Object} packageJson - Existing package.json
83
- * @returns {Promise<Object>} Installation result
84
- */
85
- async function installJestDependencies(projectDir, packageJson) {
86
- const dependencies = ['jest', '@types/jest', 'ts-jest'];
87
-
88
- // Check which dependencies are already installed
89
- const allDeps = {
90
- ...packageJson.dependencies,
91
- ...packageJson.devDependencies,
92
- };
93
-
94
- const toInstall = dependencies.filter((dep) => !(dep in allDeps));
95
-
96
- if (toInstall.length === 0) {
97
- return {
98
- installed: false,
99
- message: 'All Jest dependencies already installed',
100
- dependencies: [],
101
- };
102
- }
103
-
104
- return {
105
- installed: false,
106
- needsInstall: true,
107
- dependencies: toInstall,
108
- installCommand: `npm install --save-dev ${toInstall.join(' ')}`,
109
- };
110
- }
111
-
112
- /**
113
- * Configure Jest for TypeScript project
114
- * @param {string} projectDir - Project directory path
115
- * @param {Object} options - Configuration options
116
- * @returns {Promise<Object>} Configuration result
117
- */
118
- async function configureJestForTypeScript(projectDir = process.cwd(), options = {}) {
119
- const { force = false, quiet = false } = options;
120
-
121
- // Check if Jest config already exists
122
- const jestConfigPath = path.join(projectDir, 'jest.config.js');
123
- if (fs.existsSync(jestConfigPath) && !force) {
124
- return {
125
- configured: false,
126
- skipped: true,
127
- message: 'Jest configuration already exists',
128
- path: jestConfigPath,
129
- };
130
- }
131
-
132
- // Generate Jest config
133
- const jestConfig = generateJestConfig();
134
- await fs.writeFile(jestConfigPath, jestConfig);
135
-
136
- if (!quiet) {
137
- console.log(chalk.green('Created jest.config.js'));
138
- }
139
-
140
- // Generate test setup file
141
- const setupPath = path.join(projectDir, 'tests', 'setup.ts');
142
- await fs.ensureDir(path.join(projectDir, 'tests'));
143
- await fs.writeFile(setupPath, generateTestSetup());
144
-
145
- if (!quiet) {
146
- console.log(chalk.green('Created tests/setup.ts'));
147
- }
148
-
149
- // Update package.json with test script if needed
150
- const packageJsonPath = path.join(projectDir, 'package.json');
151
- if (fs.existsSync(packageJsonPath)) {
152
- const packageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf8'));
153
-
154
- if (!packageJson.scripts) {
155
- packageJson.scripts = {};
156
- }
157
-
158
- if (!packageJson.scripts.test) {
159
- packageJson.scripts.test = 'jest';
160
- packageJson.scripts['test:coverage'] = 'jest --coverage';
161
- packageJson.scripts['test:watch'] = 'jest --watch';
162
-
163
- await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
164
-
165
- if (!quiet) {
166
- console.log(chalk.green('Added test scripts to package.json'));
167
- }
168
- }
169
- }
170
-
171
- return {
172
- configured: true,
173
- files: [jestConfigPath, setupPath],
174
- nextSteps: [
175
- 'Install dependencies: npm install --save-dev jest @types/jest ts-jest',
176
- 'Run tests: npm test',
177
- 'Run with coverage: npm run test:coverage',
178
- ],
179
- };
180
- }
181
-
182
- /**
183
- * Get Jest configuration recommendations
184
- * @param {string} projectDir - Project directory path
185
- * @returns {Object} Recommendations
186
- */
187
- function getJestRecommendations(projectDir = process.cwd()) {
188
- const recommendations = [];
189
- const hasJestConfig = fs.existsSync(path.join(projectDir, 'jest.config.js'));
190
- const packageJsonPath = path.join(projectDir, 'package.json');
191
-
192
- if (fs.existsSync(packageJsonPath)) {
193
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
194
- const allDeps = {
195
- ...packageJson.dependencies,
196
- ...packageJson.devDependencies,
197
- };
198
-
199
- if (!hasJestConfig && !('jest' in allDeps)) {
200
- recommendations.push({
201
- type: 'missing_framework',
202
- severity: 'high',
203
- message: 'No testing framework detected',
204
- fix: 'Install Jest: npm install --save-dev jest @types/jest ts-jest',
205
- autoFixable: false,
206
- });
207
- }
208
-
209
- if ('typescript' in allDeps && 'jest' in allDeps && !('ts-jest' in allDeps)) {
210
- recommendations.push({
211
- type: 'missing_ts_jest',
212
- severity: 'high',
213
- message: 'TypeScript project with Jest but missing ts-jest',
214
- fix: 'Install ts-jest: npm install --save-dev ts-jest',
215
- autoFixable: false,
216
- });
217
- }
218
-
219
- if (!hasJestConfig && 'jest' in allDeps) {
220
- recommendations.push({
221
- type: 'missing_config',
222
- severity: 'medium',
223
- message: 'Jest installed but not configured',
224
- fix: 'Run: caws scaffold to generate Jest configuration',
225
- autoFixable: true,
226
- });
227
- }
228
- }
229
-
230
- return {
231
- hasIssues: recommendations.length > 0,
232
- recommendations,
233
- };
234
- }
235
-
236
- module.exports = {
237
- configureJestForTypeScript,
238
- generateJestConfig,
239
- generateTestSetup,
240
- installJestDependencies,
241
- getJestRecommendations,
242
- };
@@ -1,237 +0,0 @@
1
- /**
2
- * @fileoverview Working Spec Generation Utilities
3
- * Functions for generating and validating CAWS working specifications
4
- * @author @darianrosebrook
5
- */
6
-
7
- const yaml = require('js-yaml');
8
- const chalk = require('chalk');
9
-
10
- // Import validation utilities
11
- const { validateWorkingSpec } = require('../validation/spec-validation');
12
-
13
- /**
14
- * Generate working spec YAML with user input
15
- * @param {Object} answers - User responses
16
- * @returns {string} - Generated YAML content
17
- */
18
- function generateWorkingSpec(answers) {
19
- const template = {
20
- id: answers.projectId || 'PROJ-001',
21
- title: answers.projectTitle || 'New CAWS Project',
22
- risk_tier: answers.riskTier || 2,
23
- mode: answers.projectMode || 'feature',
24
- change_budget: {
25
- max_files: answers.maxFiles || 25,
26
- max_loc: answers.maxLoc || 1000,
27
- },
28
- blast_radius: {
29
- modules: (answers.blastModules || 'src, tests')
30
- .split(',')
31
- .map((m) => m.trim())
32
- .filter((m) => m),
33
- data_migration: answers.dataMigration ?? false,
34
- },
35
- operational_rollback_slo: answers.rollbackSlo || '5m',
36
- threats: (answers.projectThreats || '')
37
- .split('\n')
38
- .map((t) => t.trim())
39
- .filter((t) => t && !t.startsWith('-') === false), // Allow lines starting with -
40
- scope: {
41
- in: (answers.scopeIn || 'src/, tests/')
42
- .split(',')
43
- .map((s) => s.trim())
44
- .filter((s) => s),
45
- out: (answers.scopeOut || 'node_modules/, dist/, build/')
46
- .split(',')
47
- .map((s) => s.trim())
48
- .filter((s) => s)
49
- // Remove glob patterns - scope.out should only contain directory paths
50
- .filter((s) => !s.includes('*') && !s.includes('?'))
51
- // Ensure paths end with / for directories or are explicit file paths
52
- .map((s) => {
53
- // If it's a directory pattern without trailing slash, add it
54
- if (!s.includes('.') && !s.endsWith('/')) {
55
- return s + '/';
56
- }
57
- return s;
58
- }),
59
- },
60
- invariants: (answers.projectInvariants || 'System maintains data consistency')
61
- .split('\n')
62
- .map((i) => i.trim())
63
- .filter((i) => i),
64
- acceptance: (
65
- answers.acceptanceCriteria || 'Given current state, when action occurs, then expected result'
66
- )
67
- .split('\n')
68
- .filter((a) => a.trim())
69
- .map((criteria, index) => {
70
- const id = `A${index + 1}`;
71
- const upperCriteria = criteria.toUpperCase();
72
-
73
- // Try different variations of the format
74
- let given = '';
75
- let when = '';
76
- let then = '';
77
-
78
- if (
79
- upperCriteria.includes('GIVEN') &&
80
- upperCriteria.includes('WHEN') &&
81
- upperCriteria.includes('THEN')
82
- ) {
83
- given = criteria.split(/WHEN/i)[0]?.replace(/GIVEN/i, '').trim() || '';
84
- const whenThen = criteria.split(/WHEN/i)[1];
85
- when = whenThen?.split(/THEN/i)[0]?.trim() || '';
86
- then = whenThen?.split(/THEN/i)[1]?.trim() || '';
87
- } else {
88
- // Fallback: just split by lines and create simple criteria
89
- given = 'Current system state';
90
- when = criteria.replace(/^(GIVEN|WHEN|THEN)/i, '').trim();
91
- then = 'Expected behavior occurs';
92
- }
93
-
94
- return {
95
- id,
96
- given: given || 'Current system state',
97
- when: when || criteria,
98
- then: then || 'Expected behavior occurs',
99
- };
100
- }),
101
- non_functional: {
102
- a11y: (answers.a11yRequirements || 'keyboard')
103
- .split(',')
104
- .map((a) => a.trim())
105
- .filter((a) => a),
106
- perf: { api_p95_ms: answers.perfBudget || 250 },
107
- security: (answers.securityRequirements || 'validation')
108
- .split(',')
109
- .map((s) => s.trim())
110
- .filter((s) => s),
111
- },
112
- contracts: (() => {
113
- // If contract type/path provided, use it
114
- if (answers.contractType && answers.contractPath) {
115
- return [
116
- {
117
- type: answers.contractType,
118
- path: answers.contractPath,
119
- },
120
- ];
121
- }
122
-
123
- // For Tier 1 & 2, provide minimal project_setup contract if none specified
124
- const riskTier = answers.riskTier || 2;
125
- if (riskTier === 1 || riskTier === 2) {
126
- return [
127
- {
128
- type: 'project_setup',
129
- path: '.caws/working-spec.yaml',
130
- description:
131
- 'Project-level CAWS configuration. Feature-specific contracts will be added as features are developed.',
132
- },
133
- ];
134
- }
135
-
136
- // Tier 3 doesn't require contracts
137
- return [];
138
- })(),
139
- observability: {
140
- logs: (answers.observabilityLogs || '')
141
- .split(',')
142
- .map((l) => l.trim())
143
- .filter((l) => l),
144
- metrics: (answers.observabilityMetrics || '')
145
- .split(',')
146
- .map((m) => m.trim())
147
- .filter((m) => m),
148
- traces: (answers.observabilityTraces || '')
149
- .split(',')
150
- .map((t) => t.trim())
151
- .filter((t) => t),
152
- },
153
- migrations: (answers.migrationPlan || '')
154
- .split('\n')
155
- .map((m) => m.trim())
156
- .filter((m) => m),
157
- rollback: (answers.rollbackPlan || '')
158
- .split('\n')
159
- .map((r) => r.trim())
160
- .filter((r) => r),
161
- human_override: answers.needsOverride
162
- ? {
163
- enabled: true,
164
- approver: answers.overrideApprover,
165
- rationale: answers.overrideRationale,
166
- waived_gates: answers.waivedGates,
167
- approved_at: new Date().toISOString(),
168
- expires_at: new Date(
169
- Date.now() + answers.overrideExpiresDays * 24 * 60 * 60 * 1000
170
- ).toISOString(),
171
- }
172
- : undefined,
173
- experimental_mode: answers.isExperimental
174
- ? {
175
- enabled: true,
176
- rationale: answers.experimentalRationale,
177
- expires_at: new Date(
178
- Date.now() + answers.experimentalExpiresDays * 24 * 60 * 60 * 1000
179
- ).toISOString(),
180
- sandbox_location: answers.experimentalSandbox,
181
- }
182
- : undefined,
183
- ai_assessment: {
184
- confidence_level: answers.aiConfidence || 0.8,
185
- uncertainty_areas: (answers.uncertaintyAreas || '')
186
- .split(',')
187
- .map((a) => a.trim())
188
- .filter((a) => a),
189
- complexity_factors: (answers.complexityFactors || '')
190
- .split(',')
191
- .map((f) => f.trim())
192
- .filter((f) => f),
193
- risk_factors: [], // Could be populated by AI analysis
194
- },
195
- };
196
-
197
- return yaml.dump(template, { indent: 2 });
198
- }
199
-
200
- /**
201
- * Validate generated working spec against JSON schema
202
- * @param {string} specContent - YAML spec content
203
- * @param {Object} answers - User responses for error context
204
- */
205
- function validateGeneratedSpec(specContent, _answers) {
206
- try {
207
- const spec = yaml.load(specContent);
208
-
209
- const isValid = validateWorkingSpec(spec);
210
-
211
- if (!isValid) {
212
- console.error(chalk.red('Generated working spec failed validation:'));
213
- validateWorkingSpec.errors.forEach((error) => {
214
- console.error(` - ${error.instancePath || 'root'}: ${error.message}`);
215
- });
216
-
217
- // Provide helpful guidance
218
- console.log(chalk.blue('\nValidation Tips:'));
219
- console.log(' - Ensure risk_tier is 1, 2, or 3');
220
- console.log(' - Check that scope.in is not empty');
221
- console.log(' - Verify invariants and acceptance criteria are provided');
222
- console.log(' - For tier 1 and 2, ensure contracts are specified');
223
-
224
- process.exit(1);
225
- }
226
-
227
- console.log(chalk.green('Generated working spec passed validation'));
228
- } catch (error) {
229
- console.error(chalk.red('Error validating working spec:'), error.message);
230
- process.exit(1);
231
- }
232
- }
233
-
234
- module.exports = {
235
- generateWorkingSpec,
236
- validateGeneratedSpec,
237
- };
@@ -1,88 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * @fileoverview Minimal CAWS CLI for testing and development
5
- * Provides a lightweight CLI structure with version and help commands
6
- * for quick verification of CLI functionality.
7
- * @author @darianrosebrook
8
- */
9
-
10
- const { Command } = require('commander');
11
- const chalk = require('chalk');
12
-
13
- const program = new Command();
14
-
15
- // Configuration
16
- const CLI_VERSION = require('../package.json').version;
17
-
18
- /**
19
- * Show version information
20
- */
21
- function showVersion() {
22
- console.log(chalk.bold(`CAWS CLI v${CLI_VERSION}`));
23
- console.log(chalk.cyan('Coding Agent Workflow System - Scaffolding Tool'));
24
- console.log(chalk.gray('Author: @darianrosebrook'));
25
- console.log(chalk.gray('License: MIT'));
26
- }
27
-
28
- /**
29
- * Initialize a new project
30
- */
31
- async function initProject(projectName, _options) {
32
- console.log(chalk.cyan(`Initializing new CAWS project: ${projectName}`));
33
-
34
- try {
35
- if (!projectName || projectName.trim() === '') {
36
- console.error(chalk.red('Project name is required'));
37
- console.error(chalk.blue('Usage: caws init <project-name>'));
38
- process.exit(1);
39
- }
40
-
41
- console.log(chalk.green('Project initialization started'));
42
- console.log(chalk.bold('\nConfiguration Summary:'));
43
- console.log(` ${chalk.cyan('Project')}: ${projectName}`);
44
- console.log(` ${chalk.cyan('Status')}: Initialized`);
45
-
46
- console.log(chalk.green('\nProject initialized successfully!'));
47
- console.log(chalk.blue('\nFor help: caws --help'));
48
- } catch (error) {
49
- console.error(chalk.red('Error during project initialization:'), error.message);
50
- process.exit(1);
51
- }
52
- }
53
-
54
- // CLI Commands
55
- program
56
- .name('caws')
57
- .description('CAWS - Coding Agent Workflow System CLI')
58
- .version(CLI_VERSION, '-v, --version', 'Show version information');
59
-
60
- program
61
- .command('init')
62
- .alias('i')
63
- .description('Initialize a new project with CAWS')
64
- .argument('<project-name>', 'Name of the new project')
65
- .action(initProject);
66
-
67
- program.command('version').alias('v').description('Show version information').action(showVersion);
68
-
69
- // Error handling
70
- program.exitOverride((err) => {
71
- if (err.code === 'commander.help') {
72
- process.exit(0);
73
- }
74
- console.error(chalk.red('Error:'), err.message);
75
- process.exit(1);
76
- });
77
-
78
- // Parse and run
79
- try {
80
- program.parse();
81
- } catch (error) {
82
- if (error.code === 'commander.help' || error.code === 'commander.version') {
83
- process.exit(0);
84
- } else {
85
- console.error(chalk.red('Error:'), error.message);
86
- process.exit(1);
87
- }
88
- }