@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
package/dist/index.js CHANGED
@@ -19,788 +19,55 @@ if (
19
19
  }
20
20
 
21
21
  // Import configuration and utilities
22
- const {
23
- CLI_VERSION,
24
- initializeGlobalSetup,
25
- loadProvenanceTools,
26
- initializeLanguageSupport,
27
- } = require('./config');
22
+ const { CLI_VERSION } = require('./config');
28
23
 
29
24
  // Import error handling
30
25
  const { handleCliError, findSimilarCommand } = require('./error-handler');
31
26
 
32
- // Import command handlers
33
- const { initProject } = require('./commands/init');
34
- const { validateCommand } = require('./commands/validate');
35
- const { burnupCommand } = require('./commands/burnup');
36
- const { testAnalysisCommand } = require('./test-analysis');
37
- const { provenanceCommand } = require('./commands/provenance');
38
- const { executeTool } = require('./commands/tool');
39
- const { statusCommand } = require('./commands/status');
40
- const { templatesCommand } = require('./commands/templates');
41
- const { diagnoseCommand } = require('./commands/diagnose');
42
- const { evaluateCommand } = require('./commands/evaluate');
43
- const { iterateCommand } = require('./commands/iterate');
44
- const { waiversCommand } = require('./commands/waivers');
45
- const { workflowCommand } = require('./commands/workflow');
46
- const { qualityMonitorCommand } = require('./commands/quality-monitor');
47
- const { gatesCommand } = require('./commands/gates');
48
- const { archiveCommand } = require('./commands/archive');
49
- const { specsCommand } = require('./commands/specs');
50
- const { modeCommand } = require('./commands/mode');
51
- const { tutorialCommand } = require('./commands/tutorial');
52
- const { planCommand } = require('./commands/plan');
53
- const { worktreeCommand } = require('./commands/worktree');
54
- const { sessionCommand } = require('./commands/session');
55
- const { parallelCommand } = require('./commands/parallel');
56
- const { verifyAcsCommand } = require('./commands/verify-acs');
57
- const { sidecarCommand } = require('./commands/sidecar');
58
- const { scopeCommand } = require('./commands/scope');
59
-
60
- // Import scaffold functionality
61
- const { scaffoldProject, setScaffoldDependencies } = require('./scaffold');
62
-
63
- // Import git hooks functionality
64
- const { scaffoldGitHooks, removeGitHooks, checkGitHooksStatus } = require('./scaffold/git-hooks');
65
-
66
- // Import finalization utilities
67
- const {
68
- setFinalizationDependencies,
69
- } = require('./utils/finalization');
70
-
71
- // Import generators
72
- const { generateWorkingSpec, validateGeneratedSpec } = require('./generators/working-spec');
27
+ // v11.0.0 entrypoint. The CLI surface is registered exclusively
28
+ // through `registerShellCommands(program)` further down. All legacy
29
+ // command groups, imports, public exports, and startup side effects
30
+ // were removed in slices 8a3.1–8a3.5. See
31
+ // docs/architecture/caws-vnext-command-surface.md for the doctrine,
32
+ // removal table, and the canonical v11 surface.
33
+ //
34
+ // What v11 ships: init, doctor, status, scope, claim, gates,
35
+ // evidence, waiver. Nothing else.
73
36
 
74
37
  // Initialize global configuration
75
38
  const program = new Command();
76
39
 
77
- // Initialize global state
78
- const cawsSetup = initializeGlobalSetup();
79
- const languageSupport = initializeLanguageSupport();
80
-
81
- // Set up dependencies for modules that need them
82
- setScaffoldDependencies({
83
- cawsSetup,
84
- loadProvenanceTools,
85
- });
86
-
87
- setFinalizationDependencies({
88
- languageSupport,
89
- loadProvenanceTools,
90
- });
91
-
92
- // Setup CLI program
93
40
  program
94
41
  .name('caws')
95
42
  .description('CAWS - Coding Agent Workflow System CLI')
96
43
  .version(CLI_VERSION)
