@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,504 +0,0 @@
1
- /**
2
- * CAWS CI/CD Optimizer
3
- *
4
- * Optimizes CI/CD pipelines with tier-based conditional execution,
5
- * parallel processing, and smart caching strategies.
6
- *
7
- * @author @darianrosebrook
8
- */
9
-
10
- const fs = require('fs');
11
- const path = require('path');
12
- const crypto = require('crypto');
13
-
14
- class CICDOptimizer {
15
- constructor(options = {}) {
16
- this.projectRoot = options.projectRoot || process.cwd();
17
- this.cacheDir = path.join(this.projectRoot, '.caws', 'cache');
18
- this.optimizationConfig = path.join(this.projectRoot, '.caws', 'cicd-config.yaml');
19
-
20
- // Ensure cache directory exists
21
- if (!fs.existsSync(this.cacheDir)) {
22
- fs.mkdirSync(this.cacheDir, { recursive: true });
23
- }
24
- }
25
-
26
- /**
27
- * Analyze project and generate CI/CD optimization recommendations
28
- */
29
- async analyzeProject(specPath = '.caws/working-spec.yaml') {
30
- const analysis = {
31
- project_tier: 'unknown',
32
- recommended_optimizations: [],
33
- cache_strategy: {},
34
- parallel_groups: [],
35
- conditional_execution: {},
36
- estimated_savings: {},
37
- };
38
-
39
- try {
40
- // Load working spec to determine tier
41
- if (fs.existsSync(specPath)) {
42
- const yaml = require('js-yaml');
43
- const spec = yaml.load(fs.readFileSync(specPath, 'utf8'));
44
- analysis.project_tier = spec.risk_tier || 2;
45
- }
46
-
47
- // Analyze current project structure
48
- analysis.recommended_optimizations = await this.analyzeOptimizationOpportunities(
49
- analysis.project_tier
50
- );
51
-
52
- // Generate cache strategy
53
- analysis.cache_strategy = await this.generateCacheStrategy();
54
-
55
- // Create parallel execution groups
56
- analysis.parallel_groups = await this.createParallelGroups();
57
-
58
- // Define conditional execution rules
59
- analysis.conditional_execution = this.generateConditionalExecutionRules(
60
- analysis.project_tier
61
- );
62
-
63
- // Estimate time savings
64
- analysis.estimated_savings = this.estimateTimeSavings(analysis);
65
- } catch (error) {
66
- console.warn('Warning: Could not complete full analysis:', error.message);
67
- }
68
-
69
- return analysis;
70
- }
71
-
72
- /**
73
- * Generate tier-based conditional execution rules
74
- */
75
- generateConditionalExecutionRules(tier) {
76
- const rules = {
77
- coverage_required: tier <= 2,
78
- mutation_required: tier === 1,
79
- contract_testing: tier <= 2,
80
- accessibility_check: tier <= 2,
81
- performance_budget: tier === 1,
82
- security_scan: true, // Always required
83
- lint_strict: tier <= 2,
84
- };
85
-
86
- // Add tier-specific rules
87
- if (tier === 1) {
88
- rules.integration_tests = true;
89
- rules.load_testing = true;
90
- rules.manual_review = true;
91
- } else if (tier === 2) {
92
- rules.integration_tests = true;
93
- rules.smoke_tests = true;
94
- } else {
95
- rules.unit_tests_only = true;
96
- rules.fast_feedback = true;
97
- }
98
-
99
- return rules;
100
- }
101
-
102
- /**
103
- * Analyze what optimizations are beneficial for this tier
104
- */
105
- async analyzeOptimizationOpportunities(tier) {
106
- const opportunities = [];
107
-
108
- // Tier-based optimizations
109
- if (tier === 3) {
110
- opportunities.push({
111
- type: 'fast_feedback',
112
- description: 'Skip heavy analysis for quick feedback',
113
- impact: 'high',
114
- effort: 'low',
115
- });
116
- }
117
-
118
- if (tier <= 2) {
119
- opportunities.push({
120
- type: 'parallel_execution',
121
- description: 'Run independent quality gates in parallel',
122
- impact: 'high',
123
- effort: 'medium',
124
- });
125
- }
126
-
127
- // Always beneficial optimizations
128
- opportunities.push({
129
- type: 'smart_caching',
130
- description: 'Cache dependencies and build artifacts',
131
- impact: 'medium',
132
- effort: 'low',
133
- });
134
-
135
- opportunities.push({
136
- type: 'test_selection',
137
- description: 'Run only tests affected by changes',
138
- impact: 'high',
139
- effort: 'medium',
140
- });
141
-
142
- opportunities.push({
143
- type: 'early_failure',
144
- description: 'Fail fast on critical issues',
145
- impact: 'medium',
146
- effort: 'low',
147
- });
148
-
149
- return opportunities;
150
- }
151
-
152
- /**
153
- * Generate intelligent caching strategy
154
- */
155
- async generateCacheStrategy() {
156
- const strategy = {
157
- node_modules: {
158
- key: 'node-modules-${{ hashFiles("package-lock.json") }}',
159
- paths: ['node_modules'],
160
- restore_keys: ['node-modules-'],
161
- },
162
- build_artifacts: {
163
- key: 'build-${{ github.sha }}',
164
- paths: ['dist', 'build', '.next'],
165
- restore_keys: [],
166
- },
167
- test_cache: {
168
- key: 'test-cache-${{ github.sha }}',
169
- paths: ['.jest/cache', '.nyc_output'],
170
- restore_keys: ['test-cache-'],
171
- },
172
- };
173
-
174
- // Check for specific frameworks and add framework-specific caches
175
- const packageJson = path.join(this.projectRoot, 'package.json');
176
- if (fs.existsSync(packageJson)) {
177
- try {
178
- const pkg = JSON.parse(fs.readFileSync(packageJson, 'utf8'));
179
-
180
- if (pkg.dependencies && pkg.dependencies.next) {
181
- strategy.next_cache = {
182
- key: 'next-cache-${{ github.sha }}',
183
- paths: ['.next/cache'],
184
- restore_keys: [],
185
- };
186
- }
187
-
188
- if (pkg.devDependencies && pkg.devDependencies.jest) {
189
- strategy.jest_cache = {
190
- key: 'jest-${{ hashFiles("jest.config.js") }}',
191
- paths: ['.jest'],
192
- restore_keys: ['jest-'],
193
- };
194
- }
195
- } catch (error) {
196
- // Ignore package.json parsing errors
197
- }
198
- }
199
-
200
- return strategy;
201
- }
202
-
203
- /**
204
- * Create parallel execution groups for quality gates
205
- */
206
- async createParallelGroups() {
207
- const groups = [
208
- {
209
- name: 'fast-feedback',
210
- description: 'Quick checks that provide immediate feedback',
211
- jobs: ['lint', 'type-check', 'unit-tests-fast'],
212
- max_parallel: 3,
213
- timeout: 5,
214
- },
215
- {
216
- name: 'quality-gates',
217
- description: 'Comprehensive quality checks',
218
- jobs: ['coverage', 'mutation', 'security-scan'],
219
- max_parallel: 2,
220
- timeout: 15,
221
- },
222
- {
223
- name: 'integration',
224
- description: 'Integration and contract testing',
225
- jobs: ['contract-tests', 'integration-tests', 'accessibility'],
226
- max_parallel: 1,
227
- timeout: 20,
228
- },
229
- ];
230
-
231
- return groups;
232
- }
233
-
234
- /**
235
- * Analyze changed files to determine what tests to run
236
- */
237
- async analyzeChangedFiles(changedFiles = []) {
238
- const affectedTests = {
239
- unit: [],
240
- integration: [],
241
- contract: [],
242
- e2e: [],
243
- };
244
-
245
- // Simple heuristic - in production, this would use dependency analysis
246
- for (const file of changedFiles) {
247
- if (file.includes('src/') || file.includes('lib/')) {
248
- // Source file changes - run related unit tests
249
- affectedTests.unit.push(`test-${path.basename(file, path.extname(file))}`);
250
- }
251
-
252
- if (file.includes('api/') || file.includes('routes/')) {
253
- // API changes - run integration tests
254
- affectedTests.integration.push('api-integration');
255
- }
256
-
257
- if (file.includes('.contract.') || file.includes('contracts/')) {
258
- // Contract changes - run contract tests
259
- affectedTests.contract.push('contract-validation');
260
- }
261
- }
262
-
263
- return affectedTests;
264
- }
265
-
266
- /**
267
- * Estimate time savings from optimizations
268
- */
269
- estimateTimeSavings(analysis) {
270
- const baseTimes = {
271
- 1: 45, // High tier - comprehensive checks
272
- 2: 25, // Medium tier - standard checks
273
- 3: 10, // Low tier - basic checks
274
- };
275
-
276
- const baseTime = baseTimes[analysis.project_tier] || 25;
277
- let optimizedTime = baseTime;
278
-
279
- // Apply optimizations
280
- if (analysis.recommended_optimizations.some((opt) => opt.type === 'parallel_execution')) {
281
- optimizedTime *= 0.7; // 30% improvement from parallelization
282
- }
283
-
284
- if (analysis.recommended_optimizations.some((opt) => opt.type === 'smart_caching')) {
285
- optimizedTime *= 0.85; // 15% improvement from caching
286
- }
287
-
288
- if (analysis.recommended_optimizations.some((opt) => opt.type === 'test_selection')) {
289
- optimizedTime *= 0.6; // 40% improvement from selective testing
290
- }
291
-
292
- const savings = {
293
- original_minutes: baseTime,
294
- optimized_minutes: Math.round(optimizedTime),
295
- savings_percent: Math.round((1 - optimizedTime / baseTime) * 100),
296
- monthly_savings_hours: Math.round((((baseTime - optimizedTime) * 30) / 60) * 10) / 10, // Assuming 30 runs/month
297
- };
298
-
299
- return savings;
300
- }
301
-
302
- /**
303
- * Generate optimized CI/CD configuration
304
- */
305
- async generateOptimizedConfig(platform = 'github') {
306
- const analysis = await this.analyzeProject();
307
-
308
- if (platform === 'github') {
309
- return this.generateGitHubActionsConfig(analysis);
310
- } else if (platform === 'gitlab') {
311
- return this.generateGitLabCIConfig(analysis);
312
- } else if (platform === 'jenkins') {
313
- return this.generateJenkinsConfig(analysis);
314
- }
315
-
316
- throw new Error(`Unsupported CI/CD platform: ${platform}`);
317
- }
318
-
319
- /**
320
- * Generate optimized GitHub Actions workflow
321
- */
322
- generateGitHubActionsConfig(analysis) {
323
- const config = {
324
- name: 'CAWS Quality Gates',
325
- on: {
326
- push: { branches: ['main', 'develop'] },
327
- pull_request: { branches: ['main'] },
328
- },
329
- jobs: {},
330
- };
331
-
332
- // Fast feedback job
333
- config.jobs.fast_feedback = {
334
- name: 'Fast Feedback',
335
- 'runs-on': 'ubuntu-latest',
336
- steps: [
337
- { uses: 'actions/checkout@v3' },
338
- {
339
- name: 'Setup Node.js',
340
- uses: 'actions/setup-node@v3',
341
- with: { 'node-version': '18', cache: 'npm' },
342
- },
343
- { run: 'npm ci' },
344
- { run: 'npm run lint', continue_on_error: analysis.project_tier === 3 },
345
- { run: 'npm run type-check' },
346
- {
347
- run: 'npm run test:unit',
348
- continue_on_error: analysis.project_tier === 3,
349
- },
350
- ],
351
- };
352
-
353
- // Quality gates job (conditional based on tier)
354
- if (analysis.conditional_execution.coverage_required) {
355
- config.jobs.quality_gates = {
356
- name: 'Quality Gates',
357
- 'runs-on': 'ubuntu-latest',
358
- needs: ['fast_feedback'],
359
- steps: [
360
- { uses: 'actions/checkout@v3' },
361
- {
362
- name: 'Setup Node.js',
363
- uses: 'actions/setup-node@v3',
364
- with: { 'node-version': '18', cache: 'npm' },
365
- },
366
- { run: 'npm ci' },
367
- { run: 'npm run test:coverage' },
368
- ...(analysis.conditional_execution.security_scan
369
- ? [{ run: 'npm run security-scan' }]
370
- : []),
371
- ...(analysis.conditional_execution.contract_testing
372
- ? [{ run: 'npm run test:contract' }]
373
- : []),
374
- ],
375
- };
376
- }
377
-
378
- // Integration tests (only for T1/T2)
379
- if (analysis.conditional_execution.integration_tests) {
380
- config.jobs.integration = {
381
- name: 'Integration Tests',
382
- 'runs-on': 'ubuntu-latest',
383
- needs: ['quality_gates'],
384
- steps: [
385
- { uses: 'actions/checkout@v3' },
386
- {
387
- name: 'Setup Node.js',
388
- uses: 'actions/setup-node@v3',
389
- with: { 'node-version': '18', cache: 'npm' },
390
- },
391
- { run: 'npm ci' },
392
- { run: 'npm run test:integration' },
393
- ],
394
- };
395
- }
396
-
397
- return config;
398
- }
399
-
400
- /**
401
- * Generate GitLab CI configuration
402
- */
403
- generateGitLabCIConfig(analysis) {
404
- const config = {
405
- stages: ['fast_feedback', 'quality_gates', 'integration'],
406
- cache: {
407
- key: '${CI_COMMIT_REF_SLUG}',
408
- paths: ['node_modules/', '.cache/'],
409
- },
410
- };
411
-
412
- // Fast feedback job
413
- config['lint_and_test'] = {
414
- stage: 'fast_feedback',
415
- image: 'node:18',
416
- before_script: ['npm ci'],
417
- script: ['npm run lint', 'npm run type-check', 'npm run test:unit'],
418
- allow_failure: analysis.project_tier === 3,
419
- };
420
-
421
- // Quality gates
422
- if (analysis.conditional_execution.coverage_required) {
423
- config['quality_gates'] = {
424
- stage: 'quality_gates',
425
- image: 'node:18',
426
- before_script: ['npm ci'],
427
- script: [
428
- 'npm run test:coverage',
429
- ...(analysis.conditional_execution.security_scan ? ['npm run security-scan'] : []),
430
- ...(analysis.conditional_execution.contract_testing ? ['npm run test:contract'] : []),
431
- ],
432
- };
433
- }
434
-
435
- return config;
436
- }
437
-
438
- /**
439
- * Generate Jenkins pipeline configuration
440
- */
441
- generateJenkinsConfig(analysis) {
442
- return `
443
- pipeline {
444
- agent any
445
-
446
- stages {
447
- stage('Fast Feedback') {
448
- steps {
449
- sh 'npm ci'
450
- sh 'npm run lint'
451
- sh 'npm run type-check'
452
- sh 'npm run test:unit'
453
- }
454
- }
455
-
456
- ${
457
- analysis.conditional_execution.coverage_required
458
- ? `
459
- stage('Quality Gates') {
460
- steps {
461
- sh 'npm run test:coverage'
462
- ${analysis.conditional_execution.security_scan ? `sh 'npm run security-scan'` : ''}
463
- ${analysis.conditional_execution.contract_testing ? `sh 'npm run test:contract'` : ''}
464
- }
465
- }`
466
- : ''
467
- }
468
-
469
- ${
470
- analysis.conditional_execution.integration_tests
471
- ? `
472
- stage('Integration Tests') {
473
- steps {
474
- sh 'npm run test:integration'
475
- }
476
- }`
477
- : ''
478
- }
479
- }
480
-
481
- post {
482
- always {
483
- junit 'test-results/*.xml'
484
- publishCoverage adapters: [istanbulCoberturaAdapter('coverage/cobertura-coverage.xml')]
485
- }
486
- }
487
- }`;
488
- }
489
-
490
- /**
491
- * Create hash for cache invalidation
492
- */
493
- createCacheHash(files) {
494
- const hasher = crypto.createHash('sha256');
495
- files.forEach((file) => {
496
- if (fs.existsSync(file)) {
497
- hasher.update(fs.readFileSync(file));
498
- }
499
- });
500
- return hasher.digest('hex').substring(0, 16);
501
- }
502
- }
503
-
504
- module.exports = CICDOptimizer;
@@ -1,124 +0,0 @@
1
- /**
2
- * @fileoverview CAWSFIX-31 — caws agents command.
3
- *
4
- * Surfaces the agent registry (`.caws/agents.json`) so operators and
5
- * other agents can see who is currently registered, what they are
6
- * working on, and where their session logs live. Reads only — write
7
- * paths are owned by the session-log hook and the lifecycle ops in
8
- * specs/worktree.
9
- *
10
- * Subcommands:
11
- * - list — table of all live entries (no platform filter)
12
- * - show <session-id> — full detail for one entry, including session-log pointer
13
- *
14
- * @author @darianrosebrook
15
- */
16
-
17
- const chalk = require('chalk');
18
-
19
- const { findProjectRoot } = require('../utils/detection');
20
- const {
21
- loadAgentRegistry,
22
- findSessionLogs,
23
- } = require('../utils/agent-session');
24
- const {
25
- formatAgentRef,
26
- formatHeartbeatAge,
27
- formatSessionLogPointer,
28
- } = require('../utils/agent-display');
29
-
30
- /**
31
- * Top-level dispatcher.
32
- * @param {string} subcommand
33
- * @param {Object} options
34
- */
35
- function agentsCommand(subcommand, options = {}) {
36
- switch (subcommand) {
37
- case 'list':
38
- return handleList(options);
39
- case 'show':
40
- return handleShow(options);
41
- default:
42
- console.error(chalk.red(`Unknown agents subcommand: ${subcommand}`));
43
- console.log(chalk.blue('Available: list, show'));
44
- process.exit(1);
45
- }
46
- }
47
-
48
- function handleList() {
49
- const root = findProjectRoot();
50
- const registry = loadAgentRegistry(root);
51
- const entries = Object.values(registry.agents || {});
52
-
53
- console.log(chalk.bold.cyan('CAWS Agents'));
54
- console.log(chalk.cyan('='.repeat(80)));
55
-
56
- if (entries.length === 0) {
57
- console.log(chalk.gray('No active agents.'));
58
- return;
59
- }
60
-
61
- // Sort by lastSeen desc so most recent appears first.
62
- entries.sort((a, b) => new Date(b.lastSeen || 0) - new Date(a.lastSeen || 0));
63
-
64
- for (const entry of entries) {
65
- const ref = formatAgentRef(entry.sessionId, entry.platform);
66
- const age = formatHeartbeatAge(entry.lastSeen);
67
- console.log(chalk.bold(ref));
68
- console.log(chalk.gray(` Heartbeat: ${entry.lastSeen || 'unknown'} (${age})`));
69
- if (entry.specId) {
70
- console.log(chalk.gray(` Spec: ${entry.specId}`));
71
- }
72
- if (entry.worktree) {
73
- console.log(chalk.gray(` Worktree: ${entry.worktree}`));
74
- }
75
- if (entry.model) {
76
- console.log(chalk.gray(` Model: ${entry.model}`));
77
- }
78
- console.log('');
79
- }
80
- }
81
-
82
- function handleShow(options) {
83
- const id = options.id;
84
- if (!id) {
85
- console.error(chalk.red('Session ID is required'));
86
- console.log(chalk.blue('Usage: caws agents show <session-id>'));
87
- process.exit(1);
88
- }
89
-
90
- const root = findProjectRoot();
91
- const registry = loadAgentRegistry(root);
92
- const entry = registry.agents[id];
93
- if (!entry) {
94
- console.error(chalk.red(`No agent registered with session id: ${id}`));
95
- console.log(
96
- chalk.blue('Run `caws agents list` to see active sessions, or `tmp/<id>/.meta.json` for archived ones.')
97
- );
98
- process.exit(1);
99
- }
100
-
101
- const ref = formatAgentRef(entry.sessionId, entry.platform);
102
- console.log(chalk.bold.cyan(ref));
103
- console.log(chalk.cyan('='.repeat(70)));
104
- console.log(chalk.gray(`First seen: ${entry.firstSeen || 'unknown'}`));
105
- console.log(
106
- chalk.gray(`Last seen: ${entry.lastSeen || 'unknown'} (${formatHeartbeatAge(entry.lastSeen)})`)
107
- );
108
- if (entry.specId) console.log(chalk.gray(`Spec: ${entry.specId}`));
109
- if (entry.worktree) console.log(chalk.gray(`Worktree: ${entry.worktree}`));
110
- if (entry.model) console.log(chalk.gray(`Model: ${entry.model}`));
111
- if (entry.ttl) console.log(chalk.gray(`TTL: ${Math.round(entry.ttl / 1000 / 60)} min`));
112
-
113
- // Surface any session-log pointers for this id.
114
- const logs = findSessionLogs(root, { sessionId: id });
115
- if (logs.length > 0) {
116
- console.log('');
117
- console.log(chalk.bold('Session logs:'));
118
- for (const log of logs) {
119
- console.log(formatSessionLogPointer(log, root));
120
- }
121
- }
122
- }
123
-
124
- module.exports = { agentsCommand };