97
- .showHelpAfterError(false); // We'll show better suggestions instead
98
-
99
- // Init command
100
- program
101
- .command('init')
102
- .description('Initialize a new project with CAWS')
103
- .argument('[project-name]', 'Name of the project to create (use "." for current directory)')
104
- .option('-i, --interactive', 'Run interactive setup wizard', true)
105
- .option('--non-interactive', 'Skip interactive prompts (use defaults)', false)
106
- .option('--template <template>', 'Use specific project template')
107
- .option('--mode <mode>', 'CAWS mode (lite, simple, standard, enterprise)')
108
- .option('--ide <ides>', 'IDE integrations to install (comma-separated: cursor,claude,vscode,intellij,windsurf,copilot,all,none)')
109
- .action(initProject);
110
-
111
- // Scaffold command
112
- program
113
- .command('scaffold')
114
- .description('Add CAWS components to existing project')
115
- .option('-f, --force', 'Overwrite existing files', false)
116
- .option('--minimal', 'Only essential components', false)
117
- .option('--with-codemods', 'Include codemod scripts', false)
118
- .option('--with-oidc', 'Include OIDC trusted publisher setup', false)
119
- .option('--with-quality-gates', 'Install quality gates package and scripts', false)
120
- .option('--ide <ides>', 'IDE integrations to install (comma-separated: cursor,claude,vscode,intellij,windsurf,copilot,all,none)')
121
- .action(scaffoldProject);
122
-
123
- // Validate command
124
- program
125
- .command('validate')
126
- .alias('verify')
127
- .description('Validate CAWS spec with suggestions')
128
- .argument('[spec-file]', 'Path to spec file (optional, uses spec resolution)')
129
- .option('--spec-id <id>', 'Feature-specific spec ID (e.g., user-auth, FEAT-001)')
130
- .option('-i, --interactive', 'Interactive spec selection when multiple specs exist', false)
131
- .option('-q, --quiet', 'Suppress suggestions and warnings', false)
132
- .option('--auto-fix', 'Automatically fix safe validation issues', false)
133
- .option('--dry-run', 'Preview auto-fixes without applying them', false)
134
- .option('--format <format>', 'Output format (text, json)', 'text')
135
- .action(validateCommand);
136
-
137
- // Gates command group (v2 pipeline)
138
- const gatesCmd = program
139
- .command('gates')
140
- .description('Run quality gate checks');
141
-
142
- gatesCmd
143
- .command('run')
144
- .description('Run quality gates against staged files or a specific file')
145
- .option('--context <context>', 'Execution context (cli, commit, edit)', 'cli')
146
- .option('--spec-id <id>', 'Target spec ID')
147
- .option('--file <path>', 'Single file to check (for edit context)')
148
- .option('--json', 'Output as JSON', false)
149
- .option('--quiet', 'Minimal output', false)
150
- .action((options) => gatesCommand(options));
151
-
152
- // Quality Gates command (legacy alias — delegates to gates command)
153
- program
154
- .command('quality-gates')
155
- .description('Run quality gates (alias for "caws gates run")')
156
- .option('--ci', 'CI mode - exit with error code if violations found', false)
157
- .option('--json', 'Output machine-readable JSON to stdout', false)
158
- .option('--context <context>', 'Execution context: commit, push, ci', 'commit')
159
- .option('--all-files', 'Check all tracked files (equivalent to --context=ci)', false)
160
- .option('--spec-id <id>', 'Target spec ID')
161
- .option('--quiet', 'Minimal output', false)
162
- .action(async (options) => {
163
- // Map legacy options to new gates command options
164
- const gateOpts = {
165
- context: options.allFiles ? 'ci' : (options.context || 'cli'),
166
- specId: options.specId,
167
- json: options.json,
168
- quiet: options.quiet,
169
- };
170
- await gatesCommand(gateOpts);
171
- });
172
-
173
- // Status command
174
- program
175
- .command('status')
176
- .description('Show project health overview')
177
- .option('--spec-id <id>', 'Feature-specific spec ID (e.g., user-auth)')
178
- .option('-s, --spec <path>', 'Path to spec file (explicit override)')
179
- .option('--visual', 'Enhanced visual output with progress bars', false)
180
- .option('--json', 'Output in JSON format for automation', false)
181
- .action(statusCommand);
182
-
183
- // Archive command
184
- program
185
- .command('archive <change-id>')
186
- .description('Archive completed change')
187
- .option('--spec-id <id>', 'Feature-specific spec ID (e.g., user-auth)')
188
- .option('-s, --spec <path>', 'Path to spec file (explicit override)')
189
- .option('-f, --force', 'Force archive even if criteria not met', false)
190
- .option('--dry-run', 'Preview archive without performing it', false)
191
- .action(archiveCommand);
192
-
193
- // Specs command group
194
- const specsCmd = program.command('specs').description('Manage multiple CAWS spec files');
195
-
196
- // Specs subcommands
197
- specsCmd
198
- .command('list')
199
- .description('List all available specs')
200
- .action(() => specsCommand('list', {}));
201
-
202
- specsCmd
203
- .command('create <id>')
204
- .description('Create a new spec (with conflict resolution)')
205
- .option('-t, --type <type>', 'Spec type (feature, fix, refactor, chore, docs)', 'feature')
206
- .option('--title <title>', 'Spec title')
207
- .option('--tier <tier>', 'Risk tier (T1, T2, T3)', 'T3')
208
- .option('--mode <mode>', 'Development mode', 'development')
209
- .option('-f, --force', 'Override existing specs without confirmation', false)
210
- .option('-i, --interactive', 'Ask for confirmation on conflicts', false)
211
- .action((id, options) => specsCommand('create', { id, ...options }));
212
-
213
- specsCmd
214
- .command('show <id>')
215
- .description('Show detailed spec information')
216
- .action((id) => specsCommand('show', { id }));
217
-
218
- specsCmd
219
- .command('update <id>')
220
- .description('Update spec properties')
221
- .option('-s, --status <status>', 'Spec status (draft, active, in_progress, completed, closed, archived)')
222
- .option('--title <title>', 'Spec title')
223
- .option('--description <desc>', 'Spec description')
224
- .action((id, options) => specsCommand('update', { id, ...options }));
225
-
226
- specsCmd
227
- .command('delete <id>')
228
- .description('Delete a spec')
229
- .action((id) => specsCommand('delete', { id }));
230
-
231
- specsCmd
232
- .command('close <id>')
233
- .description('Close a completed spec (removes scope enforcement)')
234
- .action((id) => specsCommand('close', { id }));
235
-
236
- specsCmd
237
- .command('archive <id>')
238
- .description('Archive a spec — move to .caws/specs/.archive/ and flip status to archived')
239
- .action((id) => specsCommand('archive', { id }));
240
-
241
- specsCmd
242
- .command('conflicts')
243
- .description('Check for scope conflicts between specs')
244
- .action(() => specsCommand('conflicts', {}));
245
-
246
- specsCmd
247
- .command('migrate')
248
- .description('Migrate from legacy working-spec.yaml to feature-specific specs')
249
- .option('-i, --interactive', 'Interactive feature selection', false)
250
- .option('-f, --features <features>', 'Comma-separated list of features to migrate', (value) =>
251
- value.split(',')
252
- )
253
- .action((options) => specsCommand('migrate', options));
254
-
255
- specsCmd
256
- .command('types')
257
- .description('Show available spec types')
258
- .action(() => specsCommand('types', {}));
259
-
260
- // Sidecar command group
261
- const sidecarCmd = program.command('sidecar').description('Advisory analysis tools (drift, gaps, waivers, provenance)');
262
-
263
- sidecarCmd
264
- .command('drift')
265
- .description('Analyze spec drift vs implementation evidence')
266
- .option('--spec-id <id>', 'Target spec ID')
267
- .option('--json', 'Output as JSON', false)
268
- .action((options) => sidecarCommand('drift', options));
269
-
270
- sidecarCmd
271
- .command('gaps')
272
- .description('Diagnose quality gaps preventing phase advancement')
273
- .option('--spec-id <id>', 'Target spec ID')
274
- .option('--json', 'Output as JSON', false)
275
- .action((options) => sidecarCommand('gaps', options));
276
-
277
- sidecarCmd
278
- .command('waiver-draft')
279
- .description('Generate pre-filled waiver templates from gate failures')
280
- .option('--spec-id <id>', 'Target spec ID')
281
- .option('--gate <gate>', 'Specific gate to draft waiver for')
282
- .option('--json', 'Output as JSON', false)
283
- .action((options) => sidecarCommand('waiver-draft', options));
284
-
285
- sidecarCmd
286
- .command('provenance')
287
- .description('Summarize work provenance for merge readiness')
288
- .option('--spec-id <id>', 'Target spec ID')
289
- .option('--json', 'Output as JSON', false)
290
- .action((options) => sidecarCommand('provenance', options));
291
-
292
- // Mode command group
293
- const modeCmd = program.command('mode').description('Manage CAWS complexity tiers');
294
-
295
- // Mode subcommands
296
- modeCmd
297
- .command('current')
298
- .description('Show current CAWS mode')
299
- .action(() => modeCommand('current', {}));
300
-
301
- modeCmd
302
- .command('set <mode>')
303
- .description('Set CAWS complexity tier')
304
- .action((mode) => modeCommand('set', { mode }));
305
-
306
- modeCmd
307
- .command('compare')
308
- .description('Compare all available tiers')
309
- .action(() => modeCommand('compare', {}));
310
-
311
- modeCmd
312
- .command('recommend')
313
- .description('Get tier recommendation for your project')
314
- .option('--size <size>', 'Project size (small, medium, large)', 'medium')
315
- .option('--team-size <size>', 'Team size (number)', '1')
316
- .option('--compliance <required>', 'Compliance requirements (true/false)', 'false')
317
- .option('--audit <required>', 'Audit requirements (true/false)', 'false')
318
- .option('--details', 'Show detailed recommendation', false)
319
- .action((options) => modeCommand('recommend', options));
320
-
321
- modeCmd
322
- .command('details <mode>')
323
- .description('Show detailed information about a specific tier')
324
- .action((mode) => modeCommand('details', { mode }));
325
-
326
- // Tutorial command
327
- program
328
- .command('tutorial [type]')
329
- .description('Interactive guided learning for CAWS')
330
- .action(tutorialCommand);
331
-
332
- // Plan command
333
- program
334
- .command('plan <action>')
335
- .description('Generate implementation plans')
336
- .option('--spec-id <id>', 'Spec ID to generate plan for')
337
- .option('--spec <id>', 'Alias for --spec-id')
338
- .option('--output <path>', 'Output file path for the plan')
339
- .action((action, options) => planCommand(action, options));
340
-
341
- // Worktree command group
342
- const worktreeCmd = program
343
- .command('worktree')
344
- .description('Manage git worktrees for agent scope isolation');
345
-
346
- worktreeCmd
347
- .command('create <name>')
348
- .description('Create a new isolated worktree')
349
- .option('--scope <patterns>', 'Sparse checkout patterns (comma-separated, e.g., "src/auth/**")')
350
- .option('--base-branch <branch>', 'Base branch to create from')
351
- .option('--spec-id <id>', 'Associated spec ID')
352
- .action((name, options) => worktreeCommand('create', { name, ...options }));
353
-
354
- worktreeCmd
355
- .command('list')
356
- .description('List all managed worktrees')
357
- .action(() => worktreeCommand('list'));
358
-
359
- worktreeCmd
360
- .command('destroy <name>')
361
- .description('Destroy a worktree')
362
- .option('--delete-branch', 'Also delete the associated branch', false)
363
- .option('--force', 'Force removal even if worktree is dirty', false)
364
- .action((name, options) => worktreeCommand('destroy', { name, ...options }));
365
-
366
- worktreeCmd
367
- .command('merge <name>')
368
- .description('Merge a worktree branch back to base (destroy + merge + cleanup)')
369
- .option('--dry-run', 'Preview conflicts without merging', false)
370
- .option('--message <msg>', 'Custom merge commit message')
371
- .option('--no-delete-branch', 'Keep the branch after merging')
372
- .option('--takeover', 'Force takeover of a foreign worktree claim (writes prior_owners audit)', false)
373
- .action((name, options) => worktreeCommand('merge', { name, ...options }));
374
-
375
- worktreeCmd
376
- .command('prune')
377
- .description('Clean up stale worktree entries')
378
- .option('--max-age <days>', 'Remove entries older than N days', '30')
379
- .option('--force', 'Allow pruning entries owned by other sessions', false)
380
- .action((options) => worktreeCommand('prune', options));
381
-
382
- worktreeCmd
383
- .command('repair')
384
- .description('Reconcile registry with git and filesystem state')
385
- .option('--dry-run', 'Report only, do not persist changes', false)
386
- .option('--prune', 'Remove destroyed, stale-merged, and missing entries', false)
387
- .option('--force', 'Allow pruning entries owned by other sessions', false)
388
- .action((options) => worktreeCommand('repair', options));
389
-
390
- worktreeCmd
391
- .command('bind <spec-id>')
392
- .description('Bind a spec to this worktree (fixes mutual reference)')
393
- .option('--name <name>', 'Worktree name (auto-detected from cwd if omitted)')
394
- .option('--takeover', 'Force takeover of a foreign worktree claim (writes prior_owners audit)', false)
395
- .action((specId, options) => worktreeCommand('bind', { specId, ...options }));
396
-
397
- worktreeCmd
398
- .command('claim <name>')
399
- .description('Claim worktree session ownership (read-only without --takeover)')
400
- .option('--takeover', 'Force takeover of a foreign claim (writes prior_owners audit)', false)
401
- .action((name, options) => worktreeCommand('claim', { name, ...options }));
402
-
403
- // Agents command group
404
- const { agentsCommand } = require('./commands/agents');
405
- const agentsCmd = program
406
- .command('agents')
407
- .description('Inspect the agent registry and session-log pointers');
408
-
409
- agentsCmd
410
- .command('list')
411
- .description('List active CAWS-registered agent sessions')
412
- .action(() => agentsCommand('list', {}));
413
-
414
- agentsCmd
415
- .command('show <session-id>')
416
- .description('Show details for a specific agent session, including session-log pointer')
417
- .action((id) => agentsCommand('show', { id }));
418
-
419
- // Scope command group
420
- const scopeCmd = program
421
- .command('scope')
422
- .description('Inspect and manage scope boundaries');
423
-
424
- scopeCmd
425
- .command('show')
426
- .description('Show effective scope for the current context')
427
- .action(() => scopeCommand('show'));
428
-
429
- // Session command group
430
- const sessionCmd = program
431
- .command('session')
432
- .description('Manage session lifecycle and capsules for multi-agent coordination');
433
-
434
- sessionCmd
435
- .command('start')
436
- .description('Start a new tracked session with baseline checkpoint')
437
- .option('--role <role>', 'Agent role (worker, integrator, qa)', 'worker')
438
- .option('--spec-id <id>', 'Associated feature spec ID')
439
- .option('--scope <patterns>', 'Allowed file patterns (comma-separated)')
440
- .option('--intent <text>', 'What this session intends to accomplish')
441
- .action((options) => sessionCommand('start', options));
442
-
443
- sessionCmd
444
- .command('checkpoint')
445
- .description('Record a checkpoint in the current session')
446
- .option('--session-id <id>', 'Specific session ID (uses latest active if omitted)')
447
- .option('--intent <text>', 'Updated intent description')
448
- .option('--paths <paths>', 'Files changed (comma-separated)')
449
- .option('--tests <json>', 'Test results as JSON array [{name, status, evidence}]')
450
- .option('--issues <json>', 'Known issues as JSON array [{type, description}]')
451
- .action((options) => sessionCommand('checkpoint', options));
452
-
453
- sessionCmd
454
- .command('end')
455
- .description('End the current session with handoff information')
456
- .option('--session-id <id>', 'Specific session ID (uses latest active if omitted)')
457
- .option('--next-actions <actions>', 'Handoff actions (pipe-separated)')
458
- .option('--risk-notes <notes>', 'Risk notes (pipe-separated)')
459
- .action((options) => sessionCommand('end', options));
460
-
461
- sessionCmd
462
- .command('list')
463
- .description('List all sessions')
464
- .option('--status <status>', 'Filter by status (active, completed)')
465
- .option('--limit <n>', 'Max entries to show')
466
- .action((options) => sessionCommand('list', options));
467
-
468
- sessionCmd
469
- .command('show [id]')
470
- .description('Show session capsule details (default: latest)')
471
- .option('--json', 'Output as raw JSON', false)
472
- .action((id, options) => sessionCommand('show', { ...options, id: id || 'latest' }));
473
-
474
- sessionCmd
475
- .command('briefing')
476
- .description('Show session briefing for hooks/startup')
477
- .action(() => sessionCommand('briefing'));
478
-
479
- // Parallel command group
480
- const parallelCmd = program
481
- .command('parallel')
482
- .description('Orchestrate parallel multi-agent workspaces');
483
-
484
- parallelCmd
485
- .command('setup <plan-file>')
486
- .description('Create worktrees and sessions from a plan file')
487
- .option('--base-branch <branch>', 'Base branch for all worktrees')
488
- .action((planFile, options) => parallelCommand('setup', { planFile, ...options }));
489
-
490
- parallelCmd
491
- .command('status')
492
- .description('Show all active parallel worktrees and sessions')
493
- .action(() => parallelCommand('status'));
494
-
495
- parallelCmd
496
- .command('merge')
497
- .description('Merge all parallel branches back to base')
498
- .option('--strategy <strategy>', 'Merge strategy: merge or squash', 'merge')
499
- .option('--dry-run', 'Preview merge without executing', false)
500
- .option('--force', 'Force merge even with detected conflicts', false)
501
- .action((options) => parallelCommand('merge', options));
502
-
503
- parallelCmd
504
- .command('teardown')
505
- .description('Destroy all parallel worktrees')
506
- .option('--delete-branches', 'Also delete associated branches', false)
507
- .option('--force', 'Force removal even if worktrees are dirty', false)
508
- .action((options) => parallelCommand('teardown', options));
509
-
510
- // Templates command
511
- program
512
- .command('templates [subcommand]')
513
- .description('Discover and manage project templates')
514
- .option('-n, --name <template>', 'Template name (for info subcommand)')
515
- .action(templatesCommand);
44
+ .showHelpAfterError(false);
516
45
 
517
- // Diagnose command
518
- program
519
- .command('diagnose')
520
- .description('Run health checks and suggest fixes')
521
- .option('--spec-id <id>', 'Feature-specific spec ID')
522
- .option('--fix', 'Apply automatic fixes', false)
523
- .action(diagnoseCommand);
524
-
525
- // Verify Acceptance Criteria command
526
- program
527
- .command('verify-acs')
528
- .description('Verify acceptance criteria in specs are backed by test evidence')
529
- .option('--spec-id <id>', 'Verify only this spec')
530
- .option('--run', 'Actually run tests (default: collect-only)', false)
531
- .option('--runner <runner>', 'Force test runner (pytest, jest, vitest, cargo, go)')
532
- .option('--format <format>', 'Output format (text, json)', 'text')
533
- .action(verifyAcsCommand);
534
-
535
- // Evaluate command
536
- program
537
- .command('evaluate [spec-file]')
538
- .description('Evaluate work against CAWS quality standards')
539
- .option('--spec-id <id>', 'Feature-specific spec ID (e.g., user-auth)')
540
- .option('-v, --verbose', 'Show detailed error information', false)
541
- .action(evaluateCommand);
542
-
543
- // Iterate command
544
- program
545
- .command('iterate [spec-file]')
546
- .description('Get iterative development guidance')
547
- .option('--spec-id <id>', 'Feature-specific spec ID (e.g., user-auth)')
548
- .option('--current-state <json>', 'Current implementation state as JSON', '{}')
549
- .option('-v, --verbose', 'Show detailed error information', false)
550
- .action(iterateCommand);
551
-
552
- // Burnup command
553
- program
554
- .command('burnup [spec-file]')
555
- .description('Generate budget burn-up report for scope visibility')
556
- .option('--spec-id <id>', 'Feature-specific spec ID (e.g., user-auth)')
557
- .option('-v, --verbose', 'Show detailed error information', false)
558
- .action(burnupCommand);
559
-
560
- // Waivers command group
561
- const waiversCmd = program.command('waivers').description('Manage CAWS quality gate waivers');
562
-
563
- // Waivers subcommands
564
- waiversCmd
565
- .command('create')
566
- .description('Create a new quality gate waiver')
567
- .requiredOption('--title <title>', 'Waiver title')
568
- .requiredOption(
569
- '--reason <reason>',
570
- 'Reason for waiver (emergency_hotfix, legacy_integration, etc.)'
571
- )
572
- .requiredOption('--description <description>', 'Detailed description')
573
- .requiredOption('--gates <gates>', 'Comma-separated list of gates to waive')
574
- .requiredOption('--expires-at <date>', 'Expiration date (ISO 8601)')
575
- .requiredOption('--approved-by <approver>', 'Approver name')
576
- .requiredOption('--impact-level <level>', 'Impact level (low, medium, high, critical)')
577
- .requiredOption('--mitigation-plan <plan>', 'Risk mitigation plan')
578
- .option('-v, --verbose', 'Show detailed error information', false)
579
- .action((options) => waiversCommand('create', options));
580
-
581
- waiversCmd
582
- .command('list')
583
- .description('List all waivers')
584
- .option('-v, --verbose', 'Show detailed error information', false)
585
- .action((options) => waiversCommand('list', options));
586
-
587
- waiversCmd
588
- .command('show <id>')
589
- .description('Show waiver details')
590
- .option('-v, --verbose', 'Show detailed error information', false)
591
- .action((id, options) => waiversCommand('show', { ...options, id }));
592
-
593
- waiversCmd
594
- .command('revoke <id>')
595
- .description('Revoke a waiver')
596
- .option('--revoked-by <name>', 'Person revoking the waiver')
597
- .option('--reason <reason>', 'Revocation reason')
598
- .option('-v, --verbose', 'Show detailed error information', false)
599
- .action((id, options) => waiversCommand('revoke', { ...options, id }));
600
-
601
- waiversCmd
602
- .command('prune')
603
- .description('Prune expired waivers (dry-run by default; use --apply to persist)')
604
- .option('--expired', 'Prune active waivers whose expires_at is in the past')
605
- .option('--apply', 'Actually transition status (default: dry run)')
606
- .option('--json', 'Emit machine-readable JSON output')
607
- .option('-v, --verbose', 'Show detailed error information', false)
608
- .action((options) => waiversCommand('prune', options));
609
-
610
- // Workflow command group
611
- program
612
- .command('workflow <type>')
613
- .description('Get workflow-specific guidance')
614
- .option('--spec-id <id>', 'Feature-specific spec ID (e.g., user-auth)')
615
- .option('--step <number>', 'Current step in workflow', '1')
616
- .option('--current-state <json>', 'Current implementation state as JSON', '{}')
617
- .option('-v, --verbose', 'Show detailed error information', false)
618
- .action((type, options) => workflowCommand(type, options));
619
-
620
- // Quality Monitor command
621
- program
622
- .command('quality-monitor <action>')
623
- .description('Monitor code quality impact in real-time')
624
- .option('--spec-id <id>', 'Feature-specific spec ID (e.g., user-auth)')
625
- .option('--files <files>', 'Files affected (comma-separated)')
626
- .option('--context <json>', 'Additional context as JSON', '{}')
627
- .option('-v, --verbose', 'Show detailed error information', false)
628
- .action(qualityMonitorCommand);
629
-
630
- // Troubleshoot command available via: caws diagnose --troubleshoot <guide>
631
- // The standalone command was consolidated into the diagnose command.
632
-
633
- // Tool command
634
- program
635
- .command('tool')
636
- .description('Execute CAWS tools programmatically')
637
- .argument('<tool-id>', 'ID of the tool to execute')
638
- .option('-p, --params <json>', 'Parameters as JSON string', '{}')
639
- .option('-t, --timeout <ms>', 'Execution timeout in milliseconds', parseInt, 30000)
640
- .action(executeTool);
641
-
642
- // Test Analysis command
643
- program
644
- .command('test-analysis <subcommand> [options...]')
645
- .description('Statistical analysis for budget prediction')
646
- .option('--spec-id <id>', 'Feature-specific spec ID (e.g., user-auth)')
647
- .action((subcommand, optionArgs, command) => {
648
- testAnalysisCommand(subcommand, optionArgs, command.opts());
649
- });
650
-
651
- // Provenance command group
652
- const provenanceCmd = program.command('provenance').description('Manage CAWS provenance tracking');
653
-
654
- // Subcommands
655
- provenanceCmd
656
- .command('update')
657
- .description('Add new commit to provenance chain')
658
- .requiredOption('-c, --commit <hash>', 'Git commit hash')
659
- .option('--spec-id <id>', 'Feature-specific spec ID')
660
- .option('-s, --spec <path>', 'Path to spec file (explicit override)')
661
- .option('-m, --message <msg>', 'Commit message')
662
- .option('-a, --author <info>', 'Author information')
663
- .option('-q, --quiet', 'Suppress output')
664
- .option('-o, --output <path>', 'Output path for provenance files', '.caws/provenance')
665
- .action(async (options) => {
666
- await provenanceCommand('update', options);
667
- });
668
-
669
- provenanceCmd
670
- .command('show')
671
- .description('Display current provenance history')
672
- .option('-o, --output <path>', 'Output path for provenance files', '.caws/provenance')
673
- .option('--format <type>', 'Output format: text, json, dashboard', 'text')
674
- .action(async (options) => {
675
- await provenanceCommand('show', options);
676
- });
677
-
678
- provenanceCmd
679
- .command('verify')
680
- .description('Validate provenance chain integrity')
681
- .option('-o, --output <path>', 'Output path for provenance files', '.caws/provenance')
682
- .action(async (options) => {
683
- await provenanceCommand('verify', options);
684
- });
685
-
686
- provenanceCmd
687
- .command('analyze-ai')
688
- .description('Analyze AI-assisted development patterns')
689
- .option('-o, --output <path>', 'Output path for provenance files', '.caws/provenance')
690
- .action(async (options) => {
691
- await provenanceCommand('analyze-ai', options);
692
- });
693
-
694
- provenanceCmd
695
- .command('init')
696
- .description('Initialize provenance tracking for the project')
697
- .option('--spec-id <id>', 'Feature-specific spec ID')
698
- .option('-s, --spec <path>', 'Path to spec file (explicit override)')
699
- .option('-o, --output <path>', 'Output path for provenance files', '.caws/provenance')
700
- .option('--cursor-api <url>', 'Cursor tracking API endpoint')
701
- .option('--cursor-key <key>', 'Cursor API key')
702
- .action(async (options) => {
703
- await provenanceCommand('init', options);
704
- });
705
-
706
- // Git hooks command
707
- const hooksCmd = program
708
- .command('hooks')
709
- .description('Manage CAWS git hooks for provenance tracking');
710
-
711
- hooksCmd
712
- .command('install')
713
- .description('Install CAWS git hooks')
714
- .option('--no-provenance', 'Skip provenance tracking hooks')
715
- .option('--no-validation', 'Skip validation hooks')
716
- .option('--no-quality-gates', 'Skip quality gate hooks')
717
- .option('--force', 'Overwrite existing hooks')
718
- .option('--backup', 'Backup existing hooks before replacing')
719
- .action(async (options) => {
720
- const hookOptions = {
721
- provenance: options.provenance !== false,
722
- validation: options.validation !== false,
723
- qualityGates: options.qualityGates !== false,
724
- force: options.force,
725
- backup: options.backup,
726
- };
727
-
728
- try {
729
- const result = await scaffoldGitHooks(process.cwd(), hookOptions);
730
- if (result.added > 0) {
731
- console.log(`Successfully installed ${result.added} git hooks`);
732
- if (result.skipped > 0) {
733
- console.log(`Skipped ${result.skipped} existing hooks`);
734
- }
735
- } else {
736
- console.log('All hooks already configured');
737
- }
738
- } catch (error) {
739
- console.error(`Failed to install git hooks: ${error.message}`);
740
- process.exit(1);
741
- }
742
- });
743
-
744
- hooksCmd
745
- .command('remove')
746
- .description('Remove CAWS git hooks')
747
- .action(async () => {
748
- try {
749
- await removeGitHooks(process.cwd());
750
- } catch (error) {
751
- console.error(`Failed to remove git hooks: ${error.message}`);
752
- process.exit(1);
753
- }
754
- });
755
-
756
- hooksCmd
757
- .command('status')
758
- .description('Check git hooks status')
759
- .action(async () => {
760
- try {
761
- await checkGitHooksStatus(process.cwd());
762
- } catch (error) {
763
- console.error(`Failed to check git hooks status: ${error.message}`);
764
- process.exit(1);
765
- }
766
- });
767
-
768
- // Error handling
769
- // Custom error event handler for better messages
770
46
  program.configureHelp({
771
- // Override error display
772
- showError: () => {}, // Suppress default error display
47
+ showError: () => {},
773
48
  });
774
49
 
50
+ // v11.0.0 surface: exactly the 8 vNext command groups registered by
51
+ // `registerShellCommands(program)`. Used by `findSimilarCommand` for
52
+ // unknown-command suggestions. Must match `node dist/index.js --help`
53
+ // output (excluding Commander's auto-generated `help` row).
54
+ //
55
+ // Slice 8a3.5 reconciliation: dropped 24 legacy entries removed in
56
+ // 8a3.1–8a3.4 plus the stale `'quality-gates'` alias (alias was
57
+ // removed in slice 6c but the suggester entry was never cleaned).
58
+ // Added the 5 vNext groups that were missing from the suggester:
59
+ // 'agents' (now removed), 'claim', 'doctor', 'evidence',
60
+ // 'test-analysis' (now removed). Final list is exactly the 8 vNext
61
+ // groups currently registered.
775
62
  const VALID_COMMANDS = [
776
- 'init',
777
- 'validate',
778
- 'scaffold',
779
- 'status',
780
- 'archive',
781
- 'specs',
782
- 'sidecar',
783
- 'mode',
784
- 'tutorial',
785
- 'plan',
786
- 'templates',
787
- 'diagnose',
788
- 'evaluate',
789
- 'iterate',
790
- 'waivers',
791
- 'workflow',
792
- 'quality-monitor',
793
- 'quality-gates',
63
+ 'claim',
64
+ 'doctor',
65
+ 'evidence',
794
66
  'gates',
795
- 'provenance',
796
- 'hooks',
797
- 'burnup',
798
- 'tool',
799
- 'worktree',
800
- 'session',
801
- 'parallel',
802
- 'verify-acs',
67
+ 'init',
803
68
  'scope',
69
+ 'status',
70
+ 'waiver',
804
71
  ];
805
72
 
806
73
  program.exitOverride((err) => {
@@ -844,12 +111,6 @@ program.exitOverride((err) => {
844
111
  console.error(chalk.red(`\nUnknown option: ${option}`));
845
112
  console.error(chalk.yellow(`\nTry: caws ${commandName || ''} --help for available options`));
846
113
 
847
- // Provide specific suggestions for common mistakes
848
- if (option === '--suggestions' || option === '--suggest') {
849
- console.error(chalk.yellow('Note: Validation includes suggestions by default'));
850
- console.error(chalk.yellow(' Just run: caws validate'));
851
- }
852
-
853
114
  console.error(
854
115
  chalk.blue(
855
116
  '\nDocumentation: https://github.com/Paths-Design/coding-agent-working-standard/blob/main/docs/api/cli.md'
@@ -870,11 +131,12 @@ program.exitOverride((err) => {
870
131
  process.exit(1);
871
132
  });
872
133
 
873
- // Register sidecar lifecycle listeners (non-fatal hints)
874
- try {
875
- const { registerSidecarListeners } = require('./sidecars/listeners');
876
- registerSidecarListeners();
877
- } catch { /* sidecars module not available — non-fatal */ }
134
+ // Register vNext shell commands. This is the only registration block
135
+ // in v11; all command groups are in src/shell/. The legacy registration
136
+ // blocks above this line were removed in slices 8a3.1–8a3.4 as part of
137
+ // the v11.0.0 cutover.
138
+ const { registerShellCommands } = require('./shell');
139
+ registerShellCommands(program);
878
140
 
879
141
  // Parse and run
880
142
  if (require.main === module) {
@@ -928,12 +190,6 @@ if (require.main === module) {
928
190
  chalk.yellow(`\nTry: caws ${commandName || ''} --help for available options`)
929
191
  );
930
192
 
931
- // Provide specific suggestions for common mistakes
932
- if (option === '--suggestions' || option === '--suggest') {
933
- console.error(chalk.yellow('Note: Validation includes suggestions by default'));
934
- console.error(chalk.yellow(' Just run: caws validate'));
935
- }
936
-
937
193
  console.error(
938
194
  chalk.blue(
939
195
  '\nDocumentation: https://github.com/Paths-Design/coding-agent-working-standard/blob/main/docs/api/cli.md'
@@ -948,8 +204,10 @@ if (require.main === module) {
948
204
  }
949
205
  }
950
206
 
951
- // Export functions for testing
952
- module.exports = {
953
- generateWorkingSpec,
954
- validateGeneratedSpec,
955
- };
207
+ // Public API surface removed in slice 8a3 (v11.0.0 cutover). The
208
+ // legacy `generateWorkingSpec` / `validateGeneratedSpec` helpers were
209
+ // part of v10.x's exported API; v11 ships only the binary entry point
210
+ // and exposes no JS exports from this module. Programmatic consumers
211
+ // should depend on `@paths.design/caws-kernel` (pure logic) or the
212
+ // `dist/shell` / `dist/store` modules directly.
213
+ module.exports = {};